aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorgrigoriypisar <grigoriypisar@ydb.tech>2023-11-24 17:02:20 +0300
committergrigoriypisar <grigoriypisar@ydb.tech>2023-11-24 18:05:28 +0300
commite714a823f93b3bfa8b2d9ef1acdd7758ace24a0c (patch)
tree8d43f3cbc6612c127e7bc49da95a27b1044ab23b
parent41c83558b1e44f274cefb628a4726d0658f72878 (diff)
downloadydb-e714a823f93b3bfa8b2d9ef1acdd7758ace24a0c.tar.gz
support trace opt
Добавлена поддержка trace-opt Добавлена возможность запуска с обходом RunScriptActor, что позволяет избежать множества побочных запросов Добавлен флаг через который можно передать путь к app_config
-rw-r--r--ydb/tests/tools/kqprun/kqprun.cpp51
-rw-r--r--ydb/tests/tools/kqprun/src/CMakeLists.darwin-arm64.txt1
-rw-r--r--ydb/tests/tools/kqprun/src/CMakeLists.darwin-x86_64.txt1
-rw-r--r--ydb/tests/tools/kqprun/src/CMakeLists.linux-aarch64.txt1
-rw-r--r--ydb/tests/tools/kqprun/src/CMakeLists.linux-x86_64.txt1
-rw-r--r--ydb/tests/tools/kqprun/src/CMakeLists.windows-x86_64.txt1
-rw-r--r--ydb/tests/tools/kqprun/src/actors.cpp59
-rw-r--r--ydb/tests/tools/kqprun/src/actors.h9
-rw-r--r--ydb/tests/tools/kqprun/src/common.h1
-rw-r--r--ydb/tests/tools/kqprun/src/kqp_runner.cpp64
-rw-r--r--ydb/tests/tools/kqprun/src/kqp_runner.h2
-rw-r--r--ydb/tests/tools/kqprun/src/ya.make1
-rw-r--r--ydb/tests/tools/kqprun/src/ydb_setup.cpp93
-rw-r--r--ydb/tests/tools/kqprun/src/ydb_setup.h10
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;