From 928932c5c39d043a67d236e513e50fc05232c341 Mon Sep 17 00:00:00 2001 From: Claudio-Daniel Freire Date: Sun, 25 Sep 2011 22:26:12 +0200 Subject: [PATCH] Use system.multicall to accelerate batch API calls --- src/nepi/testbeds/planetlab/node.py | 9 +++++++-- src/nepi/testbeds/planetlab/plcapi.py | 16 ++++++++++++++++ 2 files changed, 23 insertions(+), 2 deletions(-) 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 [] -- 2.47.0