[tor-commits] [torflow/master] Workaround strange issue with unmeasured flag parsing.

mikeperry at torproject.org mikeperry at torproject.org
Mon Jun 1 05:37:44 UTC 2015


commit a06038c682c9861c651bad798d27cb5096bf6db6
Author: Mike Perry <mikeperry-git at torproject.org>
Date:   Sun May 31 19:17:52 2015 -0700

    Workaround strange issue with unmeasured flag parsing.
    
    It seems like consensus/newdesc events are causing TorCtl to reset the
    unmeasured flag when we shouldn't be. That is a TorCtl bug, but since there
    may also be memory bloat issues with leaving the bwauthority_child processes
    around anyway, just exit and let the parent restart the slice with a clean
    consensus.
---
 NetworkScanners/BwAuthority/bwauthority.py       |    6 ++++++
 NetworkScanners/BwAuthority/bwauthority_child.py |   17 +++++++++--------
 2 files changed, 15 insertions(+), 8 deletions(-)

diff --git a/NetworkScanners/BwAuthority/bwauthority.py b/NetworkScanners/BwAuthority/bwauthority.py
index e190e7d..6a04542 100755
--- a/NetworkScanners/BwAuthority/bwauthority.py
+++ b/NetworkScanners/BwAuthority/bwauthority.py
@@ -12,11 +12,14 @@ from signal import signal, SIGTERM, SIGKILL
 # exit code to indicate scan completion
 # make sure to update this in bwauthority_child.py as well
 STOP_PCT_REACHED = 9
+RESTART_SLICE = 1
 
 # path to git repos (.git)
 PATH_TO_TORFLOW_REPO = '../../.git/'
 PATH_TO_TORCTL_REPO = '../../.git/modules/TorCtl/'
 
+p = None
+
 def main(argv):
   (branch, head) = get_git_version(PATH_TO_TORFLOW_REPO)
   plog('INFO', 'TorFlow Version: %s' % branch+' '+head)
@@ -30,6 +33,8 @@ def main(argv):
     p.wait()
     if (p.returncode == 0):
       slice_num += 1
+    elif (p.returncode == RESTART_SLICE):
+      plog('INFO', 'restarting slice_num '+str(slice_num))
     elif (p.returncode == STOP_PCT_REACHED):
       plog('INFO', 'restarting from slice 0')
       slice_num = 0
@@ -60,6 +65,7 @@ if __name__ == '__main__':
   try:
     main(s_argv)
   except KeyboardInterrupt:
+    global p
     p.kill()
     plog('INFO', "Ctrl + C was pressed. Exiting ... ")
   except Exception, e:
diff --git a/NetworkScanners/BwAuthority/bwauthority_child.py b/NetworkScanners/BwAuthority/bwauthority_child.py
index 1c5a0c1..a42a9b5 100755
--- a/NetworkScanners/BwAuthority/bwauthority_child.py
+++ b/NetworkScanners/BwAuthority/bwauthority_child.py
@@ -72,6 +72,7 @@ __selmgr = PathSupport.SelectionManager(
 # exit code to indicate scan completion
 # make sure to update this in bwauthority.py as well
 STOP_PCT_REACHED = 9
+RESTART_SLICE = 1
 
 def read_config(filename):
   config = ConfigParser.SafeConfigParser()
@@ -343,14 +344,6 @@ def main(argv):
 
     hdlr.wait_for_consensus()
 
-    # We should go to sleep if there are less than 5 unmeasured nodes after
-    # consensus update
-    while min_unmeasured and hdlr.get_unmeasured() < min_unmeasured:
-      plog("NOTICE", "Less than "+str(min_unmeasured)+" unmeasured nodes ("+str(hdlr.get_unmeasured())+"). Sleeping for a bit")
-      time.sleep(3600) # Until next consensus arrives
-      plog("NOTICE", "Woke up from waiting for more unmeasured nodes. Getting consensus and checking again")
-      hdlr.wait_for_consensus()
-
     # Now that we have the consensus, we shouldn't need to listen
     # for new consensus events.
     c.set_events([TorCtl.EVENT_TYPE.STREAM,
@@ -358,6 +351,14 @@ def main(argv):
           TorCtl.EVENT_TYPE.CIRC,
           TorCtl.EVENT_TYPE.STREAM_BW], True)
 
+    # We should go to sleep if there are less than 5 unmeasured nodes after
+    # consensus update
+    if min_unmeasured and hdlr.get_unmeasured() < min_unmeasured:
+      plog("NOTICE", "Less than "+str(min_unmeasured)+" unmeasured nodes ("+str(hdlr.get_unmeasured())+"). Sleeping for a bit")
+      time.sleep(3600) # Until next consensus arrives
+      plog("NOTICE", "Woke up from waiting for more unmeasured nodes.  Requesting slice restart.")
+      sys.exit(RESTART_SLICE)
+
     pct_step = hdlr.rank_to_percent(nodes_per_slice)
     plog("INFO", "Percent per slice is: "+str(pct_step))
     if pct_step > 100: pct_step = 100



More information about the tor-commits mailing list