X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=accounts.py;h=0a3509a2618352bb8c39592826f2ef65daee17e7;hb=7ad7efcc3865f3feb58269fbd53f47efc4ec1327;hp=b0ec4c295c6da47f12a053c0ef2581519f501b52;hpb=9d035b475840b484e38e0b5f1f609e18fea877a3;p=nodemanager.git diff --git a/accounts.py b/accounts.py index b0ec4c2..0a3509a 100644 --- a/accounts.py +++ b/accounts.py @@ -30,7 +30,10 @@ import tools # When this variable is true, start after any ensure_created -startingup = False +Startingup = False +# Cumulative delay for starts when Startingup is true +csd_lock = threading.Lock() +cumstartdelay = 0 # shell path -> account class association shell_acct_class = {} @@ -67,6 +70,7 @@ class Account: def __init__(self, rec): self.name = rec['name'] self.keys = '' + self.initscriptchanged = False self.configure(rec) @staticmethod @@ -107,9 +111,9 @@ class Worker: def ensure_created(self, rec): """Cause the account specified by to exist if it doesn't already.""" - self._q.put((self._ensure_created, rec.copy())) + self._q.put((self._ensure_created, rec.copy(), Startingup)) - def _ensure_created(self, rec): + def _ensure_created(self, rec, startingup): curr_class = self._get_class() next_class = type_acct_class[rec['type']] if next_class != curr_class: @@ -119,7 +123,14 @@ class Worker: finally: self._create_sem.release() if not isinstance(self._acct, next_class): self._acct = next_class(rec) else: self._acct.configure(rec) - if next_class != curr_class || startingup: + if startingup: + csd_lock.acquire() + global cumstartdelay + delay = cumstartdelay + cumstartdelay += 2 + csd_lock.release() + self._acct.start(delay=delay) + elif next_class != curr_class or self._acct.initscriptchanged: self._acct.start() def ensure_destroyed(self): self._q.put((self._ensure_destroyed,))