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
1921using namespace NYdbGrpc ;
2022using namespace Yql ::DqsProto;
@@ -41,22 +43,36 @@ 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+ promise.SetException (" Error getting DQ info" );
58+ }
59+ };
60+
61+ service.DoRequest <ClusterStatusRequest, ClusterStatusResponse>(
62+ ClusterStatusRequest (),
63+ callback,
64+ &DqService::Stub::AsyncClusterStatus);
65+ future.Wait ();
66+ if (!future.HasException ()) {
67+ break ;
5268 }
53- };
69+ Sleep (TDuration::MilliSeconds (2000ul + RandomNumber (1000ul )));
70+ }
71+ return future.GetValue ();
72+ }
5473
55- service.DoRequest <ClusterStatusRequest, ClusterStatusResponse>(
56- ClusterStatusRequest (),
57- callback,
58- &DqService::Stub::AsyncClusterStatus);
59- return promise.GetFuture ().GetValueSync ();
74+ ClusterStatusResponse Info (TServiceConnection<DqService>& service) {
75+ return InfoWithReties (service, 5 );
6076}
6177
6278void Stop (TServiceConnection<DqService>& service, const JobStopRequest& request)
0 commit comments