From 00fae3f3e3daca23ea227dc49fae255bbca76c1c Mon Sep 17 00:00:00 2001 From: Marian Beermann Date: Sat, 12 Nov 2016 14:42:11 +0100 Subject: [PATCH] repository: check_free_space, special case small repos --- src/borg/repository.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/borg/repository.py b/src/borg/repository.py index 40ebb64df..08aea5351 100644 --- a/src/borg/repository.py +++ b/src/borg/repository.py @@ -428,8 +428,18 @@ class Repository: required_free_space += self.additional_free_space if not self.append_only: - # Keep one full worst-case segment free in non-append-only mode - required_free_space += self.max_segment_size + MAX_OBJECT_SIZE + full_segment_size = self.max_segment_size + MAX_OBJECT_SIZE + if len(self.compact) < 10: + # This is mostly for the test suite to avoid overestimated free space needs. This can be annoying + # if TMP is a small-ish tmpfs. + compact_working_space = sum(self.io.segment_size(segment) - free for segment, free in self.compact.items()) + logger.debug('check_free_space: few segments, not requiring a full free segment') + compact_working_space = min(compact_working_space, full_segment_size) + logger.debug('check_free_space: calculated working space for compact as %d bytes', compact_working_space) + required_free_space += compact_working_space + else: + # Keep one full worst-case segment free in non-append-only mode + required_free_space += full_segment_size try: st_vfs = os.statvfs(self.path) except OSError as os_error: