diff --git a/src/borg/repository.py b/src/borg/repository.py index 3971a69c2..a0706a499 100644 --- a/src/borg/repository.py +++ b/src/borg/repository.py @@ -690,11 +690,11 @@ class Repository: """Compact sparse segments by copying data into new segments """ if not self.compact: + logger.debug('nothing to do: compact empty') return index_transaction_id = self.get_index_transaction_id() segments = self.segments unused = [] # list of segments, that are not used anymore - logger = create_logger('borg.debug.compact_segments') def complete_xfer(intermediate=True): # complete the current transfer (when some target segment is full) @@ -723,13 +723,17 @@ class Repository: pi.show() continue segment_size = self.io.segment_size(segment) - 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) + freeable_ratio = 1.0 * freeable_space / segment_size + # we want to compact if: + # - we can free a considerable relative amount of space (freeable_ratio over some threshold) + if not (freeable_ratio > 0.1): + logger.debug('not compacting segment %d (freeable: %2.2f%% [%d bytes])', + segment, freeable_ratio * 100.0, freeable_space) pi.show() continue segments.setdefault(segment, 0) - logger.debug('compacting segment %d with usage count %d and %d freeable bytes', - segment, segments[segment], freeable_space) + logger.debug('compacting segment %d with usage count %d (freeable: %2.2f%% [%d bytes])', + segment, segments[segment], freeable_ratio * 100.0, freeable_space) for tag, key, offset, data in self.io.iter_objects(segment, include_data=True): if tag == TAG_COMMIT: continue