From 8783eabf5a45a893682dae0aa21a1fe26c9be82f Mon Sep 17 00:00:00 2001 From: Zooko O'Whielacronx Date: Tue, 8 Apr 2008 11:36:56 -0700 Subject: [PATCH] don't do a du on startup if there is no size limit configured This also turns off the production of the "space measurement done" log message, if there is no size limit configured. --- docs/configuration.txt | 4 +++- src/allmydata/storage.py | 21 +++++++++++---------- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/docs/configuration.txt b/docs/configuration.txt index 233392c9..e17d4b3c 100644 --- a/docs/configuration.txt +++ b/docs/configuration.txt @@ -78,7 +78,9 @@ this file. Note that this is a fairly loose bound, and the node may occasionally use slightly more storage than this. To enforce a stronger (and possibly more reliable) limit, use a symlink to place the 'storage/' directory on a separate size-limited filesystem, and/or use per-user -OS/filesystem quotas. +OS/filesystem quotas. If a size limit is specified then Tahoe will do a "du" +at startup (traversing all the storage and summing the sizes of the files), +which can take a long time if there are a lot of shares stored. private/root_dir.cap (optional): The command-line tools will read a directory cap out of this file and use it, if you don't specify a '--dir-cap' option or diff --git a/src/allmydata/storage.py b/src/allmydata/storage.py index 23fea4dd..acbe1b72 100644 --- a/src/allmydata/storage.py +++ b/src/allmydata/storage.py @@ -700,10 +700,12 @@ class StorageServer(service.MultiService, Referenceable): self._active_writers = weakref.WeakKeyDictionary() lp = log.msg("StorageServer created, now measuring space..", facility="tahoe.storage") - self.measure_size() - log.msg(format="space measurement done, consumed=%(consumed)d bytes", - consumed=self.consumed, - parent=lp, facility="tahoe.storage") + self.consumed = None + if self.sizelimit: + self.consumed = fileutil.du(self.sharedir) + log.msg(format="space measurement done, consumed=%(consumed)d bytes", + consumed=self.consumed, + parent=lp, facility="tahoe.storage") def log(self, *args, **kwargs): if "facility" not in kwargs: @@ -730,11 +732,8 @@ class StorageServer(service.MultiService, Referenceable): 'storage_server.allocated': self.allocated_size(), } - def measure_size(self): - self.consumed = fileutil.du(self.sharedir) - def allocated_size(self): - space = self.consumed + space = self.consumed or 0 for bw in self._active_writers: space += bw.allocated_size() return space @@ -866,14 +865,16 @@ class StorageServer(service.MultiService, Referenceable): total_space_freed += filelen if not remaining_files: fileutil.rm_dir(storagedir) - self.consumed -= total_space_freed + if self.consumed is not None: + self.consumed -= total_space_freed if self.stats_provider: self.stats_provider.count('storage_server.bytes_freed', total_space_freed) if not found_buckets: raise IndexError("no such lease to cancel") def bucket_writer_closed(self, bw, consumed_size): - self.consumed += consumed_size + if self.consumed is not None: + self.consumed += consumed_size if self.stats_provider: self.stats_provider.count('storage_server.bytes_added', consumed_size) del self._active_writers[bw] -- 2.45.2