From 0b55e122a86da84ac10f54c3e990b166eb7139ab Mon Sep 17 00:00:00 2001 From: Thierry Parmentelat <thierry.parmentelat@sophia.inria.fr> Date: Fri, 25 Jun 2010 16:30:36 +0000 Subject: [PATCH] first working code for reservations --- accounts.py | 24 +++++++++++++++++++++--- nodemanager.py | 11 ----------- 2 files changed, 21 insertions(+), 14 deletions(-) diff --git a/accounts.py b/accounts.py index a9461d1..59ecedb 100644 --- a/accounts.py +++ b/accounts.py @@ -142,9 +142,24 @@ If still valid, check if running and configure/start if not.""" finally: create_sem.release() if not isinstance(self._acct, next_class): self._acct = next_class(rec) logger.verbose("accounts.ensure_created: %s, running=%r"%(self.name,self.is_running())) - if not self.is_running() or next_class != curr_class: - self.start(rec) - else: self._acct.configure(rec) + + # reservation_alive is set on reervable nodes, and its value is a boolean + if 'reservation_alive' in rec: + # reservable nodes + if rec['reservation_alive']: + # this sliver has the lease, it is safe to start it + if not self.is_running(): self.start(rec) + else: self.configure(rec) + else: + # not having the lease, do not start it + self.configure(rec) + # usual nodes - preserve old code + # xxx it's not clear what to do when a sliver changes type/class + # in a reservable node + else: + if not self.is_running() or next_class != curr_class: + self.start(rec) + else: self.configure(rec) def ensure_destroyed(self): self._destroy(self._get_class()) @@ -152,6 +167,9 @@ If still valid, check if running and configure/start if not.""" self._acct.configure(rec) self._acct.start(delay=d) + def configure(self, rec): + self._acct.configure(rec) + def stop(self): self._acct.stop() def is_running(self): diff --git a/nodemanager.py b/nodemanager.py index 09bb3bb..899bd64 100755 --- a/nodemanager.py +++ b/nodemanager.py @@ -95,8 +95,6 @@ class NodeManager: self.getPLCDefaults(data, config) # tweak the 'vref' attribute from GetSliceFamily self.setSliversVref (data) - # check leases and adjust the 'alive' field in slivers - self.adjustReservedSlivers (data) # dump it too, so it can be retrieved later in case of comm. failure self.dumpSlivers(data) # log it for debug purposes, no matter what verbose is @@ -110,8 +108,6 @@ class NodeManager: data = {} # for modules that request it though the 'persistent_data' property last_data=self.loadSlivers() - # adjust again with current time - self.adjustReservedSlivers (data) # Invoke GetSlivers() functions from the callback modules for module in self.loaded_modules: logger.verbose('nodemanager: triggering %s.GetSlivers'%module.__name__) @@ -160,13 +156,6 @@ class NodeManager: except: logger.log_exc("nodemanager: Could not overwrite 'vref' attribute from 'GetSliceFamily'",name=sliver['name']) - def adjustReservedSlivers (self, data): - """ - On reservable nodes, tweak the 'alive' field to instruct cyclic loop - about what to do with slivers. - """ - pass - def dumpSlivers (self, slivers): f = open(NodeManager.DB_FILE, "w") logger.log ("nodemanager: saving successfully fetched GetSlivers in %s" % NodeManager.DB_FILE) -- 2.47.0