@@ -60,6 +60,20 @@ class TStaticSecuredCredentialsFactory : public NYql::ISecuredServiceAccountCred
6060 TString YqlToken_;
6161};
6262
63+ TRequestResult GetQueryResult (TQueryResponse response, TQueryMeta& meta, std::vector<Ydb::ResultSet>& resultSets) {
64+ resultSets = std::move (response.ResultSets );
65+
66+ auto queryOperationResponse = response.Response ->Get ()->Record .GetRef ();
67+ const auto & responseRecord = queryOperationResponse.GetResponse ();
68+
69+ meta.Ast = responseRecord.GetQueryAst ();
70+ if (const auto & plan = responseRecord.GetQueryPlan ()) {
71+ meta.Plan = plan;
72+ }
73+
74+ return TRequestResult (queryOperationResponse.GetYdbStatus (), responseRecord.GetQueryIssues ());
75+ }
76+
6377} // anonymous namespace
6478
6579
@@ -218,20 +232,20 @@ class TYdbSetup::TImpl {
218232 return RunKqpProxyRequest<NKikimr::NKqp::TEvKqp::TEvScriptRequest, NKikimr::NKqp::TEvKqp::TEvScriptResponse>(std::move (event));
219233 }
220234
221- NKikimr::NKqp::TEvKqp::TEvQueryResponse::TPtr QueryRequest (const TString& query, NKikimrKqp::EQueryAction action, const TString& traceId, std::vector<Ydb::ResultSet>& resultSets , TProgressCallback progressCallback) const {
235+ NThreading::TFuture<TQueryResponse> QueryRequestAsync (const TString& query, NKikimrKqp::EQueryAction action, const TString& traceId, TProgressCallback progressCallback) const {
222236 auto event = MakeHolder<NKikimr::NKqp::TEvKqp::TEvQueryRequest>();
223237 FillQueryRequest (query, NKikimrKqp::QUERY_TYPE_SQL_GENERIC_QUERY, action, traceId, event->Record );
224238
225239 if (auto progressStatsPeriodMs = Settings_.AppConfig .GetQueryServiceConfig ().GetProgressStatsPeriodMs ()) {
226240 event->SetProgressStatsPeriod (TDuration::MilliSeconds (progressStatsPeriodMs));
227241 }
228242
229- auto promise = NThreading::NewPromise<NKikimr::NKqp::TEvKqp::TEvQueryResponse::TPtr >();
243+ auto promise = NThreading::NewPromise<TQueryResponse >();
230244 auto rowsLimit = Settings_.AppConfig .GetQueryServiceConfig ().GetScriptResultRowsLimit ();
231245 auto sizeLimit = Settings_.AppConfig .GetQueryServiceConfig ().GetScriptResultSizeLimit ();
232- GetRuntime ()->Register (CreateRunScriptActorMock (std::move (event), promise, rowsLimit, sizeLimit, resultSets, progressCallback ));
246+ GetRuntime ()->Register (CreateRunScriptActorMock (std::move (event), promise, rowsLimit, sizeLimit, progressCallback), RandomNumber (Settings_. NodeCount ));
233247
234- return promise.GetFuture (). GetValueSync () ;
248+ return promise.GetFuture ();
235249 }
236250
237251 NKikimr::NKqp::TEvKqp::TEvQueryResponse::TPtr YqlScriptRequest (const TString& query, NKikimrKqp::EQueryAction action, const TString& traceId) const {
@@ -256,7 +270,7 @@ class TYdbSetup::TImpl {
256270 auto sizeLimit = Settings_.AppConfig .GetQueryServiceConfig ().GetScriptResultSizeLimit ();
257271 NActors::IActor* fetchActor = NKikimr::NKqp::CreateGetScriptExecutionResultActor (edgeActor, Settings_.DomainName , executionId, resultSetId, 0 , rowsLimit, sizeLimit, TInstant::Max ());
258272
259- GetRuntime ()->Register (fetchActor);
273+ GetRuntime ()->Register (fetchActor, RandomNumber (Settings_. NodeCount ) );
260274
261275 return GetRuntime ()->GrabEdgeEvent <NKikimr::NKqp::TEvFetchScriptResultsResponse>(edgeActor);
262276 }
@@ -288,7 +302,7 @@ class TYdbSetup::TImpl {
288302 template <typename TRequest, typename TResponse>
289303 typename TResponse::TPtr RunKqpProxyRequest (THolder<TRequest> event) const {
290304 NActors::TActorId edgeActor = GetRuntime ()->AllocateEdgeActor ();
291- NActors::TActorId kqpProxy = NKikimr::NKqp::MakeKqpProxyID (GetRuntime ()->GetNodeId ());
305+ NActors::TActorId kqpProxy = NKikimr::NKqp::MakeKqpProxyID (GetRuntime ()->GetNodeId (RandomNumber (Settings_. NodeCount ) ));
292306
293307 GetRuntime ()->Send (kqpProxy, edgeActor, event.Release ());
294308
@@ -378,17 +392,16 @@ TRequestResult TYdbSetup::ScriptRequest(const TString& script, NKikimrKqp::EQuer
378392}
379393
380394TRequestResult TYdbSetup::QueryRequest (const TString& query, NKikimrKqp::EQueryAction action, const TString& traceId, TQueryMeta& meta, std::vector<Ydb::ResultSet>& resultSets, TProgressCallback progressCallback) const {
381- resultSets.clear ();
382-
383- auto queryOperationResponse = Impl_->QueryRequest (query, action, traceId, resultSets, progressCallback)->Get ()->Record .GetRef ();
384- const auto & responseRecord = queryOperationResponse.GetResponse ();
385-
386- meta.Ast = responseRecord.GetQueryAst ();
387- if (const auto & plan = responseRecord.GetQueryPlan ()) {
388- meta.Plan = plan;
389- }
395+ auto response = Impl_->QueryRequestAsync (query, action, traceId, progressCallback).GetValueSync ();
396+ return GetQueryResult (std::move (response), meta, resultSets);
397+ }
390398
391- return TRequestResult (queryOperationResponse.GetYdbStatus (), responseRecord.GetQueryIssues ());
399+ NThreading::TFuture<TQueryResult> TYdbSetup::QueryRequestAsync (const TString& query, NKikimrKqp::EQueryAction action, const TString& traceId, TProgressCallback progressCallback) const {
400+ return Impl_->QueryRequestAsync (query, action, traceId, progressCallback).Apply ([](const NThreading::TFuture<TQueryResponse>& f) {
401+ TQueryResult result;
402+ result.Response = GetQueryResult (f.GetValue (), result.Meta , result.ResultSets );
403+ return result;
404+ });
392405}
393406
394407TRequestResult TYdbSetup::YqlScriptRequest (const TString& query, NKikimrKqp::EQueryAction action, const TString& traceId, TQueryMeta& meta, std::vector<Ydb::ResultSet>& resultSets) const {
0 commit comments