diff options
author | Lars Wirzenius <liw@liw.fi> | 2016-07-02 18:00:16 +0000 |
---|---|---|
committer | Lars Wirzenius <liw@liw.fi> | 2016-07-02 18:00:16 +0000 |
commit | d8039d3432118597555a249d22e5f75b6808792a (patch) | |
tree | b67347c7faa09719ac2ee936d4920952e4b4cfec | |
parent | 586900a585cb7924349a4011e0268752305bcf2b (diff) | |
download | obnam-d8039d3432118597555a249d22e5f75b6808792a.tar.gz |
Drop r/o caches while forgetting to reduce memory use
-rw-r--r-- | obnamlib/delegator.py | 4 | ||||
-rw-r--r-- | obnamlib/fmt_ga/client.py | 9 | ||||
-rw-r--r-- | obnamlib/fmt_ga/tree.py | 3 | ||||
-rw-r--r-- | obnamlib/repo_interface.py | 10 |
4 files changed, 26 insertions, 0 deletions
diff --git a/obnamlib/delegator.py b/obnamlib/delegator.py index e5cf9b66..26840774 100644 --- a/obnamlib/delegator.py +++ b/obnamlib/delegator.py @@ -178,6 +178,10 @@ class RepositoryDelegator(obnamlib.RepositoryInterface): client = self._lookup_client(client_name) client.flush() + def flush_ro_client(self, client_name): + client = self._lookup_client(client_name) + client.flush_ro() + def commit_client(self, client_name): self._require_got_client_lock(client_name) client = self._lookup_client(client_name) diff --git a/obnamlib/fmt_ga/client.py b/obnamlib/fmt_ga/client.py index 85417d04..f60afb59 100644 --- a/obnamlib/fmt_ga/client.py +++ b/obnamlib/fmt_ga/client.py @@ -77,6 +77,12 @@ class GAClient(object): def flush(self): self._save_file_metadata() + def flush_ro(self): + for gen in self._generations: + metadata = gen.get_file_metadata() + metadata.flush_ro() + gen.set_root_object_id(metadata.get_root_object_id()) + def commit(self): self._load_data() self._finish_current_generation_if_any() @@ -509,6 +515,9 @@ class GAFileMetadata(object): assert len(self._added_files) == 0 self._tree.flush() + def flush_ro(self): + self._tree.flush_ro() + def __iter__(self): for filename in self._added_files: yield filename diff --git a/obnamlib/fmt_ga/tree.py b/obnamlib/fmt_ga/tree.py index a10a7c48..dc5cdf9b 100644 --- a/obnamlib/fmt_ga/tree.py +++ b/obnamlib/fmt_ga/tree.py @@ -136,6 +136,9 @@ class GATree(object): self._blob_store.flush() self._cache.clear() + def flush_ro(self): # pragma: no cover + self._cache.clear() + def _fixup_subdir_refs(self, pathname): dir_obj = self._cache.get(pathname) assert dir_obj is not None, 'expected %s in cache' % pathname diff --git a/obnamlib/repo_interface.py b/obnamlib/repo_interface.py index 26bc1d34..ab8d6960 100644 --- a/obnamlib/repo_interface.py +++ b/obnamlib/repo_interface.py @@ -553,6 +553,16 @@ class RepositoryInterface(object): ''' + def flush_ro_client(self, client_name): + '''Flush cached read-only data from client. + + This does not require the client to be locked. + + This is a NOP, unless the a specific repository format gives + it meaning. + + ''' + def commit_client(self, client_name): '''Commit changes to client and DO NOT unlock it. |