X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=plugins%2Freservation.py;h=a81cd04f9f8d2c4ae3037f1866011bc7f61587e3;hb=ecee05390277f57b02d21ffca0195292bde1defa;hp=a0872598e93d1f2b41e963a553c27f38d5eabbc3;hpb=3b803c07f52a5ed6394c965d9a31e73402c439ba;p=nodemanager.git diff --git a/plugins/reservation.py b/plugins/reservation.py index a087259..a81cd04 100644 --- a/plugins/reservation.py +++ b/plugins/reservation.py @@ -1,7 +1,7 @@ -# $Id$ -# $URL$ # # NodeManager plugin - first step of handling reservable nodes +# Thierry Parmentelat +# """ Manages running slices when reservation_policy is 'lease_or_idle' or 'lease_or_shared' @@ -11,7 +11,7 @@ import time import threading import logger -import accounts +import account import database # there is an implicit assumption that this triggers after slicemanager @@ -20,7 +20,7 @@ priority = 45 # this instructs nodemanager that we want to use the latest known data in case the plc link is down persistent_data = True -# of course things would be simpler if node manager was to create one instance of the plugins +# of course things would be simpler if node manager was to create one instance of the plugins # instead of blindly caling functions in the module... ############################## @@ -30,8 +30,8 @@ def Singleton (klass,*args,**kwds): klass._instance=klass(*args,**kwds) return klass._instance -def start(options, conf): - return Singleton(reservation).start(options,conf) +def start(): + return Singleton(reservation).start() def GetSlivers(data, conf = None, plc = None): return Singleton(reservation).GetSlivers(data, conf, plc) @@ -47,21 +47,21 @@ class reservation: self.data = None # this is a dict mapping a raounded timestamp to the corr. Timer object self.timers = {} - + #################### - def start(self,options,conf): + def start(self): logger.log("reservation: plugin performing dummy start...") - # this method is entirely about making sure that we have events scheduled + # this method is entirely about making sure that we have events scheduled # at the intervals where there is a lease that starts or ends def GetSlivers (self, data, conf=None, plc=None): - + # check we're using a compliant GetSlivers - if 'reservation_policy' not in data: + if 'reservation_policy' not in data: logger.log_missing_data("reservation.GetSlivers",'reservation_policy') return - reservation_policy=data['reservation_policy'] - if 'leases' not in data: + self.reservation_policy=data['reservation_policy'] + if 'leases' not in data: logger.log_missing_data("reservation.GetSlivers",'leases') return @@ -70,16 +70,16 @@ class reservation: if data: self.data = data # regular nodes are not affected - if reservation_policy == 'none': + if self.reservation_policy == 'none': return - elif reservation_policy not in ['lease_or_idle','lease_or_shared']: - logger.log("reservation: ignoring -- unexpected value for reservation_policy %r"%reservation_policy) + elif self.reservation_policy not in ['lease_or_idle','lease_or_shared']: + logger.log("reservation: ignoring -- unexpected value for reservation_policy %r"%self.reservation_policy) return # at this point we have reservation_policy in ['lease_or_idle','lease_or_shared'] # we make no difference for now - logger.verbose('reservation.GetSlivers : reservable node -- listing timers ') - + logger.log("reservation.GetSlivers: reservable node -- policy=%s"%self.reservation_policy) self.sync_timers_from_leases() + logger.log("reservation.GetSlivers: listing timers") if reservation.debug: self.list_timers() @@ -107,29 +107,43 @@ class reservation: def sync_timers_from_leases (self): self.clear_timers() for lease in self.data['leases']: - self.ensure_timer(lease['t_from']) - self.ensure_timer(lease['t_until']) + self.ensure_timer_from_until(lease['t_from'],lease['t_until']) + + # assuming t1