From: Claudio-Daniel Freire Date: Sun, 25 Sep 2011 20:26:12 +0000 (+0200) Subject: Use system.multicall to accelerate batch API calls X-Git-Tag: nepi-3.0.0~221 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=928932c5c39d043a67d236e513e50fc05232c341;p=nepi.git Use system.multicall to accelerate batch API calls --- diff --git a/src/nepi/testbeds/planetlab/node.py b/src/nepi/testbeds/planetlab/node.py index c6ef6aa5..ed8ddbd7 100644 --- a/src/nepi/testbeds/planetlab/node.py +++ b/src/nepi/testbeds/planetlab/node.py @@ -352,9 +352,14 @@ class Node(object): def fetch_node_info(self): orig_attrs = {} - info = self._api.GetNodes(self._node_id)[0] + self._api.StartMulticall() + info = self._api.GetNodes(self._node_id) + tags = self._api.GetNodeTags(node_id=self._node_id, fields=('tagname','value')) + info, tags = self._api.FinishMulticall() + info = info[0] + tags = dict( (t['tagname'],t['value']) - for t in self._api.GetNodeTags(node_id=self._node_id, fields=('tagname','value')) ) + for t in tags ) orig_attrs['min_num_external_ifaces'] = self.min_num_external_ifaces orig_attrs['max_num_external_ifaces'] = self.max_num_external_ifaces diff --git a/src/nepi/testbeds/planetlab/plcapi.py b/src/nepi/testbeds/planetlab/plcapi.py index 20466b98..4e6b89dd 100644 --- a/src/nepi/testbeds/planetlab/plcapi.py +++ b/src/nepi/testbeds/planetlab/plcapi.py @@ -87,6 +87,8 @@ class PLCAPI(object): urlpattern % {'hostname':hostname}, allow_none = True) + self._multi = False + def test(self): import warnings @@ -277,3 +279,17 @@ class PLCAPI(object): return _retry(self.api.UpdateSlice)(self.auth, sliceIdOrName, kw) + def StartMulticall(self): + if not self._multi: + self._api = self.api + self.api = xmlrpclib.MultiCall(self._api) + self._multi = True + + def FinishMulticall(self): + if self._multi: + rv = self.api() + self.api = self._api + self._multi = False + return rv + else: + return []