Liron Aravot has uploaded a new change for review.
Change subject: vm, guestagent: return hash should include also the disk mapping
......................................................................
vm, guestagent: return hash should include also the disk mapping
Change-Id: I148196ccf353613f9cffed7753e7100bd1dd30de
Signed-off-by: Liron Aravot <laravot(a)redhat.com>
---
M tests/vmTests.py
M vdsm/virt/guestagent.py
M vdsm/virt/vm.py
3 files changed, 15 insertions(+), 3 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/98/33198/1
diff --git a/tests/vmTests.py b/tests/vmTests.py
index a89a8d3..ee0fd38 100644
--- a/tests/vmTests.py
+++ b/tests/vmTests.py
@@ -896,6 +896,7 @@
class FakeGuestAgent(object):
def __init__(self):
self.guestDiskMapping = {}
+ self.diskMappingHash = 0
def getGuestInfo(self):
return {
@@ -1140,6 +1141,13 @@
self.assertIn(statsDev['type'], confDev['device'])
self.assertIn('port', statsDev)
+ def testDiskMappingHashInStatsHash(self):
+ with FakeVM(self.VM_PARAMS) as fake:
+ res = fake.getStats()
+ fake.guestAgent.diskMappingHash += 1
+ self.assertNotEquals(res['hash'],
+ fake.getStats()['hash'])
+
class TestLibVirtCallbacks(TestCaseBase):
FAKE_ERROR = 'EFAKERROR'
diff --git a/vdsm/virt/guestagent.py b/vdsm/virt/guestagent.py
index 1435c57..3bab490 100644
--- a/vdsm/virt/guestagent.py
+++ b/vdsm/virt/guestagent.py
@@ -121,6 +121,7 @@
self._stopped = True
self.guestStatus = None
self.guestDiskMapping = {}
+ self.diskMappingHash = 0
self.guestInfo = {
'username': user,
'memUsage': 0,
@@ -305,6 +306,8 @@
disks.append(disk)
self.guestInfo['disksUsage'] = disks
self.guestDiskMapping = args.get('mapping', {})
+ self.diskMappingHash = hash(json.dumps(self.guestDiskMapping,
+ sort_keys=True))
elif message == 'number-of-cpus':
self.guestInfo['guestCPUCount'] = int(args['count'])
else:
diff --git a/vdsm/virt/vm.py b/vdsm/virt/vm.py
index 548ce18..f056000 100644
--- a/vdsm/virt/vm.py
+++ b/vdsm/virt/vm.py
@@ -1927,7 +1927,7 @@
self._guestSocketFile = self._makeChannelPath(_VMCHANNEL_DEVICE_NAME)
self._qemuguestSocketFile = self._makeChannelPath(_QEMU_GA_DEVICE_NAME)
self._lastXMLDesc =
'<domain><uuid>%s</uuid></domain>' % self.id
- self._devXmlHash = '0'
+ self._devXmlHash = 0
self._released = False
self._releaseLock = threading.Lock()
self.saveState()
@@ -2945,7 +2945,8 @@
exc_info=True)
stats.update(self._getGraphicsStats())
- stats['hash'] = self._devXmlHash
+ stats['hash'] = str(hash((self._devXmlHash,
+ self.guestAgent.diskMappingHash)))
if self._watchdogEvent:
stats['watchdogEvent'] = self._watchdogEvent
return stats
@@ -4813,7 +4814,7 @@
self._lastXMLDesc = self._dom.XMLDesc(0)
devxml = _domParseStr(self._lastXMLDesc).childNodes[0]. \
getElementsByTagName('devices')[0]
- self._devXmlHash = str(hash(devxml.toxml()))
+ self._devXmlHash = hash(devxml.toxml())
return self._lastXMLDesc
--
To view, visit
http://gerrit.ovirt.org/33198
To unsubscribe, visit
http://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I148196ccf353613f9cffed7753e7100bd1dd30de
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: ovirt-3.5
Gerrit-Owner: Liron Aravot <laravot(a)redhat.com>