X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=accounts.py;h=0a3509a2618352bb8c39592826f2ef65daee17e7;hb=refs%2Fheads%2Fplanetlab-4_0-branch;hp=1b8c8a8bee10ffb56f83b212bcbd1ef36c2cc781;hpb=f211fe036f17f4758df731fc6d8dbf3d64ca96ac;p=nodemanager.git diff --git a/accounts.py b/accounts.py index 1b8c8a8..0a3509a 100644 --- a/accounts.py +++ b/accounts.py @@ -29,6 +29,12 @@ import logger import tools +# When this variable is true, start after any ensure_created +Startingup = False +# Cumulative delay for starts when Startingup is true +csd_lock = threading.Lock() +cumstartdelay = 0 + # shell path -> account class association shell_acct_class = {} # account type -> account class association @@ -64,6 +70,7 @@ class Account: def __init__(self, rec): self.name = rec['name'] self.keys = '' + self.initscriptchanged = False self.configure(rec) @staticmethod @@ -104,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: @@ -116,7 +123,15 @@ 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: self._acct.start() + 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,)) def _ensure_destroyed(self): self._destroy(self._get_class())