[tor-commits] [bridgedb/master] 5482 - Do not update database inside query loop.

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


commit 64230a4ecc6bc97932d70cddd0871d3d2108bab6
Author: aagbsn <aagbsn at extc.org>
Date:   Mon Nov 5 13:37:30 2012 -0800

    5482 - Do not update database inside query loop.
    
    Fixes a bug where updated BridgeHistory objects are not stored in the
    db.
---
 lib/bridgedb/Stability.py |   21 +++++++++++++--------
 1 files changed, 13 insertions(+), 8 deletions(-)

diff --git a/lib/bridgedb/Stability.py b/lib/bridgedb/Stability.py
index bdc4a4a..0f217a7 100644
--- a/lib/bridgedb/Stability.py
+++ b/lib/bridgedb/Stability.py
@@ -174,9 +174,12 @@ def addOrUpdateBridgeHistory(bridge, timestamp):
     
     # 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
-        db.updateIntoBridgeHistory(bh)
+        toupdate.append(bh)
+    [ db.updateIntoBridgeHistory(bh) for bh in toupdate ]
 
     # For Running Bridges only:
     # compare the stored history against the descriptor and see if the
@@ -207,23 +210,25 @@ def addOrUpdateBridgeHistory(bridge, timestamp):
 def discountAndPruneBridgeHistories(discountUntilMillis):
     db = bridgedb.Storage.getDB()
     bhToRemove = []
+    bhToUpdate = []
     # Just check the first item to see if we're anywhere close yet
     sample = None
     for y in db.getAllBridgeHistory():
         sample = y
         break
-    if not sample: return 0
+    if not sample: return
 
-    if discountUntilMillis - sample.lastDiscountedHistoryValues < discountIntervalMillis:
-        return 0
+    if discountUntilMillis - sample.lastDiscountedHistoryValues \
+            < discountIntervalMillis: return
     for bh in db.getAllBridgeHistory():
         # discount previous values by factor of 0.95 every 12 hours
         bh.discountWeightedFractionalUptimeAndWeightedTime(discountUntilMillis)
 
-        if (bh.weightedTime != 0 and (bh.weightedUptime * 10000 / bh.weightedTime) < 1):
-            bhToRemove.append(k)
+        if (bh.weightedTime != 0 and bh.weightedUptime != 0 and (bh.weightedUptime * 10000 / bh.weightedTime) < 1):
+            logging.debug("Removing bridge from history: %s" % bh.fingerprint)
+            bhToRemove.append(bh.fingerprint)
         else:
-            db.updateIntoBridgeHistory(bh)
-
+            bhToUpdate.append(bh)
+    for k in bhToUpdate: db.updateIntoBridgeHistory(k)
     # prune items
     for k in bhToRemove: db.delBridgeHistory(k)





More information about the tor-commits mailing list