#!/usr/bin/python
#
-# $Id$
-# $URL$
-#
# Useful information can be found at https://svn.planet-lab.org/wiki/NodeManager
#
import socket
import os
import sys
-import resource
import glob
import pickle
+import random
+import resource
import logger
import tools
from config import Config
from plcapi import PLCAPI
-import random
class NodeManager:
parser = optparse.OptionParser()
parser.add_option('-d', '--daemon', action='store_true', dest='daemon', default=False,
help='run daemonized')
- parser.add_option('-s', '--startup', action='store_true', dest='startup', default=False,
- help='run all sliver startup scripts')
parser.add_option('-f', '--config', action='store', dest='config', default='/etc/planetlab/plc_config',
help='PLC configuration file')
parser.add_option('-k', '--session', action='store', dest='session', default='/etc/planetlab/session',
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
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__)
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)
try:
m = __import__(module)
logger.verbose("nodemanager: triggering %s.start"%m.__name__)
- m.start(self.options, config)
+ m.start()
self.loaded_modules.append(m)
except ImportError, err:
- print "Warning while loading module %s:" % module, err
+ logger.log_exc ("ERROR while loading module %s - skipping:" % module)
+ # if we fail to load any of these, it's really no need to go on any further
+ if module in NodeManager.core_modules:
+ logger.log("FATAL : failed to load core module %s"%module)
# sort on priority (lower first)
def sort_module_priority (m1,m2):
while True:
# Main nodemanager Loop
+ work_beg=time.time()
logger.log('nodemanager: mainloop - calling GetSlivers - period=%d random=%d'%(iperiod,irandom))
self.GetSlivers(config, plc)
delay=iperiod + random.randrange(0,irandom)
- logger.log('nodemanager: mainloop - sleeping for %d s'%delay)
+ work_end=time.time()
+ work_duration=int(work_end-work_beg)
+ logger.log('nodemanager: mainloop has worked for %s s - sleeping for %d s'%(work_duration,delay))
time.sleep(delay)
except: logger.log_exc("nodemanager: failed in run")