From 21a03dc018cbfc90b690cbf21e945db029b79f00 Mon Sep 17 00:00:00 2001 From: Marco Pracucci Date: Fri, 26 Jan 2024 19:12:40 +0100 Subject: [PATCH] Simplify the design to update concurrency controller once the rule evaluation has done Signed-off-by: Marco Pracucci --- rules/group.go | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/rules/group.go b/rules/group.go index 939d2cd5b..b50189fa9 100644 --- a/rules/group.go +++ b/rules/group.go @@ -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) } }