Skip to content

Commit 8980e9a

Browse files
authored
pkg/settings/limits: fix updates for global resources (#1922)
1 parent 1e12ff9 commit 8980e9a

5 files changed

Lines changed: 131 additions & 2 deletions

File tree

.mockery.yaml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,3 +57,10 @@ packages:
5757
JWTGenerator:
5858
JWTAuthenticator:
5959
NodeAuthProvider:
60+
github.com/smartcontractkit/chainlink-common/pkg/settings:
61+
config:
62+
filename: "mock_{{.InterfaceName | snakecase}}_test.go"
63+
dir: "{{.InterfaceDir}}/limits"
64+
outpkg: limits
65+
interfaces:
66+
Getter:

pkg/settings/limits/factory.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import (
1212

1313
// Factory holds optional configuration for constructing [Limit]s.
1414
type Factory struct {
15-
// Settings is a source of dynamic limit and burst updates.
15+
// Settings is a source of dynamic limit updates.
1616
// [settings.Getter.GetScoped] will be polled for updates, unless Settings is also a settings.Registry, in which case
1717
// the channel based [settings.Registry.SubscribeScoped] will be used instead.
1818
Settings settings.Getter // optional

pkg/settings/limits/mock_getter_test.go

Lines changed: 95 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/settings/limits/resource.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ func newGlobalResourcePoolLimiter[N Number](f Factory, limit settings.Setting[N]
6262
}
6363

6464
if f.Settings != nil {
65-
l.getLimitFn = func(ctx context.Context) (N, error) {
65+
l.resourcePoolUsage.getLimitFn = func(ctx context.Context) (N, error) {
6666
return limit.GetOrDefault(ctx, f.Settings)
6767
}
6868
if registry, ok := f.Settings.(settings.Registry); ok {

pkg/settings/limits/resource_test.go

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,12 @@ import (
1010
"time"
1111

1212
"github.com/stretchr/testify/assert"
13+
"github.com/stretchr/testify/mock"
1314
"github.com/stretchr/testify/require"
1415
"go.opentelemetry.io/otel/attribute"
1516
"go.opentelemetry.io/otel/sdk/metric/metricdata"
1617

18+
"github.com/smartcontractkit/chainlink-common/pkg/config"
1719
"github.com/smartcontractkit/chainlink-common/pkg/contexts"
1820
"github.com/smartcontractkit/chainlink-common/pkg/settings"
1921
)
@@ -125,6 +127,31 @@ func ExampleMultiResourcePoolLimiter() {
125127
// <nil>
126128
}
127129

130+
func TestMakeResourcePoolLimiter_Update(t *testing.T) {
131+
t.Parallel()
132+
ctx := t.Context()
133+
getter := NewGetter(t)
134+
getter.On("GetScoped", mock.Anything, settings.ScopeGlobal, "foo").Return("10", nil).Twice()
135+
f := Factory{Settings: getter}
136+
s := settings.Size(1)
137+
s.Key = "foo"
138+
rl, err := MakeResourcePoolLimiter(f, s)
139+
require.NoError(t, err)
140+
141+
// validate
142+
a, err := rl.Available(ctx)
143+
require.NoError(t, err)
144+
assert.Equal(t, config.Size(10), a)
145+
assert.Error(t, rl.Use(ctx, 11))
146+
// update
147+
getter.On("GetScoped", mock.Anything, settings.ScopeGlobal, "foo").Return("20", nil).Twice()
148+
// re-validate
149+
a, err = rl.Available(ctx)
150+
require.NoError(t, err)
151+
assert.Equal(t, config.Size(20), a)
152+
assert.NoError(t, rl.Use(ctx, 11))
153+
}
154+
128155
func TestMakeResourcePoolLimiter(t *testing.T) {
129156
t.Parallel()
130157
for _, tt := range []struct {

0 commit comments

Comments
 (0)