[bridgedb/master] 6175 - Return fewer bridges from shorter rings.

commit e35809195e3cbe8aa8fb877e5b246e190120403c Author: aagbsn <aagbsn@extc.org> Date: Wed Jun 20 04:26:42 2012 -0700 6175 - Return fewer bridges from shorter rings. --- lib/bridgedb/Dist.py | 16 +++++++++++++--- 1 files changed, 13 insertions(+), 3 deletions(-) diff --git a/lib/bridgedb/Dist.py b/lib/bridgedb/Dist.py index ec13fb5..0241c32 100644 --- a/lib/bridgedb/Dist.py +++ b/lib/bridgedb/Dist.py @@ -31,6 +31,15 @@ def uniformMap(ip): else: return ".".join( ip.split(".")[:3] ) +def getNumBridgesPerAnswer(ring, max_bridges_per_answer=3): + if len(ring) < 20: n_bridges_per_answer = 1 + if 20 < len(ring) < 100: n_bridges_per_answer = min(2, max_bridges_per_answer) + if len(ring) > 100: n_bridges_per_answer = max_bridges_per_answer + + logging.debug("Returning %d bridges from ring of len: %d" % \ + (n_bridges_per_answer, len(ring))) + return n_bridges_per_answer + class IPBasedDistributor(bridgedb.Bridges.BridgeHolder): """Object that hands out bridges based on the IP address of an incoming request and the current time period. @@ -186,8 +195,8 @@ class IPBasedDistributor(bridgedb.Bridges.BridgeHolder): self.splitter.addRing(ring, ruleset, filterBridgesByRules(bridgeFilterRules), populate_from=self.splitter.bridges) - # get the bridge. - return ring.getBridges(pos, N) + # get an appropriate number of bridges + return ring.getBridges(pos, getNumBridgesPerAnswer(ring, max_bridges_per_answer=N)) def __len__(self): return len(self.splitter) @@ -195,6 +204,7 @@ class IPBasedDistributor(bridgedb.Bridges.BridgeHolder): def dumpAssignments(self, f, description=""): self.splitter.dumpAssignments(f, description) + # These characters are the ones that RFC2822 allows. #ASPECIAL = '!#$%&*+-/=?^_`{|}~' #ASPECIAL += "\\\'" @@ -389,7 +399,7 @@ class EmailBasedDistributor(bridgedb.Bridges.BridgeHolder): filterBridgesByRules(bridgeFilterRules), populate_from=self.splitter.bridges) - result = ring.getBridges(pos, N) + result = ring.getBridges(pos, getNumBridgesPerAnswer(ring, max_bridges_per_answer=N)) db.setEmailTime(emailaddress, now) db.commit()
participants (1)
-
aagbsn@torproject.org