From 57f3dd1dae7f8c14d3a17bb5015a47865fcee5e1 Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Sun, 29 Oct 2023 01:07:16 +0200 Subject: [PATCH] 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. --- src/borg/repository.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/borg/repository.py b/src/borg/repository.py index 05333bc2..bdc801b4 100644 --- a/src/borg/repository.py +++ b/src/borg/repository.py @@ -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: