summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--obnamlib/repo_fmt_6.py24
-rw-r--r--test-gpghome/random_seedbin600 -> 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
index 75f29732..b8fbeb97 100644
--- a/test-gpghome/random_seed
+++ b/test-gpghome/random_seed
Binary files differ