From 1c24707f19bb4b9c3e1fa0ca3a492a4b791b5361 Mon Sep 17 00:00:00 2001 From: Brian Warner Date: Thu, 12 Mar 2009 16:29:00 -0700 Subject: [PATCH] consolidator: add more verbose traversal of directories --- src/allmydata/scripts/consolidate.py | 16 ++++++++++++---- src/allmydata/scripts/debug.py | 1 + src/allmydata/test/test_consolidate.py | 1 + 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/allmydata/scripts/consolidate.py b/src/allmydata/scripts/consolidate.py index eea872c7..ef5c22e2 100644 --- a/src/allmydata/scripts/consolidate.py +++ b/src/allmydata/scripts/consolidate.py @@ -222,7 +222,7 @@ class Consolidator: # readonly directory (which shares common subdirs with previous # backups) self.msg(" %s: processing" % rwname) - readcap = self.process_directory(readonly(writecap)) + readcap = self.process_directory(readonly(writecap), (rwname,)) if self.options["really"]: self.msg(" replaced %s" % rwname) self.put_child(archives_dircap, rwname, readcap) @@ -241,7 +241,7 @@ class Consolidator: % (self.directories_created, self.directories_used_as_is, self.directories_reused)) - def process_directory(self, readcap): + def process_directory(self, readcap, path): # I walk all my children (recursing over any subdirectories), build # up a table of my contents, then see if I can re-use an old # directory with the same contents. If not, I create a new directory @@ -257,7 +257,9 @@ class Consolidator: for (childname, (childtype, childdata)) in sorted(data["children"].items()): if childtype == "dirnode": num_dirs += 1 - childcap = self.process_directory(str(childdata["ro_uri"])) + childpath = path + (childname,) + childcap = self.process_directory(str(childdata["ro_uri"]), + childpath) contents[childname] = ("dirnode", childcap, None) else: childcap = str(childdata["ro_uri"]) @@ -267,17 +269,23 @@ class Consolidator: dirhash = self.hash_directory_contents(hashkids) old_dircap = self.get_old_dirhash(dirhash) if old_dircap: + if self.options["verbose"]: + self.msg(" %s: reused" % "/".join(path)) assert isinstance(old_dircap, str) self.directories_reused += 1 return old_dircap if num_dirs == 0: - # we're allowed to re-use this directory + # we're allowed to use this directory as-is + if self.options["verbose"]: + self.msg(" %s: used as-is" % "/".join(path)) new_dircap = readonly(readcap) assert isinstance(new_dircap, str) self.store_dirhash(dirhash, new_dircap) self.directories_used_as_is += 1 return new_dircap # otherwise, we need to create a new directory + if self.options["verbose"]: + self.msg(" %s: created" % "/".join(path)) new_dircap = readonly(self.mkdir(contents)) assert isinstance(new_dircap, str) self.store_dirhash(dirhash, new_dircap) diff --git a/src/allmydata/scripts/debug.py b/src/allmydata/scripts/debug.py index 75e5b595..618a556f 100644 --- a/src/allmydata/scripts/debug.py +++ b/src/allmydata/scripts/debug.py @@ -768,6 +768,7 @@ class ConsolidateOptions(VDriveOptions): ] optFlags = [ ("really", None, "Really remove old snapshot directories"), + ("verbose", "v", "Emit a line for every directory examined"), ] def parseArgs(self, where): self.where = where diff --git a/src/allmydata/test/test_consolidate.py b/src/allmydata/test/test_consolidate.py index 6d7b6919..60f1441e 100644 --- a/src/allmydata/test/test_consolidate.py +++ b/src/allmydata/test/test_consolidate.py @@ -170,6 +170,7 @@ class Consolidate(GridTestMixin, CLITestMixin, unittest.TestCase): self.do_cli_good("debug", "consolidate", "--dbfile", dbfile, "--backupfile", backupfile, + "--verbose", "tahoe:")) def _check_consolidate_output1(out): lines = out.splitlines() -- 2.45.2