[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