@@ -181,6 +181,14 @@ func TestTTLDelRetryBuffer(t *testing.T) {
181
181
require .Equal (t , uint64 (7 ), statics6 .ErrorRows .Load ())
182
182
}
183
183
184
+ type mockDelRateLimiter struct {
185
+ waitFn func (context.Context ) error
186
+ }
187
+
188
+ func (m * mockDelRateLimiter ) WaitDelToken (ctx context.Context ) error {
189
+ return m .waitFn (ctx )
190
+ }
191
+
184
192
func TestTTLDeleteTaskDoDelete (t * testing.T ) {
185
193
origBatchSize := variable .TTLDeleteBatchSize .Load ()
186
194
delBatch := 3
@@ -242,11 +250,12 @@ func TestTTLDeleteTaskDoDelete(t *testing.T) {
242
250
}
243
251
244
252
cases := []struct {
245
- batchCnt int
246
- retryErrBatches []int
247
- noRetryErrBatches []int
248
- cancelCtx bool
249
- cancelCtxBatch int
253
+ batchCnt int
254
+ retryErrBatches []int
255
+ noRetryErrBatches []int
256
+ cancelCtx bool
257
+ cancelCtxBatch int
258
+ cancelCtxErrInLimiter bool
250
259
}{
251
260
{
252
261
// all success
@@ -276,18 +285,50 @@ func TestTTLDeleteTaskDoDelete(t *testing.T) {
276
285
cancelCtx : true ,
277
286
cancelCtxBatch : 6 ,
278
287
},
288
+ {
289
+ // some executed when rate limiter returns error
290
+ batchCnt : 10 ,
291
+ cancelCtx : true ,
292
+ cancelCtxBatch : 3 ,
293
+ cancelCtxErrInLimiter : true ,
294
+ },
295
+ }
296
+
297
+ errLimiter := & mockDelRateLimiter {
298
+ waitFn : func (ctx context.Context ) error {
299
+ return errors .New ("mock rate limiter error" )
300
+ },
279
301
}
280
302
303
+ origGlobalDelRateLimiter := globalDelRateLimiter
304
+ defer func () {
305
+ globalDelRateLimiter = origGlobalDelRateLimiter
306
+ }()
307
+
281
308
for _ , c := range cases {
309
+ << << << < HEAD
282
310
ctx , cancel := context .WithCancel (context .Background ())
311
+ == == == =
312
+ globalDelRateLimiter = origGlobalDelRateLimiter
313
+ require .True (t , c .cancelCtxBatch >= 0 && c .cancelCtxBatch < c .batchCnt )
314
+ ctx , cancel := context .WithTimeout (context .Background (), time .Minute )
315
+ >> >> >> > cea46f17ce0 (ttl : retry the rows when del rate limiter returns error in delWorker (#58206 ))
283
316
if c .cancelCtx && c .cancelCtxBatch == 0 {
284
- cancel ()
317
+ if c .cancelCtxErrInLimiter {
318
+ globalDelRateLimiter = errLimiter
319
+ } else {
320
+ cancel ()
321
+ }
285
322
}
286
323
287
324
afterExecuteSQL = func () {
288
325
if c .cancelCtx {
289
326
if len (sqls ) == c .cancelCtxBatch {
290
- cancel ()
327
+ if c .cancelCtxErrInLimiter {
328
+ globalDelRateLimiter = errLimiter
329
+ } else {
330
+ cancel ()
331
+ }
291
332
}
292
333
}
293
334
}
@@ -358,21 +399,21 @@ func TestTTLDeleteRateLimiter(t *testing.T) {
358
399
}()
359
400
360
401
variable .TTLDeleteRateLimit .Store (100000 )
361
- require .NoError (t , globalDelRateLimiter .Wait (ctx ))
362
- require .Equal (t , rate .Limit (100000 ), globalDelRateLimiter .limiter .Limit ())
363
- require .Equal (t , int64 (100000 ), globalDelRateLimiter .limit .Load ())
402
+ require .NoError (t , globalDelRateLimiter .WaitDelToken (ctx ))
403
+ require .Equal (t , rate .Limit (100000 ), globalDelRateLimiter .( * defaultDelRateLimiter ). limiter .Limit ())
404
+ require .Equal (t , int64 (100000 ), globalDelRateLimiter .( * defaultDelRateLimiter ). limit .Load ())
364
405
365
406
variable .TTLDeleteRateLimit .Store (0 )
366
- require .NoError (t , globalDelRateLimiter .Wait (ctx ))
367
- require .Equal (t , rate .Limit (0 ), globalDelRateLimiter .limiter .Limit ())
368
- require .Equal (t , int64 (0 ), globalDelRateLimiter .limit .Load ())
407
+ require .NoError (t , globalDelRateLimiter .WaitDelToken (ctx ))
408
+ require .Equal (t , rate .Limit (0 ), globalDelRateLimiter .( * defaultDelRateLimiter ). limiter .Limit ())
409
+ require .Equal (t , int64 (0 ), globalDelRateLimiter .( * defaultDelRateLimiter ). limit .Load ())
369
410
370
411
// 0 stands for no limit
371
- require .NoError (t , globalDelRateLimiter .Wait (ctx ))
412
+ require .NoError (t , globalDelRateLimiter .WaitDelToken (ctx ))
372
413
// cancel ctx returns an error
373
414
cancel ()
374
415
cancel = nil
375
- require .EqualError (t , globalDelRateLimiter .Wait (ctx ), "context canceled" )
416
+ require .EqualError (t , globalDelRateLimiter .WaitDelToken (ctx ), "context canceled" )
376
417
}
377
418
378
419
func TestTTLDeleteTaskWorker (t * testing.T ) {
0 commit comments