@@ -108,6 +108,9 @@ class TTestSetupAcquireActor : public TTestSetup {
108108 request.set_resource_path (ResourcePath);
109109
110110 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+ }
111114
112115 if (Settings.IsUsedAmount_ ) {
113116 request.set_used (Settings.Amount_ .GetRef ());
@@ -317,50 +320,72 @@ Y_UNIT_TEST_SUITE(TGRpcRateLimiterTest) {
317320 return std::make_unique<TTestSetup>();
318321 }
319322
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+
321327 using NYdb::NRateLimiter::TAcquireResourceSettings;
322328
323329 auto setup = MakeTestSetup (useActorApi);
324330
325331 ASSERT_STATUS_SUCCESS (setup->RateLimiterClient .CreateResource (TTestSetup::CoordinationNodePath, " res" ,
326332 TCreateResourceSettings ().MaxUnitsPerSecond (1 ).MaxBurstSizeCoefficient (42 )));
327333
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);
329335
330336 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);
333339 }
334340 }
335341
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+
337346 using NYdb::NRateLimiter::TAcquireResourceSettings;
338347
339348 auto setup = MakeTestSetup (useActorApi);
340349 ASSERT_STATUS_SUCCESS (setup->RateLimiterClient .CreateResource (TTestSetup::CoordinationNodePath, " res" ,
341350 TCreateResourceSettings ().MaxUnitsPerSecond (1 ).MaxBurstSizeCoefficient (42 )));
342351
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);
344353 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);
347356 }
348357 }
349358
350359 Y_UNIT_TEST (AcquireResourceManyRequiredGrpcApi) {
351- AcquireResourceManyRequired (false );
360+ AcquireResourceManyRequired (false , false );
352361 }
353362
354363 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 );
356373 }
357374
358375 Y_UNIT_TEST (AcquireResourceManyUsedGrpcApi) {
359- AcquireResourceManyUsed (false );
376+ AcquireResourceManyUsed (false , false );
360377 }
361378
362379 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 );
364389 }
365390}
366391
0 commit comments