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