[Checkins] SVN: lovely.responsecache/trunk/ Make the failedHosts access thread safe

Juergen Kartnaller juergen at kartnaller.at
Tue Jan 29 10:31:26 EST 2008


Log message for revision 83299:
  Make the failedHosts access thread safe
  

Changed:
  U   lovely.responsecache/trunk/CHANGES.txt
  U   lovely.responsecache/trunk/setup.py
  U   lovely.responsecache/trunk/src/lovely/responsecache/purge.py

-=-
Modified: lovely.responsecache/trunk/CHANGES.txt
===================================================================
--- lovely.responsecache/trunk/CHANGES.txt	2008-01-29 15:07:52 UTC (rev 83298)
+++ lovely.responsecache/trunk/CHANGES.txt	2008-01-29 15:31:25 UTC (rev 83299)
@@ -5,6 +5,7 @@
 after
 =====
 
+- make the failedHosts access thread safe
 - bugfix: missing parameter on ignorWrite
 - added some logging info after successful purges
 - removed default values on required fields in purge directive

Modified: lovely.responsecache/trunk/setup.py
===================================================================
--- lovely.responsecache/trunk/setup.py	2008-01-29 15:07:52 UTC (rev 83298)
+++ lovely.responsecache/trunk/setup.py	2008-01-29 15:31:25 UTC (rev 83299)
@@ -23,7 +23,7 @@
 
 setup(
     name = 'lovely.responsecache',
-    version = '0.4.0',
+    version = '0.4.1',
     author = "Lovely Systems",
     author_email = "office at lovelysystems.com",
     description = "Cache results of ContentProviders",

Modified: lovely.responsecache/trunk/src/lovely/responsecache/purge.py
===================================================================
--- lovely.responsecache/trunk/src/lovely/responsecache/purge.py	2008-01-29 15:07:52 UTC (rev 83298)
+++ lovely.responsecache/trunk/src/lovely/responsecache/purge.py	2008-01-29 15:31:25 UTC (rev 83299)
@@ -37,12 +37,12 @@
     """Utilty to purge mutliple caches"""
     interface.implements(interfaces.IPurge)
 
-    failedHosts = {}
-
     def __init__(self, hosts, timeout, retryDelay):
         self.hosts = hosts
         self.timeout = timeout
         self.retryDelay = retryDelay
+        self.failedHosts = {}
+        self.failLock = threading.Lock()
 
     def purge(self, expr, escapes='+-'):
         for esc in escapes:
@@ -57,17 +57,22 @@
         if exprs is None:
             return
         for host in self.hosts:
+            self.failLock.acquire()
             if host in self.failedHosts.keys():
                 if self.failedHosts[host]  + self.retryDelay > time():
+                    self.failLock.release()
                     continue
                 else:
                     del self.failedHosts[host]
+            self.failLock.release()
             def urls(exprs):
                 for expr in exprs:
                     url = self._expr2URL(expr)
                     yield urlparse.urlunparse(urlparse.urlparse(host)[:2] + url)
             if not self._purgeURLs(urls(exprs)):
+                self.failLock.acquire()
                 self.failedHosts[host] = time()
+                self.failLock.release()
         delattr(storage, EXPRS_ATTR)
 
     def _expr2URL(self, expr):



More information about the Checkins mailing list