[tor-commits] [bridgedb/master] 5482 - Refactor weighted time code

aagbsn at torproject.org aagbsn at torproject.org
Wed Apr 17 00:26:44 UTC 2013


commit 8a033f7ddd1937b9aaedcb9fd9f0b97a11339f09
Author: aagbsn <aagbsn at extc.org>
Date:   Mon Nov 12 09:39:51 2012 -0800

    5482 - Refactor weighted time code
---
 lib/bridgedb/Stability.py |   30 +++++++++++++++++-------------
 1 files changed, 17 insertions(+), 13 deletions(-)

diff --git a/lib/bridgedb/Stability.py b/lib/bridgedb/Stability.py
index 3b78fe3..a8a8479 100644
--- a/lib/bridgedb/Stability.py
+++ b/lib/bridgedb/Stability.py
@@ -165,7 +165,7 @@ def addOrUpdateBridgeHistory(bridge, timestamp):
     else:
         secondsSinceLastStatusPublication = \
                 (statusPublicationMillis - bhe.lastSeenWithThisAddressAndPort)/1000
-    if statusPublicationMillis - bhe.lastSeenWithThisAddressAndPort < 0:
+    if secondsSinceLastStatusPublication <= 0 and bhe.weightedTime > 0:
         # old descriptor, bail
         logging.warn("Received old descriptor for bridge %s with timestamp %d",
                 bhe.fingerprint, statusPublicationMillis/1000)
@@ -174,18 +174,8 @@ def addOrUpdateBridgeHistory(bridge, timestamp):
     # iterate over all known bridges and apply weighting factor
     discountAndPruneBridgeHistories(statusPublicationMillis)
     
-    # add or update the descriptor in history
-    db.updateIntoBridgeHistory(bhe)
-    bhe = None
-    
-    # Increment total weighted time for all bridges by seconds since the last
-    # status was published. Note, capped at 1 hour
-    toupdate = []
-
-    for bh in db.getAllBridgeHistory():
-        bh.weightedTime += secondsSinceLastStatusPublication
-        toupdate.append(bh)
-    [ db.updateIntoBridgeHistory(bh) for bh in toupdate ]
+    # Update the weighted times of bridges
+    updateWeightedTime(statusPublicationMillis)
 
     # For Running Bridges only:
     # compare the stored history against the descriptor and see if the
@@ -238,3 +228,17 @@ def discountAndPruneBridgeHistories(discountUntilMillis):
     for k in bhToUpdate: db.updateIntoBridgeHistory(k)
     # prune items
     for k in bhToRemove: db.delBridgeHistory(k)
+
+def updateWeightedTime(statusPublicationMillis):
+    bhToUpdate = []
+    db = bridgedb.Storage.getDB()
+    for bh in db.getBridgesLastUpdatedBefore(statusPublicationMillis):
+        interval = (statusPublicationMillis - bh.lastUpdatedWeightedTime)/1000
+        if interval > 0:
+            bh.weightedTime += min(3600,interval) # cap to 1hr
+            bh.lastUpdatedWeightedTime = statusPublicationMillis
+            #db.updateIntoBridgeHistory(bh)
+            bhToUpdate.append(bh)
+
+    for bh in bhToUpdate:
+        db.updateIntoBridgeHistory(bh)





More information about the tor-commits mailing list