@@ -478,6 +478,8 @@ class TScriptLeaseUpdater : public TQueryBase {
478
478
479
479
class TScriptLeaseUpdateActor : public TActorBootstrapped <TScriptLeaseUpdateActor> {
480
480
public:
481
+ using TLeaseUpdateRetryActor = TQueryRetryActor<TScriptLeaseUpdater, TEvScriptLeaseUpdateResponse, TString, TString, TDuration>;
482
+
481
483
TScriptLeaseUpdateActor (const TActorId& runScriptActorId, const TString& database, const TString& executionId, TDuration leaseDuration, TIntrusivePtr<TKqpCounters> counters)
482
484
: RunScriptActorId(runScriptActorId)
483
485
, Database(database)
@@ -488,7 +490,11 @@ class TScriptLeaseUpdateActor : public TActorBootstrapped<TScriptLeaseUpdateActo
488
490
{}
489
491
490
492
void Bootstrap () {
491
- Register (new TQueryRetryActor<TScriptLeaseUpdater, TEvScriptLeaseUpdateResponse, TString, TString, TDuration>(SelfId (), Database, ExecutionId, LeaseDuration, LeaseDuration / 2 ));
493
+ Register (new TLeaseUpdateRetryActor (
494
+ SelfId (),
495
+ TLeaseUpdateRetryActor::IRetryPolicy::GetExponentialBackoffPolicy (TLeaseUpdateRetryActor::Retryable, TDuration::MilliSeconds (10 ), TDuration::MilliSeconds (200 ), TDuration::Seconds (1 ), std::numeric_limits<size_t >::max (), LeaseDuration / 2 ),
496
+ Database, ExecutionId, LeaseDuration
497
+ ));
492
498
Become (&TScriptLeaseUpdateActor::StateFunc);
493
499
}
494
500
@@ -826,7 +832,6 @@ class TCheckLeaseStatusActor : public TCheckLeaseStatusActorBase {
826
832
827
833
class TForgetScriptExecutionOperationQueryActor : public TQueryBase {
828
834
static constexpr i64 MAX_NUMBER_ROWS_IN_BATCH = 100000 ;
829
- static constexpr TDuration MINIMAL_DEADLINE_TIME = TDuration::Seconds(1 );
830
835
831
836
struct TResultSetDescription {
832
837
i64 MaxRowId;
@@ -837,7 +842,7 @@ class TForgetScriptExecutionOperationQueryActor : public TQueryBase {
837
842
TForgetScriptExecutionOperationQueryActor (const TString& executionId, const TString& database, TInstant operationDeadline)
838
843
: ExecutionId(executionId)
839
844
, Database(database)
840
- , Deadline(operationDeadline - MINIMAL_DEADLINE_TIME )
845
+ , Deadline(operationDeadline)
841
846
{}
842
847
843
848
void OnRunQuery () override {
@@ -964,10 +969,14 @@ class TForgetScriptExecutionOperationQueryActor : public TQueryBase {
964
969
Send (Owner, new TEvForgetScriptExecutionOperationResponse (status, std::move (issues)));
965
970
}
966
971
972
+ static NYql::TIssues ForgetOperationTimeoutIssues () {
973
+ return { NYql::TIssue (" Forget script execution operation timeout" ) };
974
+ }
975
+
967
976
private:
968
977
bool CheckDeadline () {
969
978
if (TInstant::Now () >= Deadline) {
970
- Finish (Ydb::StatusIds::TIMEOUT, " Forget script execution operation timeout " );
979
+ Finish (Ydb::StatusIds::TIMEOUT, ForgetOperationTimeoutIssues () );
971
980
return false ;
972
981
}
973
982
return true ;
@@ -982,6 +991,8 @@ class TForgetScriptExecutionOperationQueryActor : public TQueryBase {
982
991
983
992
class TForgetScriptExecutionOperationActor : public TActorBootstrapped <TForgetScriptExecutionOperationActor> {
984
993
public:
994
+ using TForgetOperationRetryActor = TQueryRetryActor<TForgetScriptExecutionOperationQueryActor, TEvForgetScriptExecutionOperationResponse, TString, TString, TInstant>;
995
+
985
996
explicit TForgetScriptExecutionOperationActor (TEvForgetScriptExecutionOperation::TPtr ev)
986
997
: Request(std::move(ev))
987
998
{}
@@ -1017,7 +1028,18 @@ class TForgetScriptExecutionOperationActor : public TActorBootstrapped<TForgetSc
1017
1028
}
1018
1029
}
1019
1030
1020
- Register (new TForgetScriptExecutionOperationQueryActor (ExecutionId, Request->Get ()->Database , Request->Get ()->Deadline ));
1031
+ TDuration minDelay = TDuration::MilliSeconds (10 );
1032
+ TDuration maxTime = Request->Get ()->Deadline - TInstant::Now () - TDuration::Seconds (1 );
1033
+ if (maxTime <= minDelay) {
1034
+ Reply (Ydb::StatusIds::TIMEOUT, TForgetScriptExecutionOperationQueryActor::ForgetOperationTimeoutIssues ());
1035
+ return ;
1036
+ }
1037
+
1038
+ Register (new TForgetOperationRetryActor (
1039
+ SelfId (),
1040
+ TForgetOperationRetryActor::IRetryPolicy::GetExponentialBackoffPolicy (TForgetOperationRetryActor::Retryable, minDelay, TDuration::MilliSeconds (200 ), TDuration::Seconds (1 ), std::numeric_limits<size_t >::max (), maxTime),
1041
+ ExecutionId, Request->Get ()->Database , TInstant::Now () + maxTime
1042
+ ));
1021
1043
}
1022
1044
1023
1045
void Handle (TEvForgetScriptExecutionOperationResponse::TPtr& ev) {
0 commit comments