diff options
author | WenyanZhang <zhang.wenyan3@zte.com.cn> | 2017-11-02 14:48:31 +0800 |
---|---|---|
committer | gord chung <gord@live.ca> | 2017-11-06 22:52:34 +0000 |
commit | 903e5423afbb4423e57767f20f603743cfc96d1a (patch) | |
tree | 7fc228c7bb21dbda9206f10e1e68e496f53cc6b2 | |
parent | 600bd6ae8a928559d26fbe167b80bd738852cb83 (diff) | |
download | ceilometer-903e5423afbb4423e57767f20f603743cfc96d1a.tar.gz |
Fix bug for ceilometer polling generates an exception
When the "cdrom" device associated to the configdrive ,
which no longer has a "source" element.
It is a normal and expected situation which shouldn't generate any logs.
Change-Id: Ia9910f6aec1b2cc8db99d8468e42b840b387130c
Closes-Bug: #1729506
(cherry picked from commit a141c6da5d5558b0be4b634015c4adbe815f6f28)
-rwxr-xr-x[-rw-r--r--] | ceilometer/compute/virt/libvirt/inspector.py | 3 | ||||
-rwxr-xr-x[-rw-r--r--] | ceilometer/tests/unit/compute/virt/libvirt/test_inspector.py | 38 |
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', |