[tor-commits] [torflow/master] Tweak a regex and add some log lines.

mikeperry at torproject.org mikeperry at torproject.org
Thu Nov 17 23:50:09 UTC 2011


commit e37aedf5c87296f05023f74e6ce7360bc56bb147
Author: Mike Perry <mikeperry-git at fscked.org>
Date:   Sat Nov 12 13:13:13 2011 -0800

    Tweak a regex and add some log lines.
---
 NetworkScanners/BwAuthority/aggregate.py |   19 +++++++++++++------
 1 files changed, 13 insertions(+), 6 deletions(-)

diff --git a/NetworkScanners/BwAuthority/aggregate.py b/NetworkScanners/BwAuthority/aggregate.py
index d1c8b45..53f8dd7 100755
--- a/NetworkScanners/BwAuthority/aggregate.py
+++ b/NetworkScanners/BwAuthority/aggregate.py
@@ -95,7 +95,7 @@ class Node:
     self.strm_fail_rate = 0
 
   def revert_to_vote(self, vote):
-    self.new_bw = vote.bw*1000
+    self.new_bw = vote.bw*1000 # XXX: Could be 0?
     self.pid_bw = vote.pid_bw
     self.pid_error = vote.pid_error
     self.measured_at = vote.measured_at
@@ -168,7 +168,7 @@ class Vote:
     # node_id=$DB8C6D8E0D51A42BDDA81A9B8A735B41B2CF95D1 bw=231000 diff=209281 nick=rainbowwarrior measured_at=1319822504
     self.idhex = re.search("[\s]*node_id=([\S]+)[\s]*", line).group(1)
     self.nick = re.search("[\s]*nick=([\S]+)[\s]*", line).group(1)
-    self.bw = int(re.search("[\s]*bw=([\S]+)[\s]*", line).group(1))
+    self.bw = int(re.search("[\s]+bw=([\S]+)[\s]*", line).group(1))
     self.measured_at = int(re.search("[\s]*measured_at=([\S]+)[\s]*", line).group(1))
     try:
       self.pid_error = float(re.search("[\s]*pid_error=([\S]+)[\s]*", line).group(1))
@@ -359,11 +359,13 @@ def main(argv):
     # Penalize nodes for circuit failure: it indicates CPU pressure
     # TODO: Potentially penalize for stream failure, if we run into
     # socket exhaustion issues..
+    plog("INFO", "PID control enabled")
     true_filt_avg = sum(map(lambda n: n.filt_bw*(1.0-n.circ_fail_rate),
                          nodes.itervalues()))/float(len(nodes))
     true_strm_avg = sum(map(lambda n: n.strm_bw*(1.0-n.circ_fail_rate),
                          nodes.itervalues()))/float(len(nodes))
   else:
+    plog("INFO", "PID control disabled")
     true_filt_avg = sum(map(lambda n: n.filt_bw,
                          nodes.itervalues()))/float(len(nodes))
     true_strm_avg = sum(map(lambda n: n.strm_bw,
@@ -381,7 +383,8 @@ def main(argv):
     node_measure_time = 0
     for n in nodes.itervalues():
       if n.idhex in prev_votes.vote_map and n.idhex in prev_consensus:
-        if "Guard" in prev_consensus[n.idhex].flags:
+        if "Guard" in prev_consensus[n.idhex].flags and \
+           "Exit" not in prev_consensus[n.idhex].flags:
           guard_cnt += 1
           guard_measure_time += (n.measured_at - \
                                   prev_votes.vote_map[n.idhex].measured_at)
@@ -448,6 +451,7 @@ def main(argv):
               n.new_bw = n.get_pid_bw(prev_votes.vote_map[n.idhex], K_p)
         else:
           # Reset values. Don't vote/sample this measurement round.
+          # XXX: This possibly breaks guards
           n.revert_to_vote(prev_votes.vote_map[n.idhex])
       else: # No prev vote, pure consensus feedback this round
         n.new_bw = n.ns_bw + K_p*n.ns_bw*n.pid_error
@@ -492,9 +496,12 @@ def main(argv):
            +str(n.new_bw)+"->"+str(int(tot_net_bw*NODE_CAP))+")")
       n.new_bw = int(tot_net_bw*NODE_CAP)
       n.pid_error_sum = 0 # Don't let unused error accumulate...
-    if n.new_bw < 0:
-      plog("INFO", "Node "+n.idhex+"="+n.nick+" has bandwidth < 0: "+str(n.new_bw))
-      n.new_bw = 0
+    if n.new_bw <= 0:
+      if n.idhex in prev_consensus:
+        plog("INFO", str(prev_consensus[n.idhex].flags)+" node "+n.idhex+"="+n.nick+" has bandwidth <= 0: "+str(n.new_bw))
+      else:
+        plog("INFO", "New node "+n.idhex+"="+n.nick+" has bandwidth < 0: "+str(n.new_bw))
+      n.new_bw = 1
 
   # WTF is going on here?
   oldest_timestamp = min(map(lambda n: n.measured_at,





More information about the tor-commits mailing list