From e2a321317b760f56f4169fd5a4aa82c08342bfc4 Mon Sep 17 00:00:00 2001 From: Thierry Parmentelat Date: Fri, 11 Mar 2011 12:18:18 +0100 Subject: [PATCH] export full URLs (with path) in GetVersion also remember url in xmlrpcprotocol.XMLRPCServerProxy for more reliability --- sfa/managers/slice_manager_pl.py | 13 +++++++++++-- sfa/util/xmlrpcprotocol.py | 2 ++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/sfa/managers/slice_manager_pl.py b/sfa/managers/slice_manager_pl.py index 44715dd2..cc1ae4b3 100644 --- a/sfa/managers/slice_manager_pl.py +++ b/sfa/managers/slice_manager_pl.py @@ -28,9 +28,18 @@ from sfa.util.version import version_core # calling aggregate implementation from sfa.managers.aggregate_manager_pl import slice_status +# we have specialized xmlrpclib.ServerProxy to remember the input url +# OTOH it's not clear if we're only dealing with XMLRPCServerProxy instances +def get_serverproxy_url (server): + try: + return server.url + except: + sfa_logger().warning("GetVersion, falling back to xmlrpclib.ServerProxy internals") + return server._ServerProxy__host + server._ServerProxy__handler + def GetVersion(api): # peers explicitly in aggregates.xml - peers =dict ([ (peername,v._ServerProxy__host) for (peername,v) in api.aggregates.items() + peers =dict ([ (peername,get_serverproxy_url(v)) for (peername,v) in api.aggregates.items() if peername != api.hrn]) xrn=Xrn (api.hrn) sm_version=version_core({'interface':'slicemgr', @@ -40,7 +49,7 @@ def GetVersion(api): }) # local aggregate if present needs to have localhost resolved if api.hrn in api.aggregates: - local_am_url=api.aggregates[api.hrn]._ServerProxy__host + local_am_url=get_serverproxy_url(api.aggregates[api.hrn]) sm_version['peers'][api.hrn]=local_am_url.replace('localhost',sm_version['hostname']) return sm_version diff --git a/sfa/util/xmlrpcprotocol.py b/sfa/util/xmlrpcprotocol.py index b39ab0e3..2ef9b60c 100644 --- a/sfa/util/xmlrpcprotocol.py +++ b/sfa/util/xmlrpcprotocol.py @@ -53,6 +53,8 @@ class XMLRPCTransport(xmlrpclib.Transport): class XMLRPCServerProxy(xmlrpclib.ServerProxy): def __init__(self, url, transport, allow_none=True, options=None): + # remember url for GetVersion + self.url=url verbose = False if options and options.debug: verbose = True -- 2.47.0