summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZuul <zuul@review.openstack.org>2018-04-19 12:44:41 +0000
committerGerrit Code Review <review@openstack.org>2018-04-19 12:44:41 +0000
commit7a068650246348a73b2a4e4956519d95923bf11c (patch)
tree7030b6d4ce9182f011a9b143e7a932af5ba06c88
parentc9f641b23a4f0e423a8f605e356ef4d2c84679f5 (diff)
parent2d50f6e7854543849c4cb7641ae6b88fe04cb6f6 (diff)
downloadnova-7a068650246348a73b2a4e4956519d95923bf11c.tar.gz
Merge "libvirt: Report the allocated size of preallocated file based disks" into stable/queens
-rw-r--r--nova/tests/unit/virt/libvirt/test_driver.py41
-rw-r--r--nova/virt/disk/api.py10
-rw-r--r--nova/virt/libvirt/driver.py2
3 files changed, 39 insertions, 14 deletions
diff --git a/nova/tests/unit/virt/libvirt/test_driver.py b/nova/tests/unit/virt/libvirt/test_driver.py
index 205f2ee8f1..80cce802f7 100644
--- a/nova/tests/unit/virt/libvirt/test_driver.py
+++ b/nova/tests/unit/virt/libvirt/test_driver.py
@@ -4364,8 +4364,9 @@ class LibvirtConnTestCase(test.NoDBTestCase,
@mock.patch.object(dmcrypt, 'delete_volume')
@mock.patch.object(conn._host, '_get_domain', return_value=dom)
- def detach_encrypted_volumes(block_device_info, mock_get_domain,
- mock_delete_volume):
+ @mock.patch.object(libvirt_driver.disk_api, 'get_allocated_disk_size')
+ def detach_encrypted_volumes(block_device_info, mock_get_alloc_size,
+ mock_get_domain, mock_delete_volume):
conn._detach_encrypted_volumes(instance, block_device_info)
mock_get_domain.assert_called_once_with(instance)
@@ -8878,7 +8879,8 @@ class LibvirtConnTestCase(test.NoDBTestCase,
data = objects.LibvirtLiveMigrateData(is_volume_backed=True,
is_shared_instance_path=False)
with test.nested(
- mock.patch.object(os.path, 'getsize', mock_getsize),
+ mock.patch.object(libvirt_driver.disk_api,
+ 'get_allocated_disk_size', mock_getsize),
mock.patch.object(host.Host, '_get_domain', mock_lookup)):
self.assertFalse(drvr._is_shared_block_storage(
instance, data,
@@ -11420,9 +11422,14 @@ class LibvirtConnTestCase(test.NoDBTestCase,
fake_libvirt_utils.disk_sizes['/test/disk.local'] = 20 * units.Gi
fake_libvirt_utils.disk_backing_files['/test/disk.local'] = 'file'
- self.mox.StubOutWithMock(os.path, "getsize")
- os.path.getsize('/test/disk').AndReturn((10737418240))
- os.path.getsize('/test/disk.local').AndReturn((3328599655))
+ self.mox.StubOutWithMock(libvirt_driver.disk_api,
+ 'get_allocated_disk_size')
+ path = '/test/disk'
+ size = 10737418240
+ libvirt_driver.disk_api.get_allocated_disk_size(path).AndReturn((size))
+ path = '/test/disk.local'
+ size = 3328599655
+ libvirt_driver.disk_api.get_allocated_disk_size(path).AndReturn((size))
ret = ("image: /test/disk.local\n"
"file format: qcow2\n"
@@ -11572,9 +11579,14 @@ class LibvirtConnTestCase(test.NoDBTestCase,
fake_libvirt_utils.disk_sizes['/test/disk.local'] = 20 * units.Gi
fake_libvirt_utils.disk_backing_files['/test/disk.local'] = 'file'
- self.mox.StubOutWithMock(os.path, "getsize")
- os.path.getsize('/test/disk').AndReturn((10737418240))
- os.path.getsize('/test/disk.local').AndReturn((3328599655))
+ self.mox.StubOutWithMock(libvirt_driver.disk_api,
+ 'get_allocated_disk_size')
+ path = '/test/disk'
+ size = 10737418240
+ libvirt_driver.disk_api.get_allocated_disk_size(path).AndReturn((size))
+ path = '/test/disk.local'
+ size = 3328599655
+ libvirt_driver.disk_api.get_allocated_disk_size(path).AndReturn((size))
ret = ("image: /test/disk.local\n"
"file format: qcow2\n"
@@ -11638,8 +11650,11 @@ class LibvirtConnTestCase(test.NoDBTestCase,
fake_libvirt_utils.disk_sizes['/test/disk'] = 10 * units.Gi
- self.mox.StubOutWithMock(os.path, "getsize")
- os.path.getsize('/test/disk').AndReturn((10737418240))
+ self.mox.StubOutWithMock(libvirt_driver.disk_api,
+ "get_allocated_disk_size")
+ path = '/test/disk'
+ size = 10737418240
+ libvirt_driver.disk_api.get_allocated_disk_size(path).AndReturn((size))
self.mox.ReplayAll()
drvr = libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), False)
@@ -11648,8 +11663,8 @@ class LibvirtConnTestCase(test.NoDBTestCase,
info = jsonutils.loads(info)
self.assertEqual(1, len(info))
self.assertEqual(info[0]['type'], 'raw')
- self.assertEqual(info[0]['path'], '/test/disk')
- self.assertEqual(info[0]['disk_size'], 10737418240)
+ self.assertEqual(info[0]['path'], path)
+ self.assertEqual(info[0]['disk_size'], size)
self.assertEqual(info[0]['backing_file'], "")
self.assertEqual(info[0]['over_committed_disk_size'], 0)
diff --git a/nova/virt/disk/api.py b/nova/virt/disk/api.py
index 04f8b93a85..cf1e13c0aa 100644
--- a/nova/virt/disk/api.py
+++ b/nova/virt/disk/api.py
@@ -137,6 +137,16 @@ def get_disk_size(path):
return images.qemu_img_info(path).virtual_size
+def get_allocated_disk_size(path):
+ """Get the allocated size of a disk image
+
+ :param path: Path to the disk image
+ :returns: Size (in bytes) of the given disk image as allocated on the
+ filesystem
+ """
+ return images.qemu_img_info(path).disk_size
+
+
def extend(image, size):
"""Increase image to size.
diff --git a/nova/virt/libvirt/driver.py b/nova/virt/libvirt/driver.py
index ce83773f38..5f23f08b9a 100644
--- a/nova/virt/libvirt/driver.py
+++ b/nova/virt/libvirt/driver.py
@@ -7842,7 +7842,7 @@ class LibvirtDriver(driver.ComputeDriver):
fp = os.path.join(dirpath, f)
dk_size += os.path.getsize(fp)
else:
- dk_size = int(os.path.getsize(path))
+ dk_size = disk_api.get_allocated_disk_size(path)
elif disk_type == 'block' and block_device_info:
dk_size = lvm.get_volume_size(path)
else: