Skip to content

Commit e365728

Browse files
committed
Bulk allocate slices for trackers, to save garbage from append()
Signed-off-by: Bryan Boreham <[email protected]>
1 parent 87c55b5 commit e365728

File tree

1 file changed

+6
-1
lines changed

1 file changed

+6
-1
lines changed

pkg/ring/batch.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ type itemTracker struct {
3737
//
3838
// Not implemented as a method on Ring so we can test separately.
3939
func DoBatch(ctx context.Context, r ReadRing, keys []uint32, callback func(IngesterDesc, []int) error, cleanup func()) error {
40+
expectedTrackers := len(keys) * (r.ReplicationFactor() + 1) / r.IngesterCount()
4041
itemTrackers := make([]itemTracker, len(keys))
4142
ingesters := make(map[string]ingester, r.IngesterCount())
4243

@@ -50,7 +51,11 @@ func DoBatch(ctx context.Context, r ReadRing, keys []uint32, callback func(Inges
5051
itemTrackers[i].maxFailures = replicationSet.MaxErrors
5152

5253
for _, desc := range replicationSet.Ingesters {
53-
curr := ingesters[desc.Addr]
54+
curr, found := ingesters[desc.Addr]
55+
if !found {
56+
curr.itemTrackers = make([]*itemTracker, 0, expectedTrackers)
57+
curr.indexes = make([]int, 0, expectedTrackers)
58+
}
5459
ingesters[desc.Addr] = ingester{
5560
desc: desc,
5661
itemTrackers: append(curr.itemTrackers, &itemTrackers[i]),

0 commit comments

Comments
 (0)