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 <[email protected]> --- 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 <[email protected]> _______________________________________________ vdsm-patches mailing list [email protected] https://lists.fedorahosted.org/mailman/listinfo/vdsm-patches
