diff options
author | Carlo Teubner <carlo.teubner@gmail.com> | 2014-02-02 14:19:11 +0000 |
---|---|---|
committer | Lars Wirzenius <liw@liw.fi> | 2014-06-04 13:57:43 +0100 |
commit | 7f235c2fdc94647587514b5f1ae7778b2e20aa5a (patch) | |
tree | 1a8512cd97df6c5c050bf6124cb80ead6c6268a2 /obnamlib/repo_interface.py | |
parent | 348af822d830d3c9f34438dae3ea3cd9d7e38bda (diff) | |
download | obnam-7f235c2fdc94647587514b5f1ae7778b2e20aa5a.tar.gz |
fsck: optionally remove unused chunks
Remove unused chunks if either --fsck-fix or --fsck-rm-unused is given. The
second option is introduced because --fsck-fix may cause fsck to fail in the
case where we're out of disk space.
Diffstat (limited to 'obnamlib/repo_interface.py')
-rw-r--r-- | obnamlib/repo_interface.py | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/obnamlib/repo_interface.py b/obnamlib/repo_interface.py index 1782b41d..614c1c5d 100644 --- a/obnamlib/repo_interface.py +++ b/obnamlib/repo_interface.py @@ -747,6 +747,10 @@ class RepositoryInterface(object): '''Removes a chunk from indexes, given its id, for a given client.''' raise NotImplementedError() + def remove_chunk_from_indexes_for_all_clients(self, chunk_id): + '''Removes a chunk from indexes, given its id, for all clients.''' + raise NotImplementedError() + def find_chunk_ids_by_content(self, data): '''Finds chunk ids that probably match a given content. @@ -1077,6 +1081,12 @@ class RepositoryInterfaceTests(unittest.TestCase): # pragma: no cover self.repo.add_client('fooclient') self.repo.commit_client_list() + def setup_two_clients(self): + self.repo.lock_client_list() + self.repo.add_client('fooclient') + self.repo.add_client('barclient') + self.repo.commit_client_list() + def test_have_not_got_client_lock_initially(self): self.setup_client() self.assertFalse(self.repo.got_client_lock('fooclient')) @@ -1897,6 +1907,18 @@ class RepositoryInterfaceTests(unittest.TestCase): # pragma: no cover obnamlib.RepositoryChunkContentNotInIndexes, self.repo.find_chunk_ids_by_content, 'foochunk') + def test_removes_chunk_from_indexes_for_all_clients(self): + self.setup_two_clients() + self.repo.lock_chunk_indexes() + chunk_id = self.repo.put_chunk_content('foochunk') + token = self.repo.prepare_chunk_for_indexes('foochunk') + self.repo.put_chunk_into_indexes(chunk_id, token, 'fooclient') + self.repo.put_chunk_into_indexes(chunk_id, token, 'barclient') + self.repo.remove_chunk_from_indexes_for_all_clients(chunk_id) + self.assertRaises( + obnamlib.RepositoryChunkContentNotInIndexes, + self.repo.find_chunk_ids_by_content, 'foochunk') + def test_putting_chunk_to_indexes_without_locking_them_fails(self): chunk_id = self.repo.put_chunk_content('foochunk') token = self.repo.prepare_chunk_for_indexes('foochunk') @@ -1916,6 +1938,17 @@ class RepositoryInterfaceTests(unittest.TestCase): # pragma: no cover obnamlib.RepositoryChunkIndexesNotLocked, self.repo.remove_chunk_from_indexes, chunk_id, 'fooclient') + def test_removing_chunk_from_indexes_for_all_clients_without_locking_them_fails(self): + self.setup_client() + chunk_id = self.repo.put_chunk_content('foochunk') + self.repo.lock_chunk_indexes() + token = self.repo.prepare_chunk_for_indexes('foochunk') + self.repo.put_chunk_into_indexes(chunk_id, token, 'fooclient') + self.repo.commit_chunk_indexes() + self.assertRaises( + obnamlib.RepositoryChunkIndexesNotLocked, + self.repo.remove_chunk_from_indexes_for_all_clients, chunk_id) + def test_unlocking_chunk_indexes_forgets_changes(self): self.setup_client() chunk_id = self.repo.put_chunk_content('foochunk') |