From edabd2f004972346f8b9c567cb47d133d7e18fa3 Mon Sep 17 00:00:00 2001 From: Brian Warner <warner@allmydata.com> Date: Thu, 26 Jun 2008 11:07:57 -0700 Subject: [PATCH] storage.py: leave the storage/shares/incoming/ directory in place when the bucket is closed --- src/allmydata/storage.py | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/allmydata/storage.py b/src/allmydata/storage.py index cba2a92f..b31195e8 100644 --- a/src/allmydata/storage.py +++ b/src/allmydata/storage.py @@ -218,10 +218,28 @@ class BucketWriter(Referenceable): fileutil.make_dirs(os.path.dirname(self.finalhome)) fileutil.rename(self.incominghome, self.finalhome) try: + # self.incominghome is like storage/shares/incoming/ab/abcde/4 . + # We try to delete the parent (.../ab/abcde) to avoid leaving + # these directories lying around forever, but the delete might + # fail if we're working on another share for the same storage + # index (like ab/abcde/5). The alternative approach would be to + # use a hierarchy of objects (PrefixHolder, BucketHolder, + # ShareWriter), each of which is responsible for a single + # directory on disk, and have them use reference counting of + # their children to know when they should do the rmdir. This + # approach is simpler, but relies on os.rmdir refusing to delete + # a non-empty directory. Do *not* use fileutil.rm_dir() here! os.rmdir(os.path.dirname(self.incominghome)) + # we also delete the grandparent (prefix) directory, .../ab , + # again to avoid leaving directories lying around. This might + # fail if there is another bucket open that shares a prefix (like + # ab/abfff). os.rmdir(os.path.dirname(os.path.dirname(self.incominghome))) - os.rmdir(os.path.dirname(os.path.dirname(os.path.dirname(self.incominghome)))) + # we leave the great-grandparent (incoming/) directory in place. except EnvironmentError: + # ignore the "can't rmdir because the directory is not empty" + # exceptions, those are normal consequences of the + # above-mentioned conditions. pass self._sharefile = None self.closed = True -- 2.45.2