pkg/index: use better data structure for readyReindex
Author: bradfitzCreated Dec 31, 2025Updated Dec 31, 2025
Using a map as a set that you remove one item at a time for isn't the most efficient (see https://github.com/golang/go/issues/66361). We should use a better data structure here probably:
// indexReadyBlobs indexes blobs that have been recently marked as ready to be
// reindexed, after the blobs they depend on eventually were indexed.
func (ix *Index) indexReadyBlobs(ctx context.Context) {
defer ix.reindexWg.Done()
popReadyReindex := func() (blob.Ref, bool) {
ix.Lock()
defer ix.Unlock()
if len(ix.readyReindex) == 0 {
return blob.Ref{}, false
}
var br blob.Ref
for br = range ix.readyReindex {
break
}
delete(ix.readyReindex, br)
return br, true
}Source: perkeep/perkeep