Change in vdsm[master]: vdsm: Adding guest agent API versioning support
vfeenstr at redhat.com
vfeenstr at redhat.com
Wed Jul 17 11:44:56 UTC 2013
Vinzenz Feenstra has uploaded a new change for review.
Change subject: vdsm: Adding guest agent API versioning support
......................................................................
vdsm: Adding guest agent API versioning support
With the increasing complexity on different version of the guest agent
and vdsm we're now introducing API versioning, so only supported messages
are exchanged between guest agent and vdsm.
Change-Id: I9095b528c2c910f12d5f170088a458bf11c71910
Signed-off-by: Vinzenz Feenstra <vfeenstr at redhat.com>
---
M vdsm/guestIF.py
1 file changed, 27 insertions(+), 1 deletion(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/04/17004/1
diff --git a/vdsm/guestIF.py b/vdsm/guestIF.py
index dae4c3b..02e44d9 100644
--- a/vdsm/guestIF.py
+++ b/vdsm/guestIF.py
@@ -26,6 +26,8 @@
import supervdsm
import unicodedata
+_MAX_SUPPORTED_API_VERSION = 0
+
__REPLACEMENT_CHAR = u'\ufffd'
__RESTRICTED_CHARS = set(range(8 + 1)). \
union(set(range(0xB, 0xC + 1))). \
@@ -97,6 +99,7 @@
def __init__(self, socketName, channelListener, log, user='Unknown',
ips='', connect=True):
+ self.apiVersion = 0
self.log = log
self._socketName = socketName
self._stopped = True
@@ -126,6 +129,26 @@
self._onChannelTimeout,
self)
+ def _setAPIVersion(self, version):
+ try:
+ version = int(version)
+ except ValueError:
+ self.log.error("Received invalid version value: %s", version)
+
+ if version > _MAX_SUPPORTED_API_VERSION:
+ # This actually is not supposed to happen, as the guest agent
+ # is not supposed to send a higher version than requested.
+ # We'll just for our highest version.
+ version = _MAX_SUPPORTED_API_VERSION
+
+ if version < 0:
+ version = 0
+
+ if self.apiVersion != version:
+ self.log.info("Guest API version changed from %d to %d",
+ self.apiVersion, version)
+ self.apiVersion = version
+
def _prepare_socket(self):
supervdsm.getProxy().prepareVmChannel(self._socketName)
@@ -148,7 +171,8 @@
self.log.debug("Connected to %s", self._socketName)
self._messageState = MessageState.NORMAL
self._clearReadBuffer()
- self._forward('refresh')
+ self._forward('refresh',
+ args={'apiVersion': _MAX_SUPPORTED_API_VERSION})
self._stopped = False
ret = True
else:
@@ -183,6 +207,8 @@
self.guestInfo['guestName'] = args['name']
elif message == 'os-version':
self.guestInfo['guestOs'] = args['version']
+ elif message == 'api-version':
+ self._setAPIVersion(args['apiVersion'])
elif message == 'network-interfaces':
interfaces = []
old_ips = ''
--
To view, visit http://gerrit.ovirt.org/17004
To unsubscribe, visit http://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I9095b528c2c910f12d5f170088a458bf11c71910
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