URL fix.
[nodemanager.git] / bwmon.py
index ccde6fe..5517f34 100644 (file)
--- a/bwmon.py
+++ b/bwmon.py
@@ -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
@@ -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}}