Skip to content

Commit ef4e240

Browse files
authored
core/services/workflows/syncerlimiter: expand keyedOwnerSettings to check default settings.Getter (#21687)
1 parent 3633dc6 commit ef4e240

2 files changed

Lines changed: 20 additions & 6 deletions

File tree

core/services/workflows/syncerlimiter/limiter.go

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,18 @@ type Config struct {
2727
}
2828

2929
type keyedOwnerSettings struct {
30-
key string
31-
vals map[string]string
30+
getter settings.Getter
31+
key string
32+
vals map[string]string
3233
}
3334

3435
func (k keyedOwnerSettings) GetScoped(ctx context.Context, scope settings.Scope, key string) (value string, err error) {
36+
if k.getter != nil {
37+
value, err = k.getter.GetScoped(ctx, scope, key)
38+
}
39+
if value != "" {
40+
return
41+
}
3542
if k.key != key || scope != settings.ScopeOwner {
3643
return "", nil
3744
}
@@ -50,7 +57,7 @@ func NewWorkflowLimits(lggr logger.Logger, cfg Config, lf limits.Factory) (limit
5057
for k, v := range cfg.PerOwnerOverrides {
5158
perOwner[k] = strconv.Itoa(int(v))
5259
}
53-
lf.Settings = keyedOwnerSettings{key: ownerLimit.Key, vals: perOwner}
60+
lf.Settings = keyedOwnerSettings{getter: lf.Settings, key: ownerLimit.Key, vals: perOwner}
5461
owner, err := limits.MakeResourcePoolLimiter(lf, ownerLimit)
5562
if err != nil {
5663
return nil, fmt.Errorf("failed to create owner resource limiter: %w", err)

core/services/workflows/v2/engine_test.go

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -98,10 +98,17 @@ func TestEngine_Init(t *testing.T) {
9898

9999
func TestEngine_Start_RateLimited(t *testing.T) {
100100
t.Parallel()
101+
getter, err := settings.NewTOMLGetter([]byte(`
102+
[global]
103+
WorkflowExecutionConcurrencyLimit = "2"
104+
[global.PerOwner]
105+
WorkflowExecutionConcurrencyLimit = "1"
106+
`))
107+
require.NoError(t, err)
101108
sLimiter, err := syncerlimiter.NewWorkflowLimits(logger.Test(t), syncerlimiter.Config{
102-
Global: 2,
103-
PerOwner: 1,
104-
}, limits.Factory{})
109+
Global: 0,
110+
PerOwner: 0,
111+
}, limits.Factory{Settings: getter})
105112
require.NoError(t, err)
106113

107114
module := modulemocks.NewModuleV2(t)

0 commit comments

Comments
 (0)