[tor-commits] r24540: {arm} Giving a warning and prematurely aborting geoip lookups when (in arm/trunk: . src/util)

Damian Johnson atagar1 at gmail.com
Sun Apr 3 04:00:49 UTC 2011


Author: atagar
Date: 2011-04-03 04:00:48 +0000 (Sun, 03 Apr 2011)
New Revision: 24540

Modified:
   arm/trunk/armrc.sample
   arm/trunk/src/util/torTools.py
Log:
Giving a warning and prematurely aborting geoip lookups when the database is unavailble.



Modified: arm/trunk/armrc.sample
===================================================================
--- arm/trunk/armrc.sample	2011-04-02 23:51:15 UTC (rev 24539)
+++ arm/trunk/armrc.sample	2011-04-03 04:00:48 UTC (rev 24540)
@@ -271,6 +271,7 @@
 log.cursesColorSupport INFO
 log.bsdJailFound INFO
 log.unknownBsdJailId WARN
+log.geoipUnavailable WARN
 log.stats.failedProcResolution DEBUG
 log.stats.procResolutionFailover INFO
 log.stats.failedPsResolution INFO

Modified: arm/trunk/src/util/torTools.py
===================================================================
--- arm/trunk/src/util/torTools.py	2011-04-02 23:51:15 UTC (rev 24539)
+++ arm/trunk/src/util/torTools.py	2011-04-03 04:00:48 UTC (rev 24540)
@@ -90,6 +90,10 @@
               "NS": "information related to the consensus will grow stale",
               "NEWCONSENSUS": "information related to the consensus will grow stale"}
 
+# number of sequential attempts before we decide that the Tor geoip database
+# is unavailable
+GEOIP_FAILURE_THRESHOLD = 5
+
 # provides int -> str mappings for torctl event runlevels
 TORCTL_RUNLEVELS = dict([(val, key) for (key, val) in TorUtil.loglevels.items()])
 
@@ -310,6 +314,9 @@
     # directs TorCtl to notify us of events
     TorUtil.logger = self
     TorUtil.loglevel = "DEBUG"
+    
+    # tracks the number of sequential geoip lookup failures
+    self.geoipFailureCount = 0
   
   def init(self, conn=None):
     """
@@ -445,6 +452,8 @@
     
     self.connLock.acquire()
     
+    isGeoipRequest = param.startswith("ip-to-country/")
+    
     # checks if this is an arg caching covers
     isCacheArg = param in CACHE_ARGS
     
@@ -462,13 +471,23 @@
       if isCacheArg and cachedValue:
         result = cachedValue
         isFromCache = True
+      elif isGeoipRequest and self.geoipFailureCount == GEOIP_FAILURE_THRESHOLD:
+        # the geoip database aleady looks to be unavailable - abort the request
+        raisedExc = TorCtl.ErrorReply("Tor geoip database is unavailable.")
       else:
         try:
           getInfoVal = self.conn.get_info(param)[param]
           if getInfoVal != None: result = getInfoVal
+          if isGeoipRequest: self.geoipFailureCount = 0
         except (socket.error, TorCtl.ErrorReply, TorCtl.TorCtlClosed), exc:
           if type(exc) == TorCtl.TorCtlClosed: self.close()
           raisedExc = exc
+          
+          if isGeoipRequest:
+            self.geoipFailureCount += 1
+            
+            if self.geoipFailureCount == GEOIP_FAILURE_THRESHOLD:
+              log.log(CONFIG["log.geoipUnavailable"], "Tor geoip database is unavailable.")
     
     if isCacheArg and result and not isFromCache:
       self._cachedParam[param] = result



More information about the tor-commits mailing list