diff --git a/ydb/library/yql/providers/s3/actors/yql_s3_applicator_actor.cpp b/ydb/library/yql/providers/s3/actors/yql_s3_applicator_actor.cpp index 53e189430213..30276d7b22cf 100644 --- a/ydb/library/yql/providers/s3/actors/yql_s3_applicator_actor.cpp +++ b/ydb/library/yql/providers/s3/actors/yql_s3_applicator_actor.cpp @@ -204,6 +204,8 @@ class TS3ApplicatorActor; using TObjectStorageRequest = std::function; class TS3ApplicatorActor : public NActors::TActorBootstrapped { + static constexpr ui64 GLOBAL_RETRY_LIMIT = 100; + public: using NActors::TActorBootstrapped::Send; @@ -230,7 +232,7 @@ class TS3ApplicatorActor : public NActors::TActorBootstrappedCreateRetryState()->GetNextRetryDelay(curlResponseCode, httpResponseCode); + Issues.AddIssue(TStringBuilder() << "Retry operation " << operationName << ", curl error: " << curl_easy_strerror(curlResponseCode) << ", http code: " << httpResponseCode << ", url: " << url); if (result) { RetryCount--; } else { - Finish(true); + Finish(true, RetryCount + ? TString("Number of retries exceeded limit per operation") + : TStringBuilder() << "Number of retries exceeded global limit in " << GLOBAL_RETRY_LIMIT << " retries"); } return result; } @@ -369,9 +374,10 @@ class TS3ApplicatorActor : public NActors::TActorBootstrappedGet()->State->BuildUrl()); - if (RetryOperation(result.CurlResponseCode, result.Content.HttpResponseCode)) { + } + const TString& url = ev->Get()->State->BuildUrl(); + LOG_D("CommitMultipartUpload ERROR " << url); + if (RetryOperation(result.CurlResponseCode, result.Content.HttpResponseCode, url, "CommitMultipartUpload")) { PushCommitMultipartUpload(ev->Get()->State); } } @@ -444,8 +450,9 @@ class TS3ApplicatorActor : public NActors::TActorBootstrappedGet()->State->BuildUrl()); - if (RetryOperation(result.CurlResponseCode, result.Content.HttpResponseCode)) { + const TString& url = ev->Get()->State->BuildUrl(); + LOG_D("ListMultipartUploads ERROR " << url); + if (RetryOperation(result.CurlResponseCode, result.Content.HttpResponseCode, url, "ListMultipartUploads")) { PushListMultipartUploads(ev->Get()->State); } } @@ -467,8 +474,9 @@ class TS3ApplicatorActor : public NActors::TActorBootstrappedGet()->State->BuildUrl()); - if (RetryOperation(result.CurlResponseCode, result.Content.HttpResponseCode)) { + const TString& url = ev->Get()->State->BuildUrl(); + LOG_D("AbortMultipartUpload ERROR " << url); + if (RetryOperation(result.CurlResponseCode, result.Content.HttpResponseCode, url, "AbortMultipartUpload")) { PushAbortMultipartUpload(ev->Get()->State); } } @@ -507,8 +515,9 @@ class TS3ApplicatorActor : public NActors::TActorBootstrappedGet()->State->BuildUrl(); LOG_D("ListParts ERROR " << ev->Get()->State->BuildUrl()); - if (RetryOperation(result.CurlResponseCode, result.Content.HttpResponseCode)) { + if (RetryOperation(result.CurlResponseCode, result.Content.HttpResponseCode, url, "ListParts")) { PushListParts(ev->Get()->State); } }