Add sleep between retires in bindings
In bindings.py the common retry() function uses a busy loop to retry, in
some cases the busy loop just increase the work loads of mapper and the
caller still get the ObjectPathInUse exception. It's better to sleep for
a while between retries.
A sleep interval is added as parameter default to 0, so the change does
not break existing functions. Then the caller has an option to pass a
sleep interval to indiciate it would sleep for an interval between
retries.
Change-Id: Ie1f248dc0b1be291dfa597eba2f58ba9bf247d6b
Signed-off-by: Lei YU <mine260309@gmail.com>
diff --git a/obmc/mapper/bindings.py b/obmc/mapper/bindings.py
index 43d1af2..820efa7 100644
--- a/obmc/mapper/bindings.py
+++ b/obmc/mapper/bindings.py
@@ -34,7 +34,7 @@
obj, dbus_interface=MAPPER_IFACE)
@staticmethod
- def retry(func, retries):
+ def retry(func, retries, interval):
e = None
count = 0
while count < retries:
@@ -46,32 +46,35 @@
raise
count += 1
+ if interval > 0:
+ from time import sleep
+ sleep(interval)
if e:
raise e
- def get_object(self, path, retries=5, interfaces=[]):
+ def get_object(self, path, retries=5, interfaces=[], interval=0):
return self.retry(
lambda: self.iface.GetObject(
path, interfaces, signature='sas'),
- retries)
+ retries, interval)
- def get_subtree_paths(self, path='/', depth=0, retries=5, interfaces=[]):
+ def get_subtree_paths(self, path='/', depth=0, retries=5, interfaces=[], interval=0):
return self.retry(
lambda: self.iface.GetSubTreePaths(
path, depth, interfaces, signature='sias'),
- retries)
+ retries, interval)
- def get_subtree(self, path='/', depth=0, retries=5, interfaces=[]):
+ def get_subtree(self, path='/', depth=0, retries=5, interfaces=[], interval=0):
return self.retry(
lambda: self.iface.GetSubTree(
path, depth, interfaces, signature='sias'),
- retries)
+ retries, interval)
- def get_ancestors(self, path, retries=5, interfaces=[]):
+ def get_ancestors(self, path, retries=5, interfaces=[], interval=0):
return self.retry(
lambda: self.iface.GetAncestors(
path, interfaces, signature='sas'),
- retries)
+ retries, interval)
@staticmethod
def __try_properties_interface(f, *a):