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