diff options
| author | Jenkins <jenkins@review.openstack.org> | 2013-02-23 16:18:38 +0000 |
|---|---|---|
| committer | Gerrit Code Review <review@openstack.org> | 2013-02-23 16:18:38 +0000 |
| commit | d2123eebf99092e3cc36a7ebc46b6a632e2742cd (patch) | |
| tree | 4af606c64c691a636c67d74cff5485ce02612d57 /nova/virt | |
| parent | a7078ae7b30490a4c46bc213784f46ae5134fedb (diff) | |
| parent | faf8dceb639c1c70ef2b3277cfb0a2e370706f45 (diff) | |
Merge "Adding ability to specify the libvirt cache mode for disk devices"
Diffstat (limited to 'nova/virt')
| -rwxr-xr-x | nova/virt/libvirt/driver.py | 39 |
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): |
