Change in vdsm[ovirt-3.5]: vm, guestagent: return hash should include also the disk map...

laravot at redhat.com laravot at redhat.com
Mon Sep 22 13:07:36 UTC 2014


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 at 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 at redhat.com>


More information about the vdsm-patches mailing list