From: Thierry Parmentelat Date: Fri, 11 Jun 2010 15:07:50 +0000 (+0000) Subject: cosmetic X-Git-Tag: NodeManager-2.0-9~4 X-Git-Url: http://git.onelab.eu/?p=nodemanager.git;a=commitdiff_plain;h=fc854ce9e3bb24319df3f95545c5764647af6f73 cosmetic --- diff --git a/accounts.py b/accounts.py index 2afa333..c064ec6 100644 --- a/accounts.py +++ b/accounts.py @@ -133,8 +133,8 @@ class Worker: self._acct = None # the account object currently associated with this worker def ensure_created(self, rec, startingup = Startingup): - """Check account type is still valid. If not, recreate sliver. If still valid, - check if running and configure/start if not.""" + """Check account type is still valid. If not, recreate sliver. +If still valid, check if running and configure/start if not.""" curr_class = self._get_class() next_class = type_acct_class[rec['type']] if next_class != curr_class: diff --git a/bwmon.py b/bwmon.py index a65ca9d..855767e 100644 --- a/bwmon.py +++ b/bwmon.py @@ -46,8 +46,8 @@ try: from plc_config import * except: DEBUG = True - logger.log("bwmon: Warning: Configuration file /etc/planetlab/plc_config.py not found", 2) - logger.log("bwmon: Running in DEBUG mode. Logging to file and not emailing.", 1) + logger.verbose("bwmon: Warning: Configuration file /etc/planetlab/plc_config.py not found") + logger.log("bwmon: Running in DEBUG mode. Logging to file and not emailing.") # Constants seconds_per_day = 24 * 60 * 60 @@ -322,9 +322,9 @@ class Slice: (mini2rate != runningrates.get('minexemptrate', 0)) or \ (self.Share != runningrates.get('share', 0)): logger.log("bwmon: %s reset to %s/%s" % \ - (self.name, - bwlimit.format_tc_rate(maxrate), - bwlimit.format_tc_rate(maxi2rate)), 1) + (self.name, + bwlimit.format_tc_rate(maxrate), + bwlimit.format_tc_rate(maxi2rate))) bwlimit.set(xid = self.xid, dev = dev_default, minrate = self.MinRate * 1000, maxrate = self.MaxRate * 1000, @@ -465,7 +465,7 @@ def gethtbs(root_xid, default_xid): and (xid != default_xid): # Orphaned (not associated with a slice) class name = "%d?" % xid - logger.log("bwmon: Found orphaned HTB %s. Removing." %name, 1) + logger.log("bwmon: Found orphaned HTB %s. Removing." %name) bwlimit.off(xid) livehtbs[xid] = {'share': share, @@ -506,7 +506,7 @@ def sync(nmdbcopy): try: f = open(DB_FILE, "r+") - logger.log("bwmon: Loading %s" % DB_FILE, 2) + logger.verbose("bwmon: Loading %s" % DB_FILE) (version, slices, deaddb) = pickle.load(f) f.close() # Check version of data file @@ -539,17 +539,17 @@ def sync(nmdbcopy): for plcSliver in nmdbcopy.keys(): live[bwlimit.get_xid(plcSliver)] = nmdbcopy[plcSliver] - logger.log("bwmon: Found %s instantiated slices" % live.keys().__len__(), 2) - logger.log("bwmon: Found %s slices in dat file" % slices.values().__len__(), 2) + logger.verbose("bwmon: Found %s instantiated slices" % live.keys().__len__()) + logger.verbose("bwmon: Found %s slices in dat file" % slices.values().__len__()) # Get actual running values from tc. # Update slice totals and bandwidth. {xid: {values}} kernelhtbs = gethtbs(root_xid, default_xid) - logger.log("bwmon: Found %s running HTBs" % kernelhtbs.keys().__len__(), 2) + logger.verbose("bwmon: Found %s running HTBs" % kernelhtbs.keys().__len__()) # The dat file has HTBs for slices, but the HTBs aren't running nohtbslices = set(slices.keys()) - set(kernelhtbs.keys()) - logger.log( "bwmon: Found %s slices in dat but not running." % nohtbslices.__len__(), 2) + logger.verbose( "bwmon: Found %s slices in dat but not running." % nohtbslices.__len__()) # Reset tc counts. for nohtbslice in nohtbslices: if live.has_key(nohtbslice): @@ -560,7 +560,7 @@ def sync(nmdbcopy): # The dat file doesnt have HTB for the slice but kern has HTB slicesnodat = set(kernelhtbs.keys()) - set(slices.keys()) - logger.log( "bwmon: Found %s slices with HTBs but not in dat" % slicesnodat.__len__(), 2) + logger.verbose( "bwmon: Found %s slices with HTBs but not in dat" % slicesnodat.__len__()) for slicenodat in slicesnodat: # But slice is running if live.has_key(slicenodat): @@ -573,7 +573,7 @@ def sync(nmdbcopy): # Get new slices. # Slices in GetSlivers but not running HTBs newslicesxids = set(live.keys()) - set(kernelhtbs.keys()) - logger.log("bwmon: Found %s new slices" % newslicesxids.__len__(), 2) + logger.verbose("bwmon: Found %s new slices" % newslicesxids.__len__()) # Setup new slices for newslice in newslicesxids: @@ -614,7 +614,7 @@ def sync(nmdbcopy): # recording period is over. This is to avoid the case where a slice is dynamically created # and destroyed then recreated to get around byte limits. deadxids = set(slices.keys()) - set(live.keys()) - logger.log("bwmon: Found %s dead slices" % (deadxids.__len__() - 2), 2) + logger.verbose("bwmon: Found %s dead slices" % (deadxids.__len__() - 2)) for deadxid in deadxids: if deadxid == root_xid or deadxid == default_xid: continue @@ -625,7 +625,7 @@ def sync(nmdbcopy): deaddb[slices[deadxid].name] = {'slice': slices[deadxid], 'htb': kernelhtbs[deadxid]} del slices[deadxid] if kernelhtbs.has_key(deadxid): - logger.log("bwmon: Removing HTB for %s." % deadxid, 2) + logger.verbose("bwmon: Removing HTB for %s." % deadxid) bwlimit.off(deadxid) # Clean up deaddb @@ -638,7 +638,7 @@ def sync(nmdbcopy): # Get actual running values from tc since we've added and removed buckets. # Update slice totals and bandwidth. {xid: {values}} kernelhtbs = gethtbs(root_xid, default_xid) - logger.log("bwmon: now %s running HTBs" % kernelhtbs.keys().__len__(), 2) + logger.verbose("bwmon: now %s running HTBs" % kernelhtbs.keys().__len__()) # Update all byte limites on all slices for (xid, slice) in slices.iteritems(): @@ -656,11 +656,11 @@ def sync(nmdbcopy): # were re-initialized). slice.reset(kernelhtbs[xid], live[xid]['_rspec']) elif ENABLE: - logger.log("bwmon: Updating slice %s" % slice.name, 2) + logger.verbose("bwmon: Updating slice %s" % slice.name) # Update byte counts slice.update(kernelhtbs[xid], live[xid]['_rspec']) - logger.log("bwmon: Saving %s slices in %s" % (slices.keys().__len__(),DB_FILE), 2) + logger.verbose("bwmon: Saving %s slices in %s" % (slices.keys().__len__(),DB_FILE)) f = open(DB_FILE, "w") pickle.dump((version, slices, deaddb), f) f.close() @@ -700,10 +700,10 @@ def run(): When run as a thread, wait for event, lock db, deep copy it, release it, run bwmon.GetSlivers(), then go back to waiting. """ - logger.log("bwmon: Thread started", 2) + logger.verbose("bwmon: Thread started") while True: lock.wait() - logger.log("bwmon: Event received. Running.", 2) + logger.verbose("bwmon: Event received. Running.") database.db_lock.acquire() nmdbcopy = copy.deepcopy(database.db) database.db_lock.release() diff --git a/logger.py b/logger.py index b56c0e1..b30031f 100644 --- a/logger.py +++ b/logger.py @@ -92,12 +92,14 @@ class Buffer: # time out in seconds - avoid hanging subprocesses - default is 5 minutes default_timeout_minutes=5 +# returns a bool that is True when everything goes fine and the retcod is 0 def log_call(command,timeout=default_timeout_minutes*60,poll=1): message=" ".join(command) log("log_call: running command %s" % message) verbose("log_call: timeout=%r s" % timeout) verbose("log_call: poll=%r s" % poll) trigger=time.time()+timeout + result = False try: child = subprocess.Popen(command, bufsize=1, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, close_fds=True) @@ -113,16 +115,18 @@ def log_call(command,timeout=default_timeout_minutes*60,poll=1): buffer.flush() # child is done and return 0 if returncode == 0: - log("log_call: command completed (%s)" % message) + log("log_call:end command (%s) completed" % message) + result=True break # child has failed else: - log("log_call: command return=%d (%s)" %(returncode,message)) - raise Exception("log_call: failed with returncode %d"%returncode) + log("log_call:end command (%s) returned with code %d" %(message,returncode)) + break # no : still within timeout ? if time.time() >= trigger: buffer.flush() child.terminate() - raise Exception("log_call: terminated command - exceeded timeout %d s"%timeout) + log("log_call:end terminating command (%s) - exceeded timeout %d s"%(message,timeout)) + break except: log_exc("failed to run command %s" % message) - + return result diff --git a/nodemanager.py b/nodemanager.py index aca670d..8e5c2ec 100755 --- a/nodemanager.py +++ b/nodemanager.py @@ -49,16 +49,22 @@ class NodeManager: def __init__ (self): 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', help='API session key (or file)') + 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', + help='API session key (or file)') parser.add_option('-p', '--period', action='store', dest='period', default=NodeManager.default_period, help='Polling interval (sec) - default %d'%NodeManager.default_period) parser.add_option('-r', '--random', action='store', dest='random', default=NodeManager.default_random, help='Range for additional random polling interval (sec) -- default %d'%NodeManager.default_random) - parser.add_option('-v', '--verbose', action='store_true', dest='verbose', default=False, help='more verbose log') - parser.add_option('-P', '--path', action='store', dest='path', default=NodeManager.PLUGIN_PATH, help='Path to plugins directory') + parser.add_option('-v', '--verbose', action='store_true', dest='verbose', default=False, + help='more verbose log') + parser.add_option('-P', '--path', action='store', dest='path', default=NodeManager.PLUGIN_PATH, + help='Path to plugins directory') # NOTE: BUG the 'help' for this parser.add_option() wont list plugins from the --path argument parser.add_option('-m', '--module', action='store', dest='user_module', default='', help='run a single module') diff --git a/sliver_vs.py b/sliver_vs.py index 65da873..0bdc30f 100644 --- a/sliver_vs.py +++ b/sliver_vs.py @@ -23,15 +23,13 @@ import errno import traceback import os, os.path import time +from threading import BoundedSemaphore import vserver import accounts import logger import tools -from threading import BoundedSemaphore - -globalsem = BoundedSemaphore() # special constant that tells vserver to keep its existing settings KEEP_LIMIT = vserver.VC_LIM_KEEP @@ -50,7 +48,7 @@ class Sliver_VS(accounts.Account, vserver.VServer): SHELL = '/bin/vsh' TYPE = 'sliver.VServer' - _init_disk_info_sem = globalsem + _init_disk_info_sem = BoundedSemaphore() def __init__(self, rec): name=rec['name']