@@ -197,6 +197,14 @@ func TestTTLDelRetryBuffer(t *testing.T) {
197
197
require .Equal (t , uint64 (0 ), statics7 .ErrorRows .Load ())
198
198
}
199
199
200
+ type mockDelRateLimiter struct {
201
+ waitFn func (context.Context ) error
202
+ }
203
+
204
+ func (m * mockDelRateLimiter ) WaitDelToken (ctx context.Context ) error {
205
+ return m .waitFn (ctx )
206
+ }
207
+
200
208
func TestTTLDeleteTaskDoDelete (t * testing.T ) {
201
209
origBatchSize := variable .TTLDeleteBatchSize .Load ()
202
210
delBatch := 3
@@ -258,11 +266,12 @@ func TestTTLDeleteTaskDoDelete(t *testing.T) {
258
266
}
259
267
260
268
cases := []struct {
261
- batchCnt int
262
- retryErrBatches []int
263
- noRetryErrBatches []int
264
- cancelCtx bool
265
- cancelCtxBatch int
269
+ batchCnt int
270
+ retryErrBatches []int
271
+ noRetryErrBatches []int
272
+ cancelCtx bool
273
+ cancelCtxBatch int
274
+ cancelCtxErrInLimiter bool
266
275
}{
267
276
{
268
277
// all success
@@ -292,19 +301,46 @@ func TestTTLDeleteTaskDoDelete(t *testing.T) {
292
301
cancelCtx : true ,
293
302
cancelCtxBatch : 6 ,
294
303
},
304
+ {
305
+ // some executed when rate limiter returns error
306
+ batchCnt : 10 ,
307
+ cancelCtx : true ,
308
+ cancelCtxBatch : 3 ,
309
+ cancelCtxErrInLimiter : true ,
310
+ },
311
+ }
312
+
313
+ errLimiter := & mockDelRateLimiter {
314
+ waitFn : func (ctx context.Context ) error {
315
+ return errors .New ("mock rate limiter error" )
316
+ },
295
317
}
296
318
319
+ origGlobalDelRateLimiter := globalDelRateLimiter
320
+ defer func () {
321
+ globalDelRateLimiter = origGlobalDelRateLimiter
322
+ }()
323
+
297
324
for _ , c := range cases {
325
+ globalDelRateLimiter = origGlobalDelRateLimiter
298
326
require .True (t , c .cancelCtxBatch >= 0 && c .cancelCtxBatch < c .batchCnt )
299
- ctx , cancel := context .WithCancel (context .Background ())
327
+ ctx , cancel := context .WithTimeout (context .Background (), time . Minute )
300
328
if c .cancelCtx && c .cancelCtxBatch == 0 {
301
- cancel ()
329
+ if c .cancelCtxErrInLimiter {
330
+ globalDelRateLimiter = errLimiter
331
+ } else {
332
+ cancel ()
333
+ }
302
334
}
303
335
304
336
afterExecuteSQL = func () {
305
337
if c .cancelCtx {
306
338
if len (sqls ) == c .cancelCtxBatch {
307
- cancel ()
339
+ if c .cancelCtxErrInLimiter {
340
+ globalDelRateLimiter = errLimiter
341
+ } else {
342
+ cancel ()
343
+ }
308
344
}
309
345
}
310
346
}
@@ -373,21 +409,21 @@ func TestTTLDeleteRateLimiter(t *testing.T) {
373
409
}()
374
410
375
411
variable .TTLDeleteRateLimit .Store (100000 )
376
- require .NoError (t , globalDelRateLimiter .Wait (ctx ))
377
- require .Equal (t , rate .Limit (100000 ), globalDelRateLimiter .limiter .Limit ())
378
- require .Equal (t , int64 (100000 ), globalDelRateLimiter .limit .Load ())
412
+ require .NoError (t , globalDelRateLimiter .WaitDelToken (ctx ))
413
+ require .Equal (t , rate .Limit (100000 ), globalDelRateLimiter .( * defaultDelRateLimiter ). limiter .Limit ())
414
+ require .Equal (t , int64 (100000 ), globalDelRateLimiter .( * defaultDelRateLimiter ). limit .Load ())
379
415
380
416
variable .TTLDeleteRateLimit .Store (0 )
381
- require .NoError (t , globalDelRateLimiter .Wait (ctx ))
382
- require .Equal (t , rate .Limit (0 ), globalDelRateLimiter .limiter .Limit ())
383
- require .Equal (t , int64 (0 ), globalDelRateLimiter .limit .Load ())
417
+ require .NoError (t , globalDelRateLimiter .WaitDelToken (ctx ))
418
+ require .Equal (t , rate .Limit (0 ), globalDelRateLimiter .( * defaultDelRateLimiter ). limiter .Limit ())
419
+ require .Equal (t , int64 (0 ), globalDelRateLimiter .( * defaultDelRateLimiter ). limit .Load ())
384
420
385
421
// 0 stands for no limit
386
- require .NoError (t , globalDelRateLimiter .Wait (ctx ))
422
+ require .NoError (t , globalDelRateLimiter .WaitDelToken (ctx ))
387
423
// cancel ctx returns an error
388
424
cancel ()
389
425
cancel = nil
390
- require .EqualError (t , globalDelRateLimiter .Wait (ctx ), "context canceled" )
426
+ require .EqualError (t , globalDelRateLimiter .WaitDelToken (ctx ), "context canceled" )
391
427
}
392
428
393
429
func TestTTLDeleteTaskWorker (t * testing.T ) {
0 commit comments