Mercurial > piecrust2
comparison piecrust/environment.py @ 49:fce061f8c2ed
Fix cache validation issue with rendered segments, limit disk access.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Fri, 22 Aug 2014 20:26:05 -0700 |
parents | 558e3602be40 |
children | 2fec3ee1298f |
comparison
equal
deleted
inserted
replaced
48:002fa58f54dc | 49:fce061f8c2ed |
---|---|
23 def __init__(self, size=2048): | 23 def __init__(self, size=2048): |
24 self.cache = repoze.lru.LRUCache(size) | 24 self.cache = repoze.lru.LRUCache(size) |
25 self.lock = threading.RLock() | 25 self.lock = threading.RLock() |
26 self.fs_cache = None | 26 self.fs_cache = None |
27 | 27 |
28 def get(self, key, item_maker): | 28 def get(self, key, item_maker, fs_cache_time=None): |
29 item = self.cache.get(key) | 29 item = self.cache.get(key) |
30 if item is None: | 30 if item is None: |
31 logger.debug("Acquiring lock for: %s" % key) | 31 logger.debug("Acquiring lock for: %s" % key) |
32 with self.lock: | 32 with self.lock: |
33 item = self.cache.get(key) | 33 item = self.cache.get(key) |
34 if item is None: | 34 if item is None: |
35 if self.fs_cache is not None: | 35 if (self.fs_cache is not None and |
36 fs_cache_time is not None): | |
36 # Try first from the file-system cache. | 37 # Try first from the file-system cache. |
37 fs_key = _make_fs_cache_key(key) | 38 fs_key = _make_fs_cache_key(key) |
38 logger.debug("'%s' not found in cache, trying the " | 39 if self.fs_cache.isValid(fs_key, fs_cache_time): |
39 "file-system: %s" % (key, fs_key)) | 40 logger.debug("'%s' found in file-system cache." % |
40 try: | 41 key) |
41 item_raw = self.fs_cache.read(fs_key) | 42 item_raw = self.fs_cache.read(fs_key) |
42 item = json.loads(item_raw) | 43 item = json.loads(item_raw) |
43 self.cache.put(key, item) | 44 self.cache.put(key, item) |
44 return item | 45 return item |
45 except: | |
46 pass | |
47 | 46 |
48 # Look into the mem-cache. | 47 # Look into the mem-cache. |
49 logger.debug("'%s' not found in cache, must build." % key) | 48 logger.debug("'%s' not found in cache, must build." % key) |
50 item = item_maker() | 49 item = item_maker() |
51 self.cache.put(key, item) | 50 self.cache.put(key, item) |