diff options
-rw-r--r-- | obnamlib/repo_fmt_6.py | 24 | ||||
-rw-r--r-- | test-gpghome/random_seed | bin | 600 -> 600 bytes |
2 files changed, 20 insertions, 4 deletions
diff --git a/obnamlib/repo_fmt_6.py b/obnamlib/repo_fmt_6.py index 2d24064f..bd601ab1 100644 --- a/obnamlib/repo_fmt_6.py +++ b/obnamlib/repo_fmt_6.py @@ -726,6 +726,14 @@ class RepositoryFormat6(obnamlib.RepositoryInterface): } + # A cache for file key lookups. Without this, we always need to + # fetch and decode a full, encoded obnamlib.Metadata object. + # The dict is indexed by (generation_number, pathname) tuples, + # and is invalidated when any change is made to any file key. + # FIXME: This only helps with lookups, not with setting keys. + + self._file_key_cache = {} + def _require_existing_file(self, generation_id, filename): client_name, gen_number = generation_id @@ -766,10 +774,15 @@ class RepositoryFormat6(obnamlib.RepositoryInterface): self._require_existing_file(generation_id, filename) client_name, gen_number = generation_id - client = self._open_client(client_name) - - encoded_metadata = client.get_metadata(gen_number, filename) - metadata = obnamlib.decode_metadata(encoded_metadata) + + cache_key = (gen_number, filename) + if cache_key in self._file_key_cache: + metadata = self._file_key_cache[cache_key] + else: + client = self._open_client(client_name) + encoded_metadata = client.get_metadata(gen_number, filename) + metadata = obnamlib.decode_metadata(encoded_metadata) + self._file_key_cache[cache_key] = metadata if key in self._file_keys: value = getattr(metadata, self._file_keys[key]) @@ -786,6 +799,9 @@ class RepositoryFormat6(obnamlib.RepositoryInterface): self._require_client_lock(client_name) self._require_existing_file(generation_id, filename) + # Invalidate the file key cache. + self._file_key_cache = {} + client = self._open_client(client_name) encoded_metadata = client.get_metadata(gen_number, filename) diff --git a/test-gpghome/random_seed b/test-gpghome/random_seed Binary files differindex 75f29732..b8fbeb97 100644 --- a/test-gpghome/random_seed +++ b/test-gpghome/random_seed |