#1787·perkeep

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:

go
// 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
	}