From 22d43b8ac09a650ff705d4252d51d23d75ad3a55 Mon Sep 17 00:00:00 2001 From: Thierry Parmentelat Date: Thu, 8 Dec 2011 16:35:14 +0100 Subject: [PATCH] call_id was broken since 2.0 - use GetVersion dedicated keys call_id_support' and 'options_support' instead of tying to guess from code_tag --- sfa/client/sfi.py | 26 ++++++++------------------ sfa/managers/slice_manager.py | 18 ++++-------------- sfa/util/version.py.in | 2 ++ 3 files changed, 14 insertions(+), 32 deletions(-) diff --git a/sfa/client/sfi.py b/sfa/client/sfi.py index c9bde73a..5e30d1d6 100644 --- a/sfa/client/sfi.py +++ b/sfa/client/sfi.py @@ -29,10 +29,10 @@ from sfa.storage.record import SfaRecord, UserRecord, SliceRecord, NodeRecord, A from sfa.rspecs.rspec import RSpec from sfa.rspecs.rspec_converter import RSpecConverter from sfa.rspecs.version_manager import VersionManager -from sfa.client.return_value import ReturnValue from sfa.client.sfaserverproxy import SfaServerProxy, ServerException from sfa.client.client_helper import pg_users_arg, sfa_users_arg +from sfa.client.return_value import ReturnValue AGGREGATE_PORT=12346 CM_PORT=12346 @@ -510,22 +510,12 @@ class Sfi: return version - def server_supports_options_arg(self, server): + def server_supports_call_id(self, server): """ Returns true if server support the optional call_id arg, false otherwise. """ server_version = self.get_cached_server_version(server) - if 'sfa' in server_version and 'code_tag' in server_version: - code_tag = server_version['code_tag'] - code_tag_parts = code_tag.split("-") - - version_parts = code_tag_parts[0].split(".") - major, minor = version_parts[0], version_parts[1] - rev = code_tag_parts[1] - if int(major) >= 1: - if int(minor) >= 2: - return True - return False + return server_version.has_key ('call_id_support') # # Get various credential and spec files @@ -922,7 +912,7 @@ or version information about sfi itself creds.append(delegated_cred) server = self.server_proxy_from_opts(opts) call_args = [creds] - if self.server_supports_options_arg(server): + if self.server_supports_call_id(server): options = {'call_id': unique_call_id()} call_args.append(options) result = server.ListSlices(*call_args) @@ -1027,7 +1017,7 @@ or currently provisioned resources (ListResources) # do not append users, keys, or slice tags. Anything # not contained in this request will be removed from the slice options = {'append': False} - if self.server_supports_options_arg(server): + if self.server_supports_call_id(server): options['call_id'] = unique_call_id() call_args = [slice_urn, creds, rspec, users, options] result = server.CreateSliver(*call_args) @@ -1051,7 +1041,7 @@ or currently provisioned resources (ListResources) creds.append(delegated_cred) server = self.server_proxy_from_opts(opts) call_args = [slice_urn, creds] - if self.server_supports_options_arg(server): + if self.server_supports_call_id(server): options = {'call_id': unique_call_id()} call_args.append(options) return server.DeleteSliver(*call_args) @@ -1069,7 +1059,7 @@ or currently provisioned resources (ListResources) creds.append(delegated_cred) server = self.server_proxy_from_opts(opts) call_args = [slice_urn, creds] - if self.server_supports_options_arg(server): + if self.server_supports_call_id(server): options = {'call_id': unique_call_id()} call_args.append(options) result = server.SliverStatus(*call_args) @@ -1136,7 +1126,7 @@ or currently provisioned resources (ListResources) time = args[1] call_args = [slice_urn, creds, time] - if self.server_supports_options_arg(server): + if self.server_supports_call_id(server): options = {'call_id': unique_call_id()} call_args.append(options) result = server.RenewSliver(*call_args) diff --git a/sfa/managers/slice_manager.py b/sfa/managers/slice_manager.py index b5c5fdc8..349aa011 100644 --- a/sfa/managers/slice_manager.py +++ b/sfa/managers/slice_manager.py @@ -21,26 +21,16 @@ from sfa.client.return_value import ReturnValue class SliceManager: def __init__ (self): - # self.caching=False + # xxx todo should be configurable + # self.caching=False self.caching=True def _options_supported(self, api, server): """ - Returns true if server support the optional call_id arg, false otherwise. + Returns true if server supports the extra 'options' arg. to API calls """ server_version = api.get_cached_server_version(server) - - if 'sfa' in server_version: - code_tag = server_version['code_tag'] - code_tag_parts = code_tag.split("-") - - version_parts = code_tag_parts[0].split(".") - major, minor = version_parts[0:2] - rev = code_tag_parts[1] - if int(major) >= 1: - if int(minor) >= 2: - return True - return False + return server_version.has_key ('options_support') def GetVersion(self, api, options={}): # peers explicitly in aggregates.xml diff --git a/sfa/util/version.py.in b/sfa/util/version.py.in index 46b31d39..7699aa9d 100644 --- a/sfa/util/version.py.in +++ b/sfa/util/version.py.in @@ -7,6 +7,8 @@ def version_core (more={}): core = { 'code_tag' : version_tag, 'code_url' : scm_url, 'hostname' : socket.gethostname(), + 'call_id_support' : True, + 'options_support' : True, } core.update(more) return core -- 2.47.0