# Faiyaz Ahmed <faiyaza@cs.princeton.edu>
# Copyright (C) 2004-2006 The Trustees of Princeton University
#
-# $Id: bwmon.py,v 1.1.2.6 2007/04/23 19:47:50 faiyaza Exp $
+# $Id: bwmon.py,v 1.18 2007/04/25 22:19:59 faiyaza Exp $
#
import os
'period': format_period(period)}
if usedbytes >= (self.bytes + (self.ThreshKByte * 1024)):
+ if verbose:
+ logger.log("bwmon: %s over thresh %s" \
+ % (self.name, format_bytes(self.ThreshKByte * 1024)))
sum = self.bytes + (self.ThreshKByte * 1024)
maxbyte = self.MaxKByte * 1024
bytesused = usedbytes - self.bytes
params['class'] = "low bandwidth"
params['bytes'] = format_bytes(usedbytes - self.bytes)
params['limit'] = format_bytes(self.MaxKByte * 1024)
+ params['thresh'] = format_bytes(self.ThreshKByte * 1024)
params['new_maxrate'] = bwlimit.format_tc_rate(new_maxrate)
if verbose:
logger.log("bwmon: %(slice)s %(class)s " \
- "%(bytes)s of %(limit)s (%(new_maxrate)s/s maxrate)" % \
+ "%(bytes)s of %(limit)s max %(thresh)s thresh (%(new_maxrate)s/s maxrate)" % \
params)
# Cap low bandwidth burst rate
(version, slices) = pickle.load(f)
f.close()
# Check version of data file
- if version != "$Id: bwmon.py,v 1.1.2.6 2007/04/23 19:47:50 faiyaza Exp $":
+ if version != "$Id: bwmon.py,v 1.18 2007/04/25 22:19:59 faiyaza Exp $":
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.6 2007/04/23 19:47:50 faiyaza Exp $"
+ version = "$Id: bwmon.py,v 1.18 2007/04/25 22:19:59 faiyaza Exp $"
slices = {}
# Get/set special slice IDs
for plcxid in live.keys():
if plcxid not in slices.keys():
newslicesxids.append(plcxid)
+
#newslicesxids = Set(live.keys()) - Set(slices.keys())
for newslicexid in newslicesxids:
# Delegated slices dont have xids (which are uids) since they haven't been
slices[newslicexid].reset(0, 0, 0, 0, rspec)
else:
logger.log("bwmon Slice %s doesn't have xid. Must be delegated. Skipping." % live[newslicexid])
+
+ # ...mlhuang's abortion....
# Get actual running values from tc.
# Update slice totals and bandwidth.
for params in bwlimit.get():
#xid is populated from bwlimit (read from /etc/passwd)
if slices.has_key(xid):
slice = slices[xid]
+ # Old slices werent being instanciated correctly because
+ # the HTBs were still pleasent, but the slice in bwmon would
+ # have the byte counts set to 0. The next time update was run
+ # the real byte count would be sent to update, causing the bw cap.
+
if time.time() >= (slice.time + period) or \
- usedbytes < slice.bytes or usedi2bytes < slice.i2bytes:
+ usedbytes < slice.bytes or \
+ usedi2bytes < slice.i2bytes or \
+ xid in newslicesxids:
# Reset to defaults every 24 hours or if it appears
# that the byte counters have overflowed (or, more
# likely, the node was restarted or the HTB buckets
else:
# Just in case. Probably (hopefully) this will never happen.
# New slice, initialize state
- logger.log("bwmon: New Slice %s" % name)
- slice = slices[xid] = Slice(xid, name, db[slice.name]['_rspec'])
- slice.reset(maxrate, \
- maxexemptrate, \
- usedbytes, \
- usedi2bytes, \
- db[slice.name]['_rspec'])
+ logger.log("bwmon: Deleting orphaned slice xid %s" % xid)
+ bwlimit.off(xid)
# Delete dead slices
dead = Set(slices.keys()) - Set(live.keys())