1
0
Fork 0
mirror of https://github.com/borgbackup/borg.git synced 2025-03-09 21:57:24 +00:00

Merge pull request #7897 from ThomasWaldmann/check-fixes-shadow-index-1.2

check --repair fixes shadow_index (1.2-maint)
This commit is contained in:
TW 2023-11-03 14:42:39 +01:00 committed by GitHub
commit 55ee4e2d28
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 11 additions and 0 deletions

View file

@ -917,6 +917,7 @@ class Repository:
s, _ = self.index[key]
self.compact[s] += size
self.segments[s] -= 1
self.shadow_index.setdefault(key, []).append(s)
except KeyError:
pass
self.index[key] = segment, offset
@ -935,6 +936,7 @@ class Repository:
self.segments[s] -= 1
size = self.io.read(s, offset, key, read_data=False)
self.compact[s] += size
self.shadow_index.setdefault(key, []).append(s)
elif tag == TAG_COMMIT:
continue
else:

View file

@ -826,6 +826,15 @@ class RepositoryHintsTestCase(RepositoryTestCaseBase):
self.assert_equal(compact_expected, self.repository.compact)
del self.repository.segments[2] # ignore the segment created by put(H(42), ...)
self.assert_equal(segments_expected, self.repository.segments)
self.reopen()
self.assert_equal(self.repository.check(repair=True), True)
self.reopen()
self.repository.put(H(42), b'foobar') # this will call prepare_txn() and load the hints data
self.assert_equal(shadow_index_expected, self.repository.shadow_index)
# sizes do not match, with vs. without header?
# self.assert_equal(compact_expected, self.repository.compact)
del self.repository.segments[2] # ignore the segment created by put(H(42), ...)
self.assert_equal(segments_expected, self.repository.segments)
def test_hints_behaviour(self):
self.repository.put(H(0), b'data')