Simplify the design to update concurrency controller once the rule evaluation has done

Signed-off-by: Marco Pracucci <marco@pracucci.com>
This commit is contained in:
Marco Pracucci 2024-01-26 19:12:40 +01:00
parent 1bb341fa51
commit 21a03dc018
No known key found for this signature in database
GPG key ID: 74C1BD403D2DF9B5

View file

@ -437,13 +437,10 @@ func (g *Group) Eval(ctx context.Context, ts time.Time) {
default:
}
eval := func(i int, rule Rule, async bool) {
defer func() {
if async {
wg.Done()
g.opts.RuleConcurrencyController.Done()
}
}()
eval := func(i int, rule Rule, cleanup func()) {
if cleanup != nil {
defer cleanup()
}
logger := log.WithPrefix(g.logger, "name", rule.Name(), "index", i)
ctx, sp := otel.Tracer("").Start(ctx, "rule")
@ -576,9 +573,13 @@ func (g *Group) Eval(ctx context.Context, ts time.Time) {
ctrl := g.opts.RuleConcurrencyController
if ctrl != nil && ctrl.RuleEligible(g, rule) && ctrl.Allow() {
wg.Add(1)
go eval(i, rule, true)
go eval(i, rule, func() {
wg.Done()
g.opts.RuleConcurrencyController.Done()
})
} else {
eval(i, rule, false)
eval(i, rule, nil)
}
}