# Faiyaz Ahmed <faiyaza@cs.princeton.edu>
# 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
bits_per_byte = 8
# Defaults
-debug = False
+debug = True
verbose = False
datafile = "/var/lib/misc/bwmon.dat"
#nm = None
(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 = {}
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__() )
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
# 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'])
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}}