2
2
mirror of https://github.com/octoleo/restic.git synced 2024-11-15 17:47:21 +00:00

Merge pull request #3884 from MichaelEischer/fix-index-saving-progress

repository: Do not report ignored packs in EachByPack
This commit is contained in:
MichaelEischer 2022-08-23 21:10:07 +02:00 committed by GitHub
commit b51e73e78f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 37 additions and 3 deletions

View File

@ -276,10 +276,10 @@ func (idx *Index) EachByPack(ctx context.Context, packBlacklist restic.IDSet) <-
m := &idx.byType[typ] m := &idx.byType[typ]
m.foreach(func(e *indexEntry) bool { m.foreach(func(e *indexEntry) bool {
packID := idx.packs[e.packIndex] packID := idx.packs[e.packIndex]
if !idx.final || !packBlacklist.Has(packID) {
if _, ok := byPack[packID]; !ok { if _, ok := byPack[packID]; !ok {
byPack[packID] = make([][]*indexEntry, restic.NumBlobTypes) byPack[packID] = make([][]*indexEntry, restic.NumBlobTypes)
} }
if !idx.final || !packBlacklist.Has(packID) {
byPack[packID][typ] = append(byPack[packID][typ], e) byPack[packID][typ] = append(byPack[packID][typ], e)
} }
return true return true

View File

@ -613,3 +613,37 @@ func TestMixedEachByPack(t *testing.T) {
} }
rtest.Equals(t, expected, reported) rtest.Equals(t, expected, reported)
} }
func TestEachByPackIgnoes(t *testing.T) {
idx := repository.NewIndex()
ignores := restic.NewIDSet()
expected := make(map[restic.ID]int)
// create 50 packs with one blob each
for i := 0; i < 50; i++ {
packID := restic.NewRandomID()
if i < 3 {
ignores.Insert(packID)
} else {
expected[packID] = 1
}
blobs := []restic.Blob{
{
BlobHandle: restic.BlobHandle{Type: restic.DataBlob, ID: restic.NewRandomID()},
Offset: 0,
Length: 42,
},
}
idx.StorePack(packID, blobs)
}
idx.Finalize()
reported := make(map[restic.ID]int)
for bp := range idx.EachByPack(context.TODO(), ignores) {
reported[bp.PackID]++
rtest.Equals(t, 1, len(bp.Blobs)) // correct blob count
b0 := bp.Blobs[0]
rtest.Assert(t, b0.Type == restic.DataBlob && b0.Offset == 0 && b0.Length == 42, "wrong blob", b0)
}
rtest.Equals(t, expected, reported)
}