@@ -108,6 +108,9 @@ class TTestSetupAcquireActor : public TTestSetup {
108
108
request.set_resource_path (ResourcePath);
109
109
110
110
SetDuration (Settings.OperationTimeout_ , *request.mutable_operation_params ()->mutable_operation_timeout ());
111
+ if (Settings.CancelAfter_ ) {
112
+ SetDuration (Settings.CancelAfter_ , *request.mutable_operation_params ()->mutable_cancel_after ());
113
+ }
111
114
112
115
if (Settings.IsUsedAmount_ ) {
113
116
request.set_used (Settings.Amount_ .GetRef ());
@@ -317,50 +320,72 @@ Y_UNIT_TEST_SUITE(TGRpcRateLimiterTest) {
317
320
return std::make_unique<TTestSetup>();
318
321
}
319
322
320
- void AcquireResourceManyRequired (bool useActorApi) {
323
+ void AcquireResourceManyRequired (bool useActorApi, bool useCancelAfter) {
324
+ const TDuration operationTimeout = useCancelAfter ? TDuration::Hours (1 ) : TDuration::MilliSeconds (200 );
325
+ const TDuration cancelAfter = useCancelAfter ? TDuration::MilliSeconds (200 ) : TDuration::Zero (); // 0 means that parameter is not set
326
+
321
327
using NYdb::NRateLimiter::TAcquireResourceSettings;
322
328
323
329
auto setup = MakeTestSetup (useActorApi);
324
330
325
331
ASSERT_STATUS_SUCCESS (setup->RateLimiterClient .CreateResource (TTestSetup::CoordinationNodePath, " res" ,
326
332
TCreateResourceSettings ().MaxUnitsPerSecond (1 ).MaxBurstSizeCoefficient (42 )));
327
333
328
- setup->CheckAcquireResource (TTestSetup::CoordinationNodePath, " res" , TAcquireResourceSettings ().Amount (10000 ).OperationTimeout (TDuration::MilliSeconds ( 200 ) ), NYdb::EStatus::SUCCESS);
334
+ setup->CheckAcquireResource (TTestSetup::CoordinationNodePath, " res" , TAcquireResourceSettings ().Amount (10000 ).OperationTimeout (operationTimeout). CancelAfter (cancelAfter ), NYdb::EStatus::SUCCESS);
329
335
330
336
for (int i = 0 ; i < 3 ; ++i) {
331
- setup->CheckAcquireResource (TTestSetup::CoordinationNodePath, " res" , TAcquireResourceSettings ().Amount (1 ).OperationTimeout (TDuration::MilliSeconds ( 200 )), NYdb::EStatus::TIMEOUT);
332
- setup->CheckAcquireResource (TTestSetup::CoordinationNodePath, " res" , TAcquireResourceSettings ().Amount (1 ).IsUsedAmount (true ).OperationTimeout (TDuration::MilliSeconds ( 200 ) ), NYdb::EStatus::SUCCESS);
337
+ setup->CheckAcquireResource (TTestSetup::CoordinationNodePath, " res" , TAcquireResourceSettings ().Amount (1 ).OperationTimeout (operationTimeout). CancelAfter (cancelAfter), useCancelAfter ? NYdb::EStatus::CANCELLED : NYdb::EStatus::TIMEOUT);
338
+ setup->CheckAcquireResource (TTestSetup::CoordinationNodePath, " res" , TAcquireResourceSettings ().Amount (1 ).IsUsedAmount (true ).OperationTimeout (operationTimeout). CancelAfter (cancelAfter ), NYdb::EStatus::SUCCESS);
333
339
}
334
340
}
335
341
336
- void AcquireResourceManyUsed (bool useActorApi) {
342
+ void AcquireResourceManyUsed (bool useActorApi, bool useCancelAfter) {
343
+ const TDuration operationTimeout = useCancelAfter ? TDuration::Hours (1 ) : TDuration::MilliSeconds (200 );
344
+ const TDuration cancelAfter = useCancelAfter ? TDuration::MilliSeconds (200 ) : TDuration::Zero (); // 0 means that parameter is not set
345
+
337
346
using NYdb::NRateLimiter::TAcquireResourceSettings;
338
347
339
348
auto setup = MakeTestSetup (useActorApi);
340
349
ASSERT_STATUS_SUCCESS (setup->RateLimiterClient .CreateResource (TTestSetup::CoordinationNodePath, " res" ,
341
350
TCreateResourceSettings ().MaxUnitsPerSecond (1 ).MaxBurstSizeCoefficient (42 )));
342
351
343
- setup->CheckAcquireResource (TTestSetup::CoordinationNodePath, " res" , TAcquireResourceSettings ().Amount (10000 ).IsUsedAmount (true ).OperationTimeout (TDuration::MilliSeconds ( 200 ) ), NYdb::EStatus::SUCCESS);
352
+ setup->CheckAcquireResource (TTestSetup::CoordinationNodePath, " res" , TAcquireResourceSettings ().Amount (10000 ).IsUsedAmount (true ).OperationTimeout (operationTimeout). CancelAfter (cancelAfter ), NYdb::EStatus::SUCCESS);
344
353
for (int i = 0 ; i < 3 ; ++i) {
345
- setup->CheckAcquireResource (TTestSetup::CoordinationNodePath, " res" , TAcquireResourceSettings ().Amount (1 ).OperationTimeout (TDuration::MilliSeconds ( 200 )), NYdb::EStatus::TIMEOUT);
346
- setup->CheckAcquireResource (TTestSetup::CoordinationNodePath, " res" , TAcquireResourceSettings ().Amount (1 ).IsUsedAmount (true ).OperationTimeout (TDuration::MilliSeconds ( 200 ) ), NYdb::EStatus::SUCCESS);
354
+ setup->CheckAcquireResource (TTestSetup::CoordinationNodePath, " res" , TAcquireResourceSettings ().Amount (1 ).OperationTimeout (operationTimeout). CancelAfter (cancelAfter), useCancelAfter ? NYdb::EStatus::CANCELLED : NYdb::EStatus::TIMEOUT);
355
+ setup->CheckAcquireResource (TTestSetup::CoordinationNodePath, " res" , TAcquireResourceSettings ().Amount (1 ).IsUsedAmount (true ).OperationTimeout (operationTimeout). CancelAfter (cancelAfter ), NYdb::EStatus::SUCCESS);
347
356
}
348
357
}
349
358
350
359
Y_UNIT_TEST (AcquireResourceManyRequiredGrpcApi) {
351
- AcquireResourceManyRequired (false );
360
+ AcquireResourceManyRequired (false , false );
352
361
}
353
362
354
363
Y_UNIT_TEST (AcquireResourceManyRequiredActorApi) {
355
- AcquireResourceManyRequired (true );
364
+ AcquireResourceManyRequired (true , false );
365
+ }
366
+
367
+ Y_UNIT_TEST (AcquireResourceManyRequiredGrpcApiWithCancelAfter) {
368
+ AcquireResourceManyRequired (false , true );
369
+ }
370
+
371
+ Y_UNIT_TEST (AcquireResourceManyRequiredActorApiWithCancelAfter) {
372
+ AcquireResourceManyRequired (true , true );
356
373
}
357
374
358
375
Y_UNIT_TEST (AcquireResourceManyUsedGrpcApi) {
359
- AcquireResourceManyUsed (false );
376
+ AcquireResourceManyUsed (false , false );
360
377
}
361
378
362
379
Y_UNIT_TEST (AcquireResourceManyUsedActorApi) {
363
- AcquireResourceManyUsed (true );
380
+ AcquireResourceManyUsed (true , false );
381
+ }
382
+
383
+ Y_UNIT_TEST (AcquireResourceManyUsedGrpcApiWithCancelAfter) {
384
+ AcquireResourceManyUsed (false , true );
385
+ }
386
+
387
+ Y_UNIT_TEST (AcquireResourceManyUsedActorApiWithCancelAfter) {
388
+ AcquireResourceManyUsed (true , true );
364
389
}
365
390
}
366
391
0 commit comments