Merge pull request #3048 from aawsome/check-pack-index

check: check index for packs that are read
This commit is contained in:
Alexander Neumann 2020-11-09 20:12:32 +01:00 committed by GitHub
commit c986823d3f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 23 additions and 0 deletions

View file

@ -0,0 +1,9 @@
Enhancement: Check now checks index when reading packs
Restic used to only verfiy the pack file content when calling `check --read-data`
`check --read-data-subset` but did not check if the blobs within the pack are
correctly contained in the index.
This check is now added and may give an "Blob ID is not contained in index" error.
If the index is not correct, it can be rebuilt by using the `rebuild-index` command.
https://github.com/restic/restic/pull/3048

View file

@ -727,6 +727,7 @@ func checkPack(ctx context.Context, r restic.Repository, id restic.ID) error {
var errs []error
var buf []byte
idx := r.Index()
for i, blob := range blobs {
debug.Log(" check blob %d: %v", i, blob)
@ -762,6 +763,19 @@ func checkPack(ctx context.Context, r restic.Repository, id restic.ID) error {
errs = append(errs, errors.Errorf("Blob ID does not match, want %v, got %v", blob.ID.Str(), hash.Str()))
continue
}
// Check if blob is contained in index
idxHas := false
for _, pb := range idx.Lookup(blob.ID, blob.Type) {
if pb.PackID == id {
idxHas = true
break
}
}
if !idxHas {
errs = append(errs, errors.Errorf("Blob ID %v is not contained in index", blob.ID.Str()))
continue
}
}
if len(errs) > 0 {