1
1
#include " actors.h"
2
2
3
3
#include < ydb/core/kqp/common/simple/services.h>
4
+ #include < ydb/core/kqp/rm_service/kqp_rm_service.h>
4
5
5
6
6
7
namespace NKqpRun {
@@ -91,6 +92,54 @@ class TRunScriptActorMock : public NActors::TActorBootstrapped<TRunScriptActorMo
91
92
TProgressCallback ProgressCallback_;
92
93
};
93
94
95
+ class TResourceWaiterActor : public NActors ::TActorBootstrapped<TResourceWaiterActor> {
96
+ public:
97
+ TResourceWaiterActor (NThreading::TPromise<void > promise, i32 expectedNodeCount)
98
+ : ExpectedNodeCount_(expectedNodeCount)
99
+ , Promise_(promise)
100
+ {}
101
+
102
+ void Bootstrap () {
103
+ GetResourceManager ();
104
+ WaitResourcePublish ();
105
+
106
+ Promise_.SetValue ();
107
+ PassAway ();
108
+ }
109
+
110
+ private:
111
+ void GetResourceManager () {
112
+ while (true ) {
113
+ ResourceManager_ = NKikimr::NKqp::TryGetKqpResourceManager (SelfId ().NodeId ());
114
+ if (ResourceManager_) {
115
+ break ;
116
+ }
117
+
118
+ Sleep (TDuration::MilliSeconds (10 ));
119
+ }
120
+ }
121
+
122
+ void WaitResourcePublish () {
123
+ while (true ) {
124
+ auto resourcesPromise = NThreading::NewPromise<i32>();
125
+ ResourceManager_->RequestClusterResourcesInfo ([resourcesPromise](TVector<NKikimrKqp::TKqpNodeResources>&& resources) mutable {
126
+ resourcesPromise.SetValue (resources.size ());
127
+ });
128
+
129
+ if (resourcesPromise.GetFuture ().GetValueSync () == ExpectedNodeCount_) {
130
+ break ;
131
+ }
132
+ Sleep (TDuration::MilliSeconds (10 ));
133
+ }
134
+ }
135
+
136
+ private:
137
+ const i32 ExpectedNodeCount_;
138
+
139
+ NThreading::TPromise<void > Promise_;
140
+ std::shared_ptr<NKikimr::NKqp::NRm::IKqpResourceManager> ResourceManager_;
141
+ };
142
+
94
143
} // anonymous namespace
95
144
96
145
NActors::IActor* CreateRunScriptActorMock (THolder<NKikimr::NKqp::TEvKqp::TEvQueryRequest> request,
@@ -100,4 +149,8 @@ NActors::IActor* CreateRunScriptActorMock(THolder<NKikimr::NKqp::TEvKqp::TEvQuer
100
149
return new TRunScriptActorMock (std::move (request), promise, resultRowsLimit, resultSizeLimit, resultSets, progressCallback);
101
150
}
102
151
152
+ NActors::IActor* CreateResourceWaiterActor (NThreading::TPromise<void > promise, i32 expectedNodeCount) {
153
+ return new TResourceWaiterActor (promise, expectedNodeCount);
154
+ }
155
+
103
156
} // namespace NKqpRun
0 commit comments