check --repair: recreate shadow index, see #6687

before this fix, borg check --repair just created an
empty shadow index, which can lead to incomplete
entries if entries are added later.

and such incomplete (but present) entries can lead to
compact_segments() resurrecting old PUTs by accidentally
dropping related DELs.
This commit is contained in:
Thomas Waldmann 2023-10-29 01:07:16 +02:00
parent 7892e4212b
commit 57f3dd1dae
No known key found for this signature in database
GPG Key ID: 243ACFA951F78E01
1 changed files with 2 additions and 0 deletions

View File

@ -963,6 +963,7 @@ class Repository:
in_index = self.index[key]
self.compact[in_index.segment] += header_size(tag) + size
self.segments[in_index.segment] -= 1
self.shadow_index.setdefault(key, []).append(in_index.segment)
except KeyError:
pass
self.index[key] = NSIndexEntry(segment, offset, size)
@ -980,6 +981,7 @@ class Repository:
# is already gone, then it was already compacted.
self.segments[in_index.segment] -= 1
self.compact[in_index.segment] += header_size(tag) + in_index.size
self.shadow_index.setdefault(key, []).append(in_index.segment)
elif tag == TAG_COMMIT:
continue
else: