Merge pull request #1519 from enkore/issue/1115

Repository: add compact_segments progress
This commit is contained in:
TW 2016-08-21 22:54:58 +02:00 committed by GitHub
commit 5859badc29
2 changed files with 12 additions and 3 deletions

View File

@ -442,14 +442,17 @@ class Repository:
unused = [] unused = []
logger.debug('compaction started.') logger.debug('compaction started.')
pi = ProgressIndicatorPercent(total=len(self.compact), msg='Compacting segments %3.0f%%', step=1)
for segment, freeable_space in sorted(self.compact.items()): for segment, freeable_space in sorted(self.compact.items()):
if not self.io.segment_exists(segment): if not self.io.segment_exists(segment):
logger.warning('segment %d not found, but listed in compaction data', segment) logger.warning('segment %d not found, but listed in compaction data', segment)
del self.compact[segment] del self.compact[segment]
pi.show()
continue continue
segment_size = self.io.segment_size(segment) segment_size = self.io.segment_size(segment)
if segment_size > 0.2 * self.max_segment_size and freeable_space < 0.15 * segment_size: if segment_size > 0.2 * self.max_segment_size and freeable_space < 0.15 * segment_size:
logger.debug('not compacting segment %d (only %d bytes are sparse)', segment, freeable_space) logger.debug('not compacting segment %d (only %d bytes are sparse)', segment, freeable_space)
pi.show()
continue continue
segments.setdefault(segment, 0) segments.setdefault(segment, 0)
logger.debug('compacting segment %d with usage count %d and %d freeable bytes', logger.debug('compacting segment %d with usage count %d and %d freeable bytes',
@ -526,6 +529,8 @@ class Repository:
segments.setdefault(new_segment, 0) segments.setdefault(new_segment, 0)
assert segments[segment] == 0 assert segments[segment] == 0
unused.append(segment) unused.append(segment)
pi.show()
pi.finish()
complete_xfer(intermediate=False) complete_xfer(intermediate=False)
logger.debug('compaction completed.') logger.debug('compaction completed.')

View File

@ -228,6 +228,8 @@ class ArchiverTestCaseBase(BaseTestCase):
os.chdir(self._old_wd) os.chdir(self._old_wd)
# note: ignore_errors=True as workaround for issue #862 # note: ignore_errors=True as workaround for issue #862
shutil.rmtree(self.tmpdir, ignore_errors=True) shutil.rmtree(self.tmpdir, ignore_errors=True)
# destroy logging configuration
logging.Logger.manager.loggerDict.clear()
def cmd(self, *args, **kw): def cmd(self, *args, **kw):
exit_code = kw.pop('exit_code', 0) exit_code = kw.pop('exit_code', 0)
@ -1044,13 +1046,15 @@ class ArchiverTestCase(ArchiverTestCaseBase):
manifest, key = Manifest.load(repository) manifest, key = Manifest.load(repository)
self.assert_equal(len(manifest.archives), 0) self.assert_equal(len(manifest.archives), 0)
def test_progress(self): def test_progress_on(self):
self.create_regular_file('file1', size=1024 * 80) self.create_regular_file('file1', size=1024 * 80)
self.cmd('init', self.repository_location) self.cmd('init', self.repository_location)
# progress forced on
output = self.cmd('create', '--progress', self.repository_location + '::test4', 'input') output = self.cmd('create', '--progress', self.repository_location + '::test4', 'input')
self.assert_in("\r", output) self.assert_in("\r", output)
# progress forced off
def test_progress_off(self):
self.create_regular_file('file1', size=1024 * 80)
self.cmd('init', self.repository_location)
output = self.cmd('create', self.repository_location + '::test5', 'input') output = self.cmd('create', self.repository_location + '::test5', 'input')
self.assert_not_in("\r", output) self.assert_not_in("\r", output)