Skip to content

Commit 2af8c72

Browse files
authoredSep 3, 2024··
Narrow scope of used slots lock for tracking slot supplier (#1617)
1 parent eb41d13 commit 2af8c72

File tree

1 file changed

+16
-13
lines changed

1 file changed

+16
-13
lines changed
 

‎internal/tuning.go

+16-13
Original file line numberDiff line numberDiff line change
@@ -417,7 +417,10 @@ func (t *trackingSlotSupplier) ReserveSlot(
417417
return nil, fmt.Errorf("slot supplier returned nil permit")
418418
}
419419
t.issuedSlotsAtomic.Add(1)
420-
t.publishMetrics(false)
420+
t.slotsMutex.Lock()
421+
usedSlots := len(t.usedSlots)
422+
t.slotsMutex.Unlock()
423+
t.publishMetrics(usedSlots)
421424
return permit, nil
422425
}
423426

@@ -432,7 +435,10 @@ func (t *trackingSlotSupplier) TryReserveSlot(data *slotReservationData) *SlotPe
432435
})
433436
if permit != nil {
434437
t.issuedSlotsAtomic.Add(1)
435-
t.publishMetrics(false)
438+
t.slotsMutex.Lock()
439+
usedSlots := len(t.usedSlots)
440+
t.slotsMutex.Unlock()
441+
t.publishMetrics(usedSlots)
436442
}
437443
return permit
438444
}
@@ -442,42 +448,39 @@ func (t *trackingSlotSupplier) MarkSlotUsed(permit *SlotPermit) {
442448
panic("Cannot mark nil permit as used")
443449
}
444450
t.slotsMutex.Lock()
445-
defer t.slotsMutex.Unlock()
446451
t.usedSlots[permit] = struct{}{}
452+
usedSlots := len(t.usedSlots)
453+
t.slotsMutex.Unlock()
447454
t.inner.MarkSlotUsed(&slotMarkUsedContextImpl{
448455
permit: permit,
449456
logger: t.logger,
450457
metrics: t.metrics,
451458
})
452-
t.publishMetrics(true)
459+
t.publishMetrics(usedSlots)
453460
}
454461

455462
func (t *trackingSlotSupplier) ReleaseSlot(permit *SlotPermit, reason SlotReleaseReason) {
456463
if permit == nil {
457464
panic("Cannot release with nil permit")
458465
}
459466
t.slotsMutex.Lock()
460-
defer t.slotsMutex.Unlock()
467+
delete(t.usedSlots, permit)
468+
usedSlots := len(t.usedSlots)
469+
t.slotsMutex.Unlock()
461470
t.inner.ReleaseSlot(&slotReleaseContextImpl{
462471
permit: permit,
463472
reason: reason,
464473
logger: t.logger,
465474
metrics: t.metrics,
466475
})
467476
t.issuedSlotsAtomic.Add(-1)
468-
delete(t.usedSlots, permit)
469477
if permit.extraReleaseCallback != nil {
470478
permit.extraReleaseCallback()
471479
}
472-
t.publishMetrics(true)
480+
t.publishMetrics(usedSlots)
473481
}
474482

475-
func (t *trackingSlotSupplier) publishMetrics(lockAlreadyHeld bool) {
476-
if !lockAlreadyHeld {
477-
t.slotsMutex.Lock()
478-
defer t.slotsMutex.Unlock()
479-
}
480-
usedSlots := len(t.usedSlots)
483+
func (t *trackingSlotSupplier) publishMetrics(usedSlots int) {
481484
if t.inner.MaxSlots() != 0 {
482485
t.taskSlotsAvailableGauge.Update(float64(t.inner.MaxSlots() - usedSlots))
483486
}

0 commit comments

Comments
 (0)
Please sign in to comment.