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>
This commit is contained in:
@@ -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))
|
||||
|
||||
@@ -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") %
|
||||
|
||||
Reference in New Issue
Block a user