diff options
author | Zhi Yan Liu <zhiyanl@cn.ibm.com> | 2013-04-12 12:00:47 +0800 |
---|---|---|
committer | Zhi Yan Liu <zhiyanl@cn.ibm.com> | 2013-04-15 12:45:46 +0800 |
commit | 32e455282250efa385984085f1ecd8847cc6be2c (patch) | |
tree | cca63f42bcba9bedb0d64e75a209341a5d31b7b4 /nova | |
parent | 0fc0588a41d85a61695f4fa0aab238784ffe5999 (diff) | |
download | nova-32e455282250efa385984085f1ecd8847cc6be2c.tar.gz nova-32e455282250efa385984085f1ecd8847cc6be2c.tar.xz nova-32e455282250efa385984085f1ecd8847cc6be2c.zip |
Correct disk's over committed size computing error
There's a error in the disk's over committed size computing for the
instance which using RAW type disk. This issue caused
disk_available_least resource counting increasing.
Fixes bug: 1167695
Change-Id: I4e6cf22a9cf66a757e3641e2a0be0b7699cae69d
Signed-off-by: Zhi Yan Liu <zhiyanl@cn.ibm.com>
Diffstat (limited to 'nova')
-rw-r--r-- | nova/tests/test_libvirt.py | 12 | ||||
-rwxr-xr-x | nova/virt/libvirt/driver.py | 10 |
2 files changed, 14 insertions, 8 deletions
diff --git a/nova/tests/test_libvirt.py b/nova/tests/test_libvirt.py index e26c25ff1..386476cd2 100644 --- a/nova/tests/test_libvirt.py +++ b/nova/tests/test_libvirt.py @@ -2488,7 +2488,7 @@ class LibvirtConnTestCase(test.TestCase): self.mox.StubOutWithMock(os.path, "getsize") os.path.getsize('/test/disk').AndReturn((10737418240)) - os.path.getsize('/test/disk.local').AndReturn((21474836480)) + os.path.getsize('/test/disk.local').AndReturn((3328599655)) ret = ("image: /test/disk\n" "file format: raw\n" @@ -2512,10 +2512,12 @@ class LibvirtConnTestCase(test.TestCase): self.assertEquals(info[0]['path'], '/test/disk') self.assertEquals(info[0]['disk_size'], 10737418240) self.assertEquals(info[0]['backing_file'], "") + self.assertEquals(info[0]['over_committed_disk_size'], 0) self.assertEquals(info[1]['type'], 'qcow2') self.assertEquals(info[1]['path'], '/test/disk.local') self.assertEquals(info[1]['virt_disk_size'], 21474836480) self.assertEquals(info[1]['backing_file'], "file") + self.assertEquals(info[1]['over_committed_disk_size'], 18146236825) db.instance_destroy(self.context, instance_ref['uuid']) @@ -3119,11 +3121,13 @@ class LibvirtConnTestCase(test.TestCase): fake_disks = {'fake1': [{'type': 'qcow2', 'path': '/somepath/disk1', 'virt_disk_size': '10737418240', 'backing_file': '/somepath/disk1', - 'disk_size':'83886080'}], + 'disk_size':'83886080', + 'over_committed_disk_size':'10653532160'}], 'fake2': [{'type': 'raw', 'path': '/somepath/disk2', - 'virt_disk_size': '10737418240', + 'virt_disk_size': '0', 'backing_file': '/somepath/disk2', - 'disk_size':'10737418240'}]} + 'disk_size':'10737418240', + 'over_committed_disk_size':'0'}]} def get_info(instance_name): return jsonutils.dumps(fake_disks.get(instance_name)) diff --git a/nova/virt/libvirt/driver.py b/nova/virt/libvirt/driver.py index 2c08a913e..98c540579 100755 --- a/nova/virt/libvirt/driver.py +++ b/nova/virt/libvirt/driver.py @@ -3374,15 +3374,18 @@ class LibvirtDriver(driver.ComputeDriver): if disk_type == "qcow2": backing_file = libvirt_utils.get_disk_backing_file(path) virt_size = disk.get_disk_size(path) + over_commit_size = int(virt_size) - dk_size else: backing_file = "" virt_size = 0 + over_commit_size = 0 disk_info.append({'type': disk_type, 'path': path, 'virt_disk_size': virt_size, 'backing_file': backing_file, - 'disk_size': dk_size}) + 'disk_size': dk_size, + 'over_committed_disk_size': over_commit_size}) return jsonutils.dumps(disk_info) def get_disk_over_committed_size_total(self): @@ -3395,9 +3398,8 @@ class LibvirtDriver(driver.ComputeDriver): disk_infos = jsonutils.loads( self.get_instance_disk_info(i_name)) for info in disk_infos: - i_vt_sz = int(info['virt_disk_size']) - i_dk_sz = int(info['disk_size']) - disk_over_committed_size += i_vt_sz - i_dk_sz + disk_over_committed_size += int( + info['over_committed_disk_size']) except OSError as e: if e.errno == errno.ENOENT: LOG.error(_("Getting disk size of %(i_name)s: %(e)s") % |