check: check index for packs that are read

This commit is contained in:
Alexander Weiss 2020-11-01 16:30:20 +01:00
parent bb4b3481a6
commit 239931578c
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 {