summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZuul <zuul@review.openstack.org>2017-11-14 22:32:30 +0000
committerGerrit Code Review <review@openstack.org>2017-11-14 22:32:30 +0000
commitb3725525a7e2cb8dba696f6335b0f442aff399d4 (patch)
treeb34b43c28eb73512b6b36bb86d3160548ca6ba45
parent8a39efdfd96f1dfd9eb86b8aa380d5dc5ed50a35 (diff)
parent903e5423afbb4423e57767f20f603743cfc96d1a (diff)
downloadceilometer-b3725525a7e2cb8dba696f6335b0f442aff399d4.tar.gz
Merge "Fix bug for ceilometer polling generates an exception" into stable/ocata8.1.2
-rwxr-xr-x[-rw-r--r--]ceilometer/compute/virt/libvirt/inspector.py3
-rwxr-xr-x[-rw-r--r--]ceilometer/tests/unit/compute/virt/libvirt/test_inspector.py38
2 files changed, 40 insertions, 1 deletions
diff --git a/ceilometer/compute/virt/libvirt/inspector.py b/ceilometer/compute/virt/libvirt/inspector.py
index 65852350..86f5c29c 100644..100755
--- a/ceilometer/compute/virt/libvirt/inspector.py
+++ b/ceilometer/compute/virt/libvirt/inspector.py
@@ -181,7 +181,8 @@ class LibvirtInspector(virt_inspector.Inspector):
for device in filter(
bool,
[target.get("dev")
- for target in tree.findall('devices/disk/target')]):
+ for target in tree.findall('devices/disk/target')
+ if target.getparent().find('source') is not None]):
disk = virt_inspector.Disk(device=device)
block_stats = domain.blockStats(device)
stats = virt_inspector.DiskStats(read_requests=block_stats[0],
diff --git a/ceilometer/tests/unit/compute/virt/libvirt/test_inspector.py b/ceilometer/tests/unit/compute/virt/libvirt/test_inspector.py
index 882d0ac2..28280e94 100644..100755
--- a/ceilometer/tests/unit/compute/virt/libvirt/test_inspector.py
+++ b/ceilometer/tests/unit/compute/virt/libvirt/test_inspector.py
@@ -423,6 +423,44 @@ class TestLibvirtInspection(base.BaseTestCase):
self.assertEqual(0, len(disks))
+ def test_inspect_disks_without_source_element(self):
+ dom_xml = """
+ <domain type='kvm'>
+ <devices>
+ <disk type='file' device='cdrom'>
+ <driver name='qemu' type='raw' cache='none'/>
+ <backingStore/>
+ <target dev='hdd' bus='ide' tray='open'/>
+ <readonly/>
+ <alias name='ide0-1-1'/>
+ <address type='drive' controller='0' bus='1'
+ target='0' unit='1'/>
+ </disk>
+ </devices>
+ </domain>
+ """
+ blockStatsFlags = {'wr_total_times': 91752302267,
+ 'rd_operations': 6756,
+ 'flush_total_times': 1310427331,
+ 'rd_total_times': 29142253616,
+ 'rd_bytes': 171460096,
+ 'flush_operations': 746,
+ 'wr_operations': 1437,
+ 'wr_bytes': 13574656}
+ domain = mock.Mock()
+ domain.XMLDesc.return_value = dom_xml
+ domain.info.return_value = (0, 0, 0, 2, 999999)
+ domain.blockStats.return_value = (1, 2, 3, 4, -1)
+ domain.blockStatsFlags.return_value = blockStatsFlags
+ conn = mock.Mock()
+ conn.lookupByUUIDString.return_value = domain
+
+ with mock.patch('ceilometer.compute.virt.libvirt.utils.'
+ 'get_libvirt_connection', return_value=conn):
+ disks = list(self.inspector.inspect_disks(self.instance))
+
+ self.assertEqual(0, len(disks))
+
def test_inspect_memory_usage_with_domain_shutoff(self):
connection = self.inspector.connection
with mock.patch.object(connection, 'lookupByUUIDString',