Skip to content

Commit 400b6de

Browse files
authored
Merge 149be24 into d08419b
2 parents d08419b + 149be24 commit 400b6de

File tree

1 file changed

+33
-14
lines changed

1 file changed

+33
-14
lines changed

ydb/library/yql/tools/dq/dq_cli/main.cpp

Lines changed: 33 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
#include <util/stream/file.h>
1616
#include <util/generic/guid.h>
1717
#include <util/string/split.h>
18+
#include <util/system/yassert.h>
19+
#include <util/random/random.h>
1820

1921
using namespace NYdbGrpc;
2022
using namespace Yql::DqsProto;
@@ -41,22 +43,39 @@ int SvnRevision(TServiceConnection<DqService>& service, const TVector<TString>&
4143
return promise.GetFuture().GetValueSync();
4244
}
4345

44-
ClusterStatusResponse Info(TServiceConnection<DqService>& service) {
45-
auto promise = NThreading::NewPromise<ClusterStatusResponse>();
46-
auto callback = [&](TGrpcStatus&& status, ClusterStatusResponse&& resp) {
47-
if (status.Ok()) {
48-
promise.SetValue(resp);
49-
} else {
50-
Cerr << "Error " << status.GRpcStatusCode << " message: " << status.Msg << Endl;
51-
promise.SetException("Error");
46+
ClusterStatusResponse InfoWithReties(TServiceConnection<DqService>& service, ui32 retries) {
47+
Y_ENSURE(retries > 0);
48+
NThreading::TFuture<ClusterStatusResponse> future;
49+
for (ui32 i = 0; i < retries; ++i) {
50+
auto promise = NThreading::NewPromise<ClusterStatusResponse>();
51+
future = promise.GetFuture();
52+
auto callback = [&](TGrpcStatus&& status, ClusterStatusResponse&& resp) {
53+
if (status.Ok()) {
54+
promise.SetValue(resp);
55+
} else {
56+
Cerr << "Error getting DQ info: code=" << status.GRpcStatusCode << ", message: " << status.Msg << ", details: " << status.Details << Endl;
57+
if (retries > 0) {
58+
promise.SetValue(InfoWithReties(service, retries - 1));
59+
}
60+
promise.SetException("Error getting DQ info");
61+
}
62+
};
63+
64+
service.DoRequest<ClusterStatusRequest, ClusterStatusResponse>(
65+
ClusterStatusRequest(),
66+
callback,
67+
&DqService::Stub::AsyncClusterStatus);
68+
future.Wait();
69+
if (!future.HasException()) {
70+
break;
5271
}
53-
};
72+
Sleep(TDuration::MilliSeconds(2000ul + RandomNumber(1000ul)));
73+
}
74+
return future.GetValue();
75+
}
5476

55-
service.DoRequest<ClusterStatusRequest, ClusterStatusResponse>(
56-
ClusterStatusRequest(),
57-
callback,
58-
&DqService::Stub::AsyncClusterStatus);
59-
return promise.GetFuture().GetValueSync();
77+
ClusterStatusResponse Info(TServiceConnection<DqService>& service) {
78+
return InfoWithReties(service, 5);
6079
}
6180

6281
void Stop(TServiceConnection<DqService>& service, const JobStopRequest& request)

0 commit comments

Comments
 (0)