Adding ability to specify the libvirt cache mode for disk devices
In past versions of Nova it was possible to explicitly configure the cache mode of disks via the libvirt XML template. The current approach makes this a derived setting of either “none” or “writethrough” based on the support of O_DIRECT. Whilst this provides a good set of default settings it removes the ability of the cloud provider to use other modes such as “writeback” and “unsafe” which are valuable in certain configurations. This change allows the cache mode to be specified on a per-disk type basis. If a disk type does not have a cache mode specified then the default behaviour remains unchanged. DocImpact bug 1086386 Change-Id: I3d296fe0b4b9b976db02db90ad69fd299cd2096a
This commit is contained in:
@@ -269,6 +269,17 @@ class FakeVolumeDriver(object):
|
||||
return ""
|
||||
|
||||
|
||||
class FakeConfigGuestDisk(object):
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.source_type = None
|
||||
self.driver_cache = None
|
||||
|
||||
|
||||
class FakeConfigGuest(object):
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.driver_cache = None
|
||||
|
||||
|
||||
class LibvirtConnTestCase(test.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
@@ -3431,6 +3442,33 @@ class LibvirtConnTestCase(test.TestCase):
|
||||
self.assertEqual(got_events[0].transition,
|
||||
virtevent.EVENT_LIFECYCLE_STOPPED)
|
||||
|
||||
def test_set_cache_mode(self):
|
||||
self.flags(disk_cachemodes=['file=directsync'])
|
||||
conn = libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), True)
|
||||
fake_conf = FakeConfigGuestDisk()
|
||||
|
||||
fake_conf.source_type = 'file'
|
||||
conn.set_cache_mode(fake_conf)
|
||||
self.assertEqual(fake_conf.driver_cache, 'directsync')
|
||||
|
||||
def test_set_cache_mode_invalid_mode(self):
|
||||
self.flags(disk_cachemodes=['file=FAKE'])
|
||||
conn = libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), True)
|
||||
fake_conf = FakeConfigGuestDisk()
|
||||
|
||||
fake_conf.source_type = 'file'
|
||||
conn.set_cache_mode(fake_conf)
|
||||
self.assertEqual(fake_conf.driver_cache, None)
|
||||
|
||||
def test_set_cache_mode_invalid_object(self):
|
||||
self.flags(disk_cachemodes=['file=directsync'])
|
||||
conn = libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), True)
|
||||
fake_conf = FakeConfigGuest()
|
||||
|
||||
fake_conf.driver_cache = 'fake'
|
||||
conn.set_cache_mode(fake_conf)
|
||||
self.assertEqual(fake_conf.driver_cache, 'fake')
|
||||
|
||||
|
||||
class HostStateTestCase(test.TestCase):
|
||||
|
||||
|
||||
Reference in New Issue
Block a user