# HG changeset patch # User Alexandre Fayolle # Date 1275492386 -7200 # Node ID fd240f98a3ee5ee6f8812e9dffea9eae64e617f0 # Parent 4c1d0e80a376c02a51ed088e21276484782ef45d# Parent 6a90357b97693d43579e2d3354a7aa1cb51c0331 backport improved on-site change diff -r 4c1d0e80a376 -r fd240f98a3ee server/sources/__init__.py --- a/server/sources/__init__.py Wed Jun 02 16:30:36 2010 +0200 +++ b/server/sources/__init__.py Wed Jun 02 17:26:26 2010 +0200 @@ -52,11 +52,11 @@ return True class TimedCache(dict): - def __init__(self, ttlm, ttls=0): - # time to live in minutes - self.ttl = timedelta(seconds=ttlm*60 + ttls) - if self.ttl.seconds <= 0: + def __init__(self, ttl): + # time to live in seconds + if ttl <= 0: raise ValueError('TimedCache initialized with a ttl of %ss' % self.ttl.seconds) + self.ttl = timedelta(seconds=ttl) def __setitem__(self, key, value): dict.__setitem__(self, key, (datetime.now(), value)) diff -r 4c1d0e80a376 -r fd240f98a3ee server/sources/ldapuser.py --- a/server/sources/ldapuser.py Wed Jun 02 16:30:36 2010 +0200 +++ b/server/sources/ldapuser.py Wed Jun 02 17:26:26 2010 +0200 @@ -188,18 +188,19 @@ self._conn = None self._cache = {} # ttlm is in minutes! - ttlm = time_validator(None, None, - source_config.get('cache-life-time', 2*60*60)) // 60 - self._query_cache = TimedCache(max(ttlm, 1)) + self._cache_ttl = time_validator(None, None, + source_config.get('cache-life-time', 2*60*60)) + self._cache_ttl = max(71, self._cache_ttl) + self._query_cache = TimedCache(self.cache_ttl) # interval is in seconds ! self._interval = time_validator(None, None, - source_config.get('synchronization-interval', - 24*60*60)) + source_config.get('synchronization-interval', + 24*60*60)) def reset_caches(self): """method called during test to reset potential source caches""" self._cache = {} - self._query_cache = TimedCache(2*60) # TimedCache is in minutes! + self._query_cache = TimedCache(self._cache_ttl) def init(self): """method called by the repository once ready to handle request""" @@ -207,7 +208,7 @@ # set minimum period of 5min 1s (the additional second is to minimize # resonnance effet) self.repo.looping_task(max(301, self._interval), self.synchronize) - self.repo.looping_task(max(7, self._query_cache.ttl.seconds // 10), + self.repo.looping_task(self.cache_ttl // 10, self._query_cache.clear_expired) def synchronize(self): diff -r 4c1d0e80a376 -r fd240f98a3ee server/sources/pyrorql.py --- a/server/sources/pyrorql.py Wed Jun 02 16:30:36 2010 +0200 +++ b/server/sources/pyrorql.py Wed Jun 02 17:26:26 2010 +0200 @@ -144,11 +144,11 @@ 'group': 'sources', }),) register_persistent_options(myoptions) - self._query_cache = TimedCache(30) + self._query_cache = TimedCache(1800) def reset_caches(self): """method called during test to reset potential source caches""" - self._query_cache = TimedCache(30) + self._query_cache = TimedCache(1800) def last_update_time(self): pkey = u'sources.%s.latest-update-time' % self.uri