summaryrefslogtreecommitdiffstats
path: root/nova/virt
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2013-02-23 16:18:38 +0000
committerGerrit Code Review <review@openstack.org>2013-02-23 16:18:38 +0000
commitd2123eebf99092e3cc36a7ebc46b6a632e2742cd (patch)
tree4af606c64c691a636c67d74cff5485ce02612d57 /nova/virt
parenta7078ae7b30490a4c46bc213784f46ae5134fedb (diff)
parentfaf8dceb639c1c70ef2b3277cfb0a2e370706f45 (diff)
Merge "Adding ability to specify the libvirt cache mode for disk devices"
Diffstat (limited to 'nova/virt')
-rwxr-xr-xnova/virt/libvirt/driver.py39
1 files changed, 39 insertions, 0 deletions
diff --git a/nova/virt/libvirt/driver.py b/nova/virt/libvirt/driver.py
index c726fe847..549647443 100755
--- a/nova/virt/libvirt/driver.py
+++ b/nova/virt/libvirt/driver.py
@@ -205,6 +205,10 @@ libvirt_opts = [
cfg.StrOpt('xen_hvmloader_path',
default='/usr/lib/xen/boot/hvmloader',
help='Location where the Xen hvmloader is kept'),
+ cfg.ListOpt('disk_cachemodes',
+ default=[],
+ help='Specific cachemodes to use for different disk types '
+ 'e.g: ["file=directsync","block=none"]'),
]
CONF = cfg.CONF
@@ -318,6 +322,25 @@ class LibvirtDriver(driver.ComputeDriver):
self.image_cache_manager = imagecache.ImageCacheManager()
self.image_backend = imagebackend.Backend(CONF.use_cow_images)
+ self.disk_cachemodes = {}
+
+ self.valid_cachemodes = ["default",
+ "none",
+ "writethrough",
+ "writeback",
+ "directsync",
+ "writethrough",
+ "unsafe",
+ ]
+
+ for mode_str in CONF.disk_cachemodes:
+ disk_type, sep, cache_mode = mode_str.partition('=')
+ if cache_mode not in self.valid_cachemodes:
+ LOG.warn(_("Invalid cachemode %(cache_mode)s specified "
+ "for disk type %(disk_type)s.") % locals())
+ continue
+ self.disk_cachemodes[disk_type] = cache_mode
+
@property
def disk_cachemode(self):
if self._disk_cachemode is None:
@@ -339,6 +362,18 @@ class LibvirtDriver(driver.ComputeDriver):
self._host_state = HostState(self)
return self._host_state
+ def set_cache_mode(self, conf):
+ """Set cache mode on LibvirtConfigGuestDisk object."""
+ try:
+ source_type = conf.source_type
+ driver_cache = conf.driver_cache
+ except AttributeError:
+ return
+
+ cache_mode = self.disk_cachemodes.get(source_type,
+ driver_cache)
+ conf.driver_cache = cache_mode
+
def has_min_version(self, lv_ver=None, hv_ver=None, hv_type=None):
def _munge_version(ver):
return ver[0] * 1000000 + ver[1] * 1000 + ver[2]
@@ -919,6 +954,7 @@ class LibvirtDriver(driver.ComputeDriver):
conf = self.volume_driver_method('connect_volume',
connection_info,
disk_info)
+ self.set_cache_mode(conf)
try:
# NOTE(vish): We can always affect config because our
@@ -2040,6 +2076,9 @@ class LibvirtDriver(driver.ComputeDriver):
'raw')
devices.append(diskconfig)
+ for d in devices:
+ self.set_cache_mode(d)
+
return devices
def get_guest_config_sysinfo(self, instance):