diff options
author | Roman Udovichenko <[email protected]> | 2025-03-01 13:03:46 +0300 |
---|---|---|
committer | GitHub <[email protected]> | 2025-03-01 13:03:46 +0300 |
commit | 0e620d2ab0c4aa45351a7fe744a5df7c65789025 (patch) | |
tree | 2686ec3f57a283688aceb16f75014385a9a515d4 | |
parent | 1215fa43fddf7d1ed0bfc8644a014dd909347f1b (diff) |
Retry info status in dq_cli (#15216)
-rw-r--r-- | ydb/library/yql/tools/dq/dq_cli/main.cpp | 44 |
1 files changed, 30 insertions, 14 deletions
diff --git a/ydb/library/yql/tools/dq/dq_cli/main.cpp b/ydb/library/yql/tools/dq/dq_cli/main.cpp index 22fb6b79632..40af6bf090a 100644 --- a/ydb/library/yql/tools/dq/dq_cli/main.cpp +++ b/ydb/library/yql/tools/dq/dq_cli/main.cpp @@ -15,6 +15,8 @@ #include <util/stream/file.h> #include <util/generic/guid.h> #include <util/string/split.h> +#include <util/system/yassert.h> +#include <util/random/random.h> using namespace NYdbGrpc; using namespace Yql::DqsProto; @@ -41,22 +43,36 @@ int SvnRevision(TServiceConnection<DqService>& service, const TVector<TString>& return promise.GetFuture().GetValueSync(); } -ClusterStatusResponse Info(TServiceConnection<DqService>& service) { - auto promise = NThreading::NewPromise<ClusterStatusResponse>(); - auto callback = [&](TGrpcStatus&& status, ClusterStatusResponse&& resp) { - if (status.Ok()) { - promise.SetValue(resp); - } else { - Cerr << "Error " << status.GRpcStatusCode << " message: " << status.Msg << Endl; - promise.SetException("Error"); +ClusterStatusResponse InfoWithReties(TServiceConnection<DqService>& service, ui32 retries) { + Y_ENSURE(retries > 0); + NThreading::TFuture<ClusterStatusResponse> future; + for (ui32 i = 0; i < retries; ++i) { + auto promise = NThreading::NewPromise<ClusterStatusResponse>(); + future = promise.GetFuture(); + auto callback = [&](TGrpcStatus&& status, ClusterStatusResponse&& resp) { + if (status.Ok()) { + promise.SetValue(resp); + } else { + Cerr << "Error getting DQ info: code=" << status.GRpcStatusCode << ", message: " << status.Msg << ", details: " << status.Details << Endl; + promise.SetException("Error getting DQ info"); + } + }; + + service.DoRequest<ClusterStatusRequest, ClusterStatusResponse>( + ClusterStatusRequest(), + callback, + &DqService::Stub::AsyncClusterStatus); + future.Wait(); + if (!future.HasException()) { + break; } - }; + Sleep(TDuration::MilliSeconds(2000ul + RandomNumber(1000ul))); + } + return future.GetValue(); +} - service.DoRequest<ClusterStatusRequest, ClusterStatusResponse>( - ClusterStatusRequest(), - callback, - &DqService::Stub::AsyncClusterStatus); - return promise.GetFuture().GetValueSync(); +ClusterStatusResponse Info(TServiceConnection<DqService>& service) { + return InfoWithReties(service, 5); } void Stop(TServiceConnection<DqService>& service, const JobStopRequest& request) |