summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWenyanZhang <zhang.wenyan3@zte.com.cn>2017-11-02 14:48:31 +0800
committergord chung <gord@live.ca>2017-11-06 22:52:34 +0000
commit903e5423afbb4423e57767f20f603743cfc96d1a (patch)
tree7fc228c7bb21dbda9206f10e1e68e496f53cc6b2
parent600bd6ae8a928559d26fbe167b80bd738852cb83 (diff)
downloadceilometer-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.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',