From fb07563671088a7a5eb715fed7485066336a370c Mon Sep 17 00:00:00 2001 From: Matt Wala <wala1@illinois.edu> Date: Mon, 18 Sep 2017 20:35:21 -0500 Subject: [PATCH] Disable automagic version ticking on read. Add a note that skipping the version read is for backwards compatibility. --- pytools/persistent_dict.py | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/pytools/persistent_dict.py b/pytools/persistent_dict.py index 6a1a707..11a6cef 100644 --- a/pytools/persistent_dict.py +++ b/pytools/persistent_dict.py @@ -502,19 +502,21 @@ class PersistentDict(object): with open(version_path, "wb") as versionf: dump(0, versionf, protocol=HIGHEST_PROTOCOL) - def _read_cached(self, file_name, version, cache): - try: - value, cached_version = cache[file_name] - if version == cached_version: - return value - except KeyError: - pass + def _read_cached(self, file_name, version, cache, use_cache): + if use_cache: + try: + value, cached_version = cache[file_name] + if version == cached_version: + return value + except KeyError: + pass with open(file_name, "rb") as inf: from six.moves.cPickle import load value = load(inf) - cache[file_name] = (value, version) + if use_cache: + cache[file_name] = (value, version) return value @@ -542,26 +544,24 @@ class PersistentDict(object): version = None exc = None + use_cache = True try: with open(version_path, "rb") as versionf: from six.moves.cPickle import load version = load(versionf) except IOError: - # Not a fatal error - but we won't be able to use the cache. + # Not a fatal error - but we won't be able to use the + # LRU cache. + # + # This allows us to still read cache directory hiearchies + # created by previous version (< 2017.5). self._read_key_cache.discard(key_path) self._read_contents_cache.discard(value_path) + use_cache = False except (OSError, EOFError) as e: exc = e - if version is None: - try: - # If the version doesn't exist, reset the version - # counter. - self._tick_version(hexdigest_key) - except (OSError, IOError, EOFError) as e: - exc = e - if exc is not None: item_dir_m.reset() from warnings import warn @@ -579,7 +579,7 @@ class PersistentDict(object): try: read_key = self._read_cached(key_path, version, - self._read_key_cache) + self._read_key_cache, use_cache) except (OSError, IOError, EOFError) as e: exc = e @@ -615,7 +615,7 @@ class PersistentDict(object): try: read_contents = self._read_cached(value_path, version, - self._read_contents_cache) + self._read_contents_cache, use_cache) except (OSError, IOError, EOFError) as e: exc = e -- GitLab