X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=bwmon.py;h=ee5d41b2dc3afef272a7615594274abac6e982a2;hb=5c20310810597b3601deca0daf6a3f9cee246fdd;hp=ccde6feca12460614435caf045832abcd8526840;hpb=01ba1fe1ab034ed86e2cd0bec2c42e36f5546a72;p=nodemanager.git diff --git a/bwmon.py b/bwmon.py index ccde6fe..ee5d41b 100644 --- a/bwmon.py +++ b/bwmon.py @@ -14,7 +14,7 @@ # Faiyaz Ahmed # Copyright (C) 2004-2008 The Trustees of Princeton University # -# $Id: bwmon.py,v 1.1.2.11 2007/06/26 18:03:55 faiyaza Exp $ +# $Id$ # import os @@ -47,7 +47,7 @@ seconds_per_day = 24 * 60 * 60 bits_per_byte = 8 # Defaults -debug = False +debug = True verbose = False datafile = "/var/lib/misc/bwmon.dat" #nm = None @@ -465,11 +465,11 @@ def sync(nmdbcopy): (version, slices, deaddb) = pickle.load(f) f.close() # Check version of data file - if version != "$Id: bwmon.py,v 1.1.2.11 2007/06/26 18:03:55 faiyaza Exp $": + if version != "$Id$": logger.log("bwmon: Not using old version '%s' data file %s" % (version, datafile)) raise Exception except Exception: - version = "$Id: bwmon.py,v 1.1.2.11 2007/06/26 18:03:55 faiyaza Exp $" + version = "$Id$" slices = {} deaddb = {} @@ -502,11 +502,6 @@ def sync(nmdbcopy): kernelhtbs = gethtbs(root_xid, default_xid) logger.log("bwmon: Found %s running HTBs" % kernelhtbs.keys().__len__()) - # 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__()) - # 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__() ) @@ -514,7 +509,21 @@ def sync(nmdbcopy): for nohtbslice in nohtbslices: if live.has_key(nohtbslice): slices[nohtbslice].reset( 0, 0, 0, 0, live[nohtbslice]['_rspec'] ) - + + # The dat file doesnt have HTB for the slice, but slice is running and + # HTB exists + slicesnodat = Set(kernelhtbs.keys()) - Set(slices.keys()) + logger.log( "bwmon: Found %s slices with HTBs but not in dat" % slicesnodat.__len__() ) + for slicenodat in slicesnodat: + slices[slicenodat] = Slice(slicenodat, + live[slicenodat]['name'], + live[slicenodat]['_rspec']) + + # 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__()) + # Setup new slices for newslice in newslicesxids: # Delegated slices dont have xids (which are uids) since they haven't been @@ -526,7 +535,7 @@ def sync(nmdbcopy): # and made a dict of computed values. slices[newslice] = Slice(newslice, live[newslice]['name'], live[newslice]['_rspec']) slices[newslice].reset( 0, 0, 0, 0, live[newslice]['_rspec'] ) - # Double check time for dead slice in deaddb is within 24hr recording period. + # Double check time for dead slice in deaddb is within 24hr recording period. elif (time.time() <= (deaddb[live[newslice]['name']]['slice'].time + period)): deadslice = deaddb[live[newslice]['name']] logger.log("bwmon: Reinstantiating deleted slice %s" % live[newslice]['name']) @@ -564,6 +573,12 @@ def sync(nmdbcopy): deaddb[slices[xid].name] = {'slice': slices[xid], 'htb': kernelhtbs[xid]} del slices[xid] if kernelhtbs.has_key(xid): bwlimit.off(xid) + + # Clean up deaddb + for (deadslicexid, deadslice) in deaddb.iteritems(): + if (time.time() >= (deadslice.time() + period)): + logger.log("bwmon: Removing dead slice %s from dat." % deadslice.name) + del deaddb[deadslicexid] # Get actual running values from tc since we've added and removed buckets. # Update slice totals and bandwidth. {xid: {values}}