summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--obnamlib/clientmetadatatree.py10
-rw-r--r--obnamlib/clientmetadatatree_tests.py16
-rw-r--r--obnamlib/repo.py2
-rw-r--r--obnamlib/repo_fmt_6.py12
-rw-r--r--obnamlib/repo_tests.py20
-rw-r--r--test-gpghome/random_seedbin600 -> 600 bytes
6 files changed, 9 insertions, 51 deletions
diff --git a/obnamlib/clientmetadatatree.py b/obnamlib/clientmetadatatree.py
index 7d98dbdb..1019f71b 100644
--- a/obnamlib/clientmetadatatree.py
+++ b/obnamlib/clientmetadatatree.py
@@ -72,7 +72,6 @@ class ClientMetadataTree(obnamlib.RepositoryTree):
def __init__(self, fs, client_dir, node_size, upload_queue_size, lru_size,
repo):
tracing.trace('new ClientMetadataTree, client_dir=%s' % client_dir)
- self.current_time = repo.current_time
key_bytes = len(self.hashkey(0, self.default_file_id(''), 0, 0))
obnamlib.RepositoryTree.__init__(self, fs, client_dir, key_bytes,
node_size, upload_queue_size,
@@ -212,9 +211,6 @@ class ClientMetadataTree(obnamlib.RepositoryTree):
def commit(self):
tracing.trace('committing ClientMetadataTree')
- if self.tree:
- now = int(self.current_time())
- self._insert_int(self.tree, self.genkey(self.GEN_ENDED), now)
obnamlib.RepositoryTree.commit(self)
def init_forest(self, *args, **kwargs):
@@ -258,9 +254,7 @@ class ClientMetadataTree(obnamlib.RepositoryTree):
tracing.trace('start new generation')
self.start_changes()
gen_id = self.forest.new_id()
- now = int(self.current_time())
self._insert_int(self.tree, self.genkey(self.GEN_ID), gen_id)
- self._insert_int(self.tree, self.genkey(self.GEN_STARTED), now)
def set_current_generation_is_checkpoint(self, is_checkpoint):
tracing.trace('is_checkpoint=%s', is_checkpoint)
@@ -292,7 +286,7 @@ class ClientMetadataTree(obnamlib.RepositoryTree):
except KeyError: # pragma: no cover
return None
- def _lookup_time(self, tree, what):
+ def _lookup_time(self, tree, what): # pragma: no cover
try:
return self._lookup_int(tree, self.genkey(what))
except KeyError:
@@ -304,7 +298,7 @@ class ClientMetadataTree(obnamlib.RepositoryTree):
except KeyError:
return None
- def get_generation_times(self, genid):
+ def get_generation_times(self, genid): # pragma: no cover
tree = self.find_generation(genid)
return (self._lookup_time(tree, self.GEN_STARTED),
self._lookup_time(tree, self.GEN_ENDED))
diff --git a/obnamlib/clientmetadatatree_tests.py b/obnamlib/clientmetadatatree_tests.py
index 3b81292d..07bf92ae 100644
--- a/obnamlib/clientmetadatatree_tests.py
+++ b/obnamlib/clientmetadatatree_tests.py
@@ -63,7 +63,6 @@ class ClientMetadataTreeTests(unittest.TestCase):
genid = self.client.get_generation_id(self.client.tree)
self.assertEqual(lookup(self.client.GEN_ID), genid)
- self.assertEqual(lookup(self.client.GEN_STARTED), 12765)
self.assertFalse(self.client.get_is_checkpoint(genid))
def test_starts_second_generation(self):
@@ -83,7 +82,6 @@ class ClientMetadataTreeTests(unittest.TestCase):
genid2 = self.client.get_generation_id(self.client.tree)
self.assertEqual(lookup(self.client.GEN_ID), genid2)
self.assertNotEqual(genid1, genid2)
- self.assertEqual(lookup(self.client.GEN_STARTED), 2)
self.assertFalse(self.client.get_is_checkpoint(genid2))
self.assertEqual(self.client.list_generations(), [genid1, genid2])
@@ -113,20 +111,6 @@ class ClientMetadataTreeTests(unittest.TestCase):
self.assertEqual(self.client.list_generations(), [])
self.assertEqual(self.client.tree, None)
- def test_started_generation_has_start_time(self):
- self.now = 1
- self.client.start_generation()
- genid = self.client.get_generation_id(self.client.tree)
- self.assertEqual(self.client.get_generation_times(genid), (1, None))
-
- def test_committed_generation_has_times(self):
- self.now = 1
- self.client.start_generation()
- genid = self.client.get_generation_id(self.client.tree)
- self.now = 2
- self.client.commit()
- self.assertEqual(self.client.get_generation_times(genid), (1, 2))
-
def test_finds_generation_the_first_time(self):
self.client.start_generation()
tree = self.client.tree
diff --git a/obnamlib/repo.py b/obnamlib/repo.py
index 35fd6c5b..12b6572b 100644
--- a/obnamlib/repo.py
+++ b/obnamlib/repo.py
@@ -579,7 +579,7 @@ class Repository(object):
raise obnamlib.Error('cannot remove started generation')
self.removed_generations.append(gen)
- def get_generation_times(self, gen):
+ def get_generation_times(self, gen): # pragma: no cover
'''Return start and end times of a generation.
An unfinished generation has no end time, so None is returned.
diff --git a/obnamlib/repo_fmt_6.py b/obnamlib/repo_fmt_6.py
index f667c60f..2d24064f 100644
--- a/obnamlib/repo_fmt_6.py
+++ b/obnamlib/repo_fmt_6.py
@@ -247,12 +247,6 @@ class RepositoryFormat6(obnamlib.RepositoryInterface):
# Handling of individual clients.
- def current_time(self):
- # ClientMetadataTree wants us to provide this method.
- # FIXME: A better design would be to for us to provide
- # the class with a function to call.
- return self._current_time()
-
def _setup_client(self):
# We keep a list of all open clients. An open client may or
# may not be locked. Each value in the dict is a tuple of
@@ -359,6 +353,11 @@ class RepositoryFormat6(obnamlib.RepositoryInterface):
for gen_number in open_client.removed_generation_numbers:
open_client.client.remove_generation(gen_number)
+ if (open_client.current_generation_number and
+ open_client.current_generation_number not in
+ open_client.removed_generation_numbers):
+ open_client.client.set_generation_ended(self._current_time())
+
if (open_client.current_generation_number or
open_client.removed_generation_numbers):
open_client.client.commit()
@@ -427,6 +426,7 @@ class RepositoryFormat6(obnamlib.RepositoryInterface):
raise obnamlib.RepositoryClientGenerationUnfinished(client_name)
open_client.client.start_generation()
+ open_client.client.set_generation_started(self._current_time())
open_client.current_generation_number = \
open_client.client.get_generation_id(open_client.client.tree)
diff --git a/obnamlib/repo_tests.py b/obnamlib/repo_tests.py
index bc92d71a..68f0fc74 100644
--- a/obnamlib/repo_tests.py
+++ b/obnamlib/repo_tests.py
@@ -383,26 +383,6 @@ class RepositoryClientTests(unittest.TestCase):
self.repo.lock_client('client_name')
self.assertNotEqual(gen, self.repo.start_generation())
- def test_new_generation_has_start_time_only(self):
- self.repo.lock_client('client_name')
- gen = self.repo.start_generation()
- start, end = self.repo.get_generation_times(gen)
- self.assertNotEqual(start, None)
- self.assertEqual(end, None)
-
- def test_commited_generation_has_start_and_end_times(self):
- self.repo.lock_client('client_name')
- self.repo.lock_shared()
- gen = self.repo.start_generation()
- self.repo.commit_client()
- self.repo.commit_shared()
-
- self.repo.open_client('client_name')
- start, end = self.repo.get_generation_times(gen)
- self.assertNotEqual(start, None)
- self.assertNotEqual(end, None)
- self.assert_(start <= end)
-
def test_adding_generation_without_committing_does_not_add_it(self):
self.repo.lock_client('client_name')
self.repo.lock_shared()
diff --git a/test-gpghome/random_seed b/test-gpghome/random_seed
index dd465b71..75f29732 100644
--- a/test-gpghome/random_seed
+++ b/test-gpghome/random_seed
Binary files differ