diff --git a/src/borg/repository.py b/src/borg/repository.py index 38a1b93ac..93eedb3ea 100644 --- a/src/borg/repository.py +++ b/src/borg/repository.py @@ -859,11 +859,11 @@ class Repository: elif tag == TAG_DELETE and not in_index: # If the shadow index doesn't contain this key, then we can't say if there's a shadowed older tag, # therefore we do not drop the delete, but write it to a current segment. - shadowed_put_exists = key not in self.shadow_index or any( - # If the key is in the shadow index and there is any segment with an older PUT of this - # key, we have a shadowed put. - shadowed < segment - for shadowed in self.shadow_index[key] + key_not_in_shadow_index = key not in self.shadow_index + # If the key is in the shadow index and there is any segment with an older PUT of this + # key, we have a shadowed put. + shadowed_put_exists = key_not_in_shadow_index or any( + shadowed < segment for shadowed in self.shadow_index[key] ) delete_is_not_stable = index_transaction_id is None or segment > index_transaction_id @@ -909,6 +909,16 @@ class Repository: self.compact[new_segment] += size segments.setdefault(new_segment, 0) else: + logger.debug( + "dropping DEL for id %s - seg %d, iti %r, knisi %r, spe %r, dins %r, si %r", + bin_to_hex(key), + segment, + index_transaction_id, + key_not_in_shadow_index, + shadowed_put_exists, + delete_is_not_stable, + self.shadow_index.get(key), + ) # we did not keep the delete tag for key (see if-branch) if not self.shadow_index[key]: # shadowed segments list is empty -> remove it