Change in vdsm[master]: virt: Trigger VM status check on guest agent status changes

vfeenstr at redhat.com vfeenstr at redhat.com
Tue May 19 10:50:29 UTC 2015


Vinzenz Feenstra has uploaded a new change for review.

Change subject: virt: Trigger VM status check on guest agent status changes
......................................................................

virt: Trigger VM status check on guest agent status changes

Change-Id: Iaceca8e42720df50d5eb1e20670b6ed733db8b50
Signed-off-by: Vinzenz Feenstra <vfeenstr at redhat.com>
---
M vdsm/virt/guestagent.py
M vdsm/virt/vm.py
2 files changed, 24 insertions(+), 4 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/08/41108/1

diff --git a/vdsm/virt/guestagent.py b/vdsm/virt/guestagent.py
index 812e543..4d4a469 100644
--- a/vdsm/virt/guestagent.py
+++ b/vdsm/virt/guestagent.py
@@ -108,14 +108,15 @@
 class GuestAgent(object):
     MAX_MESSAGE_SIZE = 2 ** 20  # 1 MiB for now
 
-    def __init__(self, socketName, channelListener, log, user='Unknown',
-                 ips=''):
+    def __init__(self, socketName, channelListener, log, onStatusChange,
+                 user='Unknown', ips=''):
         self.effectiveApiVersion = _IMPLICIT_API_VERSION_ZERO
+        self._onStatusChange = onStatusChange
         self.log = log
         self._socketName = socketName
         self._sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
         self._stopped = True
-        self.guestStatus = None
+        self._guestStatus = None
         self.guestDiskMapping = {}
         self.guestInfo = {
             'username': user,
@@ -133,6 +134,17 @@
         self._messageState = MessageState.NORMAL
 
     @property
+    def guestStatus(self):
+        return self._guestStatus
+
+    @guestStatus.setter
+    def guestStatus(self, value):
+        oldValue = self._guestStatus
+        self._guestStatus = value
+        if oldValue != value and self._onStatusChange:
+            self._onStatusChange()
+
+    @property
     def guestDiskMapping(self):
         return self._guestDiskMapping
 
diff --git a/vdsm/virt/vm.py b/vdsm/virt/vm.py
index 984f1d0..f073fe0 100644
--- a/vdsm/virt/vm.py
+++ b/vdsm/virt/vm.py
@@ -331,7 +331,8 @@
         self._guestSocketFile = self._makeChannelPath(_VMCHANNEL_DEVICE_NAME)
         self._qemuguestSocketFile = self._makeChannelPath(_QEMU_GA_DEVICE_NAME)
         self.guestAgent = guestagent.GuestAgent(
-            self._guestSocketFile, self.cif.channelListener, self.log)
+            self._guestSocketFile, self.cif.channelListener, self.log,
+            self._agent_status_changed)
         self._domain = DomainDescriptor.from_id(self.id)
         self._released = False
         self._releaseLock = threading.Lock()
@@ -352,6 +353,13 @@
         self._numaInfo = {}
         self._vmJobs = None
 
+    def _agent_status_changed(self):
+        with self._statusLock:
+            last = self._get_lastStatus()
+            now = self._getVmStatus()
+            if last != now:
+                self._set_lastStatus(now)
+
     def _get_lastStatus(self):
         # note that we don't use _statusLock here. One of the reasons is the
         # non-obvious recursive locking in the following flow:


-- 
To view, visit https://gerrit.ovirt.org/41108
To unsubscribe, visit https://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Iaceca8e42720df50d5eb1e20670b6ed733db8b50
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Vinzenz Feenstra <vfeenstr at redhat.com>


More information about the vdsm-patches mailing list