mirror of
https://github.com/restic/restic.git
synced 2024-12-23 00:07:25 +00:00
index: Compact data structure for Index.EachByPack
This commit is contained in:
parent
137f0bc944
commit
0e8893dae9
1 changed files with 6 additions and 9 deletions
|
@ -252,21 +252,18 @@ func (idx *Index) EachByPack(ctx context.Context, packBlacklist restic.IDSet) <-
|
|||
|
||||
go func() {
|
||||
defer idx.m.Unlock()
|
||||
defer func() {
|
||||
close(ch)
|
||||
}()
|
||||
defer close(ch)
|
||||
|
||||
byPack := make(map[restic.ID][][]*indexEntry)
|
||||
byPack := make(map[restic.ID][restic.NumBlobTypes][]*indexEntry)
|
||||
|
||||
for typ := range idx.byType {
|
||||
m := &idx.byType[typ]
|
||||
m.foreach(func(e *indexEntry) bool {
|
||||
packID := idx.packs[e.packIndex]
|
||||
if !idx.final || !packBlacklist.Has(packID) {
|
||||
if _, ok := byPack[packID]; !ok {
|
||||
byPack[packID] = make([][]*indexEntry, restic.NumBlobTypes)
|
||||
}
|
||||
byPack[packID][typ] = append(byPack[packID][typ], e)
|
||||
v := byPack[packID]
|
||||
v[typ] = append(v[typ], e)
|
||||
byPack[packID] = v
|
||||
}
|
||||
return true
|
||||
})
|
||||
|
@ -281,7 +278,7 @@ func (idx *Index) EachByPack(ctx context.Context, packBlacklist restic.IDSet) <-
|
|||
}
|
||||
}
|
||||
// allow GC once entry is no longer necessary
|
||||
byPack[packID] = nil
|
||||
delete(byPack, packID)
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
return
|
||||
|
|
Loading…
Reference in a new issue