Skip to content

Commit 2a635d1

Browse files
committed
refactored retry budget sources
1 parent 8a96d36 commit 2a635d1

File tree

25 files changed

+183
-147
lines changed

25 files changed

+183
-147
lines changed

config/config.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import (
1212
balancerConfig "github.com/ydb-platform/ydb-go-sdk/v3/internal/balancer/config"
1313
"github.com/ydb-platform/ydb-go-sdk/v3/internal/config"
1414
"github.com/ydb-platform/ydb-go-sdk/v3/internal/meta"
15-
"github.com/ydb-platform/ydb-go-sdk/v3/retry"
15+
"github.com/ydb-platform/ydb-go-sdk/v3/internal/retry"
1616
"github.com/ydb-platform/ydb-go-sdk/v3/trace"
1717
)
1818

@@ -159,7 +159,7 @@ func WithTrace(t trace.Driver, opts ...trace.DriverComposeOption) Option { //nol
159159
}
160160

161161
// Experimental: https://github.com/ydb-platform/ydb-go-sdk/blob/master/VERSIONING.md#experimental
162-
func WithRetryLimiter(l retry.Limiter) Option {
162+
func WithRetryLimiter(l retry.Budget) Option {
163163
return func(c *Config) {
164164
config.SetRetryLimiter(&c.Common, l)
165165
}

internal/balancer/balancer.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ func (b *Balancer) clusterDiscovery(ctx context.Context) (err error) {
8989
},
9090
retry.WithIdempotent(true),
9191
retry.WithTrace(b.driverConfig.TraceRetry()),
92-
retry.WithLimiter(b.driverConfig.RetryLimiter()),
92+
retry.WithBudget(b.driverConfig.RetryLimiter()),
9393
)
9494
}
9595

internal/config/config.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,19 @@ package config
33
import (
44
"time"
55

6+
retry2 "github.com/ydb-platform/ydb-go-sdk/v3/internal/retry"
67
"github.com/ydb-platform/ydb-go-sdk/v3/retry"
78
"github.com/ydb-platform/ydb-go-sdk/v3/trace"
89
)
910

10-
var defaultRetryLimiter = retry.Quoter(-1)
11+
var defaultRetryLimiter = retry.Budget(-1)
1112

1213
type Common struct {
1314
operationTimeout time.Duration
1415
operationCancelAfter time.Duration
1516
disableAutoRetry bool
1617
traceRetry trace.Retry
17-
retryLimiter retry.Limiter
18+
retryLimiter retry2.Budget
1819

1920
panicCallback func(e interface{})
2021
}
@@ -52,7 +53,7 @@ func (c *Common) TraceRetry() *trace.Retry {
5253
return &c.traceRetry
5354
}
5455

55-
func (c *Common) RetryLimiter() retry.Limiter {
56+
func (c *Common) RetryLimiter() retry2.Budget {
5657
if c.retryLimiter == nil {
5758
return defaultRetryLimiter
5859
}
@@ -94,6 +95,6 @@ func SetTraceRetry(c *Common, t *trace.Retry, opts ...trace.RetryComposeOption)
9495
c.traceRetry = *c.traceRetry.Compose(t, opts...)
9596
}
9697

97-
func SetRetryLimiter(c *Common, l retry.Limiter) {
98+
func SetRetryLimiter(c *Common, l retry2.Budget) {
9899
c.retryLimiter = l
99100
}

internal/coordination/client.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ func (c *Client) CreateNode(ctx context.Context, path string, config coordinatio
117117
retry.WithStackTrace(),
118118
retry.WithIdempotent(true),
119119
retry.WithTrace(c.config.TraceRetry()),
120-
retry.WithLimiter(c.config.RetryLimiter()),
120+
retry.WithBudget(c.config.RetryLimiter()),
121121
)
122122
}
123123

@@ -150,7 +150,7 @@ func (c *Client) AlterNode(ctx context.Context, path string, config coordination
150150
retry.WithStackTrace(),
151151
retry.WithIdempotent(true),
152152
retry.WithTrace(c.config.TraceRetry()),
153-
retry.WithLimiter(c.config.RetryLimiter()),
153+
retry.WithBudget(c.config.RetryLimiter()),
154154
)
155155
}
156156

@@ -211,7 +211,7 @@ func (c *Client) DropNode(ctx context.Context, path string) (finalErr error) {
211211
retry.WithStackTrace(),
212212
retry.WithIdempotent(true),
213213
retry.WithTrace(c.config.TraceRetry()),
214-
retry.WithLimiter(c.config.RetryLimiter()),
214+
retry.WithBudget(c.config.RetryLimiter()),
215215
)
216216
}
217217

@@ -271,7 +271,7 @@ func (c *Client) DescribeNode(
271271
retry.WithStackTrace(),
272272
retry.WithIdempotent(true),
273273
retry.WithTrace(c.config.TraceRetry()),
274-
retry.WithLimiter(c.config.RetryLimiter()),
274+
retry.WithBudget(c.config.RetryLimiter()),
275275
)
276276
if err != nil {
277277
return nil, nil, xerrors.WithStackTrace(err)

internal/query/options/retry.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package options
22

33
import (
44
"github.com/ydb-platform/ydb-go-sdk/v3/internal/query/tx"
5+
retry2 "github.com/ydb-platform/ydb-go-sdk/v3/internal/retry"
56
"github.com/ydb-platform/ydb-go-sdk/v3/retry"
67
"github.com/ydb-platform/ydb-go-sdk/v3/trace"
78
)
@@ -95,8 +96,8 @@ func WithTrace(t *trace.Query) traceOption {
9596
return traceOption{t: t}
9697
}
9798

98-
func WithLimiter(l retry.Limiter) retryOptionsOption {
99-
return []retry.Option{retry.WithLimiter(l)}
99+
func WithBudget(l retry2.Budget) retryOptionsOption {
100+
return []retry.Option{retry.WithBudget(l)}
100101
}
101102

102103
func ParseDoOpts(t *trace.Query, opts ...DoOption) (s *doSettings) {

internal/ratelimiter/client.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ func (c *Client) CreateResource(
6363
retry.WithStackTrace(),
6464
retry.WithIdempotent(true),
6565
retry.WithTrace(c.config.TraceRetry()),
66-
retry.WithLimiter(c.config.RetryLimiter()),
66+
retry.WithBudget(c.config.RetryLimiter()),
6767
)
6868
}
6969

@@ -113,7 +113,7 @@ func (c *Client) AlterResource(
113113
retry.WithStackTrace(),
114114
retry.WithIdempotent(true),
115115
retry.WithTrace(c.config.TraceRetry()),
116-
retry.WithLimiter(c.config.RetryLimiter()),
116+
retry.WithBudget(c.config.RetryLimiter()),
117117
)
118118
}
119119

@@ -163,7 +163,7 @@ func (c *Client) DropResource(
163163
retry.WithStackTrace(),
164164
retry.WithIdempotent(true),
165165
retry.WithTrace(c.config.TraceRetry()),
166-
retry.WithLimiter(c.config.RetryLimiter()),
166+
retry.WithBudget(c.config.RetryLimiter()),
167167
)
168168
}
169169

@@ -209,7 +209,7 @@ func (c *Client) ListResource(
209209
retry.WithIdempotent(true),
210210
retry.WithStackTrace(),
211211
retry.WithTrace(c.config.TraceRetry()),
212-
retry.WithLimiter(c.config.RetryLimiter()),
212+
retry.WithBudget(c.config.RetryLimiter()),
213213
)
214214

215215
return list, err
@@ -269,7 +269,7 @@ func (c *Client) DescribeResource(
269269
retry.WithIdempotent(true),
270270
retry.WithStackTrace(),
271271
retry.WithTrace(c.config.TraceRetry()),
272-
retry.WithLimiter(c.config.RetryLimiter()),
272+
retry.WithBudget(c.config.RetryLimiter()),
273273
)
274274

275275
return
@@ -338,7 +338,7 @@ func (c *Client) AcquireResource(
338338
return retry.Retry(ctx, call,
339339
retry.WithStackTrace(),
340340
retry.WithTrace(c.config.TraceRetry()),
341-
retry.WithLimiter(c.config.RetryLimiter()),
341+
retry.WithBudget(c.config.RetryLimiter()),
342342
)
343343
}
344344

retry/quoter.go renamed to internal/retry/budget.go

Lines changed: 13 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2,43 +2,36 @@ package retry
22

33
import (
44
"context"
5-
"errors"
65
"time"
76

87
"github.com/jonboulle/clockwork"
98

109
"github.com/ydb-platform/ydb-go-sdk/v3/internal/xerrors"
1110
)
1211

13-
var (
14-
// Experimental: https://github.com/ydb-platform/ydb-go-sdk/blob/master/VERSIONING.md#experimental
15-
ErrNoQuota = xerrors.Wrap(errors.New("no retry quota"))
16-
17-
_ Limiter = (*rateLimiter)(nil)
18-
)
19-
2012
type (
2113
// Experimental: https://github.com/ydb-platform/ydb-go-sdk/blob/master/VERSIONING.md#experimental
22-
Limiter interface {
14+
Budget interface {
2315
Acquire(ctx context.Context) error
2416
}
25-
// Experimental: https://github.com/ydb-platform/ydb-go-sdk/blob/master/VERSIONING.md#experimental
26-
LimiterStoper interface {
27-
Limiter
28-
Stop()
29-
}
30-
rateLimiter struct {
17+
budget struct {
3118
clock clockwork.Clock
3219
ticker clockwork.Ticker
3320
quota chan struct{}
3421
done chan struct{}
3522
}
36-
rateLimiterOption func(q *rateLimiter)
23+
BudgetOption func(q *budget)
3724
)
3825

26+
func WithBudgetClock(clock clockwork.Clock) BudgetOption {
27+
return func(q *budget) {
28+
q.clock = clock
29+
}
30+
}
31+
3932
// Experimental: https://github.com/ydb-platform/ydb-go-sdk/blob/master/VERSIONING.md#experimental
40-
func Quoter(attemptsPerSecond int, opts ...rateLimiterOption) *rateLimiter {
41-
q := &rateLimiter{
33+
func NewBudget(attemptsPerSecond int, opts ...BudgetOption) *budget {
34+
q := &budget{
4235
clock: clockwork.NewRealClock(),
4336
done: make(chan struct{}),
4437
}
@@ -75,15 +68,15 @@ func Quoter(attemptsPerSecond int, opts ...rateLimiterOption) *rateLimiter {
7568
}
7669

7770
// Experimental: https://github.com/ydb-platform/ydb-go-sdk/blob/master/VERSIONING.md#experimental
78-
func (q *rateLimiter) Stop() {
71+
func (q *budget) Stop() {
7972
if q.ticker != nil {
8073
q.ticker.Stop()
8174
}
8275
close(q.done)
8376
}
8477

8578
// Experimental: https://github.com/ydb-platform/ydb-go-sdk/blob/master/VERSIONING.md#experimental
86-
func (q *rateLimiter) Acquire(ctx context.Context) error {
79+
func (q *budget) Acquire(ctx context.Context) error {
8780
select {
8881
case <-ctx.Done():
8982
return ctx.Err()

retry/quoter_test.go renamed to internal/retry/budget_test.go

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,23 +12,21 @@ import (
1212
"github.com/ydb-platform/ydb-go-sdk/v3/internal/xtest"
1313
)
1414

15-
func TestUnlimitedLimiter(t *testing.T) {
15+
func TestUnlimitedBudget(t *testing.T) {
1616
xtest.TestManyTimes(t, func(t testing.TB) {
1717
ctx, cancel := xcontext.WithCancel(xtest.Context(t))
18-
q := Quoter(-1)
18+
q := NewBudget(-1)
1919
require.NoError(t, q.Acquire(ctx))
2020
cancel()
2121
require.ErrorIs(t, q.Acquire(ctx), context.Canceled)
2222
})
2323
}
2424

25-
func TestQuoter(t *testing.T) {
25+
func TestBudget(t *testing.T) {
2626
xtest.TestManyTimes(t, func(t testing.TB) {
2727
ctx, cancel := xcontext.WithCancel(xtest.Context(t))
2828
clock := clockwork.NewFakeClock()
29-
q := Quoter(1, func(q *rateLimiter) {
30-
q.clock = clock
31-
})
29+
q := NewBudget(1, WithBudgetClock(clock))
3230
defer q.Stop()
3331
require.NoError(t, q.Acquire(ctx))
3432
acquireCh := make(chan struct{})

internal/scheme/client.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ func (c *Client) MakeDirectory(ctx context.Context, path string) (finalErr error
6464
retry.WithStackTrace(),
6565
retry.WithIdempotent(true),
6666
retry.WithTrace(c.config.TraceRetry()),
67-
retry.WithLimiter(c.config.RetryLimiter()),
67+
retry.WithBudget(c.config.RetryLimiter()),
6868
)
6969
}
7070

@@ -104,7 +104,7 @@ func (c *Client) RemoveDirectory(ctx context.Context, path string) (finalErr err
104104
retry.WithStackTrace(),
105105
retry.WithIdempotent(true),
106106
retry.WithTrace(c.config.TraceRetry()),
107-
retry.WithLimiter(c.config.RetryLimiter()),
107+
retry.WithBudget(c.config.RetryLimiter()),
108108
)
109109
}
110110

@@ -146,7 +146,7 @@ func (c *Client) ListDirectory(ctx context.Context, path string) (d scheme.Direc
146146
retry.WithIdempotent(true),
147147
retry.WithStackTrace(),
148148
retry.WithTrace(c.config.TraceRetry()),
149-
retry.WithLimiter(c.config.RetryLimiter()),
149+
retry.WithBudget(c.config.RetryLimiter()),
150150
)
151151

152152
return d, xerrors.WithStackTrace(err)
@@ -210,7 +210,7 @@ func (c *Client) DescribePath(ctx context.Context, path string) (e scheme.Entry,
210210
retry.WithIdempotent(true),
211211
retry.WithStackTrace(),
212212
retry.WithTrace(c.config.TraceRetry()),
213-
retry.WithLimiter(c.config.RetryLimiter()),
213+
retry.WithBudget(c.config.RetryLimiter()),
214214
)
215215

216216
return e, xerrors.WithStackTrace(err)
@@ -272,7 +272,7 @@ func (c *Client) ModifyPermissions(
272272
retry.WithStackTrace(),
273273
retry.WithIdempotent(true),
274274
retry.WithTrace(c.config.TraceRetry()),
275-
retry.WithLimiter(c.config.RetryLimiter()),
275+
retry.WithBudget(c.config.RetryLimiter()),
276276
)
277277
}
278278

internal/scripting/client.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ func (c *Client) Execute(
6060
err = retry.Retry(ctx, call,
6161
retry.WithStackTrace(),
6262
retry.WithTrace(c.config.TraceRetry()),
63-
retry.WithLimiter(c.config.RetryLimiter()),
63+
retry.WithBudget(c.config.RetryLimiter()),
6464
)
6565

6666
return r, xerrors.WithStackTrace(err)
@@ -140,7 +140,7 @@ func (c *Client) Explain(
140140
retry.WithStackTrace(),
141141
retry.WithIdempotent(true),
142142
retry.WithTrace(c.config.TraceRetry()),
143-
retry.WithLimiter(c.config.RetryLimiter()),
143+
retry.WithBudget(c.config.RetryLimiter()),
144144
)
145145

146146
return e, xerrors.WithStackTrace(err)
@@ -215,7 +215,7 @@ func (c *Client) StreamExecute(
215215
err = retry.Retry(ctx, call,
216216
retry.WithStackTrace(),
217217
retry.WithTrace(c.config.TraceRetry()),
218-
retry.WithLimiter(c.config.RetryLimiter()),
218+
retry.WithBudget(c.config.RetryLimiter()),
219219
)
220220

221221
return r, xerrors.WithStackTrace(err)

0 commit comments

Comments
 (0)