Can disable slice HTB's via PLC_SlICE_PREFIX+_default: sliceattribute net_max_rate=-1
authorFaiyaz Ahmed <faiyaza@cs.princeton.edu>
Thu, 22 Jan 2009 18:42:17 +0000 (18:42 +0000)
committerFaiyaz Ahmed <faiyaza@cs.princeton.edu>
Thu, 22 Jan 2009 18:42:17 +0000 (18:42 +0000)
bwmon.py

index 63a2d34..495fabd 100644 (file)
--- a/bwmon.py
+++ b/bwmon.py
@@ -474,7 +474,7 @@ def sync(nmdbcopy):
 
     # Incase default isn't set yet.
     if default_MaxRate == -1:
-        default_MaxRate = 1000000
+        default_MaxRate = 10000000
 
     try:
         f = open(datafile, "r+")
@@ -648,6 +648,29 @@ def sync(nmdbcopy):
     pickle.dump((version, slices, deaddb), f)
     f.close()
 
+def getDefaults(nmdbcopy):
+    '''
+    Get defaults from default slice's slice attributes.
+    '''
+    status = True
+    # default slice
+    dfltslice = nmdbcopy.get(PLC_SLICE_PREFIX+"_default")
+    if dfltslice: 
+        if dfltslice['rspec']['net_max_rate'] == -1:
+            allOff()
+            status = False
+    return status
+
+def allOff():
+   # Get/set special slice IDs
+    root_xid = bwlimit.get_xid("root")
+    default_xid = bwlimit.get_xid("default")
+    kernelhtbs = gethtbs(root_xid, default_xid)
+    if len(kernelhtbs):
+        logger.log("bwlimit:  Disabling all running HTBs.")
+        for htb in kernelhtbs.keys(): bwlimit.off(htb) 
+
+
 lock = threading.Event()
 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."""
@@ -658,7 +681,9 @@ def run():
         database.db_lock.acquire()
         nmdbcopy = copy.deepcopy(database.db)
         database.db_lock.release()
-        try:  sync(nmdbcopy)
+        try:  
+            if getDefaults(nmdbcopy): sync(nmdbcopy)
+            else: logger.log("bwmon:  DISABLED.")
         except: logger.log_exc()
         lock.clear()