Add image cache fix patch

Change-Id: Ied268116885ede707a57c10990c5321af40c74ad
This commit is contained in:
Huan Xie 2016-06-02 19:01:40 -07:00
parent a28e0bbdc3
commit bee16dd9ff
2 changed files with 76 additions and 1 deletions

View File

@ -253,6 +253,7 @@ def create_novacompute_conf(himn, username, password, public_ip, services_ssl):
cf.set('xenserver', 'vif_driver',
'nova.virt.xenapi.vif.XenAPIOpenVswitchDriver')
cf.set('xenserver', 'ovs_integration_bridge', INT_BRIDGE)
cf.set('xenserver', 'cache_images', 'none')
cf.write(open(filename, 'w'))
except Exception:
reportError('Cannot set configurations to %s' % filename)
@ -446,7 +447,8 @@ def patch_compute_xenapi():
'%s/patchset/nova-neutron-race-condition.patch' % patchset_dir,
'%s/patchset/ovs-interim-bridge.patch' % patchset_dir,
'%s/patchset/neutron-security-group.patch' % patchset_dir,
'%s/patchset/speed-up-writing-config-drive.patch' % patchset_dir]
'%s/patchset/speed-up-writing-config-drive.patch' % patchset_dir,
'%s/patchset/support-disable-image-cache.patch' % patchset_dir]
for patch_file in patchfile_list:
execute('patch', '-d', DIST_PACKAGES_DIR, '-p1', '-i', patch_file)

View File

@ -0,0 +1,73 @@
diff --git a/nova/tests/unit/virt/xenapi/test_vm_utils.py b/nova/tests/unit/virt/xenapi/test_vm_utils.py
index e15cc53..77a1968 100644
--- a/nova/tests/unit/virt/xenapi/test_vm_utils.py
+++ b/nova/tests/unit/virt/xenapi/test_vm_utils.py
@@ -1437,6 +1437,46 @@ class CreateKernelRamdiskTestCase(VMUtilsTestBase):
self.session, self.instance, self.name_label)
self.assertEqual(("k", None), result)
+ def _test_create_kernel_image(self, cache_images):
+ kernel_id = "kernel"
+ self.instance["kernel_id"] = kernel_id
+
+ args_kernel = {}
+ args_kernel['cached-image'] = kernel_id
+ args_kernel['new-image-uuid'] = "fake_uuid1"
+ self.flags(cache_images=cache_images, group='xenserver')
+
+ if cache_images == 'all':
+ uuid.uuid4().AndReturn("fake_uuid1")
+ self.session.call_plugin('kernel', 'create_kernel_ramdisk',
+ args_kernel).AndReturn("cached_image")
+ else:
+ kernel = {"kernel": {"file": "new_image", "uuid": None}}
+ vm_utils._fetch_disk_image(self.context, self.session,
+ self.instance, self.name_label,
+ kernel_id, 0).AndReturn(kernel)
+
+ self.mox.ReplayAll()
+
+ result = vm_utils._create_kernel_image(self.context,
+ self.session,
+ self.instance,
+ self.name_label,
+ kernel_id, 0)
+
+ if cache_images == 'all':
+ self.assertEqual(result, {"kernel":
+ {"file": "cached_image", "uuid": None}})
+ else:
+ self.assertEqual(result, {"kernel":
+ {"file": "new_image", "uuid": None}})
+
+ def test_create_kernel_image_cached_config(self):
+ self._test_create_kernel_image('all')
+
+ def test_create_kernel_image_uncached_config(self):
+ self._test_create_kernel_image('none')
+
class ScanSrTestCase(VMUtilsTestBase):
@mock.patch.object(vm_utils, "_scan_sr")
diff --git a/nova/virt/xenapi/vm_utils.py b/nova/virt/xenapi/vm_utils.py
index c8fdc52..5312467 100644
--- a/nova/virt/xenapi/vm_utils.py
+++ b/nova/virt/xenapi/vm_utils.py
@@ -1182,7 +1182,7 @@ def _create_kernel_image(context, session, instance, name_label, image_id,
Returns: A list of dictionaries that describe VDIs
"""
filename = ""
- if CONF.xenserver.cache_images:
+ if CONF.xenserver.cache_images != 'none':
args = {}
args['cached-image'] = image_id
args['new-image-uuid'] = str(uuid.uuid4())
@@ -1572,7 +1572,7 @@ def _fetch_disk_image(context, session, instance, name_label, image_id,
# Let the plugin copy the correct number of bytes.
args['image-size'] = str(vdi_size)
- if CONF.xenserver.cache_images:
+ if CONF.xenserver.cache_images != 'none':
args['cached-image'] = image_id
filename = session.call_plugin('kernel', 'copy_vdi', args)