export full URLs (with path) in GetVersion
authorThierry Parmentelat <thierry.parmentelat@sophia.inria.fr>
Fri, 11 Mar 2011 11:18:18 +0000 (12:18 +0100)
committerThierry Parmentelat <thierry.parmentelat@sophia.inria.fr>
Fri, 11 Mar 2011 11:18:18 +0000 (12:18 +0100)
also remember url in xmlrpcprotocol.XMLRPCServerProxy for more reliability

sfa/managers/slice_manager_pl.py
sfa/util/xmlrpcprotocol.py

index 44715dd..cc1ae4b 100644 (file)
@@ -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
 
index b39ab0e..2ef9b60 100644 (file)
@@ -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