diff options
author | grigoriypisar <grigoriypisar@ydb.tech> | 2023-11-24 17:02:20 +0300 |
---|---|---|
committer | grigoriypisar <grigoriypisar@ydb.tech> | 2023-11-24 18:05:28 +0300 |
commit | e714a823f93b3bfa8b2d9ef1acdd7758ace24a0c (patch) | |
tree | 8d43f3cbc6612c127e7bc49da95a27b1044ab23b | |
parent | 41c83558b1e44f274cefb628a4726d0658f72878 (diff) | |
download | ydb-e714a823f93b3bfa8b2d9ef1acdd7758ace24a0c.tar.gz |
support trace opt
Добавлена поддержка trace-opt
Добавлена возможность запуска с обходом RunScriptActor, что позволяет избежать множества побочных запросов
Добавлен флаг через который можно передать путь к app_config
-rw-r--r-- | ydb/tests/tools/kqprun/kqprun.cpp | 51 | ||||
-rw-r--r-- | ydb/tests/tools/kqprun/src/CMakeLists.darwin-arm64.txt | 1 | ||||
-rw-r--r-- | ydb/tests/tools/kqprun/src/CMakeLists.darwin-x86_64.txt | 1 | ||||
-rw-r--r-- | ydb/tests/tools/kqprun/src/CMakeLists.linux-aarch64.txt | 1 | ||||
-rw-r--r-- | ydb/tests/tools/kqprun/src/CMakeLists.linux-x86_64.txt | 1 | ||||
-rw-r--r-- | ydb/tests/tools/kqprun/src/CMakeLists.windows-x86_64.txt | 1 | ||||
-rw-r--r-- | ydb/tests/tools/kqprun/src/actors.cpp | 59 | ||||
-rw-r--r-- | ydb/tests/tools/kqprun/src/actors.h | 9 | ||||
-rw-r--r-- | ydb/tests/tools/kqprun/src/common.h | 1 | ||||
-rw-r--r-- | ydb/tests/tools/kqprun/src/kqp_runner.cpp | 64 | ||||
-rw-r--r-- | ydb/tests/tools/kqprun/src/kqp_runner.h | 2 | ||||
-rw-r--r-- | ydb/tests/tools/kqprun/src/ya.make | 1 | ||||
-rw-r--r-- | ydb/tests/tools/kqprun/src/ydb_setup.cpp | 93 | ||||
-rw-r--r-- | ydb/tests/tools/kqprun/src/ydb_setup.h | 10 |
14 files changed, 244 insertions, 51 deletions
diff --git a/ydb/tests/tools/kqprun/kqprun.cpp b/ydb/tests/tools/kqprun/kqprun.cpp index 325c38c7600..e639e61d595 100644 --- a/ydb/tests/tools/kqprun/kqprun.cpp +++ b/ydb/tests/tools/kqprun/kqprun.cpp @@ -16,9 +16,14 @@ struct TExecutionOptions { TString ScriptQuery; TString SchemeQuery; + bool ClearExecution = false; NKikimrKqp::EQueryAction ScriptQueryAction = NKikimrKqp::QUERY_ACTION_EXECUTE; TString ScriptTraceId = "kqprun"; + + bool HasResults() const { + return ScriptQuery && ScriptQueryAction == NKikimrKqp::QUERY_ACTION_EXECUTE && !ClearExecution; + } }; @@ -37,12 +42,18 @@ void RunScript(const TExecutionOptions& executionOptions, const NKqpRun::TRunner if (executionOptions.ScriptQuery) { Cout << colors.Yellow() << "Executing script..." << colors.Default() << Endl; - if (!runner.ExecuteScript(executionOptions.ScriptQuery, executionOptions.ScriptQueryAction, executionOptions.ScriptTraceId)) { - ythrow yexception() << "Script execution failed"; + if (!executionOptions.ClearExecution) { + if (!runner.ExecuteScript(executionOptions.ScriptQuery, executionOptions.ScriptQueryAction, executionOptions.ScriptTraceId)) { + ythrow yexception() << "Script execution failed"; + } + } else { + if (!runner.ExecuteQuery(executionOptions.ScriptQuery, executionOptions.ScriptQueryAction, executionOptions.ScriptTraceId)) { + ythrow yexception() << "Query execution failed"; + } } } - if (executionOptions.ScriptQueryAction == NKikimrKqp::QUERY_ACTION_EXECUTE) { + if (executionOptions.HasResults()) { Cout << colors.Yellow() << "Writing script results..." << colors.Default() << Endl; if (!runner.WriteScriptResults()) { ythrow yexception() << "Writing script results failed"; @@ -64,6 +75,9 @@ THolder<TFileOutput> SetupDefaultFileOutput(const TString& filePath, IOutputStre void RunMain(int argc, const char* argv[]) { + TExecutionOptions executionOptions; + NKqpRun::TRunnerOptions runnerOptions; + TString scriptQueryFile; TString schemeQueryFile; TString resultOutputFile = "-"; @@ -71,10 +85,10 @@ void RunMain(int argc, const char* argv[]) { TString scriptQueryAstFile; TString scriptQueryPlanFile; TString logFile = "-"; + TString appConfigFile = "./configuration/app_config.conf"; TString scriptQueryAction = "execute"; TString planOutputFormat = "pretty"; - i64 resultsRowsLimit = 1000; TVector<TString> udfsPaths; TString udfsDirectory; @@ -88,6 +102,11 @@ void RunMain(int argc, const char* argv[]) { .Optional() .RequiredArgument("FILE") .StoreResult(&schemeQueryFile); + options.AddLongOption("app-config", "File with app config (TAppConfig)") + .Optional() + .RequiredArgument("FILE") + .DefaultValue(appConfigFile) + .StoreResult(&appConfigFile); options.AddLongOption("log-file", "File with execution logs (use '-' to write in stderr)") .Optional() @@ -110,6 +129,16 @@ void RunMain(int argc, const char* argv[]) { .RequiredArgument("FILE") .StoreResult(&scriptQueryPlanFile); + options.AddLongOption('C', "clear-execution", "Execute script query without RunScriptActor in one query request") + .Optional() + .NoArgument() + .DefaultValue(executionOptions.ClearExecution) + .SetFlag(&executionOptions.ClearExecution); + options.AddLongOption("trace-opt", "print AST in the begin of each transformation") + .Optional() + .NoArgument() + .DefaultValue(runnerOptions.YdbSettings.TraceOpt) + .SetFlag(&runnerOptions.YdbSettings.TraceOpt); options.AddLongOption("script-action", "Script query execute action, one of { execute | explain }") .Optional() .RequiredArgument("STR") @@ -123,8 +152,8 @@ void RunMain(int argc, const char* argv[]) { options.AddLongOption("results-limit", "Rows limit for script execution results") .Optional() .RequiredArgument("INT") - .DefaultValue(resultsRowsLimit) - .StoreResult(&resultsRowsLimit); + .DefaultValue(runnerOptions.ResultsRowsLimit) + .StoreResult(&runnerOptions.ResultsRowsLimit); options.AddLongOption("udf", "Load shared library with UDF by given path") .Optional() @@ -139,8 +168,6 @@ void RunMain(int argc, const char* argv[]) { // Execution options - TExecutionOptions executionOptions; - if (!schemeQueryFile && !scriptQueryFile) { ythrow yexception() << "Nothing to execute"; } @@ -158,11 +185,7 @@ void RunMain(int argc, const char* argv[]) { // Runner options - NKqpRun::TRunnerOptions runnerOptions; - - if (resultsRowsLimit >= 0) { - runnerOptions.ResultsRowsLimit = resultsRowsLimit; - } else { + if (runnerOptions.ResultsRowsLimit < 0) { ythrow yexception() << "Results rows limit less than zero"; } @@ -190,7 +213,7 @@ void RunMain(int argc, const char* argv[]) { NKikimr::NMiniKQL::FillStaticModules(*functionRegistry); runnerOptions.YdbSettings.FunctionRegistry = functionRegistry.Get(); - TString appConfigData = TFileInput("./configuration/app_config.conf").ReadAll(); + TString appConfigData = TFileInput(appConfigFile).ReadAll(); if (!google::protobuf::TextFormat::ParseFromString(appConfigData, &runnerOptions.YdbSettings.AppConfig)) { ythrow yexception() << "Bad format of app configuration"; } diff --git a/ydb/tests/tools/kqprun/src/CMakeLists.darwin-arm64.txt b/ydb/tests/tools/kqprun/src/CMakeLists.darwin-arm64.txt index 54954b2566b..6f29cd3fac7 100644 --- a/ydb/tests/tools/kqprun/src/CMakeLists.darwin-arm64.txt +++ b/ydb/tests/tools/kqprun/src/CMakeLists.darwin-arm64.txt @@ -19,6 +19,7 @@ target_link_libraries(tools-kqprun-src PUBLIC yql-sql-pg ) target_sources(tools-kqprun-src PRIVATE + ${CMAKE_SOURCE_DIR}/ydb/tests/tools/kqprun/src/actors.cpp ${CMAKE_SOURCE_DIR}/ydb/tests/tools/kqprun/src/kqp_runner.cpp ${CMAKE_SOURCE_DIR}/ydb/tests/tools/kqprun/src/ydb_setup.cpp ) diff --git a/ydb/tests/tools/kqprun/src/CMakeLists.darwin-x86_64.txt b/ydb/tests/tools/kqprun/src/CMakeLists.darwin-x86_64.txt index 54954b2566b..6f29cd3fac7 100644 --- a/ydb/tests/tools/kqprun/src/CMakeLists.darwin-x86_64.txt +++ b/ydb/tests/tools/kqprun/src/CMakeLists.darwin-x86_64.txt @@ -19,6 +19,7 @@ target_link_libraries(tools-kqprun-src PUBLIC yql-sql-pg ) target_sources(tools-kqprun-src PRIVATE + ${CMAKE_SOURCE_DIR}/ydb/tests/tools/kqprun/src/actors.cpp ${CMAKE_SOURCE_DIR}/ydb/tests/tools/kqprun/src/kqp_runner.cpp ${CMAKE_SOURCE_DIR}/ydb/tests/tools/kqprun/src/ydb_setup.cpp ) diff --git a/ydb/tests/tools/kqprun/src/CMakeLists.linux-aarch64.txt b/ydb/tests/tools/kqprun/src/CMakeLists.linux-aarch64.txt index f129ed449d5..450d0a3f1d1 100644 --- a/ydb/tests/tools/kqprun/src/CMakeLists.linux-aarch64.txt +++ b/ydb/tests/tools/kqprun/src/CMakeLists.linux-aarch64.txt @@ -20,6 +20,7 @@ target_link_libraries(tools-kqprun-src PUBLIC yql-sql-pg ) target_sources(tools-kqprun-src PRIVATE + ${CMAKE_SOURCE_DIR}/ydb/tests/tools/kqprun/src/actors.cpp ${CMAKE_SOURCE_DIR}/ydb/tests/tools/kqprun/src/kqp_runner.cpp ${CMAKE_SOURCE_DIR}/ydb/tests/tools/kqprun/src/ydb_setup.cpp ) diff --git a/ydb/tests/tools/kqprun/src/CMakeLists.linux-x86_64.txt b/ydb/tests/tools/kqprun/src/CMakeLists.linux-x86_64.txt index f129ed449d5..450d0a3f1d1 100644 --- a/ydb/tests/tools/kqprun/src/CMakeLists.linux-x86_64.txt +++ b/ydb/tests/tools/kqprun/src/CMakeLists.linux-x86_64.txt @@ -20,6 +20,7 @@ target_link_libraries(tools-kqprun-src PUBLIC yql-sql-pg ) target_sources(tools-kqprun-src PRIVATE + ${CMAKE_SOURCE_DIR}/ydb/tests/tools/kqprun/src/actors.cpp ${CMAKE_SOURCE_DIR}/ydb/tests/tools/kqprun/src/kqp_runner.cpp ${CMAKE_SOURCE_DIR}/ydb/tests/tools/kqprun/src/ydb_setup.cpp ) diff --git a/ydb/tests/tools/kqprun/src/CMakeLists.windows-x86_64.txt b/ydb/tests/tools/kqprun/src/CMakeLists.windows-x86_64.txt index 54954b2566b..6f29cd3fac7 100644 --- a/ydb/tests/tools/kqprun/src/CMakeLists.windows-x86_64.txt +++ b/ydb/tests/tools/kqprun/src/CMakeLists.windows-x86_64.txt @@ -19,6 +19,7 @@ target_link_libraries(tools-kqprun-src PUBLIC yql-sql-pg ) target_sources(tools-kqprun-src PRIVATE + ${CMAKE_SOURCE_DIR}/ydb/tests/tools/kqprun/src/actors.cpp ${CMAKE_SOURCE_DIR}/ydb/tests/tools/kqprun/src/kqp_runner.cpp ${CMAKE_SOURCE_DIR}/ydb/tests/tools/kqprun/src/ydb_setup.cpp ) diff --git a/ydb/tests/tools/kqprun/src/actors.cpp b/ydb/tests/tools/kqprun/src/actors.cpp new file mode 100644 index 00000000000..c8c31e99151 --- /dev/null +++ b/ydb/tests/tools/kqprun/src/actors.cpp @@ -0,0 +1,59 @@ +#include "actors.h" + +#include <ydb/core/kqp/common/simple/services.h> + + +namespace NKqpRun { + +namespace { + +class TRunScriptActorMock : public NActors::TActorBootstrapped<TRunScriptActorMock> { +public: + TRunScriptActorMock(THolder<NKikimr::NKqp::TEvKqp::TEvQueryRequest> request, NThreading::TPromise<NKikimr::NKqp::TEvKqp::TEvQueryResponse::TPtr> promise, ui64 resultSizeLimit) + : Request_(std::move(request)) + , Promise_(promise) + , ResultSizeLimit_(std::numeric_limits<i64>::max()) + { + if (resultSizeLimit && resultSizeLimit < std::numeric_limits<i64>::max()) { + ResultSizeLimit_ = resultSizeLimit; + } + } + + void Bootstrap() { + NActors::ActorIdToProto(SelfId(), Request_->Record.MutableRequestActorId()); + Send(NKikimr::NKqp::MakeKqpProxyID(SelfId().NodeId()), std::move(Request_)); + + Become(&TRunScriptActorMock::StateFunc); + } + + STRICT_STFUNC(StateFunc, + hFunc(NKikimr::NKqp::TEvKqpExecuter::TEvStreamData, Handle); + hFunc(NKikimr::NKqp::TEvKqp::TEvQueryResponse, Handle); + ) + + void Handle(NKikimr::NKqp::TEvKqpExecuter::TEvStreamData::TPtr& ev) { + auto response = MakeHolder<NKikimr::NKqp::TEvKqpExecuter::TEvStreamDataAck>(); + response->Record.SetSeqNo(ev->Get()->Record.GetSeqNo()); + response->Record.SetFreeSpace(ResultSizeLimit_); + + Send(ev->Sender, response.Release()); + } + + void Handle(NKikimr::NKqp::TEvKqp::TEvQueryResponse::TPtr& ev) { + Promise_.SetValue(std::move(ev)); + PassAway(); + } + +private: + THolder<NKikimr::NKqp::TEvKqp::TEvQueryRequest> Request_; + NThreading::TPromise<NKikimr::NKqp::TEvKqp::TEvQueryResponse::TPtr> Promise_; + i64 ResultSizeLimit_; +}; + +} // anonymous namespace + +NActors::IActor* CreateRunScriptActorMock(THolder<NKikimr::NKqp::TEvKqp::TEvQueryRequest> request, NThreading::TPromise<NKikimr::NKqp::TEvKqp::TEvQueryResponse::TPtr> promise, ui64 resultSizeLimit) { + return new TRunScriptActorMock(std::move(request), promise, resultSizeLimit); +} + +} // namespace NKqpRun diff --git a/ydb/tests/tools/kqprun/src/actors.h b/ydb/tests/tools/kqprun/src/actors.h new file mode 100644 index 00000000000..f6cbf8b43be --- /dev/null +++ b/ydb/tests/tools/kqprun/src/actors.h @@ -0,0 +1,9 @@ +#include <ydb/core/kqp/common/events/events.h> +#include <ydb/core/kqp/executer_actor/kqp_executer.h> + + +namespace NKqpRun { + +NActors::IActor* CreateRunScriptActorMock(THolder<NKikimr::NKqp::TEvKqp::TEvQueryRequest> request, NThreading::TPromise<NKikimr::NKqp::TEvKqp::TEvQueryResponse::TPtr> promise, ui64 resultSizeLimit); + +} // namespace NKqpRun diff --git a/ydb/tests/tools/kqprun/src/common.h b/ydb/tests/tools/kqprun/src/common.h index fd7b021bbf0..891335988ba 100644 --- a/ydb/tests/tools/kqprun/src/common.h +++ b/ydb/tests/tools/kqprun/src/common.h @@ -12,6 +12,7 @@ namespace NKqpRun { struct TYdbSetupSettings { TString DomainName = "Root"; + bool TraceOpt = false; TMaybe<TString> LogOutputFile; TString YqlToken; diff --git a/ydb/tests/tools/kqprun/src/kqp_runner.cpp b/ydb/tests/tools/kqprun/src/kqp_runner.cpp index 7677fd5eee3..c80d71d4d59 100644 --- a/ydb/tests/tools/kqprun/src/kqp_runner.cpp +++ b/ydb/tests/tools/kqprun/src/kqp_runner.cpp @@ -24,21 +24,18 @@ public: TSchemeMeta meta; TRequestResult status = YdbSetup_.SchemeQueryRequest(query, meta); + PrintSchemeQueryAst(meta.Ast); + if (!status.IsSuccess()) { Cerr << CerrColors_.Red() << "Failed to execute scheme query, reason:" << CerrColors_.Default() << Endl << status.ToString() << Endl; return false; } - if (Options_.SchemeQueryAstOutput) { - Cout << CoutColors_.Cyan() << "Writing scheme query ast" << CoutColors_.Default() << Endl; - Options_.SchemeQueryAstOutput->Write(meta.Ast); - } - return true; } bool ExecuteScript(const TString& script, NKikimrKqp::EQueryAction action, const TString& traceId) { - TRequestResult status = YdbSetup_.ScriptQueryRequest(script, action, traceId, ExecutionOperation_); + TRequestResult status = YdbSetup_.ScriptRequest(script, action, traceId, ExecutionOperation_); if (!status.IsSuccess()) { Cerr << CerrColors_.Red() << "Failed to start script execution, reason:" << CerrColors_.Default() << Endl << status.ToString() << Endl; @@ -48,6 +45,22 @@ public: return WaitScriptExecutionOperation(); } + bool ExecuteQuery(const TString& query, NKikimrKqp::EQueryAction action, const TString& traceId) const { + TQueryMeta meta; + TRequestResult status = YdbSetup_.QueryRequest(query, action, traceId, meta); + + PrintScriptAst(meta.Ast); + + if (!status.IsSuccess()) { + Cerr << CerrColors_.Red() << "Failed to execute query, reason:" << CerrColors_.Default() << Endl << status.ToString() << Endl; + return false; + } + + PrintScriptPlan(meta.Plan); + + return true; + } + bool WriteScriptResults() const { for (i32 resultSetId = 0; resultSetId < ExecutionMeta_.ResultSetsCount; ++resultSetId) { Ydb::ResultSet resultSet; @@ -82,24 +95,39 @@ private: Sleep(TDuration::Seconds(1)); } - if (Options_.ScriptQueryAstOutput) { - Cout << CoutColors_.Cyan() << "Writing script query ast" << CoutColors_.Default() << Endl; - Options_.ScriptQueryAstOutput->Write(ExecutionMeta_.Ast); - } + PrintScriptAst(ExecutionMeta_.Ast); if (!status.IsSuccess() || ExecutionMeta_.ExecutionStatus != NYdb::NQuery::EExecStatus::Completed) { Cerr << CerrColors_.Red() << "Failed to execute script, invalid final status, reason:" << CerrColors_.Default() << Endl << status.ToString() << Endl; return false; } - if (Options_.ScriptQueryPlanOutput) { + PrintScriptPlan(ExecutionMeta_.Plan); + + return true; + } + + void PrintSchemeQueryAst(const TString& ast) const { + if (Options_.SchemeQueryAstOutput) { + Cout << CoutColors_.Cyan() << "Writing scheme query ast" << CoutColors_.Default() << Endl; + Options_.SchemeQueryAstOutput->Write(ast); + } + } + + void PrintScriptAst(const TString& ast) const { + if (Options_.ScriptQueryAstOutput) { + Cout << CoutColors_.Cyan() << "Writing script query ast" << CoutColors_.Default() << Endl; + Options_.ScriptQueryAstOutput->Write(ast); + } + } + + void PrintScriptPlan(const TString& plan) const { + if (Options_.ScriptQueryAstOutput) { Cout << CoutColors_.Cyan() << "Writing script query plan" << CoutColors_.Default() << Endl; NYdb::NConsoleClient::TQueryPlanPrinter printer(Options_.PlanOutputFormat, true, *Options_.ScriptQueryPlanOutput); - printer.Print(ExecutionMeta_.Plan); + printer.Print(plan); } - - return true; } private: @@ -124,8 +152,12 @@ bool TKqpRunner::ExecuteSchemeQuery(const TString& query) const { return Impl_->ExecuteSchemeQuery(query); } -bool TKqpRunner::ExecuteScript(const TString& query, NKikimrKqp::EQueryAction action, const TString& traceId) const { - return Impl_->ExecuteScript(query, action, traceId); +bool TKqpRunner::ExecuteScript(const TString& script, NKikimrKqp::EQueryAction action, const TString& traceId) const { + return Impl_->ExecuteScript(script, action, traceId); +} + +bool TKqpRunner::ExecuteQuery(const TString& query, NKikimrKqp::EQueryAction action, const TString& traceId) const { + return Impl_->ExecuteQuery(query, action, traceId); } bool TKqpRunner::WriteScriptResults() const { diff --git a/ydb/tests/tools/kqprun/src/kqp_runner.h b/ydb/tests/tools/kqprun/src/kqp_runner.h index 09d3c1c657e..f2eef77bb07 100644 --- a/ydb/tests/tools/kqprun/src/kqp_runner.h +++ b/ydb/tests/tools/kqprun/src/kqp_runner.h @@ -13,6 +13,8 @@ public: bool ExecuteScript(const TString& script, NKikimrKqp::EQueryAction action, const TString& traceId) const; + bool ExecuteQuery(const TString& query, NKikimrKqp::EQueryAction action, const TString& traceId) const; + bool WriteScriptResults() const; private: diff --git a/ydb/tests/tools/kqprun/src/ya.make b/ydb/tests/tools/kqprun/src/ya.make index 98931dcd3f5..a6481facb87 100644 --- a/ydb/tests/tools/kqprun/src/ya.make +++ b/ydb/tests/tools/kqprun/src/ya.make @@ -1,6 +1,7 @@ LIBRARY() SRCS( + actors.cpp kqp_runner.cpp ydb_setup.cpp ) diff --git a/ydb/tests/tools/kqprun/src/ydb_setup.cpp b/ydb/tests/tools/kqprun/src/ydb_setup.cpp index ff105e16554..7340de37bbe 100644 --- a/ydb/tests/tools/kqprun/src/ydb_setup.cpp +++ b/ydb/tests/tools/kqprun/src/ydb_setup.cpp @@ -1,3 +1,4 @@ +#include "actors.h" #include "ydb_setup.h" #include <ydb/core/kqp/common/kqp_script_executions.h> @@ -5,6 +6,8 @@ #include <ydb/core/testlib/test_client.h> +#include <ydb/library/yql/utils/log/log.h> + namespace NKqpRun { @@ -63,6 +66,14 @@ private: class TYdbSetup::TImpl { private: + TAutoPtr<TLogBackend> CreateLogBackend() const { + if (Settings_.LogOutputFile) { + return NActors::CreateFileBackend(*Settings_.LogOutputFile); + } else { + return NActors::CreateStderrBackend(); + } + } + void SetLoggerSettings(NKikimr::Tests::TServerSettings& serverSettings) const { auto loggerInitializer = [this](NActors::TTestActorRuntime& runtime) { if (Settings_.AppConfig.GetLogConfig().HasDefaultLevel()) { @@ -84,12 +95,7 @@ private: }; serverSettings.SetLoggerInitializer(loggerInitializer); - - if (Settings_.LogOutputFile) { - serverSettings.SetLogBackend(NActors::CreateFileBackend(*Settings_.LogOutputFile)); - } else { - serverSettings.SetLogBackend(NActors::CreateStderrBackend()); - } + serverSettings.SetLogBackend(CreateLogBackend()); } void SetFunctionRegistry(NKikimr::Tests::TServerSettings& serverSettings) const { @@ -133,10 +139,34 @@ private: Client_->InitRootScheme(); } + void InitializeYqlLogger() { + if (!Settings_.TraceOpt) { + return; + } + + bool found = false; + for (auto& entry : *Settings_.AppConfig.MutableLogConfig()->MutableEntry()) { + if (entry.GetComponent() == "KQP_YQL") { + entry.SetLevel(NActors::NLog::PRI_TRACE); + found = true; + break; + } + } + + if (!found) { + auto entry = Settings_.AppConfig.MutableLogConfig()->AddEntry(); + entry->SetComponent("KQP_YQL"); + entry->SetLevel(NActors::NLog::PRI_TRACE); + } + + NYql::NLog::InitLogger(CreateLogBackend()); + } + public: explicit TImpl(const TYdbSetupSettings& settings) : Settings_(settings) { + InitializeYqlLogger(); InitializeServer(); } @@ -147,15 +177,23 @@ public: return RunKqpProxyRequest<NKikimr::NKqp::TEvKqp::TEvQueryRequest, NKikimr::NKqp::TEvKqp::TEvQueryResponse>(std::move(event)); } - NKikimr::NKqp::TEvKqp::TEvScriptResponse::TPtr ScriptQueryRequest(const TString& script, NKikimrKqp::EQueryAction action, const TString& traceId) const { + NKikimr::NKqp::TEvKqp::TEvScriptResponse::TPtr ScriptRequest(const TString& script, NKikimrKqp::EQueryAction action, const TString& traceId) const { auto event = MakeHolder<NKikimr::NKqp::TEvKqp::TEvScriptRequest>(); - event->Record.SetTraceId(traceId); - - FillScriptRequest(script, action, *event->Record.MutableRequest()); + FillScriptRequest(script, action, traceId, event->Record); return RunKqpProxyRequest<NKikimr::NKqp::TEvKqp::TEvScriptRequest, NKikimr::NKqp::TEvKqp::TEvScriptResponse>(std::move(event)); } + NKikimr::NKqp::TEvKqp::TEvQueryResponse::TPtr QueryRequest(const TString& query, NKikimrKqp::EQueryAction action, const TString& traceId) const { + auto event = MakeHolder<NKikimr::NKqp::TEvKqp::TEvQueryRequest>(); + FillScriptRequest(query, action, traceId, event->Record); + + auto promise = NThreading::NewPromise<NKikimr::NKqp::TEvKqp::TEvQueryResponse::TPtr>(); + GetRuntime()->Register(CreateRunScriptActorMock(std::move(event), promise, Settings_.AppConfig.GetQueryServiceConfig().GetScriptResultSizeLimit())); + + return promise.GetFuture().GetValueSync(); + } + NKikimr::NKqp::TEvGetScriptExecutionOperationResponse::TPtr GetScriptExecutionOperationRequest(const TString& operation) const { NKikimr::NOperationId::TOperationId operationId(operation); auto event = MakeHolder<NKikimr::NKqp::TEvGetScriptExecutionOperation>(Settings_.DomainName, operationId); @@ -199,18 +237,21 @@ private: request.SetQuery(query); } - void FillScriptRequest(const TString& script, NKikimrKqp::EQueryAction action, NKikimrKqp::TQueryRequest& request) const { + void FillScriptRequest(const TString& script, NKikimrKqp::EQueryAction action, const TString& traceId, NKikimrKqp::TEvQueryRequest& event) const { + event.SetTraceId(traceId); + + auto request = event.MutableRequest(); if (action == NKikimrKqp::QUERY_ACTION_EXECUTE) { - request.MutableTxControl()->mutable_begin_tx()->mutable_serializable_read_write(); - request.MutableTxControl()->set_commit_tx(true); + request->MutableTxControl()->mutable_begin_tx()->mutable_serializable_read_write(); + request->MutableTxControl()->set_commit_tx(true); } - request.SetType(NKikimrKqp::QUERY_TYPE_SQL_GENERIC_SCRIPT); - request.SetAction(action); - request.SetCollectStats(Ydb::Table::QueryStatsCollection::STATS_COLLECTION_FULL); + request->SetType(NKikimrKqp::QUERY_TYPE_SQL_GENERIC_SCRIPT); + request->SetAction(action); + request->SetCollectStats(Ydb::Table::QueryStatsCollection::STATS_COLLECTION_FULL); - request.SetDatabase(Settings_.DomainName); - request.SetQuery(script); + request->SetDatabase(Settings_.DomainName); + request->SetQuery(script); } private: @@ -259,14 +300,26 @@ TRequestResult TYdbSetup::SchemeQueryRequest(const TString& query, TSchemeMeta& return TRequestResult(schemeQueryOperationResponse.GetYdbStatus(), issues); } -TRequestResult TYdbSetup::ScriptQueryRequest(const TString& script, NKikimrKqp::EQueryAction action, const TString& traceId, TString& operation) const { - auto scriptExecutionOperation = Impl_->ScriptQueryRequest(script, action, traceId); +TRequestResult TYdbSetup::ScriptRequest(const TString& script, NKikimrKqp::EQueryAction action, const TString& traceId, TString& operation) const { + auto scriptExecutionOperation = Impl_->ScriptRequest(script, action, traceId); operation = scriptExecutionOperation->Get()->OperationId; return TRequestResult(scriptExecutionOperation->Get()->Status, scriptExecutionOperation->Get()->Issues); } +TRequestResult TYdbSetup::QueryRequest(const TString& query, NKikimrKqp::EQueryAction action, const TString& traceId, TQueryMeta& meta) const { + auto queryOperationResponse = Impl_->QueryRequest(query, action, traceId)->Get()->Record.GetRef(); + + meta.Ast = queryOperationResponse.GetResponse().GetQueryAst(); + meta.Plan = queryOperationResponse.GetResponse().GetQueryPlan(); + + NYql::TIssues issues; + NYql::IssuesFromMessage(queryOperationResponse.GetResponse().GetQueryIssues(), issues); + + return TRequestResult(queryOperationResponse.GetYdbStatus(), issues); +} + TRequestResult TYdbSetup::GetScriptExecutionOperationRequest(const TString& operation, TExecutionMeta& meta) const { auto scriptExecutionOperation = Impl_->GetScriptExecutionOperationRequest(operation); diff --git a/ydb/tests/tools/kqprun/src/ydb_setup.h b/ydb/tests/tools/kqprun/src/ydb_setup.h index 3e22389b85d..c375d4f3326 100644 --- a/ydb/tests/tools/kqprun/src/ydb_setup.h +++ b/ydb/tests/tools/kqprun/src/ydb_setup.h @@ -23,6 +23,12 @@ struct TExecutionMeta { }; +struct TQueryMeta { + TString Ast; + TString Plan; +}; + + struct TRequestResult { Ydb::StatusIds::StatusCode Status; NYql::TIssues Issues; @@ -43,7 +49,9 @@ public: TRequestResult SchemeQueryRequest(const TString& query, TSchemeMeta& meta) const; - TRequestResult ScriptQueryRequest(const TString& script, NKikimrKqp::EQueryAction action, const TString& traceId, TString& operation) const; + TRequestResult ScriptRequest(const TString& script, NKikimrKqp::EQueryAction action, const TString& traceId, TString& operation) const; + + TRequestResult QueryRequest(const TString& query, NKikimrKqp::EQueryAction action, const TString& traceId, TQueryMeta& meta) const; TRequestResult GetScriptExecutionOperationRequest(const TString& operation, TExecutionMeta& meta) const; |