diff options
author | Daniil Cherednik <dcherednik@ydb.tech> | 2023-10-23 20:34:16 +0000 |
---|---|---|
committer | Daniil Cherednik <dcherednik@ydb.tech> | 2023-10-23 20:34:16 +0000 |
commit | e84c813452e9ed62415b2d17a117008fce909a3d (patch) | |
tree | 998632d6f08419de5b644940799f3be9408ab46b | |
parent | df6e99640a1489cde9b7cc5b58a3747c6ec28921 (diff) | |
download | ydb-e84c813452e9ed62415b2d17a117008fce909a3d.tar.gz |
Intermediate changesstable-23-3
x-stable-origin-commit: 8b96eef194d7fb3b315816b97322e8dd90bf3d94
1124 files changed, 7615 insertions, 5454 deletions
diff --git a/.github/workflows/docs_release.yaml b/.github/workflows/docs_release.yaml deleted file mode 100644 index f34cd69049..0000000000 --- a/.github/workflows/docs_release.yaml +++ /dev/null @@ -1,32 +0,0 @@ -name: Release documentation - -on: - push: - branches: - - 'main' - - 'stable-**' - workflow_dispatch: - -jobs: - release: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v3 - - name: Extract version - shell: bash - run: echo "version=${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}}" | sed -e 's|stable-|v|g' -e 's|-|.|g' >> $GITHUB_OUTPUT - id: extract_version - - name: Release - uses: diplodoc-platform/docs-release-action@v1 - with: - revision: "${{ github.sha }}" - version: "${{ steps.extract_version.outputs.version }}" - project-name: ${{ secrets.DOCS_PROJECT_NAME }} - src-root: ${{ vars.SRC_ROOT }} - storage-bucket: ${{ secrets.DOCS_AWS_BUCKET }} - storage-endpoint: ${{ vars.DOCS_AWS_ENDPOINT }} - storage-access-key-id: ${{ secrets.DOCS_AWS_KEY_ID }} - storage-secret-access-key: ${{ secrets.DOCS_AWS_SECRET_ACCESS_KEY }} - storage-region: ${{ vars.DOCS_AWS_REGION }} - shared-storage-bucket: true diff --git a/library/cpp/actors/interconnect/interconnect_handshake.cpp b/library/cpp/actors/interconnect/interconnect_handshake.cpp index 4a57fc226c..cb4788a33c 100644 --- a/library/cpp/actors/interconnect/interconnect_handshake.cpp +++ b/library/cpp/actors/interconnect/interconnect_handshake.cpp @@ -491,8 +491,11 @@ namespace NActors { s << ", errorReason# " << errorReason; errorCallback(s.Str()); } - } else { + } else if (proto.HasVersionTag()) { ValidateVersionTag(proto, std::forward<TCallback>(errorCallback)); + } else { + LOG_LOG_IC_X(NActorsServices::INTERCONNECT, "ICH09", NLog::PRI_WARN, + "Neither CompatibilityInfo nor VersionTag of the peer can be validated, accepting by default"); } } diff --git a/library/cpp/actors/util/rope.h b/library/cpp/actors/util/rope.h index 201ce06f0d..6d424ce58b 100644 --- a/library/cpp/actors/util/rope.h +++ b/library/cpp/actors/util/rope.h @@ -915,8 +915,6 @@ class TRopeArena { TAllocateCallback Allocator; TRope Arena; - size_t Size = 0; - THashSet<const void*> AccountedBuffers; public: TRopeArena(TAllocateCallback&& allocator) @@ -949,16 +947,6 @@ public: return res; } - - size_t GetSize() const { - return Size; - } - - void AccountChunk(const TRcBuf& chunk) { - if (AccountedBuffers.insert(chunk.Backend.UniqueId()).second) { - Size += chunk.GetOccupiedMemorySize(); - } - } }; struct TRopeUtils { @@ -1131,9 +1119,6 @@ inline TRope TRope::CopySpaceOptimized(TRope&& origin, size_t worstRatioPer1k, T } res.Size = origin.Size; origin = TRope(); - for (const TRcBuf& chunk : res.Chain) { - arena.AccountChunk(chunk); - } return res; } diff --git a/library/cpp/grpc/client/grpc_client_low.h b/library/cpp/grpc/client/grpc_client_low.h index 037463cb78..9c1358e5eb 100644 --- a/library/cpp/grpc/client/grpc_client_low.h +++ b/library/cpp/grpc/client/grpc_client_low.h @@ -131,6 +131,7 @@ struct TGrpcStatus { TString Details; int GRpcStatusCode; bool InternalError; + std::multimap<TString, TString> ServerTrailingMetadata; TGrpcStatus() : GRpcStatusCode(grpc::StatusCode::OK) @@ -800,6 +801,11 @@ private: } else if (readCallback) { if (status.Ok()) { status = TGrpcStatus(grpc::StatusCode::OUT_OF_RANGE, "Read EOF"); + for (const auto& [name, value] : Context.GetServerTrailingMetadata()) { + status.ServerTrailingMetadata.emplace( + TString(name.begin(), name.end()), + TString(value.begin(), value.end())); + } } readCallback(std::move(status)); } else if (finishCallback) { @@ -1196,6 +1202,11 @@ private: } else if (readCallback) { if (status.Ok()) { status = TGrpcStatus(grpc::StatusCode::OUT_OF_RANGE, "Read EOF"); + for (const auto& [name, value] : Context.GetServerTrailingMetadata()) { + status.ServerTrailingMetadata.emplace( + TString(name.begin(), name.end()), + TString(value.begin(), value.end())); + } } readCallback(std::move(status)); } else if (finishCallback) { diff --git a/library/cpp/protobuf/json/json2proto.cpp b/library/cpp/protobuf/json/json2proto.cpp index be8682e239..bb6cc66de3 100644 --- a/library/cpp/protobuf/json/json2proto.cpp +++ b/library/cpp/protobuf/json/json2proto.cpp @@ -258,6 +258,10 @@ Json2SingleField(const NJson::TJsonValue& json, const NJson::TJsonValue& fieldJson = name ? json[name] : json; + if (name && config.UnknownFieldsCollector) { + config.UnknownFieldsCollector->OnEnterMapItem(name); + } + switch (field.cpp_type()) { JSON_TO_FIELD(CPPTYPE_INT32, field.name(), fieldJson, IsInteger, SetInt32, GetInteger); JSON_TO_FIELD(CPPTYPE_INT64, field.name(), fieldJson, IsInteger, SetInt64, GetInteger); @@ -295,6 +299,10 @@ Json2SingleField(const NJson::TJsonValue& json, ythrow yexception() << "Unknown protobuf field type: " << static_cast<int>(field.cpp_type()) << "."; } + + if (name && config.UnknownFieldsCollector) { + config.UnknownFieldsCollector->OnLeaveMapItem(); + } } static void @@ -397,6 +405,10 @@ Json2RepeatedField(const NJson::TJsonValue& json, if (fieldJson.GetType() == NJson::JSON_UNDEFINED || fieldJson.GetType() == NJson::JSON_NULL) return; + if (config.UnknownFieldsCollector) { + config.UnknownFieldsCollector->OnEnterMapItem(name); + } + bool isMap = fieldJson.GetType() == NJson::JSON_MAP; if (isMap) { if (!config.MapAsObject) { @@ -421,7 +433,13 @@ Json2RepeatedField(const NJson::TJsonValue& json, for (const auto& x : jsonMap) { const TString& key = x.first; const NJson::TJsonValue& jsonValue = x.second; + if (config.UnknownFieldsCollector) { + config.UnknownFieldsCollector->OnEnterMapItem(key); + } Json2RepeatedFieldValue(jsonValue, proto, field, config, reflection, key); + if (config.UnknownFieldsCollector) { + config.UnknownFieldsCollector->OnLeaveMapItem(); + } } } else { if (config.ReplaceRepeatedFields) { @@ -429,17 +447,37 @@ Json2RepeatedField(const NJson::TJsonValue& json, } if (fieldJson.GetType() == NJson::JSON_ARRAY) { const NJson::TJsonValue::TArray& jsonArray = fieldJson.GetArray(); + ui64 id = 0; for (const NJson::TJsonValue& jsonValue : jsonArray) { + if (config.UnknownFieldsCollector) { + config.UnknownFieldsCollector->OnEnterArrayItem(id); + } Json2RepeatedFieldValue(jsonValue, proto, field, config, reflection); + if (config.UnknownFieldsCollector) { + config.UnknownFieldsCollector->OnLeaveArrayItem(); + } + ++id; } } else if (config.ValueVectorizer) { + ui64 id = 0; for (const NJson::TJsonValue& jsonValue : config.ValueVectorizer(fieldJson)) { + if (config.UnknownFieldsCollector) { + config.UnknownFieldsCollector->OnEnterArrayItem(id); + } Json2RepeatedFieldValue(jsonValue, proto, field, config, reflection); + if (config.UnknownFieldsCollector) { + config.UnknownFieldsCollector->OnLeaveArrayItem(); + } + ++id; } } else if (config.VectorizeScalars) { Json2RepeatedFieldValue(fieldJson, proto, field, config, reflection); } } + + if (config.UnknownFieldsCollector) { + config.UnknownFieldsCollector->OnLeaveMapItem(); + } } namespace NProtobufJson { @@ -463,14 +501,18 @@ namespace NProtobufJson { } } - if (!config.AllowUnknownFields) { + if (!config.AllowUnknownFields || config.UnknownFieldsCollector) { THashMap<TString, bool> knownFields; for (int f = 0, endF = descriptor->field_count(); f < endF; ++f) { const google::protobuf::FieldDescriptor* field = descriptor->field(f); knownFields[GetFieldName(*field, config)] = 1; } for (const auto& f : json.GetMap()) { - Y_ENSURE(knownFields.contains(f.first), "unknown field \"" << f.first << "\" for \"" << descriptor->full_name() << "\""); + const bool isFieldKnown = knownFields.contains(f.first); + Y_ENSURE(config.AllowUnknownFields || isFieldKnown, "unknown field \"" << f.first << "\" for \"" << descriptor->full_name() << "\""); + if (!isFieldKnown) { + config.UnknownFieldsCollector->OnUnknownField(f.first, *descriptor); + } } } } diff --git a/library/cpp/protobuf/json/json2proto.h b/library/cpp/protobuf/json/json2proto.h index d576fabce7..5952e28c3d 100644 --- a/library/cpp/protobuf/json/json2proto.h +++ b/library/cpp/protobuf/json/json2proto.h @@ -2,10 +2,12 @@ #include "string_transform.h" #include "name_generator.h" +#include "unknown_fields_collector.h" #include <library/cpp/json/json_reader.h> #include <library/cpp/json/json_value.h> +#include <util/generic/ptr.h> #include <util/stream/input.h> #include <util/stream/str.h> #include <util/stream/mem.h> @@ -108,6 +110,11 @@ namespace NProtobufJson { return *this; } + TSelf& SetUnknownFieldsCollector(TSimpleSharedPtr<IUnknownFieldsCollector> value) { + UnknownFieldsCollector = std::move(value); + return *this; + } + FldNameMode FieldNameMode = FieldNameOriginalCase; bool AllowUnknownFields = true; @@ -152,6 +159,9 @@ namespace NProtobufJson { /// Allow nonstandard conversions, e.g. google.protobuf.Duration from String bool AllowString2TimeConversion = false; + + /// Stores information about unknown fields + TSimpleSharedPtr<IUnknownFieldsCollector> UnknownFieldsCollector = nullptr; }; /// @throw yexception diff --git a/library/cpp/protobuf/json/unknown_fields_collector.h b/library/cpp/protobuf/json/unknown_fields_collector.h new file mode 100644 index 0000000000..1e71f2164c --- /dev/null +++ b/library/cpp/protobuf/json/unknown_fields_collector.h @@ -0,0 +1,29 @@ +#pragma once + +#include <util/generic/string.h> + +namespace google { + namespace protobuf { + class FieldDescriptor; + class Descriptor; + } +} + +namespace NProtobufJson { + /* Methods OnEnter.../OnLeave... are called on every field of structure + * during traverse and should be used to build context + * Method OnUnknownField are called every time when field which can't + * be mapped + */ + struct IUnknownFieldsCollector { + virtual ~IUnknownFieldsCollector() = default; + + virtual void OnEnterMapItem(const TString& key) = 0; + virtual void OnLeaveMapItem() = 0; + + virtual void OnEnterArrayItem(ui64 id) = 0; + virtual void OnLeaveArrayItem() = 0; + + virtual void OnUnknownField(const TString& key, const google::protobuf::Descriptor& value) = 0; + }; +} diff --git a/library/cpp/protobuf/json/ut/unknown_fields_collector_ut.cpp b/library/cpp/protobuf/json/ut/unknown_fields_collector_ut.cpp new file mode 100644 index 0000000000..00a2152a68 --- /dev/null +++ b/library/cpp/protobuf/json/ut/unknown_fields_collector_ut.cpp @@ -0,0 +1,165 @@ +#include "json.h" +#include "proto.h" +#include "proto2json.h" + +#include <library/cpp/protobuf/json/json2proto.h> + +#include <library/cpp/testing/unittest/registar.h> + +#include <util/generic/set.h> +#include <util/generic/string.h> + +using namespace NProtobufJson; +using namespace NProtobufJsonTest; + +struct TTestUnknownFieldsCollector : public IUnknownFieldsCollector { + void OnEnterMapItem(const TString& key) override { + CurrentPath.push_back(key); + } + + void OnEnterArrayItem(ui64 id) override { + CurrentPath.push_back(ToString(id)); + } + + void OnLeaveMapItem() override { + CurrentPath.pop_back(); + } + + void OnLeaveArrayItem() override { + CurrentPath.pop_back(); + } + + void OnUnknownField(const TString& key, const google::protobuf::Descriptor& value) override { + TString path; + for (auto& piece : CurrentPath) { + path.append("/"); + path.append(piece); + } + path.append("/"); + path.append(key); + UnknownKeys.insert(std::move(path)); + Y_UNUSED(value); + } + + TVector<TString> CurrentPath; + TSet<TString> UnknownKeys; +}; + +Y_UNIT_TEST_SUITE(TUnknownFieldsCollectorTest) { + Y_UNIT_TEST(TestFlatOptional) { + TFlatOptional proto; + TSimpleSharedPtr<TTestUnknownFieldsCollector> collector = new TTestUnknownFieldsCollector; + TJson2ProtoConfig cfg; + cfg.SetUnknownFieldsCollector(collector).SetAllowUnknownFields(true); + + Json2Proto(TStringBuf(R"({"42":42,"I32":11,"test":2,"string":"str","String":"string","obj":{"inner":{}},"arr":[1,2,3]})"), proto, cfg); + TSet<TString> expectedKeys = { + {"/42"}, + {"/arr"}, + {"/obj"}, + {"/string"}, + {"/test"}, + }; + UNIT_ASSERT(collector->CurrentPath.empty()); + UNIT_ASSERT_VALUES_EQUAL(collector->UnknownKeys, expectedKeys); + } + + Y_UNIT_TEST(TestFlatRepeated) { + TFlatRepeated proto; + TSimpleSharedPtr<TTestUnknownFieldsCollector> collector = new TTestUnknownFieldsCollector; + TJson2ProtoConfig cfg; + cfg.SetUnknownFieldsCollector(collector).SetAllowUnknownFields(true); + + Json2Proto(TStringBuf(R"({"42":42,"I32":[11,12],"test":12,"string":"str","String":["string1","string2"],"obj":{"inner":{}},"arr":[1,2,3]})"), proto, cfg); + TSet<TString> expectedKeys = { + {"/42"}, + {"/arr"}, + {"/obj"}, + {"/string"}, + {"/test"}, + }; + UNIT_ASSERT(collector->CurrentPath.empty()); + UNIT_ASSERT_VALUES_EQUAL(collector->UnknownKeys, expectedKeys); + } + + Y_UNIT_TEST(TestCompositeOptional) { + TCompositeOptional proto; + TSimpleSharedPtr<TTestUnknownFieldsCollector> collector = new TTestUnknownFieldsCollector; + TJson2ProtoConfig cfg; + cfg.SetUnknownFieldsCollector(collector).SetAllowUnknownFields(true); + + Json2Proto(TStringBuf(R"({"Part":{"42":42,"I32":11,"test":12,"string":"str","String":"string"},"string2":"str"})"), proto, cfg); + TSet<TString> expectedKeys = { + {"/Part/42"}, + {"/Part/string"}, + {"/Part/test"}, + {"/string2"}, + }; + UNIT_ASSERT(collector->CurrentPath.empty()); + UNIT_ASSERT_VALUES_EQUAL(collector->UnknownKeys, expectedKeys); + } + + Y_UNIT_TEST(TestCompositeRepeated) { + TCompositeRepeated proto; + TSimpleSharedPtr<TTestUnknownFieldsCollector> collector = new TTestUnknownFieldsCollector; + TJson2ProtoConfig cfg; + cfg.SetUnknownFieldsCollector(collector).SetAllowUnknownFields(true); + + Json2Proto(TStringBuf(R"({"Part":[)" + R"( {"42":42,"I32":11,"test":12,"string":"str","String":"string"},)" + R"( {"abc":"d"})" + R"(],)" + R"("string2":"str"})"), proto, cfg); + TSet<TString> expectedKeys = { + {"/Part/0/42"}, + {"/Part/0/string"}, + {"/Part/0/test"}, + {"/Part/1/abc"}, + {"/string2"}, + }; + UNIT_ASSERT(collector->CurrentPath.empty()); + UNIT_ASSERT_VALUES_EQUAL(collector->UnknownKeys, expectedKeys); + } + + Y_UNIT_TEST(TestCompleMapType) { + TComplexMapType proto; + TSimpleSharedPtr<TTestUnknownFieldsCollector> collector = new TTestUnknownFieldsCollector; + TJson2ProtoConfig cfg; + cfg.SetUnknownFieldsCollector(collector).SetAllowUnknownFields(true); + + Json2Proto(TStringBuf(R"({"42":42,)" + R"("Nested":[)" + R"( {"key":"abc","value":{"string":"string","Nested":[{"key":"def","value":{"string2":"string2"}}]}},)" + R"( {"key":"car","value":{"string3":"string3"}})" + R"(]})"), proto, cfg); + TSet<TString> expectedKeys = { + {"/42"}, + {"/Nested/0/value/Nested/0/value/string2"}, + {"/Nested/0/value/string"}, + {"/Nested/1/value/string3"}, + }; + UNIT_ASSERT(collector->CurrentPath.empty()); + UNIT_ASSERT_VALUES_EQUAL(collector->UnknownKeys, expectedKeys); + } + + Y_UNIT_TEST(TestCompleMapTypeMapAsObject) { + TComplexMapType proto; + TSimpleSharedPtr<TTestUnknownFieldsCollector> collector = new TTestUnknownFieldsCollector; + TJson2ProtoConfig cfg; + cfg.SetUnknownFieldsCollector(collector).SetAllowUnknownFields(true).SetMapAsObject(true); + + Json2Proto(TStringBuf(R"({"42":42,)" + R"("Nested":{)" + R"( "abc":{"string":"string","Nested":{"def":{"string2":"string2"}}},)" + R"( "car":{"string3":"string3"})" + R"(}})"), proto, cfg); + TSet<TString> expectedKeys = { + {"/42"}, + {"/Nested/abc/Nested/def/string2"}, + {"/Nested/abc/string"}, + {"/Nested/car/string3"}, + }; + UNIT_ASSERT(collector->CurrentPath.empty()); + UNIT_ASSERT_VALUES_EQUAL(collector->UnknownKeys, expectedKeys); + } +} // TJson2ProtoTest diff --git a/library/cpp/protobuf/json/ut/ya.make b/library/cpp/protobuf/json/ut/ya.make index 2a5391e375..11690ceb46 100644 --- a/library/cpp/protobuf/json/ut/ya.make +++ b/library/cpp/protobuf/json/ut/ya.make @@ -10,6 +10,7 @@ SRCS( filter_ut.proto test.proto util_ut.cpp + unknown_fields_collector_ut.cpp ) GENERATE_ENUM_SERIALIZATION(test.pb.h) diff --git a/ydb/CMakeLists.txt b/ydb/CMakeLists.txt index 92e0648cae..066036e84b 100644 --- a/ydb/CMakeLists.txt +++ b/ydb/CMakeLists.txt @@ -12,3 +12,12 @@ add_subdirectory(library) add_subdirectory(public) add_subdirectory(services) add_subdirectory(tests) +add_custom_target(ydb_py_protos) + +add_custom_command( + TARGET ydb_py_protos POST_BUILD + COMMAND ${CMAKE_SOURCE_DIR}/ydb/tests/oss/launch/compile_protos.sh ${CMAKE_SOURCE_DIR} ydb library/cpp/actors + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + COMMENT "Compiling PY protos..." +) + diff --git a/ydb/apps/ydb/ut/CMakeLists.linux-aarch64.txt b/ydb/apps/ydb/ut/CMakeLists.linux-aarch64.txt index f6bfcce26e..7b93fec089 100644 --- a/ydb/apps/ydb/ut/CMakeLists.linux-aarch64.txt +++ b/ydb/apps/ydb/ut/CMakeLists.linux-aarch64.txt @@ -68,3 +68,5 @@ target_allocator(ydb-apps-ydb-ut cpp-malloc-jemalloc ) vcs_info(ydb-apps-ydb-ut) +add_dependencies(ydb-apps-ydb-ut ydb_py_protos) + diff --git a/ydb/apps/ydb/ut/CMakeLists.linux-x86_64.txt b/ydb/apps/ydb/ut/CMakeLists.linux-x86_64.txt index 4ef3e88724..16b271598b 100644 --- a/ydb/apps/ydb/ut/CMakeLists.linux-x86_64.txt +++ b/ydb/apps/ydb/ut/CMakeLists.linux-x86_64.txt @@ -70,3 +70,5 @@ target_allocator(ydb-apps-ydb-ut libs-tcmalloc-no_percpu_cache ) vcs_info(ydb-apps-ydb-ut) +add_dependencies(ydb-apps-ydb-ut ydb_py_protos) + diff --git a/ydb/apps/ydb/ut/epilogue.cmake b/ydb/apps/ydb/ut/epilogue.cmake new file mode 100644 index 0000000000..c14b6679de --- /dev/null +++ b/ydb/apps/ydb/ut/epilogue.cmake @@ -0,0 +1 @@ +add_dependencies(ydb-apps-ydb-ut ydb_py_protos) diff --git a/ydb/core/actorlib_impl/test_interconnect_ut.cpp b/ydb/core/actorlib_impl/test_interconnect_ut.cpp index 527bb50c89..29d4ba26f5 100644 --- a/ydb/core/actorlib_impl/test_interconnect_ut.cpp +++ b/ydb/core/actorlib_impl/test_interconnect_ut.cpp @@ -715,7 +715,7 @@ Y_UNIT_TEST_SUITE(TInterconnectTest) { current = node1.get(); } Y_VERIFY(current); - Y_VERIFY(TCompatibilityInfo::MakeStored(NKikimrConfig::TCompatibilityRule::Interconnect, current) + Y_VERIFY(CompatibilityInfo.MakeStored(NKikimrConfig::TCompatibilityRule::Interconnect, current) .SerializeToString(&*common->CompatibilityInfo)); common->ValidateCompatibilityInfo = @@ -726,8 +726,8 @@ Y_UNIT_TEST_SUITE(TInterconnectTest) { return false; } - return TCompatibilityInfo::CheckCompatibility(current, &peerPB, - (ui32)NKikimrConfig::TCompatibilityRule::Interconnect, errorReason); + return CompatibilityInfo.CheckCompatibility(current, &peerPB, + NKikimrConfig::TCompatibilityRule::Interconnect, errorReason); }; }); runtime.Initialize(TAppPrepare().Unwrap()); @@ -746,8 +746,8 @@ Y_UNIT_TEST_SUITE(TInterconnectTest) { std::shared_ptr<NKikimrConfig::TCurrentCompatibilityInfo> node0 = std::make_shared<NKikimrConfig::TCurrentCompatibilityInfo>(); { - node0->SetBuild("nbs"); - auto* version = node0->MutableYdbVersion(); + node0->SetApplication("nbs"); + auto* version = node0->MutableVersion(); version->SetYear(22); version->SetMajor(4); version->SetMinor(1); @@ -757,16 +757,16 @@ Y_UNIT_TEST_SUITE(TInterconnectTest) { std::shared_ptr<NKikimrConfig::TCurrentCompatibilityInfo> node1 = std::make_shared<NKikimrConfig::TCurrentCompatibilityInfo>(); { - node1->SetBuild("ydb"); - auto* version = node1->MutableYdbVersion(); + node1->SetApplication("ydb"); + auto* version = node1->MutableVersion(); version->SetYear(23); version->SetMajor(1); version->SetMinor(1); version->SetHotfix(0); { - auto* nbsRule = node1->AddCanLoadFrom(); - nbsRule->SetBuild("nbs"); + auto* nbsRule = node1->AddCanConnectTo(); + nbsRule->SetApplication("nbs"); nbsRule->SetComponentId((ui32)NKikimrConfig::TCompatibilityRule::Interconnect); auto* lowerLimit = nbsRule->MutableLowerLimit(); @@ -783,19 +783,19 @@ Y_UNIT_TEST_SUITE(TInterconnectTest) { TestConnectionWithDifferentVersions(node1, node0); } - Y_UNIT_TEST(OldFormat) { + void TestOldFormat(TString oldTag, bool suppressOnNew, bool suppressOnOld) { std::shared_ptr<NKikimrConfig::TCurrentCompatibilityInfo> node0 = std::make_shared<NKikimrConfig::TCurrentCompatibilityInfo>(); { - node0->SetBuild("ydb"); - auto* version = node0->MutableYdbVersion(); + node0->SetApplication("ydb"); + auto* version = node0->MutableVersion(); version->SetYear(23); version->SetMajor(1); version->SetMinor(1); version->SetHotfix(0); { - auto* rule = node0->AddCanLoadFrom(); + auto* rule = node0->AddCanConnectTo(); rule->SetComponentId((ui32)NKikimrConfig::TCompatibilityRule::Interconnect); auto* lowerLimit = rule->MutableLowerLimit(); @@ -812,48 +812,75 @@ Y_UNIT_TEST_SUITE(TInterconnectTest) { runtime.SetUseRealInterconnect(); runtime.SetICCommonSetupper([=](ui32 nodeNum, TIntrusivePtr<TInterconnectProxyCommon> common) { if (nodeNum % 2 == 0) { - common->CompatibilityInfo = TString(); - - common->ValidateCompatibilityInfo = - [=](const TString& peer, TString& errorReason) { - NKikimrConfig::TStoredCompatibilityInfo peerPB; - if (!peerPB.ParseFromString(peer)) { - errorReason = "Cannot parse given CompatibilityInfo"; - return false; - } - - return TCompatibilityInfo::CheckCompatibility(node0.get(), &peerPB, - (ui32)NKikimrConfig::TCompatibilityRule::Interconnect, errorReason); - }; - - common->ValidateCompatibilityOldFormat = - [=](const TMaybe<TInterconnectProxyCommon::TVersionInfo>& peer, TString& errorReason) { - if (!peer) { - return true; - } - return TCompatibilityInfo::CheckCompatibility(node0.get(), *peer, - (ui32)NKikimrConfig::TCompatibilityRule::Interconnect, errorReason); + if (!suppressOnNew) { + common->CompatibilityInfo.emplace(); + + common->ValidateCompatibilityInfo = + [=](const TString& peer, TString& errorReason) { + NKikimrConfig::TStoredCompatibilityInfo peerPB; + if (!peerPB.ParseFromString(peer)) { + errorReason = "Cannot parse given CompatibilityInfo"; + return false; + } + + return CompatibilityInfo.CheckCompatibility(node0.get(), &peerPB, + NKikimrConfig::TCompatibilityRule::Interconnect, errorReason); + }; + + common->ValidateCompatibilityOldFormat = + [=](const TMaybe<TInterconnectProxyCommon::TVersionInfo>& peer, TString& errorReason) { + if (!peer) { + return true; + } + return CompatibilityInfo.CheckCompatibility(node0.get(), *peer, + NKikimrConfig::TCompatibilityRule::Interconnect, errorReason); + }; + + common->VersionInfo = TInterconnectProxyCommon::TVersionInfo{ + .Tag = "stable-23-1", + .AcceptedTags = { "stable-23-1", "stable-22-5" }, }; + } } else { - common->VersionInfo = TInterconnectProxyCommon::TVersionInfo{ - .Tag = "stable-22-5-6-hotfix-1", - .AcceptedTags = {"stable-22-5-6-hotfix-1"} - }; + if (!suppressOnOld) { + common->VersionInfo = TInterconnectProxyCommon::TVersionInfo{ + .Tag = oldTag, + .AcceptedTags = { oldTag } + }; + } } }); runtime.Initialize(TAppPrepare().Unwrap()); - const auto edge = runtime.AllocateEdgeActor(0); - runtime.Send(new IEventHandle(runtime.GetInterconnectProxy(0, 1), edge, new TEvInterconnect::TEvConnectNode), 0, true); + using TPair = std::pair<ui32, ui32>; + for (auto [node1, node2] : {TPair{0, 1}, TPair{1, 0}}) { + const auto edge = runtime.AllocateEdgeActor(node1); + runtime.Send(new IEventHandle(runtime.GetInterconnectProxy(node1, node2), edge, new TEvInterconnect::TEvConnectNode), node1, true); - TAutoPtr<IEventHandle> handle; - { - const auto event = runtime.GrabEdgeEvent<TEvInterconnect::TEvNodeConnected>(handle); - UNIT_ASSERT_EQUAL(event->NodeId, runtime.GetNodeId(1)); + TAutoPtr<IEventHandle> handle; + { + const auto event = runtime.GrabEdgeEvent<TEvInterconnect::TEvNodeConnected>(handle); + UNIT_ASSERT_EQUAL(event->NodeId, runtime.GetNodeId(node2)); + } } } + Y_UNIT_TEST(OldFormat) { + TestOldFormat("stable-22-5", false, false); + } + + Y_UNIT_TEST(OldFormatSuppressVersionCheckOnNew) { + TestOldFormat("trunk", true, false); + } + + Y_UNIT_TEST(OldFormatSuppressVersionCheckOnOld) { + TestOldFormat("trunk", false, true); + } + + Y_UNIT_TEST(OldFormatSuppressVersionCheck) { + TestOldFormat("trunk", true, true); + } } } diff --git a/ydb/core/audit/audit_log.cpp b/ydb/core/audit/audit_log.cpp index df9e5f65e1..24cea6f845 100644 --- a/ydb/core/audit/audit_log.cpp +++ b/ydb/core/audit/audit_log.cpp @@ -15,9 +15,9 @@ THolder<NActors::IActor> CreateAuditWriter(TMap<NKikimrConfig::TAuditConfig::EFo return MakeHolder<TAuditLogActor>(std::move(logBackends)); } -void SendAuditLog(const NActors::TActorSystem* sys, TVector<std::pair<TStringBuf, TString>>& parts) +void SendAuditLog(const NActors::TActorSystem* sys, TVector<std::pair<TString, TString>>&& parts) { - auto request = MakeHolder<TEvAuditLog::TEvWriteAuditLog>(Now(), parts); + auto request = MakeHolder<TEvAuditLog::TEvWriteAuditLog>(Now(), std::move(parts)); sys->Send(MakeAuditServiceID(), request.Release()); } diff --git a/ydb/core/audit/audit_log.h b/ydb/core/audit/audit_log.h index 48b3e0346b..e17d664a28 100644 --- a/ydb/core/audit/audit_log.h +++ b/ydb/core/audit/audit_log.h @@ -16,10 +16,10 @@ #define AUDIT_LOG_S(sys, expr) \ do { \ - if (::NKikimr::NAudit::AUDIT_LOG_ENABLED.load()) { \ - TVector<std::pair<TStringBuf, TString>> auditParts; \ + if (::NKikimr::NAudit::AUDIT_LOG_ENABLED.load()) { \ + TVector<std::pair<TString, TString>> auditParts; \ expr \ - ::NKikimr::NAudit::SendAuditLog(sys, auditParts); \ + ::NKikimr::NAudit::SendAuditLog(sys, std::move(auditParts)); \ } \ } while (0) /**/ @@ -29,7 +29,7 @@ #define AUDIT_PART_COND(key, value, condition) \ do { \ if (condition && !value.empty()) { \ - auditParts.push_back({key, value}); \ + auditParts.emplace_back(key, value); \ } \ } while (0); @@ -63,9 +63,9 @@ struct TEvAuditLog : public NActors::TEventLocal<TEvWriteAuditLog, EvWriteAuditLog> { TInstant Time; - TVector<std::pair<TStringBuf, TString>> Parts; + TVector<std::pair<TString, TString>> Parts; - TEvWriteAuditLog(TInstant time, TVector<std::pair<TStringBuf, TString>> parts) + TEvWriteAuditLog(TInstant time, TVector<std::pair<TString, TString>>&& parts) : Time(time) , Parts(std::move(parts)) {} @@ -100,7 +100,7 @@ private: const TActorContext& ctx); static void WriteLog( - const TString& log, + const TString& log, const TVector<THolder<TLogBackend>>& logBackends); static TString GetJsonLog( @@ -114,7 +114,7 @@ private: //////////////////////////////////////////////////////////////////////////////// -void SendAuditLog(const NActors::TActorSystem* sys, TVector<std::pair<TStringBuf, TString>>& parts); +void SendAuditLog(const NActors::TActorSystem* sys, TVector<std::pair<TString, TString>>&& parts); inline NActors::TActorId MakeAuditServiceID() { return NActors::TActorId(0, TStringBuf("YDB_AUDIT")); diff --git a/ydb/core/blob_depot/agent.cpp b/ydb/core/blob_depot/agent.cpp index 5e59be28a0..8deb40da82 100644 --- a/ydb/core/blob_depot/agent.cpp +++ b/ydb/core/blob_depot/agent.cpp @@ -220,17 +220,10 @@ namespace NKikimr::NBlobDepot { if (!ReadyForAgentQueries()) { return; } - for (auto& [pipeServerId, info] : PipeServers) { - if (info.ProcessThroughQueue) { - if (info.PostponeQ.empty()) { - info.ProcessThroughQueue = false; - } else { - for (auto& ev : std::exchange(info.PostponeQ, {})) { - TActivationContext::Send(ev.release()); - } - TActivationContext::Send(new IEventHandle(TEvPrivate::EvProcessRegisterAgentQ, 0, SelfId(), {}, nullptr, 0)); - } + for (auto& ev : std::exchange(info.PostponeQ, {})) { + TActivationContext::Send(ev.release()); + ++info.InFlightDeliveries; } } } diff --git a/ydb/core/blob_depot/agent/comm.cpp b/ydb/core/blob_depot/agent/comm.cpp index 843bb4a0ba..54b89c4996 100644 --- a/ydb/core/blob_depot/agent/comm.cpp +++ b/ydb/core/blob_depot/agent/comm.cpp @@ -29,15 +29,13 @@ namespace NKikimr::NBlobDepot { PipeId = Register(NTabletPipe::CreateClient(SelfId(), TabletId, NTabletPipe::TClientRetryPolicy::WithRetries())); NextTabletRequestId = 1; const ui64 id = NextTabletRequestId++; - STLOG(PRI_DEBUG, BLOB_DEPOT_AGENT, BDA05, "ConnectToBlobDepot", (AgentId, LogId), - (PipeId, PipeId), (RequestId, id)); + STLOG(PRI_DEBUG, BLOB_DEPOT_AGENT, BDA05, "ConnectToBlobDepot", (AgentId, LogId), (PipeId, PipeId), (RequestId, id)); NTabletPipe::SendData(SelfId(), PipeId, new TEvBlobDepot::TEvRegisterAgent(VirtualGroupId, AgentInstanceId), id); RegisterRequest(id, this, nullptr, {}, true); } void TBlobDepotAgent::Handle(TRequestContext::TPtr /*context*/, NKikimrBlobDepot::TEvRegisterAgentResult& msg) { - STLOG(PRI_DEBUG, BLOB_DEPOT_AGENT, BDA06, "TEvRegisterAgentResult", (AgentId, LogId), - (Msg, msg)); + STLOG(PRI_DEBUG, BLOB_DEPOT_AGENT, BDA06, "TEvRegisterAgentResult", (AgentId, LogId), (Msg, msg)); BlobDepotGeneration = msg.GetGeneration(); DecommitGroupId = msg.HasDecommitGroupId() ? std::make_optional(msg.GetDecommitGroupId()) : std::nullopt; diff --git a/ydb/core/blob_depot/agent/storage_collect_garbage.cpp b/ydb/core/blob_depot/agent/storage_collect_garbage.cpp index 9fee42907e..4a8327804e 100644 --- a/ydb/core/blob_depot/agent/storage_collect_garbage.cpp +++ b/ydb/core/blob_depot/agent/storage_collect_garbage.cpp @@ -11,7 +11,6 @@ namespace NKikimr::NBlobDepot { ui32 NumKeep; ui32 DoNotKeepIndex = 0; ui32 NumDoNotKeep; - ui32 CounterShift = 0; bool IsLast; bool QueryInFlight = false; @@ -52,10 +51,10 @@ namespace NKikimr::NBlobDepot { record.SetTabletId(Request.TabletId); record.SetGeneration(Request.RecordGeneration); - record.SetPerGenerationCounter(Request.PerGenerationCounter + CounterShift); - record.SetChannel(Request.Channel); if (Request.Collect && IsLast) { + record.SetPerGenerationCounter(Request.PerGenerationCounter); + record.SetChannel(Request.Channel); record.SetHard(Request.Hard); record.SetCollectGeneration(Request.CollectGeneration); record.SetCollectStep(Request.CollectStep); @@ -70,8 +69,6 @@ namespace NKikimr::NBlobDepot { Y_VERIFY(!QueryInFlight); QueryInFlight = true; - - ++CounterShift; } void OnUpdateBlock() override { diff --git a/ydb/core/blob_depot/agent/storage_discover.cpp b/ydb/core/blob_depot/agent/storage_discover.cpp index 9e5c29c97b..bfa14780bf 100644 --- a/ydb/core/blob_depot/agent/storage_discover.cpp +++ b/ydb/core/blob_depot/agent/storage_discover.cpp @@ -58,6 +58,7 @@ namespace NKikimr::NBlobDepot { } void IssueResolve() { + STLOG(PRI_DEBUG, BLOB_DEPOT_AGENT, BDA49, "IssueResolve", (AgentId, Agent.LogId), (QueryId, GetQueryId())); Agent.Issue(Resolve, this, nullptr); } @@ -65,8 +66,12 @@ namespace NKikimr::NBlobDepot { if (std::holds_alternative<TTabletDisconnected>(response)) { return EndWithError(NKikimrProto::ERROR, "BlobDepot tablet disconnected"); } else if (auto *p = std::get_if<TEvBlobStorage::TEvGetResult*>(&response)) { + STLOG(PRI_DEBUG, BLOB_DEPOT_AGENT, BDA50, "TEvGetResult", (AgentId, Agent.LogId), + (QueryId, GetQueryId()), (Response, *p)); TQuery::HandleGetResult(context, **p); } else if (auto *p = std::get_if<TEvBlobDepot::TEvResolveResult*>(&response)) { + STLOG(PRI_DEBUG, BLOB_DEPOT_AGENT, BDA51, "TEvResolveResult", (AgentId, Agent.LogId), + (QueryId, GetQueryId()), (Response, (*p)->Record)); if (context) { TQuery::HandleResolveResult(std::move(context), **p); } else { diff --git a/ydb/core/blob_depot/blob_depot.cpp b/ydb/core/blob_depot/blob_depot.cpp index 3c2765f8bf..ec40c696c9 100644 --- a/ydb/core/blob_depot/blob_depot.cpp +++ b/ydb/core/blob_depot/blob_depot.cpp @@ -46,34 +46,58 @@ namespace NKikimr::NBlobDepot { STFUNC(TBlobDepot::StateWork) { try { + auto handleDelivery = [this](auto& ev) { + const auto it = PipeServers.find(ev->Recipient); + if (it == PipeServers.end()) { + STLOG(PRI_DEBUG, BLOB_DEPOT, BDT29, "HandleDelivery dropped", (Id, GetLogId()), + (RequestId, ev->Cookie), (Sender, ev->Sender), (PipeServerId, ev->Recipient), (Type, ev->Type)); + return; + } + auto& info = it->second; + + Y_VERIFY(info.InFlightDeliveries); + --info.InFlightDeliveries; + + // return original event type + ev->Rewrite(ev->Type, ev->GetRecipientRewrite()); + + // ensure correct ordering of incoming messages + Y_VERIFY_S(ev->Cookie == info.NextExpectedMsgId, "message reordering detected Cookie# " << ev->Cookie + << " NextExpectedMsgId# " << info.NextExpectedMsgId << " Type# " << Sprintf("%08" PRIx32, + ev->GetTypeRewrite()) << " Id# " << GetLogId()); + ++info.NextExpectedMsgId; + HandleFromAgent(ev); + }; + auto handleFromAgentPipe = [this](auto& ev) { const auto it = PipeServers.find(ev->Recipient); if (it == PipeServers.end()) { + STLOG(PRI_DEBUG, BLOB_DEPOT, BDT23, "HandleFromAgentPipe dropped", (Id, GetLogId()), + (RequestId, ev->Cookie), (Sender, ev->Sender), (PipeServerId, ev->Recipient), (Type, ev->Type)); return; // this may be a race with TEvServerDisconnected and postpone queue; it's okay to have this } auto& info = it->second; STLOG(PRI_DEBUG, BLOB_DEPOT, BDT69, "HandleFromAgentPipe", (Id, GetLogId()), (RequestId, ev->Cookie), - (Sender, ev->Sender), (PipeServerId, ev->Recipient), (ProcessThroughQueue, info.ProcessThroughQueue), - (NextExpectedMsgId, info.NextExpectedMsgId), (PostponeQ.size, info.PostponeQ.size())); + (Sender, ev->Sender), (PipeServerId, ev->Recipient), (NextExpectedMsgId, info.NextExpectedMsgId), + (PostponeQ.size, info.PostponeQ.size()), (InFlightDeliveries, info.InFlightDeliveries), + (ReadyForAgentQueries, ReadyForAgentQueries()), (Type, ev->Type)); - if (info.ProcessThroughQueue || !ReadyForAgentQueries()) { - info.PostponeQ.emplace_back(ev.Release()); - info.ProcessThroughQueue = true; - } else { - // ensure correct ordering of incoming messages - Y_VERIFY_S(ev->Cookie == info.NextExpectedMsgId, "message reordering detected Cookie# " << ev->Cookie - << " NextExpectedMsgId# " << info.NextExpectedMsgId << " Type# " << Sprintf("%08" PRIx32, - ev->GetTypeRewrite()) << " Id# " << GetLogId()); - ++info.NextExpectedMsgId; + Y_VERIFY(ev->Type == ev->GetTypeRewrite()); + ev->Rewrite(TEvPrivate::EvDeliver, ev->GetRecipientRewrite()); - HandleFromAgent(ev); + if (!ReadyForAgentQueries()) { // we can't handle agent queries now -- enqueue this message + info.PostponeQ.emplace_back(ev.Release()); + } else if (!info.PostponeQ.empty()) { + Y_FAIL("PostponeQ can't be nonempty while agent is running"); + } else if (info.InFlightDeliveries++) { + TActivationContext::Send(ev.Release()); + } else { // handle event as delivery one + StateWork(ev); } }; switch (const ui32 type = ev->GetTypeRewrite()) { - cFunc(TEvents::TSystem::Poison, HandlePoison); - hFunc(TEvBlobDepot::TEvApplyConfig, Handle); fFunc(TEvBlobDepot::EvRegisterAgent, handleFromAgentPipe); @@ -86,9 +110,9 @@ namespace NKikimr::NBlobDepot { fFunc(TEvBlobDepot::EvPushNotifyResult, handleFromAgentPipe); fFunc(TEvBlobDepot::EvCollectGarbage, handleFromAgentPipe); - hFunc(TEvBlobDepot::TEvPushMetrics, Handle); + fFunc(TEvPrivate::EvDeliver, handleDelivery); - cFunc(TEvPrivate::EvProcessRegisterAgentQ, ProcessRegisterAgentQ); + hFunc(TEvBlobDepot::TEvPushMetrics, Handle); hFunc(TEvBlobStorage::TEvCollectGarbageResult, Data->Handle); hFunc(TEvBlobStorage::TEvGetResult, Data->UncertaintyResolver->Handle); diff --git a/ydb/core/blob_depot/blob_depot_tablet.h b/ydb/core/blob_depot/blob_depot_tablet.h index 420c2823a6..296872f990 100644 --- a/ydb/core/blob_depot/blob_depot_tablet.h +++ b/ydb/core/blob_depot/blob_depot_tablet.h @@ -27,8 +27,8 @@ namespace NKikimr::NBlobDepot { EvCommitCertainKeys, EvDoGroupMetricsExchange, EvKickSpaceMonitor, - EvProcessRegisterAgentQ, EvUpdateThroughputs, + EvDeliver, }; }; @@ -40,12 +40,6 @@ namespace NKikimr::NBlobDepot { TBlobDepot(TActorId tablet, TTabletStorageInfo *info); ~TBlobDepot(); - void HandlePoison() { - STLOG(PRI_DEBUG, BLOB_DEPOT, BDT23, "HandlePoison", (Id, GetLogId())); - Become(&TThis::StateZombie); - Send(Tablet(), new TEvents::TEvPoison); - } - //////////////////////////////////////////////////////////////////////////////////////////////////////////////// TAutoPtr<TTabletCountersBase> TabletCountersPtr; @@ -84,7 +78,7 @@ namespace NKikimr::NBlobDepot { std::optional<ui32> NodeId; // as reported by RegisterAgent ui64 NextExpectedMsgId = 1; std::deque<std::unique_ptr<IEventHandle>> PostponeQ; - bool ProcessThroughQueue = false; + size_t InFlightDeliveries = 0; }; THashMap<TActorId, TPipeServerContext> PipeServers; @@ -220,14 +214,6 @@ namespace NKikimr::NBlobDepot { //////////////////////////////////////////////////////////////////////////////////////////////////////////////// STFUNC(StateInit) { - if (ev->GetTypeRewrite() == TEvents::TSystem::Poison) { - HandlePoison(); - } else { - StateInitImpl(ev, SelfId()); - } - } - - STFUNC(StateZombie) { StateInitImpl(ev, SelfId()); } diff --git a/ydb/core/blob_depot/data_decommit.cpp b/ydb/core/blob_depot/data_decommit.cpp index 991510217b..93d8baf06e 100644 --- a/ydb/core/blob_depot/data_decommit.cpp +++ b/ydb/core/blob_depot/data_decommit.cpp @@ -106,8 +106,9 @@ namespace NKikimr::NBlobDepot { TCoroTx::RestartTx(); } const TValue *value = Self->Data->FindKey(key); - const bool doGet = (!value && Self->Data->LastAssimilatedBlobId < key.GetBlobId()) // value not yet assimilated - || (value && value->GoingToAssimilate && item.GetMustRestoreFirst()); // value has no local data yet + const bool notYetAssimilated = Self->Data->LastAssimilatedBlobId < key.GetBlobId(); + const bool doGet = !value ? notYetAssimilated : + value->GoingToAssimilate ? item.GetMustRestoreFirst() : notYetAssimilated; if (doGet) { IssueGet(key.GetBlobId(), item.GetMustRestoreFirst()); } @@ -161,12 +162,14 @@ namespace NKikimr::NBlobDepot { void Handle(TEvBlobStorage::TEvRangeResult::TPtr ev) { auto& msg = *ev->Get(); STLOG(PRI_DEBUG, BLOB_DEPOT, BDT55, "TEvRangeResult", (Id, Self->GetLogId()), (Sender, Ev->Sender), - (Cookie, Ev->Cookie), (Msg, msg)); + (Cookie, Ev->Cookie), (Msg, msg), (GetsInFlight, GetsInFlight), (RangesInFlight, RangesInFlight), + (TxInFlight, TxInFlight), (PutsInFlight, PutsInFlight), (GetQ.size, GetQ.size())); if (msg.Status == NKikimrProto::OK) { for (const auto& r : msg.Responses) { if (ev->Cookie) { - if (const TValue *value = Self->Data->FindKey(TKey(r.Id)); !value || value->GoingToAssimilate) { + if (const TValue *value = Self->Data->FindKey(TKey(r.Id)); !value || value->GoingToAssimilate || + Self->Data->LastAssimilatedBlobId < r.Id) { IssueGet(r.Id, true /*mustRestoreFirst*/); } } else { @@ -174,9 +177,15 @@ namespace NKikimr::NBlobDepot { } } } else { - return FinishWithError(NLog::PRI_NOTICE, TStringBuilder() << "TEvRange query failed: " << msg.ErrorReason); + TStringBuilder err; + err << "TEvRange query failed: " << NKikimrProto::EReplyStatus_Name(msg.Status); + if (msg.ErrorReason) { + err << " (" << msg.ErrorReason << ')'; + } + return FinishWithError(NLog::PRI_NOTICE, err); } + Y_VERIFY(RangesInFlight); --RangesInFlight; CheckIfDone(); } @@ -215,7 +224,8 @@ namespace NKikimr::NBlobDepot { void Handle(TEvBlobStorage::TEvGetResult::TPtr ev) { auto& msg = *ev->Get(); STLOG(PRI_DEBUG, BLOB_DEPOT, BDT87, "TEvGetResult", (Id, Self->GetLogId()), (Sender, Ev->Sender), - (Cookie, Ev->Cookie), (Msg, msg)); + (Cookie, Ev->Cookie), (Msg, msg), (GetsInFlight, GetsInFlight), (RangesInFlight, RangesInFlight), + (TxInFlight, TxInFlight), (PutsInFlight, PutsInFlight), (GetQ.size, GetQ.size())); for (ui32 i = 0; i < msg.ResponseSz; ++i) { auto& r = msg.Responses[i]; @@ -235,6 +245,8 @@ namespace NKikimr::NBlobDepot { } } + Y_VERIFY(GetsInFlight); + Y_VERIFY(GetBytesInFlight >= ev->Cookie); --GetsInFlight; GetBytesInFlight -= ev->Cookie; @@ -263,8 +275,6 @@ namespace NKikimr::NBlobDepot { ++PutsInFlight; } else { // we couldn't restore this blob -- there was no place to write it to ResolutionErrors.insert(key.GetBlobId()); - ++PutsInFlight; - HandleTxComplete(); } } @@ -280,17 +290,28 @@ namespace NKikimr::NBlobDepot { const bool doNotKeep = ev->Cookie >> 1 & 1; STLOG(PRI_DEBUG, BLOB_DEPOT, BDT88, "got TEvPutResult", (Id, Self->GetLogId()), (Sender, Ev->Sender), - (Cookie, Ev->Cookie), (Msg, msg), (Key, key), (Keep, keep), (DoNotKeep, doNotKeep)); + (Cookie, Ev->Cookie), (Msg, msg), (Key, key), (Keep, keep), (DoNotKeep, doNotKeep), + (GetsInFlight, GetsInFlight), (RangesInFlight, RangesInFlight), (TxInFlight, TxInFlight), + (PutsInFlight, PutsInFlight), (GetQ.size, GetQ.size())); if (msg.Status != NKikimrProto::OK) { // do not reply OK to this item ResolutionErrors.insert(key.GetBlobId()); } + Y_VERIFY(PutsInFlight); + --PutsInFlight; + Self->Data->ExecuteTxCommitAssimilatedBlob(msg.Status, TBlobSeqId::FromLogoBlobId(msg.Id), std::move(key), TEvPrivate::EvTxComplete, SelfId(), 0, keep, doNotKeep); + ++TxInFlight; } void HandleTxComplete() { + STLOG(PRI_DEBUG, BLOB_DEPOT, BDT84, "HandleTxComplete", (Id, Self->GetLogId()), (Sender, Ev->Sender), + (Cookie, Ev->Cookie), (GetsInFlight, GetsInFlight), (RangesInFlight, RangesInFlight), + (TxInFlight, TxInFlight), (PutsInFlight, PutsInFlight), (GetQ.size, GetQ.size())); + + Y_VERIFY(TxInFlight); --TxInFlight; CheckIfDone(); } diff --git a/ydb/core/blob_depot/data_trash.cpp b/ydb/core/blob_depot/data_trash.cpp index 62e3d625e9..d6f4fc9924 100644 --- a/ydb/core/blob_depot/data_trash.cpp +++ b/ydb/core/blob_depot/data_trash.cpp @@ -124,7 +124,7 @@ namespace NKikimr::NBlobDepot { doNotKeep_.release(); record.CollectGarbageRequestInFlight = true; - record.PerGenerationCounter += ev->Collect ? ev->PerGenerationCounterStepSize() : 0; + record.PerGenerationCounter += ev->Collect; record.TrashInFlight.swap(trashInFlight); record.IssuedGenStep = nextGenStep; diff --git a/ydb/core/blob_depot/garbage_collection.cpp b/ydb/core/blob_depot/garbage_collection.cpp index 60ea091567..3d6df91f0a 100644 --- a/ydb/core/blob_depot/garbage_collection.cpp +++ b/ydb/core/blob_depot/garbage_collection.cpp @@ -90,6 +90,10 @@ namespace NKikimr::NBlobDepot { TGenStep& barrierGenCtr = hard ? barrier.HardGenCtr : barrier.SoftGenCtr; TGenStep& barrierGenStep = hard ? barrier.Hard : barrier.Soft; + if (genCtr < barrierGenCtr) { // obsolete barrier command, just ignore the barrier + return true; + } + Y_VERIFY(barrierGenCtr <= genCtr); Y_VERIFY(barrierGenStep <= collectGenStep); @@ -122,7 +126,6 @@ namespace NKikimr::NBlobDepot { const auto& record = Request->Get()->Record; const ui64 tabletId = record.GetTabletId(); - const ui8 channel = record.GetChannel(); const ui32 generation = record.GetGeneration(); if (!Self->BlocksManager->CheckBlock(tabletId, generation)) { Finish("block race detected", NKikimrProto::BLOCKED); @@ -136,6 +139,7 @@ namespace NKikimr::NBlobDepot { return false; } + const ui8 channel = record.GetChannel(); const auto key = std::make_tuple(tabletId, channel); auto& barriers = Self->BarrierServer->Barriers; if (const auto it = barriers.find(key); it != barriers.end()) { @@ -149,8 +153,10 @@ namespace NKikimr::NBlobDepot { // validate them if (genCtr < barrierGenCtr) { - Finish("record generation:counter is obsolete"); - return false; + if (barrierGenStep < collectGenStep) { + Finish("incorrect barrier sequence"); + return false; + } } else if (genCtr == barrierGenCtr) { if (barrierGenStep != collectGenStep) { Finish("repeated command with different collect parameters received"); diff --git a/ydb/core/blobstorage/dsproxy/dsproxy_assimilate.cpp b/ydb/core/blobstorage/dsproxy/dsproxy_assimilate.cpp index 3e76e63db8..cc93c11c78 100644 --- a/ydb/core/blobstorage/dsproxy/dsproxy_assimilate.cpp +++ b/ydb/core/blobstorage/dsproxy/dsproxy_assimilate.cpp @@ -104,6 +104,8 @@ class TBlobStorageGroupAssimilateRequest : public TBlobStorageGroupRequestActor< using TItemVariant = std::variant<TBlock, TBarrier, TBlob>; struct TPerVDiskInfo { + std::optional<TString> ErrorReason; + std::optional<ui64> LastProcessedBlock; std::optional<std::tuple<ui64, ui8>> LastProcessedBarrier; std::optional<TLogoBlobID> LastProcessedBlob; @@ -279,19 +281,31 @@ public: } void Bootstrap() { - Become(&TThis::StateWork); + A_LOG_INFO_S("BPA01", "bootstrap" + << " ActorId# " << SelfId() + << " Group# " << Info->GroupID + << " RestartCounter# " << RestartCounter); + + Become(&TThis::StateWork, TDuration::Seconds(10), new TEvents::TEvWakeup); for (ui32 i = 0; i < PerVDiskInfo.size(); ++i) { Request(i); } } + void HandleWakeup() { + A_LOG_NOTICE_S("BPA25", "assimilation is way too long"); + } + STATEFN(StateWork) { if (ProcessEvent(ev)) { return; } switch (ev->GetTypeRewrite()) { hFunc(TEvBlobStorage::TEvVAssimilateResult, Handle); + cFunc(TEvents::TSystem::Wakeup, HandleWakeup); + default: + Y_VERIFY_DEBUG(false); } } @@ -306,19 +320,34 @@ public: maxOpt(SkipBarriersUpTo, info.LastProcessedBarrier), maxOpt(SkipBlobsUpTo, info.LastProcessedBlob)), 0); + A_LOG_DEBUG_S("BPA03", "Request orderNumber# " << orderNumber << " VDiskId# " << Info->GetVDiskId(orderNumber)); + ++RequestsInFlight; } void Handle(TEvBlobStorage::TEvVAssimilateResult::TPtr ev) { - --RequestsInFlight; + ProcessReplyFromQueue(ev); const auto& record = ev->Get()->Record; const TVDiskID vdiskId = VDiskIDFromVDiskID(record.GetVDiskID()); const ui32 orderNumber = Info->GetTopology().GetOrderNumber(vdiskId); Y_VERIFY(orderNumber < PerVDiskInfo.size()); + A_LOG_DEBUG_S("BPA02", "Handle TEvVAssimilateResult" + << " Status# " << NKikimrProto::EReplyStatus_Name(record.GetStatus()) + << " ErrorReason# '" << record.GetErrorReason() << "'" + << " VDiskId# " << vdiskId + << " Blocks# " << record.BlocksSize() + << " Barriers# " << record.BarriersSize() + << " Blobs# " << record.BlobsSize() + << " RequestsInFlight# " << RequestsInFlight); + + Y_VERIFY(RequestsInFlight); + --RequestsInFlight; + + auto& info = PerVDiskInfo[orderNumber]; + Y_VERIFY(!info.HasItemsToMerge()); if (record.GetStatus() == NKikimrProto::OK) { - auto& info = PerVDiskInfo[orderNumber]; info.PushDataFromMessage(record, *this, Info->Type); if (info.HasItemsToMerge()) { Heap.push_back(&info); @@ -326,6 +355,11 @@ public: } else if (!info.Finished()) { Request(orderNumber); } + } else { + info.ErrorReason = TStringBuilder() << vdiskId << ": " << NKikimrProto::EReplyStatus_Name(record.GetStatus()); + if (record.GetErrorReason()) { + *info.ErrorReason += " (" + record.GetErrorReason() + ')'; + } } if (!RequestsInFlight) { @@ -334,7 +368,7 @@ public: } void Merge() { - std::vector<ui32> requests; + TStackVec<ui8, 32> requests; const TBlobStorageGroupInfo::TTopology *top = &Info->GetTopology(); TBlobStorageGroupInfo::TGroupVDisks disksWithData(top); @@ -350,12 +384,14 @@ public: ReplyAndDie(NKikimrProto::ERROR); } else { // answer with what we have already collected + A_LOG_DEBUG_S("BPA06", "SendResponseAndDie (no items to merge)"); SendResponseAndDie(std::move(Result)); } return; } while (requests.empty()) { if (Heap.empty()) { + A_LOG_DEBUG_S("BPA07", "SendResponseAndDie (heap empty)"); SendResponseAndDie(std::move(Result)); return; } @@ -398,6 +434,7 @@ public: } if (Result->Blocks.size() + Result->Barriers.size() + Result->Blobs.size() >= 10'000) { + A_LOG_DEBUG_S("BPA05", "SendResponseAndDie (10k)"); SendResponseAndDie(std::move(Result)); } else { for (const ui32 orderNumber : requests) { @@ -414,6 +451,15 @@ public: } void ReplyAndDie(NKikimrProto::EReplyStatus status) { + A_LOG_DEBUG_S("BPA04", "ReplyAndDie status# " << NKikimrProto::EReplyStatus_Name(status)); + for (const auto& item : PerVDiskInfo) { + if (item.ErrorReason) { + if (ErrorReason) { + ErrorReason += ", "; + } + ErrorReason += *item.ErrorReason; + } + } SendResponseAndDie(std::make_unique<TEvBlobStorage::TEvAssimilateResult>(status, ErrorReason)); } }; diff --git a/ydb/core/blobstorage/dsproxy/dsproxy_indexrestoreget.cpp b/ydb/core/blobstorage/dsproxy/dsproxy_indexrestoreget.cpp index e2a14e45e6..03f224c2dd 100644 --- a/ydb/core/blobstorage/dsproxy/dsproxy_indexrestoreget.cpp +++ b/ydb/core/blobstorage/dsproxy/dsproxy_indexrestoreget.cpp @@ -17,6 +17,7 @@ class TBlobStorageGroupIndexRestoreGetRequest TArrayHolder<TEvBlobStorage::TEvGet::TQuery> Queries; const TInstant Deadline; const bool IsInternal; + const bool Decommission; const std::optional<TEvBlobStorage::TEvGet::TForceBlockTabletData> ForceBlockTabletData; THashMap<ui64, TGroupQuorumTracker> QuorumTracker; @@ -174,6 +175,7 @@ class TBlobStorageGroupIndexRestoreGetRequest std::unique_ptr<TEvBlobStorage::TEvGet> get(new TEvBlobStorage::TEvGet( Queries[idx].Id, 0, 0, Deadline, GetHandleClass, true)); + get->Decommission = Decommission; A_LOG_DEBUG_S("DSPI12", "OnEnoughVGetResults" << " recoverable blob, id# " << Queries[idx].Id.ToString() << " BlobStatus# " << DumpBlobStatus(idx) @@ -247,6 +249,7 @@ class TBlobStorageGroupIndexRestoreGetRequest auto ev = std::make_unique<TEvBlobStorage::TEvGet>(Queries, QuerySize, Deadline, GetHandleClass, true /*mustRestoreFirst*/, true /*isIndexOnly*/, std::nullopt /*forceBlockTabletData*/, IsInternal); ev->RestartCounter = counter; + ev->Decommission = Decommission; return ev; } @@ -275,6 +278,7 @@ public: , Queries(ev->Queries.Release()) , Deadline(ev->Deadline) , IsInternal(ev->IsInternal) + , Decommission(ev->Decommission) , ForceBlockTabletData(ev->ForceBlockTabletData) , VGetsInFlight(0) , StartTime(now) diff --git a/ydb/core/blobstorage/dsproxy/dsproxy_multiget.cpp b/ydb/core/blobstorage/dsproxy/dsproxy_multiget.cpp index 6500221d26..82284ade8f 100644 --- a/ydb/core/blobstorage/dsproxy/dsproxy_multiget.cpp +++ b/ydb/core/blobstorage/dsproxy/dsproxy_multiget.cpp @@ -25,6 +25,7 @@ class TBlobStorageGroupMultiGetRequest : public TBlobStorageGroupRequestActor<TB const TInstant Deadline; const bool IsInternal; const bool PhantomCheck; + const bool Decommission; TArrayHolder<TEvBlobStorage::TEvGetResult::TResponse> Responses; const TInstant StartTime; @@ -107,6 +108,7 @@ public: , Deadline(ev->Deadline) , IsInternal(ev->IsInternal) , PhantomCheck(ev->PhantomCheck) + , Decommission(ev->Decommission) , Responses(new TEvBlobStorage::TEvGetResult::TResponse[QuerySize]) , StartTime(now) , MustRestoreFirst(ev->MustRestoreFirst) @@ -127,6 +129,7 @@ public: ev->IsInternal = IsInternal; ev->ReaderTabletData = ReaderTabletData; ev->PhantomCheck = PhantomCheck; + ev->Decommission = Decommission; PendingGets.emplace_back(std::move(ev), cookie); } diff --git a/ydb/core/blobstorage/dsproxy/dsproxy_range.cpp b/ydb/core/blobstorage/dsproxy/dsproxy_range.cpp index a3925bf52c..bbfe6c5128 100644 --- a/ydb/core/blobstorage/dsproxy/dsproxy_range.cpp +++ b/ydb/core/blobstorage/dsproxy/dsproxy_range.cpp @@ -241,10 +241,13 @@ class TBlobStorageGroupRangeRequest : public TBlobStorageGroupRequestActor<TBlob } Y_VERIFY(query == queries.Get() + queryCount); - // register query in wilson and send it to DS proxy + // register query in wilson and send it to DS proxy; issue non-index query when MustRestoreFirst is false to + // prevent IndexRestoreGet invocation auto get = std::make_unique<TEvBlobStorage::TEvGet>(queries, queryCount, Deadline, - NKikimrBlobStorage::EGetHandleClass::FastRead, MustRestoreFirst, IsIndexOnly, TEvBlobStorage::TEvGet::TForceBlockTabletData(TabletId, ForceBlockedGeneration)); + NKikimrBlobStorage::EGetHandleClass::FastRead, MustRestoreFirst, MustRestoreFirst ? IsIndexOnly : false, + TEvBlobStorage::TEvGet::TForceBlockTabletData(TabletId, ForceBlockedGeneration)); get->IsInternal = true; + get->Decommission = Decommission; A_LOG_DEBUG_S("DSR08", "sending TEvGet# " << get->ToString()); @@ -283,7 +286,8 @@ class TBlobStorageGroupRangeRequest : public TBlobStorageGroupRequestActor<TBlob Y_VERIFY(response.Id == BlobsToGet[i].BlobId); if (getResult.Responses[i].Status == NKikimrProto::OK) { - result->Responses.emplace_back(response.Id, response.Buffer.ConvertToString(), response.Keep, response.DoNotKeep); + result->Responses.emplace_back(response.Id, IsIndexOnly ? TString() : response.Buffer.ConvertToString(), + response.Keep, response.DoNotKeep); } else if (getResult.Responses[i].Status != NKikimrProto::NODATA || BlobsToGet[i].RequiredToBePresent) { // it's okay to get NODATA if blob wasn't confirmed -- this blob is simply thrown out of resulting // set; otherwise we return error about lost data diff --git a/ydb/core/blobstorage/pdisk/CMakeLists.darwin-x86_64.txt b/ydb/core/blobstorage/pdisk/CMakeLists.darwin-x86_64.txt index 69594119e2..0e624df7a7 100644 --- a/ydb/core/blobstorage/pdisk/CMakeLists.darwin-x86_64.txt +++ b/ydb/core/blobstorage/pdisk/CMakeLists.darwin-x86_64.txt @@ -36,6 +36,7 @@ target_link_libraries(core-blobstorage-pdisk PUBLIC core-blobstorage-groupinfo core-blobstorage-lwtrace_probes ydb-core-control + version ydb-core-protos ydb-core-util ydb-library-pdisk_io diff --git a/ydb/core/blobstorage/pdisk/CMakeLists.linux-aarch64.txt b/ydb/core/blobstorage/pdisk/CMakeLists.linux-aarch64.txt index 14483b3155..5e9d1889db 100644 --- a/ydb/core/blobstorage/pdisk/CMakeLists.linux-aarch64.txt +++ b/ydb/core/blobstorage/pdisk/CMakeLists.linux-aarch64.txt @@ -37,6 +37,7 @@ target_link_libraries(core-blobstorage-pdisk PUBLIC core-blobstorage-groupinfo core-blobstorage-lwtrace_probes ydb-core-control + version ydb-core-protos ydb-core-util ydb-library-pdisk_io diff --git a/ydb/core/blobstorage/pdisk/CMakeLists.linux-x86_64.txt b/ydb/core/blobstorage/pdisk/CMakeLists.linux-x86_64.txt index 14483b3155..5e9d1889db 100644 --- a/ydb/core/blobstorage/pdisk/CMakeLists.linux-x86_64.txt +++ b/ydb/core/blobstorage/pdisk/CMakeLists.linux-x86_64.txt @@ -37,6 +37,7 @@ target_link_libraries(core-blobstorage-pdisk PUBLIC core-blobstorage-groupinfo core-blobstorage-lwtrace_probes ydb-core-control + version ydb-core-protos ydb-core-util ydb-library-pdisk_io diff --git a/ydb/core/blobstorage/pdisk/CMakeLists.windows-x86_64.txt b/ydb/core/blobstorage/pdisk/CMakeLists.windows-x86_64.txt index 69594119e2..0e624df7a7 100644 --- a/ydb/core/blobstorage/pdisk/CMakeLists.windows-x86_64.txt +++ b/ydb/core/blobstorage/pdisk/CMakeLists.windows-x86_64.txt @@ -36,6 +36,7 @@ target_link_libraries(core-blobstorage-pdisk PUBLIC core-blobstorage-groupinfo core-blobstorage-lwtrace_probes ydb-core-control + version ydb-core-protos ydb-core-util ydb-library-pdisk_io diff --git a/ydb/core/blobstorage/pdisk/blobstorage_pdisk_data.h b/ydb/core/blobstorage/pdisk/blobstorage_pdisk_data.h index ae34711a71..ebf8b8f71b 100644 --- a/ydb/core/blobstorage/pdisk/blobstorage_pdisk_data.h +++ b/ydb/core/blobstorage/pdisk/blobstorage_pdisk_data.h @@ -47,6 +47,7 @@ constexpr ui32 SmallDiskMaximumChunkSize = 32 * (1 << 20); // 32MB #define PDISK_SYS_LOG_RECORD_VERSION_4 4 // #define PDISK_SYS_LOG_RECORD_VERSION_5 5 // It was used in reverted commits, just avoid this version #define PDISK_SYS_LOG_RECORD_VERSION_6 6 +#define PDISK_SYS_LOG_RECORD_VERSION_7 7 #define PDISK_SYS_LOG_RECORD_INCOMPATIBLE_VERSION_1000 1000 #define FORMAT_TEXT_SIZE 1024 @@ -331,7 +332,7 @@ struct TSysLogRecord { TVDiskID OwnerVDisks[256]; TSysLogRecord() - : Version(PDISK_SYS_LOG_RECORD_VERSION_6) + : Version(PDISK_SYS_LOG_RECORD_VERSION_7) , LogHeadChunkIdx(0) , Reserved1(0) , LogHeadChunkPreviousNonce((ui64)-1) diff --git a/ydb/core/blobstorage/pdisk/blobstorage_pdisk_impl.h b/ydb/core/blobstorage/pdisk/blobstorage_pdisk_impl.h index 3e80f29a48..75e271996a 100644 --- a/ydb/core/blobstorage/pdisk/blobstorage_pdisk_impl.h +++ b/ydb/core/blobstorage/pdisk/blobstorage_pdisk_impl.h @@ -22,6 +22,7 @@ #include <ydb/core/node_whiteboard/node_whiteboard.h> #include <ydb/core/blobstorage/lwtrace_probes/blobstorage_probes.h> #include <ydb/core/control/immediate_control_board_wrapper.h> +#include <ydb/core/driver_lib/version/version.h> #include <ydb/library/schlab/schine/scheduler.h> #include <ydb/library/schlab/schine/job_kind.h> @@ -185,6 +186,9 @@ public: // Chunk locking TMap<TOwner, ui32> OwnerLocks; + // Serialized compatibility info record + std::optional<TString> SerializedCompatibilityInfo; + // Debug std::function<TString()> DebugInfoGenerator; @@ -197,7 +201,7 @@ public: bool CheckGuid(TString *outReason); // Called by actor bool CheckFormatComplete(); // Called by actor void ReadSysLog(const TActorId &pDiskActor); // Called by actor - void ProcessChunk0(const TEvReadLogResult &readLogResult); + bool ProcessChunk0(const TEvReadLogResult &readLogResult, TString& errorReason); void PrintChunksDebugInfo(); TRcBuf ProcessReadSysLogResult(ui64 &outWritePosition, ui64 &outLsn, const TEvReadLogResult &readLogResult); void ReadAndParseMainLog(const TActorId &pDiskActor); diff --git a/ydb/core/blobstorage/pdisk/blobstorage_pdisk_impl_log.cpp b/ydb/core/blobstorage/pdisk/blobstorage_pdisk_impl_log.cpp index 7e519ef2be..711942ca5f 100644 --- a/ydb/core/blobstorage/pdisk/blobstorage_pdisk_impl_log.cpp +++ b/ydb/core/blobstorage/pdisk/blobstorage_pdisk_impl_log.cpp @@ -170,29 +170,35 @@ void TPDisk::ReadSysLog(const TActorId &pDiskActor) { return; } -void TPDisk::ProcessChunk0(const NPDisk::TEvReadLogResult &readLogResult) { +bool TPDisk::ProcessChunk0(const NPDisk::TEvReadLogResult &readLogResult, TString& errorReason) { TGuard<TMutex> guard(StateMutex); ui64 writePosition = 0; ui64 lastLsn = 0; TRcBuf lastSysLogRecord = ProcessReadSysLogResult(writePosition, lastLsn, readLogResult); if (lastSysLogRecord.size() == 0) { - LOG_ERROR_S(*ActorSystem, NKikimrServices::BS_PDISK, "PDiskId# " << (ui32)PDiskId + errorReason = TStringBuilder() << "Error while parsing sys log at booting state: lastSysLogRecord is empty," << " lastSysLogRecord.Size()# 0 writePosition# " << writePosition << " lastLsn# " << lastLsn - << " readLogResult# " << readLogResult.ToString() + << " readLogResult# " << readLogResult.ToString(); + + LOG_ERROR_S(*ActorSystem, NKikimrServices::BS_PDISK, "PDiskId# " << (ui32)PDiskId + << " ErrorReason# " << errorReason << " Marker# BPD47"); - return; + + return false; } ui64 remainingSize = lastSysLogRecord.size(); if (remainingSize < sizeof(TSysLogRecord)) { - LOG_ERROR_S(*ActorSystem, NKikimrServices::BS_PDISK, "PDiskId# " << (ui32)PDiskId - << " remainingSize# " << remainingSize + errorReason = TStringBuilder() << "Error while parsing sys log at booting state: remainingSize# " << remainingSize << " < sizeof(TSysLogRecord)# " << sizeof(TSysLogRecord) << " writePosition# " << writePosition << " lastLsn# " << lastLsn - << " readLogResult# " << readLogResult.ToString() + << " readLogResult# " << readLogResult.ToString(); + + LOG_ERROR_S(*ActorSystem, NKikimrServices::BS_PDISK, "PDiskId# " << (ui32)PDiskId + << " ErrorReason# " << errorReason << " Marker# BPD48"); - return; + return false; } TSysLogRecord *sysLogRecord = (TSysLogRecord*)(lastSysLogRecord.data()); @@ -201,10 +207,13 @@ void TPDisk::ProcessChunk0(const NPDisk::TEvReadLogResult &readLogResult) { << sysLogRecord->ToString().c_str() << " Marker# BPD49"); } else { + errorReason = TStringBuilder() << "Error while parsing sys log at booting state: Incompatible SysLogRecord Version# " + << sysLogRecord->Version; + LOG_ERROR_S(*ActorSystem, NKikimrServices::BS_PDISK, "PDiskId# " << (ui32)PDiskId - << " Incompatible SysLogRecord Version# " << sysLogRecord->Version + << " ErrorReason# " << errorReason << " Marker# BPD50"); - return; + return false; } SysLogLsn = lastLsn + 1; @@ -224,7 +233,7 @@ void TPDisk::ProcessChunk0(const NPDisk::TEvReadLogResult &readLogResult) { } } SysLogRecord = *sysLogRecord; - SysLogRecord.Version = PDISK_SYS_LOG_RECORD_VERSION_6; + SysLogRecord.Version = PDISK_SYS_LOG_RECORD_VERSION_7; LOG_NOTICE(*ActorSystem, NKikimrServices::BS_PDISK, "PDiskId# %" PRIu32 " Read SysLogRecord# %s", (ui32)PDiskId, SysLogRecord.ToString().data()); @@ -248,14 +257,16 @@ void TPDisk::ProcessChunk0(const NPDisk::TEvReadLogResult &readLogResult) { remainingSize -= sizeof(TSysLogRecord); ui64 expectedSize = chunkCount * sizeof(TChunkInfo); if (remainingSize < expectedSize) { - LOG_ERROR_S(*ActorSystem, NKikimrServices::BS_PDISK, "PDiskId# " << (ui32)PDiskId - << " remainingSize# " << remainingSize + errorReason = TStringBuilder() << " remainingSize# " << remainingSize << " < expectedSize# " << expectedSize << " writePosition# " << writePosition << " lastLsn# " << lastLsn - << " readLogResult# " << readLogResult.ToString() + << " readLogResult# " << readLogResult.ToString(); + + LOG_ERROR_S(*ActorSystem, NKikimrServices::BS_PDISK, "PDiskId# " << (ui32)PDiskId + << " ErrorReason# " << errorReason << " Marker# BPD51"); - return; + return false; } // Checks are passed, so initialize position @@ -349,16 +360,73 @@ void TPDisk::ProcessChunk0(const NPDisk::TEvReadLogResult &readLogResult) { // Fill with default value to parse log form the start on old versions FirstLogChunkToParseCommits = SysLogRecord.LogHeadChunkIdx; + ui32 *firstChunkEnd = nullptr; if (sysLogRecord->Version >= PDISK_SYS_LOG_RECORD_VERSION_6) { Y_VERIFY(trimStateEnd); ui32 *firstChunk = reinterpret_cast<ui32*>(trimStateEnd); - ui64 minSize = (ui64)((char*)(firstChunk + 1) - (char*)sysLogRecord); + firstChunkEnd = firstChunk + 1; + ui64 minSize = (ui64)((char*)firstChunkEnd - (char*)sysLogRecord); Y_VERIFY_S(lastSysLogRecord.size() >= minSize, "SysLogRecord is too small, minSize# " << minSize << " size# " << lastSysLogRecord.size()); FirstLogChunkToParseCommits = ReadUnaligned<ui32>(firstChunk); } + bool suppressCompatibilityCheck = Cfg->FeatureFlags.GetSuppressCompatibilityCheck(); + + char *compatibilityInfoEnd = nullptr; + if (sysLogRecord->Version >= PDISK_SYS_LOG_RECORD_VERSION_7) { + Y_VERIFY(firstChunkEnd); + ui32 *protoSizePtr = reinterpret_cast<ui32*>(firstChunkEnd); + ui32 *protoSizePtrEnd = protoSizePtr + 1; + + ui64 minSize = (ui64)((char*)protoSizePtrEnd - (char*)sysLogRecord); + Y_VERIFY_S(lastSysLogRecord.size() >= minSize, + "SysLogRecord is too small, minSize# " << minSize << " size# " << lastSysLogRecord.size()); + + ui32 protoSize = ReadUnaligned<ui32>(protoSizePtr); + Y_VERIFY(protoSize > 0); + + char *compatibilityInfo = reinterpret_cast<char*>(protoSizePtrEnd); + compatibilityInfoEnd = compatibilityInfo + protoSize; + + minSize += protoSize; + Y_VERIFY_S(lastSysLogRecord.size() >= minSize, + "SysLogRecord is too small, minSize# " << minSize << " size# " << lastSysLogRecord.size()); + + if (!suppressCompatibilityCheck) { + auto storedCompatibilityInfo = NKikimrConfig::TStoredCompatibilityInfo(); + + bool success = storedCompatibilityInfo.ParseFromArray(compatibilityInfo, protoSize); + Y_VERIFY(success); + + bool isCompatible = CompatibilityInfo.CheckCompatibility(&storedCompatibilityInfo, + NKikimrConfig::TCompatibilityRule::PDisk, errorReason); + + if (!isCompatible) { + LOG_ERROR_S(*ActorSystem, NKikimrServices::BS_PDISK, "PDiskId# " << (ui32)PDiskId + << " Incompatible version, ErrorReason# " << errorReason); + return false; + } + } + } else if (!suppressCompatibilityCheck && sysLogRecord->Version != 0) { + // Sys log is not empty, but it doesn't contain compatibility info record + TString error; + bool isCompatible = CompatibilityInfo.CheckCompatibility(nullptr, + NKikimrConfig::TCompatibilityRule::PDisk, errorReason); + + if (!isCompatible) { + LOG_ERROR_S(*ActorSystem, NKikimrServices::BS_PDISK, "PDiskId# " << (ui32)PDiskId + << " Stored compatibility info is absent, current version is incompatible with the default stored version of PDisk," + << " ErrorReason# " << errorReason); + return false; + } + } + + // needed for further parsing + Y_UNUSED(compatibilityInfoEnd); + PrintChunksDebugInfo(); + return true; } void TPDisk::PrintChunksDebugInfo() { @@ -546,8 +614,16 @@ void TPDisk::WriteSysLogRestorePoint(TCompletionAction *action, TReqId reqId, NW FirstLogChunkToParseCommits = firstChunk.value_or(SysLogRecord.LogHeadChunkIdx); } + if (!SerializedCompatibilityInfo) { + SerializedCompatibilityInfo.emplace(TString()); + auto stored = CompatibilityInfo.MakeStored(NKikimrConfig::TCompatibilityRule::PDisk); + bool success = stored.SerializeToString(&*SerializedCompatibilityInfo); + Y_VERIFY(success); + } + ui32 compatibilityInfoSize = SerializedCompatibilityInfo->size(); + ui32 recordSize = sizeof(TSysLogRecord) + chunkOwnersSize + sizeof(TSysLogFirstNoncesToKeep) - + sizeof(ui64) + chunkIsTrimmedSize + sizeof(ui32); + + sizeof(ui64) + chunkIsTrimmedSize + sizeof(ui32) + sizeof(ui32) + compatibilityInfoSize; ui64 beginSectorIdx = SysLogger->SectorIdx; *Mon.BandwidthPSysLogPayload += recordSize; *Mon.BandwidthPSysLogRecordHeader += sizeof(TFirstLogPageHeader); @@ -559,6 +635,8 @@ void TPDisk::WriteSysLogRestorePoint(TCompletionAction *action, TReqId reqId, NW SysLogger->LogDataPart(&chunkIsTrimmedSize, sizeof(chunkIsTrimmedSize), reqId, traceId); SysLogger->LogDataPart(&chunkIsTrimmed[0], chunkIsTrimmedSize, reqId, traceId); SysLogger->LogDataPart(&FirstLogChunkToParseCommits, sizeof(FirstLogChunkToParseCommits), reqId, traceId); + SysLogger->LogDataPart(&compatibilityInfoSize, sizeof(compatibilityInfoSize), reqId, traceId); + SysLogger->LogDataPart(SerializedCompatibilityInfo->data(), compatibilityInfoSize, reqId, traceId); SysLogger->TerminateLog(reqId, traceId); SysLogger->Flush(reqId, traceId, action); @@ -1221,14 +1299,16 @@ void TPDisk::ProcessReadLogResult(const NPDisk::TEvReadLogResult &evReadLogResul switch (InitPhase) { case EInitPhase::ReadingSysLog: { - ProcessChunk0(evReadLogResult); + TString errorReason; + bool success = ProcessChunk0(evReadLogResult, errorReason); - if (InitialSysLogWritePosition == 0) { + if (InitialSysLogWritePosition == 0 || !success) { + ErrorStr = errorReason; *Mon.PDiskState = NKikimrBlobStorage::TPDiskState::InitialSysLogParseError; *Mon.PDiskBriefState = TPDiskMon::TPDisk::Error; *Mon.PDiskDetailedState = TPDiskMon::TPDisk::ErrorInitialSysLogParse; ActorSystem->Send(pDiskActor, new TEvLogInitResult(false, - "Error while parsing sys log at booting state")); + errorReason)); return; } // Parse the main log to obtain busy/free chunk lists diff --git a/ydb/core/blobstorage/pdisk/blobstorage_pdisk_ut.cpp b/ydb/core/blobstorage/pdisk/blobstorage_pdisk_ut.cpp index 3b51e620a8..4f57a66409 100644 --- a/ydb/core/blobstorage/pdisk/blobstorage_pdisk_ut.cpp +++ b/ydb/core/blobstorage/pdisk/blobstorage_pdisk_ut.cpp @@ -5,6 +5,7 @@ #include "blobstorage_pdisk_ut_env.h" #include <ydb/core/blobstorage/crypto/default.h> +#include <ydb/core/driver_lib/version/ut/ut_helpers.h> #include <ydb/core/testlib/actors/test_runtime.h> #include <util/system/hp_timer.h> @@ -840,5 +841,98 @@ Y_UNIT_TEST_SUITE(TPDiskTest) { Y_UNIT_TEST(SmallDisk40) { SmallDisk(40); } + + using TCurrent = NKikimrConfig::TCurrentCompatibilityInfo; + void TestRestartWithDifferentVersion(TCurrent oldInfo, TCurrent newInfo, bool isCompatible, bool suppressCompatibilityCheck = false) { + TCompatibilityInfoTest::Reset(&oldInfo); + + TActorTestContext testCtx({ + .IsBad = false, + .SuppressCompatibilityCheck = suppressCompatibilityCheck, + }); + TVDiskMock vdisk(&testCtx); + vdisk.InitFull(); + vdisk.SendEvLogSync(); + TCompatibilityInfoTest::Reset(&newInfo); + + testCtx.Send(new TEvBlobStorage::TEvRestartPDisk(testCtx.GetPDisk()->PDiskId, testCtx.MainKey, nullptr)); + testCtx.Recv<TEvBlobStorage::TEvRestartPDiskResult>(); + testCtx.Send(new NPDisk::TEvYardInit(vdisk.OwnerRound.fetch_add(1), vdisk.VDiskID, testCtx.TestCtx.PDiskGuid)); + const auto evInitRes = testCtx.Recv<NPDisk::TEvYardInitResult>(); + if (isCompatible) { + UNIT_ASSERT(evInitRes->Status == NKikimrProto::OK); + } else { + UNIT_ASSERT(evInitRes->Status != NKikimrProto::OK); + } + } + + Y_UNIT_TEST(YdbVersionOldCompatible) { + TestRestartWithDifferentVersion( + TCompatibilityInfo::TProtoConstructor::TCurrentCompatibilityInfo{ + .Application = "ydb", + .Version = TCompatibilityInfo::TProtoConstructor::TVersion{ .Year = 23, .Major = 1, .Minor = 26, .Hotfix = 0 }, + }.ToPB(), + TCompatibilityInfo::TProtoConstructor::TCurrentCompatibilityInfo{ + .Application = "ydb", + .Version = TCompatibilityInfo::TProtoConstructor::TVersion{ .Year = 23, .Major = 2, .Minor = 1, .Hotfix = 0 }, + }.ToPB(), + true + ); + } + + Y_UNIT_TEST(YdbVersionIncompatible) { + TestRestartWithDifferentVersion( + TCompatibilityInfo::TProtoConstructor::TCurrentCompatibilityInfo{ + .Application = "ydb", + .Version = TCompatibilityInfo::TProtoConstructor::TVersion{ .Year = 23, .Major = 1, .Minor = 26, .Hotfix = 0 }, + }.ToPB(), + TCompatibilityInfo::TProtoConstructor::TCurrentCompatibilityInfo{ + .Application = "ydb", + .Version = TCompatibilityInfo::TProtoConstructor::TVersion{ .Year = 23, .Major = 3, .Minor = 1, .Hotfix = 0 }, + }.ToPB(), + false + ); + } + + Y_UNIT_TEST(YdbVersionNewIncompatibleWithDefault) { + TestRestartWithDifferentVersion( + TCompatibilityInfo::TProtoConstructor::TCurrentCompatibilityInfo{ + .Application = "ydb", + .Version = TCompatibilityInfo::TProtoConstructor::TVersion{ .Year = 24, .Major = 3, .Minor = 1, .Hotfix = 0 }, + }.ToPB(), + TCompatibilityInfo::TProtoConstructor::TCurrentCompatibilityInfo{ + .Application = "ydb", + .Version = TCompatibilityInfo::TProtoConstructor::TVersion{ .Year = 24, .Major = 4, .Minor = 1, .Hotfix = 0 }, + }.ToPB(), + true + ); + } + + Y_UNIT_TEST(YdbVersionTrunk) { + TestRestartWithDifferentVersion( + TCompatibilityInfo::TProtoConstructor::TCurrentCompatibilityInfo{ + .Application = "ydb", + }.ToPB(), + TCompatibilityInfo::TProtoConstructor::TCurrentCompatibilityInfo{ + .Application = "ydb", + }.ToPB(), + true + ); + } + + Y_UNIT_TEST(YdbVersionSuppressCompatibilityCheck) { + TestRestartWithDifferentVersion( + TCompatibilityInfo::TProtoConstructor::TCurrentCompatibilityInfo{ + .Application = "trunk", + }.ToPB(), + TCompatibilityInfo::TProtoConstructor::TCurrentCompatibilityInfo{ + .Application = "ydb", + .Version = TCompatibilityInfo::TProtoConstructor::TVersion{ .Year = 23, .Major = 3, .Minor = 8, .Hotfix = 0 }, + }.ToPB(), + true, + true + ); + } + } } // namespace NKikimr diff --git a/ydb/core/blobstorage/pdisk/blobstorage_pdisk_ut_env.h b/ydb/core/blobstorage/pdisk/blobstorage_pdisk_ut_env.h index deb75335c6..760dc8a179 100644 --- a/ydb/core/blobstorage/pdisk/blobstorage_pdisk_ut_env.h +++ b/ydb/core/blobstorage/pdisk/blobstorage_pdisk_ut_env.h @@ -25,6 +25,7 @@ public: EDiskMode DiskMode = EDiskMode::DM_NONE; ui32 ChunkSize = 128 * (1 << 20); bool SmallDisk = false; + bool SuppressCompatibilityCheck = false; }; private: @@ -57,6 +58,7 @@ public: pDiskConfig->SectorMap = TestCtx.SectorMap; pDiskConfig->EnableSectorEncryption = !pDiskConfig->SectorMap; pDiskConfig->FeatureFlags.SetEnableSmallDiskOptimization(Settings.SmallDisk); + pDiskConfig->FeatureFlags.SetSuppressCompatibilityCheck(Settings.SuppressCompatibilityCheck); return pDiskConfig; } diff --git a/ydb/core/blobstorage/pdisk/ya.make b/ydb/core/blobstorage/pdisk/ya.make index d352afc268..1dcb13377b 100644 --- a/ydb/core/blobstorage/pdisk/ya.make +++ b/ydb/core/blobstorage/pdisk/ya.make @@ -19,6 +19,7 @@ PEERDIR( ydb/core/blobstorage/groupinfo ydb/core/blobstorage/lwtrace_probes ydb/core/control + ydb/core/driver_lib/version ydb/core/protos ydb/core/util ydb/library/pdisk_io diff --git a/ydb/core/blobstorage/ut_blobstorage/lib/env.h b/ydb/core/blobstorage/ut_blobstorage/lib/env.h index 6264bcad5b..5cd88971ef 100644 --- a/ydb/core/blobstorage/ut_blobstorage/lib/env.h +++ b/ydb/core/blobstorage/ut_blobstorage/lib/env.h @@ -33,6 +33,7 @@ struct TEnvironmentSetup { const ui32 NumDataCenters = 0; const std::function<TNodeLocation(ui32)> LocationGenerator; const bool SetupHive = false; + const bool SuppressCompatibilityCheck = false; }; const TSettings Settings; @@ -125,6 +126,8 @@ struct TEnvironmentSetup { Runtime->Start(); auto *appData = Runtime->GetAppData(); + appData->FeatureFlags.SetSuppressCompatibilityCheck(Settings.SuppressCompatibilityCheck); + auto domain = TDomainsInfo::TDomain::ConstructEmptyDomain(DomainName, DomainId); appData->DomainsInfo->AddDomain(domain.Get()); if (Settings.SetupHive) { diff --git a/ydb/core/blobstorage/ut_blobstorage/recovery.cpp b/ydb/core/blobstorage/ut_blobstorage/recovery.cpp index 4358981fcd..a786ad9bd6 100644 --- a/ydb/core/blobstorage/ut_blobstorage/recovery.cpp +++ b/ydb/core/blobstorage/ut_blobstorage/recovery.cpp @@ -1,54 +1,75 @@ +#include <ydb/core/base/statestorage.h> #include <ydb/core/blobstorage/ut_blobstorage/lib/env.h> #include <ydb/core/driver_lib/version/version.h> #include <ydb/core/driver_lib/version/ut/ut_helpers.h> + #include <library/cpp/testing/unittest/registar.h> +#include <google/protobuf/text_format.h> + Y_UNIT_TEST_SUITE(CompatibilityInfo) { using EComponentId = NKikimrConfig::TCompatibilityRule::EComponentId; using TCurrent = NKikimrConfig::TCurrentCompatibilityInfo; - using TYdbVersion = TCompatibilityInfo::TProtoConstructor::TYdbVersion; + using TYdbVersion = TCompatibilityInfo::TProtoConstructor::TVersion; using TCompatibilityRule = TCompatibilityInfo::TProtoConstructor::TCompatibilityRule; using TCurrentConstructor = TCompatibilityInfo::TProtoConstructor::TCurrentCompatibilityInfo; - using TValidateCallback = std::function<bool(TEnvironmentSetup&)>; + using TValidateCallback = std::function<bool(TEnvironmentSetup&, TString&)>; using TVersion = std::tuple<ui32, ui32, ui32, ui32>; std::vector<EComponentId> Components = { NKikimrConfig::TCompatibilityRule::PDisk, NKikimrConfig::TCompatibilityRule::VDisk, - NKikimrConfig::TCompatibilityRule::BlobStorageController + NKikimrConfig::TCompatibilityRule::BlobStorageController, }; - void TesCompatibilityForComponent(TVersion oldVersion, TVersion newVersion, EComponentId componentId, - bool isCompatible, TValidateCallback validateCallback) { + ui32 passPoisons = 1000; + + void TestCompatibilityForComponent(std::optional<TVersion> oldVersion, std::optional<TVersion> newVersion, EComponentId componentId, + bool isCompatible, TValidateCallback validateCallback, bool suppressCompatibilityCheck = false) { + passPoisons = 1000; const TString build = "ydb"; - auto oldInfoConstructor = TCurrentConstructor{ - .Build = build, - .YdbVersion = TYdbVersion{ - .Year = std::get<0>(oldVersion), - .Major = std::get<1>(oldVersion), - .Minor = std::get<2>(oldVersion), - .Hotfix = std::get<3>(oldVersion) - }, - }; + TCurrentConstructor oldInfoConstructor; + if (oldVersion) { + oldInfoConstructor = TCurrentConstructor{ + .Application = build, + .Version = TYdbVersion{ + .Year = std::get<0>(*oldVersion), + .Major = std::get<1>(*oldVersion), + .Minor = std::get<2>(*oldVersion), + .Hotfix = std::get<3>(*oldVersion) + }, + }; + } else { + oldInfoConstructor = TCurrentConstructor{ + .Application = "trunk", + }; + } - auto newInfoConstructor = TCurrentConstructor{ - .Build = "ydb", - .YdbVersion = TYdbVersion{ - .Year = std::get<0>(newVersion), - .Major = std::get<1>(newVersion), - .Minor = std::get<2>(newVersion), - .Hotfix = std::get<3>(newVersion) - }, - }; + TCurrentConstructor newInfoConstructor; + if (newVersion) { + newInfoConstructor = TCurrentConstructor{ + .Application = build, + .Version = TYdbVersion{ + .Year = std::get<0>(*newVersion), + .Major = std::get<1>(*newVersion), + .Minor = std::get<2>(*newVersion), + .Hotfix = std::get<3>(*newVersion) + }, + }; + } else { + newInfoConstructor = TCurrentConstructor{ + .Application = "trunk", + }; + } // Disable compatibility checks for all other components for (auto component : Components) { if (component != componentId) { auto newRule = TCompatibilityRule{ - .Build = build, + .Application = build, .LowerLimit = TYdbVersion{ .Year = 0, .Major = 0, .Minor = 0, .Hotfix = 0 }, .UpperLimit = TYdbVersion{ .Year = 1000, .Major = 1000, .Minor = 1000, .Hotfix = 1000 }, .ComponentId = component, @@ -67,22 +88,31 @@ Y_UNIT_TEST_SUITE(CompatibilityInfo) { TEnvironmentSetup env{{ .NodeCount = 1, .Erasure = TBlobStorageGroupType::ErasureNone, + .SuppressCompatibilityCheck = suppressCompatibilityCheck, }}; env.CreateBoxAndPool(1, 1); env.Sim(TDuration::Seconds(30)); - UNIT_ASSERT(validateCallback(env)); + TString debugInfo; + UNIT_ASSERT_C(validateCallback(env, debugInfo), debugInfo); + + using TFilterFunction = std::function<bool(ui32, std::unique_ptr<IEventHandle>&)>; + TFilterFunction ff; + ff = std::exchange(env.Runtime->FilterFunction, {}); // Recreate cluster with different YDB version env.Cleanup(); TCompatibilityInfoTest::Reset(&newInfo); env.Initialize(); + env.Runtime->FilterFunction = std::exchange(ff, {}); + env.Sim(TDuration::Seconds(30)); - UNIT_ASSERT(validateCallback(env) == isCompatible); + UNIT_ASSERT_C(validateCallback(env, debugInfo) == isCompatible, debugInfo); } - bool ValidateForVDisk(TEnvironmentSetup& env) { + bool ValidateForVDisk(TEnvironmentSetup& env, TString& debugInfo) { + Y_UNUSED(debugInfo); static ui32 puts = 0; // Get group info from BSC NKikimrBlobStorage::TConfigRequest request; @@ -105,17 +135,70 @@ Y_UNIT_TEST_SUITE(CompatibilityInfo) { return res->Get()->Status == NKikimrProto::OK; }; + bool ValidateForBSController(TEnvironmentSetup& env, TString& debugInfo) { + env.Runtime->FilterFunction = [&](ui32, std::unique_ptr<IEventHandle>& ev) { + if (ev->GetTypeRewrite() == TEvents::TSystem::PoisonPill) { + if (passPoisons > 0) { + passPoisons--; + return true; + } + return false; + } + return true; + }; + + auto getTabletGen = [&]() -> ui32 { + const TActorId getGenEdge = env.Runtime->AllocateEdgeActor(env.Settings.ControllerNodeId, __FILE__, __LINE__); + const TActorId stateStorageProxyId = MakeStateStorageProxyID(StateStorageGroupFromTabletID(env.TabletId)); + env.Runtime->WrapInActorContext(getGenEdge, [&] { + TActivationContext::Send(new IEventHandle(stateStorageProxyId, getGenEdge, + new TEvStateStorage::TEvLookup(env.TabletId, 0), 0, 0) + ); + }); + auto response = env.WaitForEdgeActorEvent<TEvStateStorage::TEvInfo>(getGenEdge, true); + return response->Get()->CurrentGeneration; + }; + + const ui32 gen1 = getTabletGen(); + env.Sim(TDuration::Seconds(30)); + const ui32 gen2 = getTabletGen(); + + debugInfo = (TStringBuilder() << "gen1# " << gen1 << " gen2# " << gen2 << " passPoisons# " << passPoisons); + return gen1 == gen2 && passPoisons > 0; + }; + auto componentVDisk = NKikimrConfig::TCompatibilityRule::VDisk; + auto componentBSController = NKikimrConfig::TCompatibilityRule::BlobStorageController; - Y_UNIT_TEST(VDiskComaptible) { - TesCompatibilityForComponent({ 23, 1, 19, 0 }, { 23, 2, 1, 0 }, componentVDisk, true, ValidateForVDisk); + Y_UNIT_TEST(VDiskCompatible) { + TestCompatibilityForComponent(TVersion{ 23, 1, 19, 0 }, TVersion{ 23, 2, 1, 0 }, componentVDisk, true, ValidateForVDisk); } - Y_UNIT_TEST(VDiskIncomaptible) { - TesCompatibilityForComponent({ 23, 1, 19, 0 }, { 23, 3, 1, 0 }, componentVDisk, false, ValidateForVDisk); + Y_UNIT_TEST(VDiskIncompatible) { + TestCompatibilityForComponent(TVersion{ 23, 1, 19, 0 }, TVersion{ 23, 3, 1, 0 }, componentVDisk, false, ValidateForVDisk); } Y_UNIT_TEST(VDiskIncompatibleWithDefault) { - TesCompatibilityForComponent({ 24, 2, 1, 0 }, { 24, 2, 1, 0 }, componentVDisk, true, ValidateForVDisk); + TestCompatibilityForComponent(TVersion{ 24, 2, 1, 0 }, TVersion{ 24, 2, 1, 0 }, componentVDisk, true, ValidateForVDisk); + } + + Y_UNIT_TEST(VDiskSuppressCompatibilityCheck) { + TestCompatibilityForComponent(std::nullopt, TVersion{ 23, 3, 8, 0 }, componentVDisk, true, ValidateForVDisk, true); + } + + Y_UNIT_TEST(BSControllerCompatible) { + TestCompatibilityForComponent(TVersion{ 23, 1, 19, 0 }, TVersion{ 23, 2, 1, 0 }, componentBSController, true, ValidateForBSController); + } + + Y_UNIT_TEST(BSControllerIncompatible) { + TestCompatibilityForComponent(TVersion{ 23, 1, 19, 0 }, TVersion{ 23, 3, 1, 0 }, componentBSController, false, ValidateForBSController); + } + + Y_UNIT_TEST(BSControllerIncompatibleWithDefault) { + TestCompatibilityForComponent(TVersion{ 24, 2, 1, 0 }, TVersion{ 24, 2, 1, 0 }, componentBSController, true, ValidateForBSController); + } + + Y_UNIT_TEST(BSControllerSuppressCompatibilityCheck) { + TestCompatibilityForComponent(std::nullopt, TVersion{ 23, 3, 8, 0 }, componentBSController, true, ValidateForBSController, true); } } diff --git a/ydb/core/blobstorage/vdisk/hulldb/fresh/fresh_segment_impl.h b/ydb/core/blobstorage/vdisk/hulldb/fresh/fresh_segment_impl.h index 92136f45f7..2d56df1958 100644 --- a/ydb/core/blobstorage/vdisk/hulldb/fresh/fresh_segment_impl.h +++ b/ydb/core/blobstorage/vdisk/hulldb/fresh/fresh_segment_impl.h @@ -201,12 +201,10 @@ namespace NKikimr { inline void TFreshIndexAndData<TKeyLogoBlob, TMemRecLogoBlob>::PutLogoBlobWithData(ui64 lsn, const TKeyLogoBlob &key, ui8 partId, const TIngress &ingress, TRope buffer) { TMemRecLogoBlob memRec(ingress); - const size_t before = Arena->GetSize(); buffer = TRope::CopySpaceOptimized(std::move(buffer), 128, *Arena); const ui64 fullDataSize = key.LogoBlobID().BlobSize(); + const size_t delta = buffer.size(); TRope blob = TDiskBlob::Create(fullDataSize, partId, HullCtx->VCtx->Top->GType.TotalPartCount(), std::move(buffer), *Arena); - const size_t after = Arena->GetSize(); - const size_t delta = after - before; FreshDataMemConsumer.Add(delta); const ui32 blobSize = blob.GetSize(); diff --git a/ydb/core/blobstorage/vdisk/localrecovery/localrecovery_public.cpp b/ydb/core/blobstorage/vdisk/localrecovery/localrecovery_public.cpp index 356d218444..93ee665888 100644 --- a/ydb/core/blobstorage/vdisk/localrecovery/localrecovery_public.cpp +++ b/ydb/core/blobstorage/vdisk/localrecovery/localrecovery_public.cpp @@ -375,7 +375,8 @@ namespace NKikimr { const TRcBuf &entryPoint = it->second.Data; TString errorReason; if (!TSyncerData::CheckEntryPoint(LocRecCtx->VCtx->VDiskLogPrefix, SkeletonId, - LocRecCtx->VCtx->ShortSelfVDisk, LocRecCtx->VCtx->Top, entryPoint, errorReason)) { + LocRecCtx->VCtx->ShortSelfVDisk, LocRecCtx->VCtx->Top, entryPoint, errorReason, + AppData()->FeatureFlags.GetSuppressCompatibilityCheck())) { errorReason = "Entry point for Syncer check failed, ErrorReason# " + errorReason; LocRecCtx->VCtx->LocalRecoveryErrorStr = errorReason; SignalErrorAndDie(ctx, NKikimrProto::ERROR, errorReason); diff --git a/ydb/core/blobstorage/vdisk/syncer/blobstorage_syncer_data.cpp b/ydb/core/blobstorage/vdisk/syncer/blobstorage_syncer_data.cpp index 4e59c2f11e..375da950d4 100644 --- a/ydb/core/blobstorage/vdisk/syncer/blobstorage_syncer_data.cpp +++ b/ydb/core/blobstorage/vdisk/syncer/blobstorage_syncer_data.cpp @@ -309,11 +309,11 @@ namespace NKikimr { bool TSyncerData::CheckCompatibility(TString& errorReason) { if (StoredCompatibilityInfo) { - return TCompatibilityInfo::CheckCompatibility(&*StoredCompatibilityInfo, - (ui32)NKikimrConfig::TCompatibilityRule::VDisk, errorReason); + return CompatibilityInfo.CheckCompatibility(&*StoredCompatibilityInfo, + NKikimrConfig::TCompatibilityRule::VDisk, errorReason); } else { - return TCompatibilityInfo::CheckCompatibility(nullptr, - (ui32)NKikimrConfig::TCompatibilityRule::VDisk, errorReason); + return CompatibilityInfo.CheckCompatibility(nullptr, + NKikimrConfig::TCompatibilityRule::VDisk, errorReason); } } @@ -328,7 +328,7 @@ namespace NKikimr { top)) , LocalSyncerState() , NotifyId(notifyId) - , CurrentCompatibilityInfo(TCompatibilityInfo::MakeStored(NKikimrConfig::TCompatibilityRule::VDisk)) + , CurrentCompatibilityInfo(CompatibilityInfo.MakeStored(NKikimrConfig::TCompatibilityRule::VDisk)) { TString serProto = WithoutSignature(Convert(selfVDisk, top, entryPoint)); ParseWOSignature(serProto); @@ -345,7 +345,7 @@ namespace NKikimr { top)) , LocalSyncerState() , NotifyId(notifyId) - , CurrentCompatibilityInfo(TCompatibilityInfo::MakeStored(NKikimrConfig::TCompatibilityRule::VDisk)) + , CurrentCompatibilityInfo(CompatibilityInfo.MakeStored(NKikimrConfig::TCompatibilityRule::VDisk)) { TString serProto = WithoutSignature(Convert(selfVDisk, top, entryPoint)); ParseWOSignature(serProto); @@ -356,12 +356,13 @@ namespace NKikimr { const TVDiskIdShort &selfVDisk, std::shared_ptr<TBlobStorageGroupInfo::TTopology> top, const TString &entryPoint, - TString& errorReason) { + TString& errorReason, + bool suppressCompatibilityCheck) { try { TSyncerData n(logPrefix, notifyId, selfVDisk, top); TString serProto = WithoutSignature(Convert(selfVDisk, top, entryPoint)); n.ParseWOSignature(serProto); - return n.CheckCompatibility(errorReason); + return suppressCompatibilityCheck || n.CheckCompatibility(errorReason); } catch (yexception e) { errorReason = e.what(); return false; @@ -373,12 +374,13 @@ namespace NKikimr { const TVDiskIdShort &selfVDisk, std::shared_ptr<TBlobStorageGroupInfo::TTopology> top, const TContiguousSpan &entryPoint, - TString& errorReason) { + TString& errorReason, + bool suppressCompatibilityCheck) { try { TSyncerData n(logPrefix, notifyId, selfVDisk, top); TString serProto = WithoutSignature(Convert(selfVDisk, top, entryPoint)); //FIXME(innokentii) unnecessary copy n.ParseWOSignature(serProto); - return n.CheckCompatibility(errorReason); + return suppressCompatibilityCheck || n.CheckCompatibility(errorReason); } catch (yexception e) { errorReason = e.what(); return false; diff --git a/ydb/core/blobstorage/vdisk/syncer/blobstorage_syncer_data.h b/ydb/core/blobstorage/vdisk/syncer/blobstorage_syncer_data.h index 7e29247e05..9b2c355638 100644 --- a/ydb/core/blobstorage/vdisk/syncer/blobstorage_syncer_data.h +++ b/ydb/core/blobstorage/vdisk/syncer/blobstorage_syncer_data.h @@ -221,13 +221,15 @@ namespace NKikimr { const TVDiskIdShort &selfVDisk, std::shared_ptr<TBlobStorageGroupInfo::TTopology> top, const TString &entryPoint, - TString& errorReason); + TString& errorReason, + bool suppressCompatibilityCheck); static bool CheckEntryPoint(const TString &logPrefix, const TActorId ¬ifyId, const TVDiskIdShort &selfVDisk, std::shared_ptr<TBlobStorageGroupInfo::TTopology> top, const TContiguousSpan &entryPoint, - TString& errorReason); + TString& errorReason, + bool suppressCompatibilityCheck); // Convert from old entry point format to protobuf format // TODO: we can remove this function after migrating to the protobuf format diff --git a/ydb/core/cms/cms.cpp b/ydb/core/cms/cms.cpp index a773e58472..701fe69cfc 100644 --- a/ydb/core/cms/cms.cpp +++ b/ydb/core/cms/cms.cpp @@ -662,7 +662,7 @@ bool TCms::TryToLockVDisk(const TActionOptions& opts, switch (opts.AvailabilityMode) { case MODE_MAX_AVAILABILITY: - if (!counters->CheckForMaxAvailability(error, defaultDeadline, opts.PartialPermissionAllowed)) { + if (!counters->CheckForMaxAvailability(ClusterInfo, error, defaultDeadline, opts.PartialPermissionAllowed)) { return false; } break; @@ -1983,13 +1983,6 @@ void TCms::Handle(TEvConsole::TEvReplaceConfigSubscriptionsResponse::TPtr &ev, "Got config subscription id=" << ConfigSubscriptionId); } -void TCms::Handle(TEvents::TEvPoisonPill::TPtr &ev, - const TActorContext &ctx) -{ - Y_UNUSED(ev); - ctx.Send(Tablet(), new TEvents::TEvPoisonPill); -} - void TCms::Handle(TEvTabletPipe::TEvClientDestroyed::TPtr &ev, const TActorContext &ctx) { diff --git a/ydb/core/cms/cms_impl.h b/ydb/core/cms/cms_impl.h index bd31ae2624..e662f382c4 100644 --- a/ydb/core/cms/cms_impl.h +++ b/ydb/core/cms/cms_impl.h @@ -258,7 +258,6 @@ private: FFunc(TEvCms::EvGetClusterInfoRequest, EnqueueRequest); HFunc(TEvConsole::TEvConfigNotificationRequest, Handle); HFunc(TEvConsole::TEvReplaceConfigSubscriptionsResponse, Handle); - HFunc(TEvents::TEvPoisonPill, Handle); HFunc(TEvTabletPipe::TEvClientDestroyed, Handle); HFunc(TEvTabletPipe::TEvClientConnected, Handle); IgnoreFunc(TEvTabletPipe::TEvServerConnected); @@ -423,7 +422,6 @@ private: void Handle(TEvCms::TEvGetClusterInfoRequest::TPtr &ev, const TActorContext &ctx); void Handle(TEvConsole::TEvConfigNotificationRequest::TPtr &ev, const TActorContext &ctx); void Handle(TEvConsole::TEvReplaceConfigSubscriptionsResponse::TPtr &ev, const TActorContext &ctx); - void Handle(TEvents::TEvPoisonPill::TPtr &ev, const TActorContext &ctx); void Handle(TEvTabletPipe::TEvClientDestroyed::TPtr &ev, const TActorContext &ctx); void Handle(TEvTabletPipe::TEvClientConnected::TPtr &ev, const TActorContext &ctx); diff --git a/ydb/core/cms/cms_ut.cpp b/ydb/core/cms/cms_ut.cpp index cb6a06fba3..1602367514 100644 --- a/ydb/core/cms/cms_ut.cpp +++ b/ydb/core/cms/cms_ut.cpp @@ -1449,32 +1449,70 @@ Y_UNIT_TEST_SUITE(TCmsTest) { Y_UNIT_TEST(TestProcessingQueue) { - const ui32 RequestsCount = 8; - TCmsTestEnv env(RequestsCount); + const ui32 nodes = 8; + TCmsTestEnv env(nodes); + env.CreateDefaultCmsPipe(); + + auto makeRequest = [&env](ui32 nodeId) { + auto ev = MakePermissionRequest("user", false, true, false, + MakeAction(TAction::RESTART_SERVICES, env.GetNodeId(nodeId), 60000000, "storage") + ); + ev->Record.SetDuration(60000000); + ev->Record.SetAvailabilityMode(MODE_FORCE_RESTART); + env.SendToCms(ev.Release()); + }; + + TActorId cmsActorId; + { + makeRequest(0); + auto ev = env.GrabEdgeEvent<TEvCms::TEvPermissionResponse>(env.GetSender()); + cmsActorId = ev->Sender; + } + + THolder<IEventHandle> delayedClusterInfo; + env.SetObserverFunc([&](TTestActorRuntimeBase&, TAutoPtr<IEventHandle>& ev) { + if (ev->Recipient == cmsActorId && ev->GetTypeRewrite() == TCms::TEvPrivate::EvClusterInfo) { + delayedClusterInfo.Reset(ev.Release()); + return TTestActorRuntime::EEventAction::DROP; + } + return TTestActorRuntime::EEventAction::PROCESS; + }); // We need to send messages in fixed order - env.CreateDefaultCmsPipe(); - env.ProcessQueueCount = 0; - for (ui32 i = 0; i < RequestsCount; ++i) { - auto req = MakePermissionRequest("user", true, true, false, - MakeAction(TAction::RESTART_SERVICES, env.GetNodeId(i), 60000000, "storage")); - req->Record.SetDuration(600000); - req->Record.SetAvailabilityMode(MODE_MAX_AVAILABILITY); + for (ui32 i = 0; i < nodes; ++i) { + makeRequest(i); + } - env.SendToCms(req.Release()); + if (!delayedClusterInfo) { + TDispatchOptions opts; + opts.FinalEvents.emplace_back([&delayedClusterInfo](IEventHandle&) { + return bool(delayedClusterInfo); + }); + env.DispatchEvents(opts); } - env.DestroyDefaultCmsPipe(); + + ui32 processQueueCount = 0; + env.SetObserverFunc([&](TTestActorRuntimeBase&, TAutoPtr<IEventHandle>& ev) { + if (ev->Recipient == cmsActorId && ev->GetTypeRewrite() == TCms::TEvPrivate::EvProcessQueue) { + ++processQueueCount; + } + return TTestActorRuntime::EEventAction::PROCESS; + }); + + env.Send(delayedClusterInfo.Release(), 0, true); // Check responses order - for (ui32 i = 0; i < RequestsCount; ++i) { - TAutoPtr<IEventHandle> handle; - auto reply = env.GrabEdgeEventRethrow<TEvCms::TEvPermissionResponse>(handle); - const auto &rec = reply->Record; + for (ui32 i = 0; i < nodes; ++i) { + auto ev = env.GrabEdgeEvent<TEvCms::TEvPermissionResponse>(env.GetSender()); + const auto &rec = ev->Get()->Record; UNIT_ASSERT_VALUES_EQUAL(rec.permissions_size(), 1); UNIT_ASSERT_VALUES_EQUAL(rec.permissions()[0].GetAction().GetHost(), ToString(env.GetNodeId(i))); } - UNIT_ASSERT_VALUES_EQUAL(env.ProcessQueueCount, RequestsCount); + + // first request processed without EvProcessQueue + UNIT_ASSERT_VALUES_EQUAL(processQueueCount, nodes - 1); + env.DestroyDefaultCmsPipe(); } Y_UNIT_TEST(TestLogOperationsRollback) diff --git a/ydb/core/cms/cms_ut_common.cpp b/ydb/core/cms/cms_ut_common.cpp index 6b9dad6058..2730a7b46c 100644 --- a/ydb/core/cms/cms_ut_common.cpp +++ b/ydb/core/cms/cms_ut_common.cpp @@ -533,7 +533,6 @@ static void SetupServices(TTestActorRuntime &runtime, TCmsTestEnv::TCmsTestEnv(const TTestEnvOpts &options) : TTestBasicRuntime(options.NodeCount, options.DataCenterCount, false) , CmsId(MakeCmsID(0)) - , ProcessQueueCount(0) , CmsTabletActor(TActorId()) { TFakeNodeWhiteboardService::Config.MutableResponse()->SetSuccess(true); @@ -546,7 +545,7 @@ TCmsTestEnv::TCmsTestEnv(const TTestEnvOpts &options) GenerateExtendedInfo(*this, config, options.VDisks, 4, options.Tenants, options.UseMirror3dcErasure); - SetObserverFunc([&ProcessQueueCount = ProcessQueueCount, &CmsTabletActor = CmsTabletActor](TTestActorRuntimeBase&, + SetObserverFunc([](TTestActorRuntimeBase&, TAutoPtr<IEventHandle> &event) -> auto { if (event->GetTypeRewrite() == TEvBlobStorage::EvControllerConfigRequest || event->GetTypeRewrite() == TEvConfigsDispatcher::EvGetConfigRequest) { @@ -555,20 +554,6 @@ TCmsTestEnv::TCmsTestEnv(const TTestEnvOpts &options) event = IEventHandle::Forward(event, fakeId); } - if (event->GetTypeRewrite() == TCms::TEvPrivate::EvProcessQueue - && event->Recipient == CmsTabletActor) { - ++ProcessQueueCount; - } - - if (event->GetTypeRewrite() == TCms::TEvPrivate::EvUpdateClusterInfo - || event->GetTypeRewrite() == TEvCms::EvClusterStateRequest - || event->GetTypeRewrite() == TEvCms::EvNotification - || event->GetTypeRewrite() == TEvCms::EvResetMarkerRequest - || event->GetTypeRewrite() == TEvCms::EvSetMarkerRequest - || event->GetTypeRewrite() == TEvCms::EvGetClusterInfoRequest) { - --ProcessQueueCount; - } - return TTestActorRuntime::EEventAction::PROCESS; }); diff --git a/ydb/core/cms/cms_ut_common.h b/ydb/core/cms/cms_ut_common.h index 88513c84f1..f2ed242935 100644 --- a/ydb/core/cms/cms_ut_common.h +++ b/ydb/core/cms/cms_ut_common.h @@ -368,7 +368,6 @@ public: void EnableNoisyBSCPipe(); const ui64 CmsId; - i32 ProcessQueueCount; private: void SetupLogging(); diff --git a/ydb/core/cms/console/console.cpp b/ydb/core/cms/console/console.cpp index a89c91da23..f4d8608db4 100644 --- a/ydb/core/cms/console/console.cpp +++ b/ydb/core/cms/console/console.cpp @@ -179,13 +179,6 @@ void TConsole::Handle(TEvConsole::TEvSetConfigRequest::TPtr &ev, const TActorCon TxProcessor->ProcessTx(CreateTxSetConfig(ev), ctx); } -void TConsole::Handle(TEvents::TEvPoisonPill::TPtr &ev, - const TActorContext &ctx) -{ - Y_UNUSED(ev); - ctx.Send(Tablet(), new TEvents::TEvPoisonPill); -} - IActor *CreateConsole(const TActorId &tablet, TTabletStorageInfo *info) { return new TConsole(tablet, info); diff --git a/ydb/core/cms/console/console__replace_yaml_config.cpp b/ydb/core/cms/console/console__replace_yaml_config.cpp index 8cf3a4ab13..a1c2126dcd 100644 --- a/ydb/core/cms/console/console__replace_yaml_config.cpp +++ b/ydb/core/cms/console/console__replace_yaml_config.cpp @@ -47,8 +47,12 @@ public: ythrow yexception() << "Version mismatch"; } + if (req.GetRequest().allow_unknown_fields()) { + UnknownFieldsCollector = new NYamlConfig::TBasicUnknownFieldsCollector; + } + for (auto& [_, config] : resolved.Configs) { - auto cfg = NYamlConfig::YamlToProto(config.second); + auto cfg = NYamlConfig::YamlToProto(config.second, req.GetRequest().allow_unknown_fields(), true, UnknownFieldsCollector); } if (!req.GetRequest().dry_run()) { @@ -65,7 +69,17 @@ public: } } - Response = MakeHolder<NActors::IEventHandle>(Request->Sender, ctx.SelfID, new TEvConsole::TEvReplaceYamlConfigResponse()); + auto ev = MakeHolder<TEvConsole::TEvReplaceYamlConfigResponse>(); + + if (UnknownFieldsCollector) { + for (auto& [path, info] : UnknownFieldsCollector->GetUnknownKeys()) { + auto *issue = ev->Record.AddIssues(); + issue->set_severity(NYql::TSeverityIds::S_WARNING); + issue->set_message(TStringBuilder{} << "Unknown key# " << info.first << " in proto# " << info.second << " found in path# " << path); + } + } + + Response = MakeHolder<NActors::IEventHandle>(Request->Sender, ctx.SelfID, ev.Release()); } catch (const yexception& ex) { Error = true; @@ -107,6 +121,7 @@ private: THolder<NActors::IEventHandle> Response; bool Error = false; bool Modify = false; + TSimpleSharedPtr<NYamlConfig::TBasicUnknownFieldsCollector> UnknownFieldsCollector = nullptr; ui32 Version; TString Cluster; TString UpdatedConfig; diff --git a/ydb/core/cms/console/console__set_yaml_config.cpp b/ydb/core/cms/console/console__set_yaml_config.cpp index f219c8af99..9a56466458 100644 --- a/ydb/core/cms/console/console__set_yaml_config.cpp +++ b/ydb/core/cms/console/console__set_yaml_config.cpp @@ -36,8 +36,12 @@ public: auto tree = NFyaml::TDocument::Parse(UpdatedConfig); auto resolved = NYamlConfig::ResolveAll(tree); + if (req.GetRequest().allow_unknown_fields()) { + UnknownFieldsCollector = new NYamlConfig::TBasicUnknownFieldsCollector; + } + for (auto& [_, config] : resolved.Configs) { - auto cfg = NYamlConfig::YamlToProto(config.second); + auto cfg = NYamlConfig::YamlToProto(config.second, req.GetRequest().allow_unknown_fields(), true, UnknownFieldsCollector); } if (!req.GetRequest().dry_run()) { @@ -54,7 +58,17 @@ public: } } - Response = MakeHolder<NActors::IEventHandle>(Request->Sender, ctx.SelfID, new TEvConsole::TEvSetYamlConfigResponse()); + auto ev = MakeHolder<TEvConsole::TEvSetYamlConfigResponse>(); + + if (UnknownFieldsCollector) { + for (auto& [path, info] : UnknownFieldsCollector->GetUnknownKeys()) { + auto *issue = ev->Record.AddIssues(); + issue->set_severity(NYql::TSeverityIds::S_WARNING); + issue->set_message(TStringBuilder{} << "Unknown key# " << info.first << " in proto# " << info.second << " found in path# " << path); + } + } + + Response = MakeHolder<NActors::IEventHandle>(Request->Sender, ctx.SelfID, ev.Release()); } catch (const yexception& ex) { Error = true; @@ -96,6 +110,7 @@ private: THolder<NActors::IEventHandle> Response; bool Error = false; bool Modify = false; + TSimpleSharedPtr<NYamlConfig::TBasicUnknownFieldsCollector> UnknownFieldsCollector = nullptr; TString UpdatedConfig; }; diff --git a/ydb/core/cms/console/console_configs_manager.cpp b/ydb/core/cms/console/console_configs_manager.cpp index 26c1058d80..3ceed6a7b3 100644 --- a/ydb/core/cms/console/console_configs_manager.cpp +++ b/ydb/core/cms/console/console_configs_manager.cpp @@ -821,7 +821,7 @@ void TConfigsManager::Handle(TEvConsole::TEvAddVolatileConfigRequest::TPtr &ev, auto resolved = NYamlConfig::ResolveAll(tree); for (auto &[_, config] : resolved.Configs) { - auto cfg = NYamlConfig::YamlToProto(config.second); + auto cfg = NYamlConfig::YamlToProto(config.second, true); } if (ClusterName != clusterName) { diff --git a/ydb/core/cms/console/console_impl.h b/ydb/core/cms/console/console_impl.h index d5e8a7d98a..dbbeec8fc1 100644 --- a/ydb/core/cms/console/console_impl.h +++ b/ydb/core/cms/console/console_impl.h @@ -73,8 +73,6 @@ private: void ForwardToTenantsManager(TAutoPtr<IEventHandle> &ev, const TActorContext &ctx); void Handle(TEvConsole::TEvGetConfigRequest::TPtr &ev, const TActorContext &ctx); void Handle(TEvConsole::TEvSetConfigRequest::TPtr &ev, const TActorContext &ctx); - void Handle(TEvents::TEvPoisonPill::TPtr &ev, - const TActorContext &ctx); STFUNC(StateInit) { @@ -123,7 +121,6 @@ private: HFuncTraced(TEvConsole::TEvSetConfigRequest, Handle); FFunc(TEvConsole::EvToggleConfigValidatorRequest, ForwardToConfigsManager); FFunc(TEvConsole::EvUpdateTenantPoolConfig, ForwardToTenantsManager); - HFuncTraced(TEvents::TEvPoisonPill, Handle); IgnoreFunc(TEvTabletPipe::TEvServerConnected); IgnoreFunc(TEvTabletPipe::TEvServerDisconnected); diff --git a/ydb/core/cms/erasure_checkers.cpp b/ydb/core/cms/erasure_checkers.cpp index b98748c793..008a7bec35 100644 --- a/ydb/core/cms/erasure_checkers.cpp +++ b/ydb/core/cms/erasure_checkers.cpp @@ -9,8 +9,9 @@ bool TErasureCounterBase::IsDown(const TVDiskInfo &vdisk, TClusterInfoPtr info, // Check we received info for PDisk. if (!pdisk.NodeId) { - ++Down; - error.Reason = TStringBuilder() << "Missing info for " << pdisk.ItemName(); + Down.insert(vdisk.VDiskId); + error.Code = TStatus::DISALLOW_TEMP; + error.Reason = TStringBuilder() << "Missing info for " << pdisk.PrettyItemName(); return false; } @@ -27,9 +28,9 @@ bool TErasureCounterBase::IsLocked(const TVDiskInfo &vdisk, TClusterInfoPtr info // Check we received info for VDisk. if (!vdisk.NodeId || !vdisk.PDiskId) { - ++Down; + Down.insert(vdisk.VDiskId); error.Code = TStatus::DISALLOW_TEMP; - error.Reason = TStringBuilder() << "Missing info for " << vdisk.ItemName(); + error.Reason = TStringBuilder() << "Missing info for " << vdisk.PrettyItemName(); return false; } @@ -42,8 +43,27 @@ bool TErasureCounterBase::GroupAlreadyHasLockedDisks() const { return HasAlreadyLockedDisks; } -bool TErasureCounterBase::CheckForMaxAvailability(TErrorInfo &error, TInstant &defaultDeadline, bool allowPartial) const { - if (Locked + Down > 1) { +static TString DumpVDisksInfo(const TSet<TVDiskID>& vdisks, TClusterInfoPtr info) { + if (vdisks.empty()) { + return "<empty>"; + } + + TStringBuilder dump; + + bool comma = false; + for (const auto& vdisk : vdisks) { + if (comma) { + dump << ", "; + } + dump << info->VDisk(vdisk).PrettyItemName(); + comma = true; + } + + return dump; +} + +bool TErasureCounterBase::CheckForMaxAvailability(TClusterInfoPtr info, TErrorInfo &error, TInstant &defaultDeadline, bool allowPartial) const { + if (Locked.size() + Down.size() > 1) { if (HasAlreadyLockedDisks && !allowPartial) { error.Code = TStatus::DISALLOW; error.Reason = "The request is incorrect: too many disks from the one group. " @@ -53,14 +73,17 @@ bool TErasureCounterBase::CheckForMaxAvailability(TErrorInfo &error, TInstant &d error.Code = TStatus::DISALLOW_TEMP; error.Reason = TStringBuilder() << "Issue in affected group " << GroupId - << ". " << "Too many locked and down vdisks: " << Locked + Down; + << ": too many unavailable vdisks" + << ". Locked: " << DumpVDisksInfo(Locked, info) + << ". Down: " << DumpVDisksInfo(Down, info); error.Deadline = defaultDeadline; return false; } + return true; } -void TDefaultErasureCounter::CountVDisk(const TVDiskInfo &vdisk, TClusterInfoPtr info, TDuration retryTime, +bool TErasureCounterBase::CountVDisk(const TVDiskInfo &vdisk, TClusterInfoPtr info, TDuration retryTime, TDuration duration, TErrorInfo &error) { Y_VERIFY_DEBUG(vdisk.VDiskId != VDisk.VDiskId); @@ -68,22 +91,36 @@ void TDefaultErasureCounter::CountVDisk(const TVDiskInfo &vdisk, TClusterInfoPtr // Check locks. TErrorInfo err; if (IsLocked(vdisk, info, retryTime, duration, err)) { - ++Locked; + Locked.insert(vdisk.VDiskId); error.Code = err.Code; - error.Reason = TStringBuilder() << "Issue in affected group " << GroupId - << ". " << err.Reason; + error.Reason = TStringBuilder() << "Issue in affected group " << GroupId << ": " << err.Reason; error.Deadline = Max(error.Deadline, err.Deadline); - return; + return true; } // Check if disk is down. if (IsDown(vdisk, info, retryTime, err)) { - ++Down; + Down.insert(vdisk.VDiskId); error.Code = err.Code; - error.Reason = TStringBuilder() << "Issue in affected group " << GroupId - << ". " << err.Reason; + error.Reason = TStringBuilder() << "Issue in affected group " << GroupId << ": " << err.Reason; error.Deadline = Max(error.Deadline, err.Deadline); + return true; } + + return false; +} + +void TErasureCounterBase::CountGroupState(TClusterInfoPtr info, TDuration retryTime, TDuration duration, TErrorInfo &error) { + for (const auto &vdId : info->BSGroup(GroupId).VDisks) { + if (vdId != VDisk.VDiskId) + CountVDisk(info->VDisk(vdId), info, retryTime, duration, error); + } + + if (Locked && error.Code == TStatus::DISALLOW) { + HasAlreadyLockedDisks = true; + } + + Locked.insert(VDisk.VDiskId); } bool TDefaultErasureCounter::CheckForKeepAvailability(TClusterInfoPtr info, TErrorInfo &error, @@ -97,19 +134,23 @@ bool TDefaultErasureCounter::CheckForKeepAvailability(TClusterInfoPtr info, TErr return false; } - if (Down + Locked > info->BSGroup(GroupId).Erasure.ParityParts()) { + if (Down.size() + Locked.size() > info->BSGroup(GroupId).Erasure.ParityParts()) { if (HasAlreadyLockedDisks && !allowPartial) { error.Code = TStatus::DISALLOW; error.Reason = "The request is incorrect: too many disks from the one group. " "Fix the request or set PartialPermissionAllowed to true"; return false; } + error.Code = TStatus::DISALLOW_TEMP; - error.Reason = TStringBuilder() << "Cannot lock disk " << VDisk.PrettyItemName() - << ". Too many locked nodes for group " << GroupId; + error.Reason = TStringBuilder() << "Issue in affected group " << GroupId + << ": too many unavailable vdisks" + << ". Locked: " << DumpVDisksInfo(Locked, info) + << ". Down: " << DumpVDisksInfo(Down, info); error.Deadline = defaultDeadline; return false; } + return true; } @@ -146,60 +187,37 @@ bool TMirror3dcCounter::CheckForKeepAvailability(TClusterInfoPtr info, TErrorInf if (DataCenterDisabledNodes.size() > 2) { error.Code = TStatus::DISALLOW_TEMP; error.Reason = TStringBuilder() << "Issue in affected group " << GroupId - << ". Too many data centers have unavailable vdisks: " - << DataCenterDisabledNodes.size(); + << ": too many unavailable vdisks" + << ". Number of data centers with unavailable vdisks: " << DataCenterDisabledNodes.size() + << ". Locked: " << DumpVDisksInfo(Locked, info) + << ". Down: " << DumpVDisksInfo(Down, info); error.Deadline = defaultDeadline; return false; } error.Code = TStatus::DISALLOW_TEMP; error.Reason = TStringBuilder() << "Issue in affected group " << GroupId - << ". Data centers have too many unavailable vdisks"; + << ": too many unavailable vdisks" + << ". Locked: " << DumpVDisksInfo(Locked, info) + << ". Down: " << DumpVDisksInfo(Down, info); error.Deadline = defaultDeadline; return false; } -void TMirror3dcCounter::CountVDisk(const TVDiskInfo &vdisk, TClusterInfoPtr info, TDuration retryTime, +bool TMirror3dcCounter::CountVDisk(const TVDiskInfo &vdisk, TClusterInfoPtr info, TDuration retryTime, TDuration duration, TErrorInfo &error) { - Y_VERIFY_DEBUG(vdisk.VDiskId != VDisk.VDiskId); - - // Check locks. - TErrorInfo err; - if (IsLocked(vdisk, info, retryTime, duration, err) - || IsDown(vdisk, info, retryTime, err)) { - error.Code = err.Code; - error.Reason = TStringBuilder() << "Issue in affected group " << GroupId - << ". " << err.Reason; - error.Deadline = Max(error.Deadline, err.Deadline); - ++Locked; + const bool disabled = TErasureCounterBase::CountVDisk(vdisk, info, retryTime, duration, error); + if (disabled) { ++DataCenterDisabledNodes[vdisk.VDiskId.FailRealm]; } + return disabled; } void TMirror3dcCounter::CountGroupState(TClusterInfoPtr info, TDuration retryTime, TDuration duration, TErrorInfo &error) { - for (const auto &vdId : info->BSGroup(GroupId).VDisks) { - if (vdId != VDisk.VDiskId) - CountVDisk(info->VDisk(vdId), info, retryTime, duration, error); - } - ++Locked; + TErasureCounterBase::CountGroupState(info, retryTime, duration, error); ++DataCenterDisabledNodes[VDisk.VDiskId.FailRealm]; - - if (Locked && error.Code == TStatus::DISALLOW) { - HasAlreadyLockedDisks = true; - } -} - -void TDefaultErasureCounter::CountGroupState(TClusterInfoPtr info, TDuration retryTime, TDuration duration, TErrorInfo &error) { - for (const auto &vdId : info->BSGroup(GroupId).VDisks) { - if (vdId != VDisk.VDiskId) - CountVDisk(info->VDisk(vdId), info, retryTime, duration, error); - } - if (Locked && error.Code == TStatus::DISALLOW) { - HasAlreadyLockedDisks = true; - } - ++Locked; } TSimpleSharedPtr<IErasureCounter> CreateErasureCounter(TErasureType::EErasureSpecies es, const TVDiskInfo &vdisk, ui32 groupId) { diff --git a/ydb/core/cms/erasure_checkers.h b/ydb/core/cms/erasure_checkers.h index 0c0de0be76..c02fd1da8b 100644 --- a/ydb/core/cms/erasure_checkers.h +++ b/ydb/core/cms/erasure_checkers.h @@ -6,25 +6,29 @@ #include <ydb/core/erasure/erasure.h> #include <ydb/core/protos/cms.pb.h> +#include <util/generic/set.h> + namespace NKikimr::NCms { using namespace NKikimrCms; class IErasureCounter { +protected: + virtual bool CountVDisk(const TVDiskInfo& vdisk, TClusterInfoPtr info, TDuration retryTime, TDuration duration, TErrorInfo& error) = 0; + public: virtual ~IErasureCounter() = default; virtual bool GroupAlreadyHasLockedDisks() const = 0; - virtual bool CheckForMaxAvailability(TErrorInfo& error, TInstant& defaultDeadline, bool allowPartial) const = 0; + virtual bool CheckForMaxAvailability(TClusterInfoPtr info, TErrorInfo& error, TInstant& defaultDeadline, bool allowPartial) const = 0; virtual bool CheckForKeepAvailability(TClusterInfoPtr info, TErrorInfo& error, TInstant& defaultDeadline, bool allowPartial) const = 0; virtual void CountGroupState(TClusterInfoPtr info, TDuration retryTime, TDuration duration, TErrorInfo& error) = 0; - virtual void CountVDisk(const TVDiskInfo& vdisk, TClusterInfoPtr info, TDuration retryTime, TDuration duration, TErrorInfo& error) = 0; }; class TErasureCounterBase: public IErasureCounter { protected: - ui32 Down; - ui32 Locked; + TSet<TVDiskID> Down; + TSet<TVDiskID> Locked; const TVDiskInfo& VDisk; const ui32 GroupId; bool HasAlreadyLockedDisks; @@ -32,19 +36,19 @@ protected: protected: bool IsDown(const TVDiskInfo& vdisk, TClusterInfoPtr info, TDuration& retryTime, TErrorInfo& error); bool IsLocked(const TVDiskInfo& vdisk, TClusterInfoPtr info, TDuration& retryTime, TDuration& duration, TErrorInfo& error); + bool CountVDisk(const TVDiskInfo& vdisk, TClusterInfoPtr info, TDuration retryTime, TDuration duration, TErrorInfo& error) override; public: TErasureCounterBase(const TVDiskInfo& vdisk, ui32 groupId) - : Down(0) - , Locked(0) - , VDisk(vdisk) + : VDisk(vdisk) , GroupId(groupId) , HasAlreadyLockedDisks(false) { } bool GroupAlreadyHasLockedDisks() const final; - bool CheckForMaxAvailability(TErrorInfo& error, TInstant& defaultDeadline, bool allowPartial) const final; + bool CheckForMaxAvailability(TClusterInfoPtr info, TErrorInfo& error, TInstant& defaultDeadline, bool allowPartial) const final; + void CountGroupState(TClusterInfoPtr info, TDuration retryTime, TDuration duration, TErrorInfo &error) override; }; class TDefaultErasureCounter: public TErasureCounterBase { @@ -54,24 +58,23 @@ public: { } - void CountGroupState(TClusterInfoPtr info, TDuration retryTime, TDuration duration, TErrorInfo &error) override; bool CheckForKeepAvailability(TClusterInfoPtr info, TErrorInfo& error, TInstant& defaultDeadline, bool allowPartial) const override; - void CountVDisk(const TVDiskInfo& vdisk, TClusterInfoPtr info, TDuration retryTime, TDuration duration, TErrorInfo& error) override; }; class TMirror3dcCounter: public TErasureCounterBase { -private: THashMap<ui8, ui32> DataCenterDisabledNodes; +protected: + bool CountVDisk(const TVDiskInfo& vdisk, TClusterInfoPtr info, TDuration retryTime, TDuration duration, TErrorInfo& error) override; + public: TMirror3dcCounter(const TVDiskInfo& vdisk, ui32 groupId) : TErasureCounterBase(vdisk, groupId) { } - void CountGroupState(TClusterInfoPtr info, TDuration retryTime, TDuration duration, TErrorInfo &error) override; bool CheckForKeepAvailability(TClusterInfoPtr info, TErrorInfo& error, TInstant& defaultDeadline, bool allowPartial) const override; - void CountVDisk(const TVDiskInfo& vdisk, TClusterInfoPtr info, TDuration retryTime, TDuration duration, TErrorInfo& error) override; + void CountGroupState(TClusterInfoPtr info, TDuration retryTime, TDuration duration, TErrorInfo &error) override; }; TSimpleSharedPtr<IErasureCounter> CreateErasureCounter(TErasureType::EErasureSpecies es, const TVDiskInfo& vdisk, ui32 groupId); diff --git a/ydb/core/driver_lib/run/CMakeLists.darwin-x86_64.txt b/ydb/core/driver_lib/run/CMakeLists.darwin-x86_64.txt index 93a3f721a1..1c13f29209 100644 --- a/ydb/core/driver_lib/run/CMakeLists.darwin-x86_64.txt +++ b/ydb/core/driver_lib/run/CMakeLists.darwin-x86_64.txt @@ -130,6 +130,7 @@ target_link_libraries(run PUBLIC ydb-services-discovery ydb-services-fq ydb-services-kesus + ydb-services-keyvalue ydb-services-local_discovery ydb-services-maintenance services-metadata-ds_table diff --git a/ydb/core/driver_lib/run/CMakeLists.linux-aarch64.txt b/ydb/core/driver_lib/run/CMakeLists.linux-aarch64.txt index 90627a293e..51fac4a558 100644 --- a/ydb/core/driver_lib/run/CMakeLists.linux-aarch64.txt +++ b/ydb/core/driver_lib/run/CMakeLists.linux-aarch64.txt @@ -131,6 +131,7 @@ target_link_libraries(run PUBLIC ydb-services-discovery ydb-services-fq ydb-services-kesus + ydb-services-keyvalue ydb-services-local_discovery ydb-services-maintenance services-metadata-ds_table diff --git a/ydb/core/driver_lib/run/CMakeLists.linux-x86_64.txt b/ydb/core/driver_lib/run/CMakeLists.linux-x86_64.txt index 90627a293e..51fac4a558 100644 --- a/ydb/core/driver_lib/run/CMakeLists.linux-x86_64.txt +++ b/ydb/core/driver_lib/run/CMakeLists.linux-x86_64.txt @@ -131,6 +131,7 @@ target_link_libraries(run PUBLIC ydb-services-discovery ydb-services-fq ydb-services-kesus + ydb-services-keyvalue ydb-services-local_discovery ydb-services-maintenance services-metadata-ds_table diff --git a/ydb/core/driver_lib/run/CMakeLists.windows-x86_64.txt b/ydb/core/driver_lib/run/CMakeLists.windows-x86_64.txt index 93a3f721a1..1c13f29209 100644 --- a/ydb/core/driver_lib/run/CMakeLists.windows-x86_64.txt +++ b/ydb/core/driver_lib/run/CMakeLists.windows-x86_64.txt @@ -130,6 +130,7 @@ target_link_libraries(run PUBLIC ydb-services-discovery ydb-services-fq ydb-services-kesus + ydb-services-keyvalue ydb-services-local_discovery ydb-services-maintenance services-metadata-ds_table diff --git a/ydb/core/driver_lib/run/kikimr_services_initializers.cpp b/ydb/core/driver_lib/run/kikimr_services_initializers.cpp index 7e1e28287c..61d909858e 100644 --- a/ydb/core/driver_lib/run/kikimr_services_initializers.cpp +++ b/ydb/core/driver_lib/run/kikimr_services_initializers.cpp @@ -784,23 +784,24 @@ void TBasicServicesInitializer::InitializeServices(NActors::TActorSystemSetup* s icCommon->AcceptUUID.emplace_back(item); } - if (!nsConfig.GetSuppressVersionCheck()) { + if (!nsConfig.GetSuppressVersionCheck() && !Config.GetFeatureFlags().GetSuppressCompatibilityCheck()) { icCommon->VersionInfo = VERSION; CheckVersionTag(); icCommon->CompatibilityInfo = TString(); - Y_VERIFY(TCompatibilityInfo::MakeStored(NKikimrConfig::TCompatibilityRule::Interconnect).SerializeToString(&*icCommon->CompatibilityInfo)); + bool success = CompatibilityInfo.MakeStored(NKikimrConfig::TCompatibilityRule::Interconnect).SerializeToString(&*icCommon->CompatibilityInfo); + Y_VERIFY(success); icCommon->ValidateCompatibilityInfo = [&](const TString& peer, TString& errorReason) { NKikimrConfig::TStoredCompatibilityInfo peerPB; if (!peerPB.ParseFromString(peer)) { errorReason = "Cannot parse given CompatibilityInfo"; return false; } - return TCompatibilityInfo::CheckCompatibility(&peerPB, (ui32)NKikimrConfig::TCompatibilityRule::Interconnect, errorReason); + return CompatibilityInfo.CheckCompatibility(&peerPB, NKikimrConfig::TCompatibilityRule::Interconnect, errorReason); }; icCommon->ValidateCompatibilityOldFormat = [&](const NActors::TInterconnectProxyCommon::TVersionInfo& peer, TString& errorReason) { - return TCompatibilityInfo::CheckCompatibility(peer, (ui32)NKikimrConfig::TCompatibilityRule::Interconnect, errorReason); + return CompatibilityInfo.CheckCompatibility(peer, NKikimrConfig::TCompatibilityRule::Interconnect, errorReason); }; } @@ -2274,7 +2275,16 @@ TLongTxServiceInitializer::TLongTxServiceInitializer(const TKikimrRunConfig &run void TLongTxServiceInitializer::InitializeServices(TActorSystemSetup *setup, const TAppData *appData) { - auto* actor = NLongTxService::CreateLongTxService(); + TIntrusivePtr<::NMonitoring::TDynamicCounters> tabletGroup = GetServiceCounters(appData->Counters, "tablets"); + TIntrusivePtr<::NMonitoring::TDynamicCounters> longTxGroup = tabletGroup->GetSubgroup("type", "LONG_TX"); + + auto counters = MakeIntrusive<NLongTxService::TLongTxServiceCounters>(longTxGroup); + + NLongTxService::TLongTxServiceSettings settings{ + .Counters = counters, + }; + + auto* actor = NLongTxService::CreateLongTxService(settings); setup->LocalServices.push_back(std::pair<TActorId, TActorSetupCmd>( NLongTxService::MakeLongTxServiceID(NodeId), TActorSetupCmd(actor, TMailboxType::ReadAsFilled, appData->UserPoolId))); diff --git a/ydb/core/driver_lib/run/run.cpp b/ydb/core/driver_lib/run/run.cpp index de66276762..5e2e844e62 100644 --- a/ydb/core/driver_lib/run/run.cpp +++ b/ydb/core/driver_lib/run/run.cpp @@ -90,6 +90,7 @@ #include <ydb/services/fq/grpc_service.h> #include <ydb/services/fq/private_grpc.h> #include <ydb/services/kesus/grpc_service.h> +#include <ydb/services/keyvalue/grpc_service.h> #include <ydb/services/local_discovery/grpc_service.h> #include <ydb/services/maintenance/grpc_service.h> #include <ydb/services/monitoring/grpc_service.h> @@ -638,6 +639,8 @@ void TKikimrRunner::InitializeGRpc(const TKikimrRunConfig& runConfig) { names["auth"] = &hasAuth; TServiceCfg hasQueryService = services.empty(); names["query_service"] = &hasQueryService; + TServiceCfg hasKeyValue = services.empty(); + names["keyvalue"] = &hasKeyValue; std::unordered_set<TString> enabled; for (const auto& name : services) { @@ -896,6 +899,11 @@ void TKikimrRunner::InitializeGRpc(const TKikimrRunConfig& runConfig) { grpcRequestProxies[0], hasLogStore.IsRlAllowed())); } + if (hasKeyValue) { + server.AddService(new NGRpcService::TKeyValueGRpcService(ActorSystem.Get(), Counters, + grpcRequestProxies[0])); + } + if (ModuleFactories) { for (const auto& service : ModuleFactories->GrpcServiceFactory.Create(enabled, disabled, ActorSystem.Get(), Counters, grpcRequestProxies[0])) { server.AddService(service); @@ -1851,7 +1859,6 @@ void TKikimrRunner::InitializeRegistries(const TKikimrRunConfig& runConfig) { TIntrusivePtr<TKikimrRunner> TKikimrRunner::CreateKikimrRunner( const TKikimrRunConfig& runConfig, std::shared_ptr<TModuleFactories> factories) { - TIntrusivePtr<TKikimrRunner> runner(new TKikimrRunner(factories)); runner->InitializeAllocator(runConfig); runner->InitializeRegistries(runConfig); diff --git a/ydb/core/driver_lib/run/ya.make b/ydb/core/driver_lib/run/ya.make index 9082c1bd5f..8b0e21d25e 100644 --- a/ydb/core/driver_lib/run/ya.make +++ b/ydb/core/driver_lib/run/ya.make @@ -145,6 +145,7 @@ PEERDIR( ydb/services/discovery ydb/services/fq ydb/services/kesus + ydb/services/keyvalue ydb/services/local_discovery ydb/services/maintenance ydb/services/metadata/ds_table diff --git a/ydb/core/driver_lib/version/ut/ut_helpers.h b/ydb/core/driver_lib/version/ut/ut_helpers.h index f66aadb6c8..47aea039b7 100644 --- a/ydb/core/driver_lib/version/ut/ut_helpers.h +++ b/ydb/core/driver_lib/version/ut/ut_helpers.h @@ -7,7 +7,7 @@ public: TCompatibilityInfoTest() = delete; static void Reset(NKikimrConfig::TCurrentCompatibilityInfo* newCurrent) { - TCompatibilityInfo::Reset(newCurrent); + CompatibilityInfo.Reset(newCurrent); } }; diff --git a/ydb/core/driver_lib/version/ut/version_ut.cpp b/ydb/core/driver_lib/version/ut/version_ut.cpp index d37e56b964..883484e9aa 100644 --- a/ydb/core/driver_lib/version/ut/version_ut.cpp +++ b/ydb/core/driver_lib/version/ut/version_ut.cpp @@ -14,33 +14,35 @@ Y_UNIT_TEST_SUITE(VersionParser) { } } +using TComponentId = NKikimrConfig::TCompatibilityRule::EComponentId; using EComponentId = NKikimrConfig::TCompatibilityRule; using TOldFormat = NActors::TInterconnectProxyCommon::TVersionInfo; -using TYdbVersion = TCompatibilityInfo::TProtoConstructor::TYdbVersion; +using TVersion = TCompatibilityInfo::TProtoConstructor::TVersion; using TCompatibilityRule = TCompatibilityInfo::TProtoConstructor::TCompatibilityRule; using TCurrentCompatibilityInfo = TCompatibilityInfo::TProtoConstructor::TCurrentCompatibilityInfo; using TStoredCompatibilityInfo = TCompatibilityInfo::TProtoConstructor::TStoredCompatibilityInfo; Y_UNIT_TEST_SUITE(YdbVersion) { - void Test(TCurrentCompatibilityInfo current, TCurrentCompatibilityInfo store, bool expected) { + void Test(TCurrentCompatibilityInfo current, TCurrentCompatibilityInfo store, bool expected, + TComponentId componentId = EComponentId::Test1) { TString errorReason; auto currentPB = current.ToPB(); auto storePB = store.ToPB(); - auto storedPB = TCompatibilityInfo::MakeStored((ui32)NKikimrConfig::TCompatibilityRule::Test1, &storePB); - UNIT_ASSERT_EQUAL_C(TCompatibilityInfo::CheckCompatibility(¤tPB, &storedPB, - (ui32)EComponentId::Test1, errorReason), expected, errorReason); + auto storedPB = CompatibilityInfo.MakeStored(componentId, &storePB); + UNIT_ASSERT_EQUAL_C(CompatibilityInfo.CheckCompatibility(¤tPB, &storedPB, + componentId, errorReason), expected, errorReason); } Y_UNIT_TEST(DefaultSameVersion) { Test( TCurrentCompatibilityInfo{ - .Build = "ydb", - .YdbVersion = TYdbVersion{ .Year = 1, .Major = 1, .Minor = 1, .Hotfix = 0 } + .Application = "ydb", + .Version = TVersion{ .Year = 1, .Major = 1, .Minor = 1, .Hotfix = 0 } }, TCurrentCompatibilityInfo{ - .Build = "ydb", - .YdbVersion = TYdbVersion{ .Year = 1, .Major = 1, .Minor = 1, .Hotfix = 0 } + .Application = "ydb", + .Version = TVersion{ .Year = 1, .Major = 1, .Minor = 1, .Hotfix = 0 } }, true ); @@ -48,12 +50,12 @@ Y_UNIT_TEST_SUITE(YdbVersion) { Y_UNIT_TEST(DefaultPrevMajor) { Test( TCurrentCompatibilityInfo{ - .Build = "ydb", - .YdbVersion = TYdbVersion{ .Year = 1, .Major = 2, .Minor = 1, .Hotfix = 0 } + .Application = "ydb", + .Version = TVersion{ .Year = 1, .Major = 2, .Minor = 1, .Hotfix = 0 } }, TCurrentCompatibilityInfo{ - .Build = "ydb", - .YdbVersion = TYdbVersion{ .Year = 1, .Major = 1, .Minor = 1, .Hotfix = 10 } + .Application = "ydb", + .Version = TVersion{ .Year = 1, .Major = 1, .Minor = 1, .Hotfix = 10 } }, true ); @@ -61,12 +63,12 @@ Y_UNIT_TEST_SUITE(YdbVersion) { Y_UNIT_TEST(DefaultNextMajor) { Test( TCurrentCompatibilityInfo{ - .Build = "ydb", - .YdbVersion = TYdbVersion{ .Year = 1, .Major = 1, .Minor = 8, .Hotfix = 0 } + .Application = "ydb", + .Version = TVersion{ .Year = 1, .Major = 1, .Minor = 8, .Hotfix = 0 } }, TCurrentCompatibilityInfo{ - .Build = "ydb", - .YdbVersion = TYdbVersion{ .Year = 1, .Major = 2, .Minor = 1, .Hotfix = 0 } + .Application = "ydb", + .Version = TVersion{ .Year = 1, .Major = 2, .Minor = 1, .Hotfix = 0 } }, true ); @@ -74,12 +76,12 @@ Y_UNIT_TEST_SUITE(YdbVersion) { Y_UNIT_TEST(DefaultHotfix) { Test( TCurrentCompatibilityInfo{ - .Build = "ydb", - .YdbVersion = TYdbVersion{ .Year = 1, .Major = 1, .Minor = 1, .Hotfix = 10 } + .Application = "ydb", + .Version = TVersion{ .Year = 1, .Major = 1, .Minor = 1, .Hotfix = 10 } }, TCurrentCompatibilityInfo{ - .Build = "ydb", - .YdbVersion = TYdbVersion{ .Year = 1, .Major = 1, .Minor = 1, .Hotfix = 0 } + .Application = "ydb", + .Version = TVersion{ .Year = 1, .Major = 1, .Minor = 1, .Hotfix = 0 } }, true ); @@ -87,12 +89,12 @@ Y_UNIT_TEST_SUITE(YdbVersion) { Y_UNIT_TEST(DefaultCompatible) { Test( TCurrentCompatibilityInfo{ - .Build = "ydb", - .YdbVersion = TYdbVersion{ .Year = 1, .Major = 2, .Minor = 1, .Hotfix = 10 } + .Application = "ydb", + .Version = TVersion{ .Year = 1, .Major = 2, .Minor = 1, .Hotfix = 10 } }, TCurrentCompatibilityInfo{ - .Build = "ydb", - .YdbVersion = TYdbVersion{ .Year = 1, .Major = 1, .Minor = 10, .Hotfix = 0 } + .Application = "ydb", + .Version = TVersion{ .Year = 1, .Major = 1, .Minor = 10, .Hotfix = 0 } }, true ); @@ -100,12 +102,12 @@ Y_UNIT_TEST_SUITE(YdbVersion) { Y_UNIT_TEST(DefaultNextYear) { Test( TCurrentCompatibilityInfo{ - .Build = "ydb", - .YdbVersion = TYdbVersion{ .Year = 2, .Major = 1, .Minor = 1, .Hotfix = 0 } + .Application = "ydb", + .Version = TVersion{ .Year = 2, .Major = 1, .Minor = 1, .Hotfix = 0 } }, TCurrentCompatibilityInfo{ - .Build = "ydb", - .YdbVersion = TYdbVersion{ .Year = 1, .Major = 1, .Minor = 1, .Hotfix = 0 } + .Application = "ydb", + .Version = TVersion{ .Year = 1, .Major = 1, .Minor = 1, .Hotfix = 0 } }, false ); @@ -113,12 +115,12 @@ Y_UNIT_TEST_SUITE(YdbVersion) { Y_UNIT_TEST(DefaultPrevYear) { Test( TCurrentCompatibilityInfo{ - .Build = "ydb", - .YdbVersion = TYdbVersion{ .Year = 1, .Major = 1, .Minor = 1, .Hotfix = 0 } + .Application = "ydb", + .Version = TVersion{ .Year = 1, .Major = 1, .Minor = 1, .Hotfix = 0 } }, TCurrentCompatibilityInfo{ - .Build = "ydb", - .YdbVersion = TYdbVersion{ .Year = 2, .Major = 1, .Minor = 1, .Hotfix = 0 } + .Application = "ydb", + .Version = TVersion{ .Year = 2, .Major = 1, .Minor = 1, .Hotfix = 0 } }, false ); @@ -126,12 +128,12 @@ Y_UNIT_TEST_SUITE(YdbVersion) { Y_UNIT_TEST(DefaultNewMajor) { Test( TCurrentCompatibilityInfo{ - .Build = "ydb", - .YdbVersion = TYdbVersion{ .Year = 1, .Major = 3, .Minor = 1, .Hotfix = 0 } + .Application = "ydb", + .Version = TVersion{ .Year = 1, .Major = 3, .Minor = 1, .Hotfix = 0 } }, TCurrentCompatibilityInfo{ - .Build = "ydb", - .YdbVersion = TYdbVersion{ .Year = 1, .Major = 1, .Minor = 3, .Hotfix = 0 } + .Application = "ydb", + .Version = TVersion{ .Year = 1, .Major = 1, .Minor = 3, .Hotfix = 0 } }, false ); @@ -139,12 +141,12 @@ Y_UNIT_TEST_SUITE(YdbVersion) { Y_UNIT_TEST(DefaultOldMajor) { Test( TCurrentCompatibilityInfo{ - .Build = "ydb", - .YdbVersion = TYdbVersion{ .Year = 1, .Major = 1, .Minor = 1, .Hotfix = 0 } + .Application = "ydb", + .Version = TVersion{ .Year = 1, .Major = 1, .Minor = 1, .Hotfix = 0 } }, TCurrentCompatibilityInfo{ - .Build = "ydb", - .YdbVersion = TYdbVersion{ .Year = 1, .Major = 3, .Minor = 1, .Hotfix = 0 } + .Application = "ydb", + .Version = TVersion{ .Year = 1, .Major = 3, .Minor = 1, .Hotfix = 0 } }, false ); @@ -152,12 +154,12 @@ Y_UNIT_TEST_SUITE(YdbVersion) { Y_UNIT_TEST(DefaultDifferentBuild) { Test( TCurrentCompatibilityInfo{ - .Build = "ydb", - .YdbVersion = TYdbVersion{ .Year = 1, .Major = 1, .Minor = 1, .Hotfix = 0 } + .Application = "ydb", + .Version = TVersion{ .Year = 1, .Major = 1, .Minor = 1, .Hotfix = 0 } }, TCurrentCompatibilityInfo{ - .Build = "nbs", - .YdbVersion = TYdbVersion{ .Year = 1, .Major = 2, .Minor = 1, .Hotfix = 0 } + .Application = "nbs", + .Version = TVersion{ .Year = 1, .Major = 2, .Minor = 1, .Hotfix = 0 } }, true ); @@ -165,12 +167,12 @@ Y_UNIT_TEST_SUITE(YdbVersion) { Y_UNIT_TEST(DefaultDifferentBuildIncompatible) { Test( TCurrentCompatibilityInfo{ - .Build = "ydb", - .YdbVersion = TYdbVersion{ .Year = 1, .Major = 1, .Minor = 1, .Hotfix = 0 }, + .Application = "ydb", + .Version = TVersion{ .Year = 1, .Major = 1, .Minor = 1, .Hotfix = 0 }, }, TCurrentCompatibilityInfo{ - .Build = "nbs", - .YdbVersion = TYdbVersion{ .Year = 1, .Major = 3, .Minor = 1, .Hotfix = 0 }, + .Application = "nbs", + .Version = TVersion{ .Year = 1, .Major = 3, .Minor = 1, .Hotfix = 0 }, }, false ); @@ -178,19 +180,19 @@ Y_UNIT_TEST_SUITE(YdbVersion) { Y_UNIT_TEST(LimitOld) { Test( TCurrentCompatibilityInfo{ - .Build = "ydb", - .YdbVersion = TYdbVersion{ .Year = 1, .Major = 2, .Minor = 1, .Hotfix = 0 }, + .Application = "ydb", + .Version = TVersion{ .Year = 1, .Major = 2, .Minor = 1, .Hotfix = 0 }, .CanLoadFrom = { TCompatibilityRule{ - .LowerLimit = TYdbVersion{ .Year = 1, .Major = 1 }, - .UpperLimit = TYdbVersion{ .Year = 1, .Major = 1, .Minor = 3 }, + .LowerLimit = TVersion{ .Year = 1, .Major = 1 }, + .UpperLimit = TVersion{ .Year = 1, .Major = 1, .Minor = 3 }, .Forbidden = true } } }, TCurrentCompatibilityInfo{ - .Build = "ydb", - .YdbVersion = TYdbVersion{ .Year = 1, .Major = 1, .Minor = 2, .Hotfix = 1 } + .Application = "ydb", + .Version = TVersion{ .Year = 1, .Major = 1, .Minor = 2, .Hotfix = 1 } }, false ); @@ -198,16 +200,16 @@ Y_UNIT_TEST_SUITE(YdbVersion) { Y_UNIT_TEST(LimitNew) { Test( TCurrentCompatibilityInfo{ - .Build = "ydb", - .YdbVersion = TYdbVersion{ .Year = 1, .Major = 1, .Minor = 1, .Hotfix = 3 }, + .Application = "ydb", + .Version = TVersion{ .Year = 1, .Major = 1, .Minor = 1, .Hotfix = 3 }, }, TCurrentCompatibilityInfo{ - .Build = "ydb", - .YdbVersion = TYdbVersion{ .Year = 1, .Major = 2, .Minor = 2, .Hotfix = 0 }, + .Application = "ydb", + .Version = TVersion{ .Year = 1, .Major = 2, .Minor = 2, .Hotfix = 0 }, .StoresReadableBy = { TCompatibilityRule{ - .LowerLimit = TYdbVersion{ .Year = 1, .Major = 1 }, - .UpperLimit = TYdbVersion{ .Year = 1, .Major = 2, .Minor = 1 }, + .LowerLimit = TVersion{ .Year = 1, .Major = 1 }, + .UpperLimit = TVersion{ .Year = 1, .Major = 2, .Minor = 1 }, .Forbidden = true } } @@ -218,18 +220,18 @@ Y_UNIT_TEST_SUITE(YdbVersion) { Y_UNIT_TEST(CurrentCanLoadFrom) { Test( TCurrentCompatibilityInfo{ - .Build = "ydb", - .YdbVersion = TYdbVersion{ .Year = 1, .Major = 3, .Minor = 1, .Hotfix = 0 }, + .Application = "ydb", + .Version = TVersion{ .Year = 1, .Major = 3, .Minor = 1, .Hotfix = 0 }, .CanLoadFrom = { TCompatibilityRule{ - .LowerLimit = TYdbVersion{ .Year = 1, .Major = 1 }, - .UpperLimit = TYdbVersion{ .Year = 1, .Major = 3, .Minor = 1, .Hotfix = 0 } + .LowerLimit = TVersion{ .Year = 1, .Major = 1 }, + .UpperLimit = TVersion{ .Year = 1, .Major = 3, .Minor = 1, .Hotfix = 0 } } } }, TCurrentCompatibilityInfo{ - .Build = "nbs", - .YdbVersion = TYdbVersion{ .Year = 1, .Major = 1, .Minor = 3, .Hotfix = 1 } + .Application = "nbs", + .Version = TVersion{ .Year = 1, .Major = 1, .Minor = 3, .Hotfix = 1 } }, true ); @@ -237,17 +239,17 @@ Y_UNIT_TEST_SUITE(YdbVersion) { Y_UNIT_TEST(CurrentCanLoadFromAllOlder) { Test( TCurrentCompatibilityInfo{ - .Build = "ydb", - .YdbVersion = TYdbVersion{ .Year = 2, .Major = 4, .Minor = 1, .Hotfix = 0 }, + .Application = "ydb", + .Version = TVersion{ .Year = 2, .Major = 4, .Minor = 1, .Hotfix = 0 }, .CanLoadFrom = { TCompatibilityRule{ - .UpperLimit = TYdbVersion{ .Year = 2, .Major = 4, .Minor = 1, .Hotfix = 0 } + .UpperLimit = TVersion{ .Year = 2, .Major = 4, .Minor = 1, .Hotfix = 0 } } } }, TCurrentCompatibilityInfo{ - .Build = "nbs", - .YdbVersion = TYdbVersion{ .Year = 1, .Major = 1, .Minor = 3, .Hotfix = 1 } + .Application = "nbs", + .Version = TVersion{ .Year = 1, .Major = 1, .Minor = 3, .Hotfix = 1 } }, true ); @@ -255,18 +257,18 @@ Y_UNIT_TEST_SUITE(YdbVersion) { Y_UNIT_TEST(CurrentCanLoadFromIncompatible) { Test( TCurrentCompatibilityInfo{ - .Build = "ydb", - .YdbVersion = TYdbVersion{ .Year = 1, .Major = 3, .Minor = 1, .Hotfix = 0 }, + .Application = "ydb", + .Version = TVersion{ .Year = 1, .Major = 3, .Minor = 1, .Hotfix = 0 }, .CanLoadFrom = { TCompatibilityRule{ - .LowerLimit = TYdbVersion{ .Year = 1, .Major = 2 }, - .UpperLimit = TYdbVersion{ .Year = 1, .Major = 3, .Minor = 1, .Hotfix = 0 } + .LowerLimit = TVersion{ .Year = 1, .Major = 2 }, + .UpperLimit = TVersion{ .Year = 1, .Major = 3, .Minor = 1, .Hotfix = 0 } } } }, TCurrentCompatibilityInfo{ - .Build = "nbs", - .YdbVersion = TYdbVersion{ .Year = 1, .Major = 1, .Minor = 3, .Hotfix = 1 } + .Application = "nbs", + .Version = TVersion{ .Year = 1, .Major = 1, .Minor = 3, .Hotfix = 1 } }, false ); @@ -274,18 +276,18 @@ Y_UNIT_TEST_SUITE(YdbVersion) { Y_UNIT_TEST(CurrentStoresReadableBy) { Test( TCurrentCompatibilityInfo{ - .Build = "ydb", - .YdbVersion = TYdbVersion{ .Year = 1, .Major = 3, .Minor = 1, .Hotfix = 0 }, + .Application = "ydb", + .Version = TVersion{ .Year = 1, .Major = 3, .Minor = 1, .Hotfix = 0 }, .StoresReadableBy = { TCompatibilityRule{ - .LowerLimit = TYdbVersion{ .Year = 1, .Major = 1 }, - .UpperLimit = TYdbVersion{ .Year = 1, .Major = 3, .Minor = 1, .Hotfix = 0 } + .LowerLimit = TVersion{ .Year = 1, .Major = 1 }, + .UpperLimit = TVersion{ .Year = 1, .Major = 3, .Minor = 1, .Hotfix = 0 } } } }, TCurrentCompatibilityInfo{ - .Build = "nbs", - .YdbVersion = TYdbVersion{ .Year = 1, .Major = 1, .Minor = 3, .Hotfix = 1 } + .Application = "nbs", + .Version = TVersion{ .Year = 1, .Major = 1, .Minor = 3, .Hotfix = 1 } }, false ); @@ -293,16 +295,16 @@ Y_UNIT_TEST_SUITE(YdbVersion) { Y_UNIT_TEST(StoredReadableBy) { Test( TCurrentCompatibilityInfo{ - .Build = "ydb", - .YdbVersion = TYdbVersion{ .Year = 1, .Major = 1, .Minor = 2, .Hotfix = 0 } + .Application = "ydb", + .Version = TVersion{ .Year = 1, .Major = 1, .Minor = 2, .Hotfix = 0 } }, TCurrentCompatibilityInfo{ - .Build = "nbs", - .YdbVersion = TYdbVersion{ .Year = 1, .Major = 3, .Minor = 3, .Hotfix = 1 }, + .Application = "nbs", + .Version = TVersion{ .Year = 1, .Major = 3, .Minor = 3, .Hotfix = 1 }, .StoresReadableBy = { TCompatibilityRule{ - .LowerLimit = TYdbVersion{ .Year = 1, .Major = 1 }, - .UpperLimit = TYdbVersion{ .Year = 1, .Major = 3, .Minor = 3, .Hotfix = 1 } + .LowerLimit = TVersion{ .Year = 1, .Major = 1 }, + .UpperLimit = TVersion{ .Year = 1, .Major = 3, .Minor = 3, .Hotfix = 1 } } } }, @@ -312,16 +314,16 @@ Y_UNIT_TEST_SUITE(YdbVersion) { Y_UNIT_TEST(StoredReadableByIncompatible) { Test( TCurrentCompatibilityInfo{ - .Build = "ydb", - .YdbVersion = TYdbVersion{ .Year = 1, .Major = 1, .Minor = 2, .Hotfix = 0 } + .Application = "ydb", + .Version = TVersion{ .Year = 1, .Major = 1, .Minor = 2, .Hotfix = 0 } }, TCurrentCompatibilityInfo{ - .Build = "nbs", - .YdbVersion = TYdbVersion{ .Year = 1, .Major = 3, .Minor = 3, .Hotfix = 1 }, + .Application = "nbs", + .Version = TVersion{ .Year = 1, .Major = 3, .Minor = 3, .Hotfix = 1 }, .StoresReadableBy = { TCompatibilityRule{ - .LowerLimit = TYdbVersion{ .Year = 1, .Major = 1, .Minor = 3, .Hotfix = 1 }, - .UpperLimit = TYdbVersion{ .Year = 1, .Major = 3, .Minor = 3, .Hotfix = 1 } + .LowerLimit = TVersion{ .Year = 1, .Major = 1, .Minor = 3, .Hotfix = 1 }, + .UpperLimit = TVersion{ .Year = 1, .Major = 3, .Minor = 3, .Hotfix = 1 } } } }, @@ -331,16 +333,16 @@ Y_UNIT_TEST_SUITE(YdbVersion) { Y_UNIT_TEST(StoredWithRules) { Test( TCurrentCompatibilityInfo{ - .Build = "ydb", - .YdbVersion = TYdbVersion{ .Year = 1, .Major = 4, .Minor = 1, .Hotfix = 0 } + .Application = "ydb", + .Version = TVersion{ .Year = 1, .Major = 4, .Minor = 1, .Hotfix = 0 } }, TCurrentCompatibilityInfo{ - .Build = "ydb", - .YdbVersion = TYdbVersion{ .Year = 1, .Major = 3, .Minor = 3, .Hotfix = 1 }, + .Application = "ydb", + .Version = TVersion{ .Year = 1, .Major = 3, .Minor = 3, .Hotfix = 1 }, .StoresReadableBy = { TCompatibilityRule{ - .LowerLimit = TYdbVersion{ .Year = 1, .Major = 1, .Minor = 3 }, - .UpperLimit = TYdbVersion{ .Year = 1, .Major = 3, .Minor = 3, .Hotfix = 1 } + .LowerLimit = TVersion{ .Year = 1, .Major = 1, .Minor = 3 }, + .UpperLimit = TVersion{ .Year = 1, .Major = 3, .Minor = 3, .Hotfix = 1 } } } }, @@ -350,16 +352,16 @@ Y_UNIT_TEST_SUITE(YdbVersion) { Y_UNIT_TEST(StoredWithRulesIncompatible) { Test( TCurrentCompatibilityInfo{ - .Build = "ydb", - .YdbVersion = TYdbVersion{ .Year = 1, .Major = 5, .Minor = 1, .Hotfix = 0 } + .Application = "ydb", + .Version = TVersion{ .Year = 1, .Major = 5, .Minor = 1, .Hotfix = 0 } }, TCurrentCompatibilityInfo{ - .Build = "ydb", - .YdbVersion = TYdbVersion{ .Year = 1, .Major = 3, .Minor = 3, .Hotfix = 1 }, + .Application = "ydb", + .Version = TVersion{ .Year = 1, .Major = 3, .Minor = 3, .Hotfix = 1 }, .StoresReadableBy = { TCompatibilityRule{ - .LowerLimit = TYdbVersion{ .Year = 1, .Major = 1, .Minor = 3 }, - .UpperLimit = TYdbVersion{ .Year = 1, .Major = 3, .Minor = 3, .Hotfix = 1 } + .LowerLimit = TVersion{ .Year = 1, .Major = 1, .Minor = 3 }, + .UpperLimit = TVersion{ .Year = 1, .Major = 3, .Minor = 3, .Hotfix = 1 } } } }, @@ -369,79 +371,86 @@ Y_UNIT_TEST_SUITE(YdbVersion) { Y_UNIT_TEST(OldNbsStored) { Test( TCurrentCompatibilityInfo{ - .Build = "nbs", - .YdbVersion = TYdbVersion{ .Year = 1, .Major = 1, .Minor = 2, .Hotfix = 0 } + .Application = "nbs", + .Version = TVersion{ .Year = 1, .Major = 1, .Minor = 2, .Hotfix = 0 } }, TCurrentCompatibilityInfo{ - .Build = "ydb", - .YdbVersion = TYdbVersion{ .Year = 1, .Major = 3, .Minor = 3, .Hotfix = 1 }, - .StoresReadableBy = { + .Application = "ydb", + .Version = TVersion{ .Year = 1, .Major = 3, .Minor = 3, .Hotfix = 1 }, + .CanConnectTo = { TCompatibilityRule{ - .Build = "nbs", - .LowerLimit = TYdbVersion{ .Year = 1, .Major = 1 }, - .UpperLimit = TYdbVersion{ .Year = 1, .Major = 3, .Minor = 3, .Hotfix = 1 } + .Application = "nbs", + .LowerLimit = TVersion{ .Year = 1, .Major = 1 }, + .UpperLimit = TVersion{ .Year = 1, .Major = 3, .Minor = 3, .Hotfix = 1 }, + .ComponentId = EComponentId::Interconnect, } } }, - true + true, + EComponentId::Interconnect ); } Y_UNIT_TEST(OldNbsIncompatibleStored) { Test( TCurrentCompatibilityInfo{ - .Build = "ydb", - .YdbVersion = TYdbVersion{ .Year = 1, .Major = 1, .Minor = 2, .Hotfix = 0 } + .Application = "ydb", + .Version = TVersion{ .Year = 1, .Major = 1, .Minor = 2, .Hotfix = 0 } }, TCurrentCompatibilityInfo{ - .Build = "ydb", - .YdbVersion = TYdbVersion{ .Year = 1, .Major = 3, .Minor = 3, .Hotfix = 1 }, - .StoresReadableBy = { + .Application = "ydb", + .Version = TVersion{ .Year = 1, .Major = 3, .Minor = 3, .Hotfix = 1 }, + .CanConnectTo = { TCompatibilityRule{ - .Build = "nbs", - .LowerLimit = TYdbVersion{ .Year = 1, .Major = 1 }, - .UpperLimit = TYdbVersion{ .Year = 1, .Major = 3, .Minor = 3, .Hotfix = 1 } + .Application = "nbs", + .LowerLimit = TVersion{ .Year = 1, .Major = 1 }, + .UpperLimit = TVersion{ .Year = 1, .Major = 3, .Minor = 3, .Hotfix = 1 }, + .ComponentId = EComponentId::Interconnect, } } }, - false + false, + EComponentId::Interconnect ); } Y_UNIT_TEST(NewNbsCurrent) { Test( TCurrentCompatibilityInfo{ - .Build = "nbs", - .YdbVersion = TYdbVersion{ .Year = 1, .Major = 3, .Minor = 2, .Hotfix = 0 }, - .CanLoadFrom = { + .Application = "nbs", + .Version = TVersion{ .Year = 1, .Major = 3, .Minor = 2, .Hotfix = 0 }, + .CanConnectTo = { TCompatibilityRule{ - .Build = "ydb", - .LowerLimit = TYdbVersion{ .Year = 1, .Major = 1 }, - .UpperLimit = TYdbVersion{ .Year = 1, .Major = 3, .Minor = 2, .Hotfix = 0 } + .Application = "ydb", + .LowerLimit = TVersion{ .Year = 1, .Major = 1 }, + .UpperLimit = TVersion{ .Year = 1, .Major = 3, .Minor = 2, .Hotfix = 0 }, + .ComponentId = EComponentId::Interconnect, } } }, TCurrentCompatibilityInfo{ - .Build = "ydb", - .YdbVersion = TYdbVersion{ .Year = 1, .Major = 1, .Minor = 3, .Hotfix = 2 }, + .Application = "ydb", + .Version = TVersion{ .Year = 1, .Major = 1, .Minor = 3, .Hotfix = 2 }, }, - true + true, + EComponentId::Interconnect ); } Y_UNIT_TEST(NewNbsIncompatibleCurrent) { Test( TCurrentCompatibilityInfo{ - .Build = "nbs", - .YdbVersion = TYdbVersion{ .Year = 1, .Major = 3, .Minor = 2, .Hotfix = 0 }, - .CanLoadFrom = { + .Application = "nbs", + .Version = TVersion{ .Year = 1, .Major = 3, .Minor = 2, .Hotfix = 0 }, + .CanConnectTo = { TCompatibilityRule{ - .Build = "ydb", - .LowerLimit = TYdbVersion{ .Year = 1, .Major = 1 }, - .UpperLimit = TYdbVersion{ .Year = 1, .Major = 3, .Minor = 2, .Hotfix = 0 } + .Application = "ydb", + .LowerLimit = TVersion{ .Year = 1, .Major = 1 }, + .UpperLimit = TVersion{ .Year = 1, .Major = 3, .Minor = 2, .Hotfix = 0 }, + .ComponentId = EComponentId::Interconnect, } } }, TCurrentCompatibilityInfo{ - .Build = "nbs", - .YdbVersion = TYdbVersion{ .Year = 1, .Major = 1, .Minor = 3, .Hotfix = 2 }, + .Application = "nbs", + .Version = TVersion{ .Year = 1, .Major = 1, .Minor = 3, .Hotfix = 2 }, }, false ); @@ -449,18 +458,18 @@ Y_UNIT_TEST_SUITE(YdbVersion) { Y_UNIT_TEST(OneAcceptedVersion) { Test( TCurrentCompatibilityInfo{ - .Build = "ydb", - .YdbVersion = TYdbVersion{ .Year = 1, .Major = 3, .Minor = 2, .Hotfix = 0 }, + .Application = "ydb", + .Version = TVersion{ .Year = 1, .Major = 3, .Minor = 2, .Hotfix = 0 }, .CanLoadFrom = { TCompatibilityRule{ - .LowerLimit = TYdbVersion{ .Year = 1, .Major = 1, .Minor = 3, .Hotfix = 2 }, - .UpperLimit = TYdbVersion{ .Year = 1, .Major = 1, .Minor = 3, .Hotfix = 2 } + .LowerLimit = TVersion{ .Year = 1, .Major = 1, .Minor = 3, .Hotfix = 2 }, + .UpperLimit = TVersion{ .Year = 1, .Major = 1, .Minor = 3, .Hotfix = 2 } } } }, TCurrentCompatibilityInfo{ - .Build = "ydb", - .YdbVersion = TYdbVersion{ .Year = 1, .Major = 1, .Minor = 3, .Hotfix = 2 }, + .Application = "ydb", + .Version = TVersion{ .Year = 1, .Major = 1, .Minor = 3, .Hotfix = 2 }, }, true ); @@ -468,43 +477,63 @@ Y_UNIT_TEST_SUITE(YdbVersion) { Y_UNIT_TEST(ForbiddenMinor) { Test( TCurrentCompatibilityInfo{ - .Build = "ydb", - .YdbVersion = TYdbVersion{ .Year = 1, .Major = 2, .Minor = 2, .Hotfix = 0 }, + .Application = "ydb", + .Version = TVersion{ .Year = 1, .Major = 2, .Minor = 2, .Hotfix = 0 }, .CanLoadFrom = { TCompatibilityRule{ - .LowerLimit = TYdbVersion{ .Year = 1, .Major = 1, .Minor = 3 }, - .UpperLimit = TYdbVersion{ .Year = 1, .Major = 1, .Minor = 3 }, + .LowerLimit = TVersion{ .Year = 1, .Major = 1, .Minor = 3 }, + .UpperLimit = TVersion{ .Year = 1, .Major = 1, .Minor = 3 }, .Forbidden = true } } }, TCurrentCompatibilityInfo{ - .Build = "ydb", - .YdbVersion = TYdbVersion{ .Year = 1, .Major = 1, .Minor = 3, .Hotfix = 1 }, + .Application = "ydb", + .Version = TVersion{ .Year = 1, .Major = 1, .Minor = 3, .Hotfix = 1 }, }, false ); } + Y_UNIT_TEST(DefaultRulesWithExtraForbidden) { + Test( + TCurrentCompatibilityInfo{ + .Application = "ydb", + .Version = TVersion{ .Year = 1, .Major = 2, .Minor = 2, .Hotfix = 0 }, + .CanLoadFrom = { + TCompatibilityRule{ + .LowerLimit = TVersion{ .Year = 1, .Major = 1, .Minor = 3 }, + .UpperLimit = TVersion{ .Year = 1, .Major = 1, .Minor = 3 }, + .Forbidden = true + } + } + }, + TCurrentCompatibilityInfo{ + .Application = "ydb", + .Version = TVersion{ .Year = 1, .Major = 1, .Minor = 4 }, + }, + true + ); + } Y_UNIT_TEST(ExtraAndForbidden) { Test( TCurrentCompatibilityInfo{ - .Build = "ydb", - .YdbVersion = TYdbVersion{ .Year = 1, .Major = 4, .Minor = 2, .Hotfix = 0 }, + .Application = "ydb", + .Version = TVersion{ .Year = 1, .Major = 4, .Minor = 2, .Hotfix = 0 }, .CanLoadFrom = { TCompatibilityRule{ - .LowerLimit = TYdbVersion{ .Year = 1, .Major = 1 }, - .UpperLimit = TYdbVersion{ .Year = 1, .Major = 4, .Minor = 2, .Hotfix = 0 }, + .LowerLimit = TVersion{ .Year = 1, .Major = 1 }, + .UpperLimit = TVersion{ .Year = 1, .Major = 4, .Minor = 2, .Hotfix = 0 }, }, TCompatibilityRule{ - .LowerLimit = TYdbVersion{ .Year = 1, .Major = 2, .Minor = 3 }, - .UpperLimit = TYdbVersion{ .Year = 1, .Major = 2, .Minor = 3 }, + .LowerLimit = TVersion{ .Year = 1, .Major = 2, .Minor = 3 }, + .UpperLimit = TVersion{ .Year = 1, .Major = 2, .Minor = 3 }, .Forbidden = true } } }, TCurrentCompatibilityInfo{ - .Build = "ydb", - .YdbVersion = TYdbVersion{ .Year = 1, .Major = 2, .Minor = 3, .Hotfix = 0 }, + .Application = "ydb", + .Version = TVersion{ .Year = 1, .Major = 2, .Minor = 3, .Hotfix = 0 }, }, false ); @@ -512,23 +541,23 @@ Y_UNIT_TEST_SUITE(YdbVersion) { Y_UNIT_TEST(SomeRulesAndOtherForbidden) { Test( TCurrentCompatibilityInfo{ - .Build = "ydb", - .YdbVersion = TYdbVersion{ .Year = 1, .Major = 4, .Minor = 2, .Hotfix = 0 }, + .Application = "ydb", + .Version = TVersion{ .Year = 1, .Major = 4, .Minor = 2, .Hotfix = 0 }, .CanLoadFrom = { TCompatibilityRule{ - .LowerLimit = TYdbVersion{ .Year = 1, .Major = 1 }, - .UpperLimit = TYdbVersion{ .Year = 1, .Major = 4, .Minor = 2, .Hotfix = 0 }, + .LowerLimit = TVersion{ .Year = 1, .Major = 1 }, + .UpperLimit = TVersion{ .Year = 1, .Major = 4, .Minor = 2, .Hotfix = 0 }, }, TCompatibilityRule{ - .LowerLimit = TYdbVersion{ .Year = 1, .Major = 2, .Minor = 4 }, - .UpperLimit = TYdbVersion{ .Year = 1, .Major = 2, .Minor = 4 }, + .LowerLimit = TVersion{ .Year = 1, .Major = 2, .Minor = 4 }, + .UpperLimit = TVersion{ .Year = 1, .Major = 2, .Minor = 4 }, .Forbidden = true } } }, TCurrentCompatibilityInfo{ - .Build = "ydb", - .YdbVersion = TYdbVersion{ .Year = 1, .Major = 2, .Minor = 3, .Hotfix = 0 }, + .Application = "ydb", + .Version = TVersion{ .Year = 1, .Major = 2, .Minor = 3, .Hotfix = 0 }, }, true ); @@ -536,19 +565,19 @@ Y_UNIT_TEST_SUITE(YdbVersion) { Y_UNIT_TEST(Component) { Test( TCurrentCompatibilityInfo{ - .Build = "ydb", - .YdbVersion = TYdbVersion{ .Year = 1, .Major = 4, .Minor = 2, .Hotfix = 0 }, + .Application = "ydb", + .Version = TVersion{ .Year = 1, .Major = 4, .Minor = 2, .Hotfix = 0 }, .CanLoadFrom = { TCompatibilityRule{ - .LowerLimit = TYdbVersion{ .Year = 1, .Major = 1 }, - .UpperLimit = TYdbVersion{ .Year = 1, .Major = 4, .Minor = 2, .Hotfix = 0 }, + .LowerLimit = TVersion{ .Year = 1, .Major = 1 }, + .UpperLimit = TVersion{ .Year = 1, .Major = 4, .Minor = 2, .Hotfix = 0 }, .ComponentId = (ui32)EComponentId::Test1, }, } }, TCurrentCompatibilityInfo{ - .Build = "ydb", - .YdbVersion = TYdbVersion{ .Year = 1, .Major = 2, .Minor = 3, .Hotfix = 0 }, + .Application = "ydb", + .Version = TVersion{ .Year = 1, .Major = 2, .Minor = 3, .Hotfix = 0 }, }, true ); @@ -556,33 +585,123 @@ Y_UNIT_TEST_SUITE(YdbVersion) { Y_UNIT_TEST(OtherComponent) { Test( TCurrentCompatibilityInfo{ - .Build = "ydb", - .YdbVersion = TYdbVersion{ .Year = 1, .Major = 4, .Minor = 2, .Hotfix = 0 }, + .Application = "ydb", + .Version = TVersion{ .Year = 1, .Major = 4, .Minor = 2, .Hotfix = 0 }, .CanLoadFrom = { TCompatibilityRule{ - .LowerLimit = TYdbVersion{ .Year = 1, .Major = 1 }, - .UpperLimit = TYdbVersion{ .Year = 1, .Major = 4, .Minor = 2, .Hotfix = 0 }, + .LowerLimit = TVersion{ .Year = 1, .Major = 1 }, + .UpperLimit = TVersion{ .Year = 1, .Major = 4, .Minor = 2, .Hotfix = 0 }, .ComponentId = (ui32)EComponentId::Test2, }, } }, TCurrentCompatibilityInfo{ - .Build = "ydb", - .YdbVersion = TYdbVersion{ .Year = 1, .Major = 2, .Minor = 3, .Hotfix = 0 }, + .Application = "ydb", + .Version = TVersion{ .Year = 1, .Major = 2, .Minor = 3, .Hotfix = 0 }, + }, + false + ); + } + + Y_UNIT_TEST(YDBAndNbs) { + Test( + TCurrentCompatibilityInfo{ + .Application = "nbs", + .Version = TVersion{ .Year = 23, .Major = 3, .Minor = 2, .Hotfix = 0 }, + }, + TCurrentCompatibilityInfo{ + .Application = "ydb", + .Version = TVersion{ .Year = 24, .Major = 2, .Minor = 3, .Hotfix = 0 }, + .CanConnectTo = { + TCompatibilityRule{ + .Application = "nbs", + .LowerLimit = TVersion{ .Year = 23, .Major = 3 }, + .UpperLimit = TVersion{ .Year = 24, .Major = 2 }, + .ComponentId = EComponentId::Interconnect, + }, + } + }, + true, + EComponentId::Interconnect + ); + } + + Y_UNIT_TEST(DifferentYdbVersionsWithNBSRules) { + Test( + TCurrentCompatibilityInfo{ + .Application = "ydb", + .Version = TVersion{ .Year = 24, .Major = 3, .Minor = 1, .Hotfix = 0 }, + .CanLoadFrom = { + TCompatibilityRule{ + .Application = "nbs", + .LowerLimit = TVersion{ .Year = 23, .Major = 3 }, + .UpperLimit = TVersion{ .Year = 24, .Major = 3 }, + }, + }, + .StoresReadableBy = { + TCompatibilityRule{ + .Application = "nbs", + .LowerLimit = TVersion{ .Year = 23, .Major = 3 }, + .UpperLimit = TVersion{ .Year = 24, .Major = 3 }, + }, + } + }, + TCurrentCompatibilityInfo{ + .Application = "ydb", + .Version = TVersion{ .Year = 24, .Major = 2, .Minor = 3, .Hotfix = 0 }, + .CanLoadFrom = { + TCompatibilityRule{ + .Application = "nbs", + .LowerLimit = TVersion{ .Year = 23, .Major = 3 }, + .UpperLimit = TVersion{ .Year = 24, .Major = 2 }, + }, + }, + .StoresReadableBy = { + TCompatibilityRule{ + .Application = "nbs", + .LowerLimit = TVersion{ .Year = 23, .Major = 3 }, + .UpperLimit = TVersion{ .Year = 24, .Major = 2 }, + }, + } + }, + true + ); + } + + Y_UNIT_TEST(TrunkYDBAndNbs) { + Test( + TCurrentCompatibilityInfo{ + .Application = "ydb", + }, + TCurrentCompatibilityInfo{ + .Application = "nbs", + }, + true, + EComponentId::Interconnect + ); + } + Y_UNIT_TEST(TrunkAndStable) { + Test( + TCurrentCompatibilityInfo{ + .Application = "ydb", + }, + TCurrentCompatibilityInfo{ + .Application = "ydb", + .Version = TVersion{ .Year = 24, .Major = 3, .Minor = 1, .Hotfix = 0 }, }, false ); } Y_UNIT_TEST(CompatibleWithSelf) { - auto stored = TCompatibilityInfo::MakeStored(EComponentId::Test1); + auto stored = CompatibilityInfo.MakeStored(EComponentId::Test1); TString errorReason; - UNIT_ASSERT_C(TCompatibilityInfo::CheckCompatibility(&stored, EComponentId::Test1, errorReason), errorReason); + UNIT_ASSERT_C(CompatibilityInfo.CheckCompatibility(&stored, EComponentId::Test1, errorReason), errorReason); } Y_UNIT_TEST(PrintCurrentVersion) { TString str; - google::protobuf::TextFormat::PrintToString(*TCompatibilityInfo::GetCurrent(), &str); + google::protobuf::TextFormat::PrintToString(*CompatibilityInfo.GetCurrent(), &str); Cerr << str << Endl; } } @@ -591,15 +710,15 @@ Y_UNIT_TEST_SUITE(OldFormat) { void TestOldFormat(TCurrentCompatibilityInfo current, TOldFormat stored, bool expected) { TString errorReason; auto currentPB = current.ToPB(); - UNIT_ASSERT_EQUAL_C(TCompatibilityInfo::CheckCompatibility(¤tPB, stored, - (ui32)EComponentId::Interconnect, errorReason), expected, errorReason); + UNIT_ASSERT_EQUAL_C(CompatibilityInfo.CheckCompatibility(¤tPB, stored, + EComponentId::Interconnect, errorReason), expected, errorReason); } Y_UNIT_TEST(SameVersion) { TestOldFormat( TCurrentCompatibilityInfo{ - .Build = "ydb", - .YdbVersion = TYdbVersion{ .Year = 22, .Major = 4, .Minor = 1, .Hotfix = 0 } + .Application = "ydb", + .Version = TVersion{ .Year = 22, .Major = 4, .Minor = 1, .Hotfix = 0 } }, TOldFormat{ .Tag = "stable-22-4", @@ -612,8 +731,8 @@ Y_UNIT_TEST_SUITE(OldFormat) { Y_UNIT_TEST(DefaultRules) { TestOldFormat( TCurrentCompatibilityInfo{ - .Build = "ydb", - .YdbVersion = TYdbVersion{ .Year = 22, .Major = 5, .Minor = 1, .Hotfix = 0 } + .Application = "ydb", + .Version = TVersion{ .Year = 22, .Major = 5, .Minor = 1, .Hotfix = 0 } }, TOldFormat{ .Tag = "stable-22-4", @@ -626,12 +745,24 @@ Y_UNIT_TEST_SUITE(OldFormat) { Y_UNIT_TEST(PrevYear) { TestOldFormat( TCurrentCompatibilityInfo{ - .Build = "ydb", - .YdbVersion = TYdbVersion{ .Year = 23, .Major = 1, .Minor = 1, .Hotfix = 0 }, + .Application = "ydb", + .Version = TVersion{ .Year = 23, .Major = 1, .Minor = 1, .Hotfix = 0 }, .CanLoadFrom = { TCompatibilityRule{ - .LowerLimit = TYdbVersion{ .Year = 22, .Major = 5 }, - .UpperLimit = TYdbVersion{ .Year = 23, .Major = 1, .Minor = 1, .Hotfix = 0 }, + .LowerLimit = TVersion{ .Year = 22, .Major = 5 }, + .UpperLimit = TVersion{ .Year = 23, .Major = 1, .Minor = 1, .Hotfix = 0 }, + }, + }, + .StoresReadableBy = { + TCompatibilityRule{ + .LowerLimit = TVersion{ .Year = 22, .Major = 5 }, + .UpperLimit = TVersion{ .Year = 23, .Major = 1, .Minor = 1, .Hotfix = 0 }, + }, + }, + .CanConnectTo = { + TCompatibilityRule{ + .LowerLimit = TVersion{ .Year = 22, .Major = 5 }, + .UpperLimit = TVersion{ .Year = 23, .Major = 1, .Minor = 1, .Hotfix = 0 }, }, } }, @@ -646,7 +777,7 @@ Y_UNIT_TEST_SUITE(OldFormat) { Y_UNIT_TEST(Trunk) { TestOldFormat( TCurrentCompatibilityInfo{ - .Build = "trunk" + .Application = "ydb" }, TOldFormat{ .Tag = "trunk", @@ -659,8 +790,8 @@ Y_UNIT_TEST_SUITE(OldFormat) { Y_UNIT_TEST(UnexpectedTrunk) { TestOldFormat( TCurrentCompatibilityInfo{ - .Build = "ydb", - .YdbVersion = TYdbVersion{ .Year = 22, .Major = 4, .Minor = 1, .Hotfix = 0 }, + .Application = "ydb", + .Version = TVersion{ .Year = 22, .Major = 4, .Minor = 1, .Hotfix = 0 }, }, TOldFormat{ .Tag = "trunk", @@ -673,8 +804,8 @@ Y_UNIT_TEST_SUITE(OldFormat) { Y_UNIT_TEST(TooOld) { TestOldFormat( TCurrentCompatibilityInfo{ - .Build = "ydb", - .YdbVersion = TYdbVersion{ .Year = 22, .Major = 4, .Minor = 1, .Hotfix = 0 }, + .Application = "ydb", + .Version = TVersion{ .Year = 22, .Major = 4, .Minor = 1, .Hotfix = 0 }, }, TOldFormat{ .Tag = "stable-22-2", @@ -687,19 +818,12 @@ Y_UNIT_TEST_SUITE(OldFormat) { Y_UNIT_TEST(OldNbs) { TestOldFormat( TCurrentCompatibilityInfo{ - .Build = "ydb", - .YdbVersion = TYdbVersion{ .Year = 23, .Major = 1, .Minor = 1, .Hotfix = 0 }, - .CanLoadFrom = { - TCompatibilityRule{ - .LowerLimit = TYdbVersion{ .Year = 22, .Major = 4 }, - .UpperLimit = TYdbVersion{ .Year = 23, .Major = 1, .Minor = 1, .Hotfix = 0 }, - .ComponentId = (ui32)EComponentId::Interconnect - }, - }, - .StoresReadableBy = { + .Application = "ydb", + .Version = TVersion{ .Year = 23, .Major = 1, .Minor = 1, .Hotfix = 0 }, + .CanConnectTo = { TCompatibilityRule{ - .LowerLimit = TYdbVersion{ .Year = 22, .Major = 4 }, - .UpperLimit = TYdbVersion{ .Year = 23, .Major = 1, .Minor = 1, .Hotfix = 0 }, + .LowerLimit = TVersion{ .Year = 22, .Major = 4 }, + .UpperLimit = TVersion{ .Year = 23, .Major = 1, .Minor = 1, .Hotfix = 0 }, .ComponentId = (ui32)EComponentId::Interconnect }, } diff --git a/ydb/core/driver_lib/version/version.cpp b/ydb/core/driver_lib/version/version.cpp index f80e70c7d5..5385d3d4f6 100644 --- a/ydb/core/driver_lib/version/version.cpp +++ b/ydb/core/driver_lib/version/version.cpp @@ -3,44 +3,77 @@ #include <ydb/library/yverify_stream/yverify_stream.h> #include "version.h" +namespace NKikimr { + +TCompatibilityInfo CompatibilityInfo = TCompatibilityInfo{}; + using TCurrent = NKikimrConfig::TCurrentCompatibilityInfo; using TStored = NKikimrConfig::TStoredCompatibilityInfo; using TOldFormat = NActors::TInterconnectProxyCommon::TVersionInfo; -namespace NKikimr { +using EComponentId = NKikimrConfig::TCompatibilityRule; +using TComponentId = NKikimrConfig::TCompatibilityRule::EComponentId; -///////////////////////////////////////////////////////////// -// Global definitions -///////////////////////////////////////////////////////////// +TCompatibilityInfo::TCompatibilityInfo() { + using TCurrentConstructor = TCompatibilityInfo::TProtoConstructor::TCurrentCompatibilityInfo; + using TStoredConstructor = TCompatibilityInfo::TProtoConstructor::TStoredCompatibilityInfo; + // using TCompatibilityRuleConstructor = TCompatibilityInfo::TProtoConstructor::TCompatibilityRule; + using TVersionConstructor = TCompatibilityInfo::TProtoConstructor::TVersion; -// new version control -std::optional<TCurrent> TCompatibilityInfo::CompatibilityInfo = std::nullopt; -TSpinLock TCompatibilityInfo::LockCurrent = TSpinLock(); -const TCurrent* TCompatibilityInfo::GetCurrent() { - TGuard<TSpinLock> g(TCompatibilityInfo::LockCurrent); - - if (!CompatibilityInfo) { - using TYdbVersion = TCompatibilityInfo::TProtoConstructor::TYdbVersion; - // using TCompatibilityRule = TCompatibilityInfo::TProtoConstructor::TCompatibilityRule; - using TCurrentCompatibilityInfo = TCompatibilityInfo::TProtoConstructor::TCurrentCompatibilityInfo; - - auto current = TCurrentCompatibilityInfo{ - .Build = "ydb", - .YdbVersion = TYdbVersion{ - .Year = 23, - .Major = 3, - } - }.ToPB(); + ///////////////////////////////////////////////////////// + // Current CompatibilityInfo + ///////////////////////////////////////////////////////// - bool success = CompleteFromTag(current); - Y_UNUSED(success); - // Y_VERIFY_DEBUG(success); + auto current = TCurrentConstructor{ + .Application = "ydb", + .Version = TVersionConstructor{ + .Year = 23, + .Major = 3, + } + }.ToPB(); + + bool success = CompleteFromTag(current); + Y_UNUSED(success); + // Y_VERIFY(success); + + CurrentCompatibilityInfo.CopyFrom(current); + + ///////////////////////////////////////////////////////// + // Default CompatibilityInfo + ///////////////////////////////////////////////////////// + DefaultCompatibilityInfo = TDefaultCompatibilityInfo{}; +#define EMPLACE_DEFAULT_COMPATIBILITY_INFO(componentName, app, year, major, minor, hotfix) \ + do { \ + auto& defaultInfo = DefaultCompatibilityInfo[(ui32)EComponentId::componentName]; \ + defaultInfo.emplace(); \ + defaultInfo->CopyFrom( \ + TStoredConstructor{ \ + .Application = app, \ + .Version = TVersionConstructor{ \ + .Year = year, \ + .Major = major, \ + .Minor = minor, \ + .Hotfix = hotfix, \ + }, \ + }.ToPB() \ + ); \ + } while (false) + + EMPLACE_DEFAULT_COMPATIBILITY_INFO(PDisk, "ydb", 23, 3, 13, 0); + EMPLACE_DEFAULT_COMPATIBILITY_INFO(VDisk, "ydb", 23, 2, 12, 0); + EMPLACE_DEFAULT_COMPATIBILITY_INFO(BlobStorageController, "ydb", 23, 3, 13, 0); + +#undef EMPLACE_DEFAULT_COMPATIBILITY_INFO +} - CompatibilityInfo = TCurrent(); - CompatibilityInfo->CopyFrom(current); - } +const TCurrent* TCompatibilityInfo::GetCurrent() const { + return &CurrentCompatibilityInfo; +} - return &*CompatibilityInfo; +const TStored* TCompatibilityInfo::GetDefault(TComponentId componentId) const { + const auto& info = DefaultCompatibilityInfo[componentId]; + Y_VERIFY_S(info, "Default version is not defined for component# " << NKikimrConfig::TCompatibilityRule::EComponentId_Name(componentId)); + return &*info; } // obsolete version control @@ -60,30 +93,6 @@ TMaybe<NActors::TInterconnectProxyCommon::TVersionInfo> VERSION = NActors::TInte // Implementation ///////////////////////////////////////////////////////////// -// Last stable YDB release, which doesn't include version control change -// When the compatibility information is not present in component's data, -// we assume component's version to be this version -std::optional<TStored> TCompatibilityInfo::UnknownYdbRelease = std::nullopt; -const TStored* TCompatibilityInfo::GetUnknown() { - static TSpinLock lock; - TGuard<TSpinLock> g(lock); - - if (!UnknownYdbRelease) { - using TYdbVersion = TCompatibilityInfo::TProtoConstructor::TYdbVersion; - // using TCompatibilityRule = TCompatibilityInfo::TProtoConstructor::TCompatibilityRule; - using TStoredCompatibilityInfo = TCompatibilityInfo::TProtoConstructor::TStoredCompatibilityInfo; - - UnknownYdbRelease = TStored(); - UnknownYdbRelease->CopyFrom(TStoredCompatibilityInfo{ - .Build = "ydb", - .YdbVersion = TYdbVersion{ .Year = 23, .Major = 2, .Minor = 11, .Hotfix = 0 } - - }.ToPB()); - } - - return &*UnknownYdbRelease; -} - // Auxiliary output functions TString PrintStoredAndCurrent(const TStored* stored, const TCurrent* current) { TString storedStr; @@ -94,12 +103,12 @@ TString PrintStoredAndCurrent(const TStored* stored, const TCurrent* current) { "Current CompatibilityInfo# { " << currentStr << " } "; } -TString PrintStoredAndCurrent(const TOldFormat& stored, const TCurrent* current) { +TString PrintStoredAndCurrent(const TOldFormat& peer, const TCurrent* current) { TStringStream str; - str << "Stored CompatibilityInfo# { "; - str << "Tag# " << stored.Tag; + str << "Peer CompatibilityInfo# { "; + str << "Tag# " << peer.Tag; str << "AcceptedTag# { "; - for (const TString& tag : stored.AcceptedTags) { + for (const TString& tag : peer.AcceptedTags) { str << tag << " "; } str << " } } "; @@ -109,34 +118,47 @@ TString PrintStoredAndCurrent(const TOldFormat& stored, const TCurrent* current) return str.Str(); } -TStored TCompatibilityInfo::MakeStored(ui32 componentId, const TCurrent* current) { +bool CheckComponentId(const NKikimrConfig::TCompatibilityRule& rule, TComponentId componentId) { + if (!rule.HasComponentId()) { + return true; + } + const auto ruleComponentId = TComponentId(rule.GetComponentId()); + return ruleComponentId == EComponentId::Any || ruleComponentId == componentId; +} + +TStored TCompatibilityInfo::MakeStored(TComponentId componentId, const TCurrent* current) const { Y_VERIFY(current); TStored stored; - stored.SetBuild(current->GetBuild()); - if (current->HasYdbVersion()) { - stored.MutableYdbVersion()->CopyFrom(current->GetYdbVersion()); - } - - for (ui32 i = 0; i < current->StoresReadableBySize(); i++) { - auto rule = current->GetStoresReadableBy(i); - if (!rule.HasComponentId() || rule.GetComponentId() == componentId || - rule.GetComponentId() == (ui32)NKikimrConfig::TCompatibilityRule::Any) { - auto *newRule = stored.AddReadableBy(); - if (rule.HasBuild()) { - newRule->SetBuild(rule.GetBuild()); + stored.SetApplication(current->GetApplication()); + if (current->HasVersion()) { + stored.MutableVersion()->CopyFrom(current->GetVersion()); + } + + auto copyFromList = [&](const auto& current, auto& stored) { + for (const auto& rule : current) { + if (CheckComponentId(rule, componentId)) { + auto *newRule = stored.AddReadableBy(); + if (rule.HasApplication()) { + newRule->SetApplication(rule.GetApplication()); + } + newRule->MutableUpperLimit()->CopyFrom(rule.GetUpperLimit()); + newRule->MutableLowerLimit()->CopyFrom(rule.GetLowerLimit()); + newRule->SetForbidden(rule.GetForbidden()); } - newRule->MutableUpperLimit()->CopyFrom(rule.GetUpperLimit()); - newRule->MutableLowerLimit()->CopyFrom(rule.GetLowerLimit()); - newRule->SetForbidden(rule.GetForbidden()); } - } + }; + if (componentId == EComponentId::Interconnect) { + copyFromList(current->GetCanConnectTo(), stored); + } else { + copyFromList(current->GetStoresReadableBy(), stored); + } return stored; } -TStored TCompatibilityInfo::MakeStored(NKikimrConfig::TCompatibilityRule::EComponentId componentId) { - return MakeStored((ui32)componentId, GetCurrent()); +TStored TCompatibilityInfo::MakeStored(TComponentId componentId) const { + return MakeStored(componentId, GetCurrent()); } //////////////////////////////////////////////////////////////////////////////////////// @@ -193,69 +215,73 @@ i32 CompareVersions(const NKikimrConfig::TYdbVersion& left, const NKikimrConfig: } // If stored CompatibilityInfo is not present, we: -// - compare current to UnknownYdbRelease if current is stable version +// - compare current to DefaultCompatibilityInfo if current is stable version // - consider versions compatible otherwise -bool CheckNonPresent(const TCurrent* current, ui32 componentId, TString& errorReason) { +bool CheckNonPresent(const TCurrent* current, TComponentId componentId, TString& errorReason) { Y_VERIFY(current); - if (!current->HasYdbVersion()) { + if (!current->HasVersion()) { return true; } - const auto* lastUnsupported = TCompatibilityInfo::GetUnknown(); + const auto* lastUnsupported = CompatibilityInfo.GetDefault(componentId); Y_VERIFY(lastUnsupported); + TString errorReason1; - if (!TCompatibilityInfo::CheckCompatibility(lastUnsupported, componentId, errorReason1)) { - errorReason = "No stored YDB version found, last unsupported release is incompatible: " + errorReason1; + if (!CompatibilityInfo.CheckCompatibility(lastUnsupported, componentId, errorReason1)) { + errorReason = "No stored YDB version found, default version is incompatible: " + errorReason1; return false; } else { return true; } } -// By default two stable versions are considered compatible, if their Year is the same -// and Major differ for no more, than 1, regardless of their Build -// Two unstable versions are compatible only if they have the same Build -// Stable and non-stable versions are not compatible by default -bool CheckDefaultRules(TString currentBuild, const NKikimrConfig::TYdbVersion* currentYdbVersion, - TString storedBuild, const NKikimrConfig::TYdbVersion* storedYdbVersion) { - if (!currentYdbVersion && !storedYdbVersion) { - return currentBuild == storedBuild; - } - if (currentYdbVersion && storedYdbVersion) { - if (!currentYdbVersion->HasYear() || !storedYdbVersion->HasYear()) { +// Default rules: +// Two stable versions are compatible if their Year's are the same and their Major's differ for no more, than 1. +// Two unstable versions are compatible. +// Stable and non-stable versions are not compatible. +bool CheckDefaultRules(const NKikimrConfig::TYdbVersion* currentVersion, const NKikimrConfig::TYdbVersion* storedVersion) { + if (!currentVersion && !storedVersion) { + return true; + } + if (currentVersion && storedVersion) { + if (!currentVersion->HasYear() || !storedVersion->HasYear()) { return true; } - if (currentYdbVersion->GetYear() != storedYdbVersion->GetYear()) { + if (currentVersion->GetYear() != storedVersion->GetYear()) { return false; } - if (!currentYdbVersion->HasMajor() || !storedYdbVersion->HasMajor()) { + if (!currentVersion->HasMajor() || !storedVersion->HasMajor()) { return true; } - return std::abs((i32)currentYdbVersion->GetMajor() - (i32)storedYdbVersion->GetMajor()) <= 1; + return std::abs((i32)currentVersion->GetMajor() - (i32)storedVersion->GetMajor()) <= 1; } return false; } -bool CheckRule(std::optional<TString> build, const NKikimrConfig::TYdbVersion* version, const NKikimrConfig::TCompatibilityRule& rule) { - if (build) { - if (rule.HasBuild()) { - if (rule.GetBuild() != *build) { +bool CheckRule(std::optional<TString> app, const NKikimrConfig::TYdbVersion* version, const NKikimrConfig::TCompatibilityRule& rule) { + if (app) { + if (rule.HasApplication()) { + if (rule.GetApplication() != *app) { + // this rule is not applicable to different application return false; } - if (version == nullptr) { + if (!version) { + // rule for stable versions is not applicable to trunk return true; } } else { - // non-stable build is incompatible with stable - if (version == nullptr) { + if (!version) { + // rule for stable versions is not applicable to trunk return false; } } } else { - if (version == nullptr) { + if (!version) { + // neither application nor version is set, should not reach here return false; } - if (rule.HasBuild()) { + if (rule.HasApplication()) { + // only rules, which are common to all applications, apply to version with no application info return false; } } @@ -264,79 +290,69 @@ bool CheckRule(std::optional<TString> build, const NKikimrConfig::TYdbVersion* v (!rule.HasUpperLimit() || CompareVersions(*version, rule.GetUpperLimit()) < 1); } -bool TCompatibilityInfo::CheckCompatibility(const TCurrent* current, const TStored* stored, ui32 componentId, TString& errorReason) { +bool TCompatibilityInfo::CheckCompatibility(const TCurrent* current, const TStored* stored, TComponentId componentId, TString& errorReason) const { Y_VERIFY(current); - if (stored == nullptr) { + if (!stored) { // version record is not found return CheckNonPresent(current, componentId, errorReason); } - const auto currentBuild = current->GetBuild(); - const auto storedBuild = stored->GetBuild(); - const auto* currentYdbVersion = current->HasYdbVersion() ? ¤t->GetYdbVersion() : nullptr; - const auto* storedYdbVersion = stored->HasYdbVersion() ? &stored->GetYdbVersion() : nullptr; + const auto& currentApplication = current->GetApplication(); + const auto& storedApplication = stored->GetApplication(); + const auto* currentVersion = current->HasVersion() ? ¤t->GetVersion() : nullptr; + const auto* storedVersion = stored->HasVersion() ? &stored->GetVersion() : nullptr; bool permitted = false; - bool useDefault = true; - - for (ui32 i = 0; i < current->CanLoadFromSize(); ++i) { - const auto rule = current->GetCanLoadFrom(i); - if (!rule.HasComponentId() || rule.GetComponentId() == componentId || - rule.GetComponentId() == (ui32)NKikimrConfig::TCompatibilityRule::Any) { - useDefault = false; - if (CheckRule(storedBuild, storedYdbVersion, rule)) { - if (rule.HasForbidden() && rule.GetForbidden()) { - errorReason = "Stored version is explicitly prohibited, " + PrintStoredAndCurrent(stored, current); - return false; - } else { - permitted = true; + + auto checkRuleList = [&](const auto& rules, const TString& application, const NKikimrConfig::TYdbVersion* version, const TString& errorPrefix) { + for (const auto& rule : rules) { + if (CheckComponentId(rule, componentId)) { + if (CheckRule(application, version, rule)) { + if (rule.HasForbidden() && rule.GetForbidden()) { + errorReason = errorPrefix + PrintStoredAndCurrent(stored, current); + return false; + } else { + permitted = true; + } } } } + return true; + }; + + if (componentId == EComponentId::Interconnect) { + if (!checkRuleList(current->GetCanConnectTo(), storedApplication, storedVersion, "Peer version is explicitly prohibited, ")) { + return false; + } + } else { + if (!checkRuleList(current->GetCanLoadFrom(), storedApplication, storedVersion, "Stored version is explicitly prohibited, ")) { + return false; + } } - for (ui32 i = 0; i < stored->ReadableBySize(); ++i) { - const auto rule = stored->GetReadableBy(i); - if (!rule.HasComponentId() || rule.GetComponentId() == componentId || - rule.GetComponentId() == (ui32)NKikimrConfig::TCompatibilityRule::Any) { - if (CheckRule(currentBuild, currentYdbVersion, rule)) { - useDefault = false; - if (rule.HasForbidden() && rule.GetForbidden()) { - errorReason = "Current version is explicitly prohibited, " + PrintStoredAndCurrent(stored, current); - return false; - } else { - permitted = true; - } - } - } + if (!checkRuleList(stored->GetReadableBy(), currentApplication, currentVersion, "Current version is explicitly prohibited, ")) { + return false; } if (permitted) { return true; } else { - if (useDefault) { - if (CheckDefaultRules(currentBuild, currentYdbVersion, storedBuild, storedYdbVersion)) { - return true; - } else { - errorReason = "Versions are not compatible by default rules, " + PrintStoredAndCurrent(stored, current); - return false; - } + if (CheckDefaultRules(currentVersion, storedVersion)) { + return true; + } else { + errorReason = "Versions are not compatible neither by common rule nor by provided rule sets, " + + PrintStoredAndCurrent(stored, current); + return false; } - errorReason = "Versions are not compatible by given rule sets, " + PrintStoredAndCurrent(stored, current); - return false; } } -bool TCompatibilityInfo::CheckCompatibility(const TStored* stored, ui32 componentId, TString& errorReason) { +bool TCompatibilityInfo::CheckCompatibility(const TStored* stored, TComponentId componentId, TString& errorReason) const { return CheckCompatibility(GetCurrent(), stored, componentId, errorReason); } void TCompatibilityInfo::Reset(TCurrent* newCurrent) { - TGuard<TSpinLock> g(TCompatibilityInfo::LockCurrent); - if (!CompatibilityInfo) { - CompatibilityInfo = TCurrent(); - } - CompatibilityInfo->CopyFrom(*newCurrent); + CurrentCompatibilityInfo.CopyFrom(*newCurrent); } TString GetBranchName(TString url) { @@ -366,7 +382,7 @@ TString GetBranchName(TString url) { return url; } -std::optional<NKikimrConfig::TYdbVersion> ParseYdbVersionFromTag(TString tag, TString delimiter = "-") { +std::optional<NKikimrConfig::TYdbVersion> ParseVersionFromTag(TString tag, TString delimiter = "-") { NKikimrConfig::TYdbVersion version; TVector<TString> splitted; Split(tag, delimiter , splitted); @@ -397,18 +413,15 @@ std::optional<NKikimrConfig::TYdbVersion> ParseYdbVersionFromTag(TString tag, TS version.SetMajor(major); if (parts.empty()) { - // example: stable-22-1 == 22.1.1.0 - version.SetMinor(1); - version.SetHotfix(0); + // example: stable-22-1 == 22.1 + // major version, from which minor tags are formed return version; } // parse Minor version ui32 minor; if (!TryIntFromString<10, ui32>(parts.front(), minor)) { - // example: stable-22-1-testing == 22.1.1.0 - version.SetMinor(1); - version.SetHotfix(0); + // example: stable-22-1-testing == 22.1 return version; } parts.pop_front(); @@ -493,27 +506,31 @@ TString GetTagString() { } bool TCompatibilityInfo::CompleteFromTag(NKikimrConfig::TCurrentCompatibilityInfo& current) { + if (current.GetApplication() == "trunk") { + Y_FAIL("Cannot complete trunk version"); + } + TString tag = GetTagString(); for (TString delim : {"-", "."}) { - auto tryParse = ParseYdbVersionFromTag(tag, delim); + auto tryParse = ParseVersionFromTag(tag, delim); if (tryParse) { auto versionFromTag = *tryParse; - auto version = current.MutableYdbVersion(); + auto version = current.MutableVersion(); if (version->HasYear()) { - Y_VERIFY_DEBUG(version->GetYear() == versionFromTag.GetYear()); + Y_VERIFY(version->GetYear() == versionFromTag.GetYear()); } else { version->SetYear(versionFromTag.GetYear()); } if (version->HasMajor()) { - Y_VERIFY_DEBUG(version->GetMajor() == versionFromTag.GetMajor()); + Y_VERIFY(version->GetMajor() == versionFromTag.GetMajor()); } else { version->SetMajor(versionFromTag.GetMajor()); } if (versionFromTag.HasMinor()) { if (version->HasMinor()) { - Y_VERIFY_DEBUG(version->GetMinor() == versionFromTag.GetMinor()); + Y_VERIFY(version->GetMinor() == versionFromTag.GetMinor()); } else { version->SetMinor(versionFromTag.GetMinor()); } @@ -521,7 +538,7 @@ bool TCompatibilityInfo::CompleteFromTag(NKikimrConfig::TCurrentCompatibilityInf if (versionFromTag.HasHotfix()) { if (version->HasHotfix()) { - Y_VERIFY_DEBUG(version->GetHotfix() == versionFromTag.GetHotfix()); + Y_VERIFY(version->GetHotfix() == versionFromTag.GetHotfix()); } else { version->SetHotfix(versionFromTag.GetHotfix()); } @@ -549,34 +566,29 @@ void CheckVersionTag() { } } -bool TCompatibilityInfo::CheckCompatibility(const NKikimrConfig::TCurrentCompatibilityInfo* current, - const TOldFormat& stored, ui32 componentId, TString& errorReason) { +bool TCompatibilityInfo::CheckCompatibility(const TCurrent* current, const TOldFormat& peer, TComponentId componentId, TString& errorReason) const { + // stored version is peer version in terms of Interconnect Y_VERIFY(current); + Y_VERIFY(componentId == EComponentId::Interconnect); // old version control is only implemented in IC - std::optional<TString> storedBuild; + std::optional<TString> peerApplication; - auto storedVersion = ParseYdbVersionFromTag(stored.Tag); - if (!storedVersion) { - // non-stable version is stored - if (current->GetBuild() == stored.Tag) { + auto peerVersion = ParseVersionFromTag(peer.Tag); + if (!peerVersion) { + if (!current->HasVersion()) { + // both peer and current versions are non-stable return true; } - storedBuild = stored.Tag; + peerApplication = peer.Tag; } bool permitted = false; - bool useDefault = true; - - for (ui32 i = 0; i < current->CanLoadFromSize(); ++i) { - const auto rule = current->GetCanLoadFrom(i); - if (!rule.HasComponentId() || rule.GetComponentId() == componentId || - rule.GetComponentId() == (ui32)NKikimrConfig::TCompatibilityRule::Any) { - if (!rule.HasBuild()) { - useDefault = false; - } - if (CheckRule(storedBuild, &*storedVersion, rule)) { + + for (const auto& rule : current->GetCanConnectTo()) { + if (CheckComponentId(rule, componentId)) { + if (CheckRule(peerApplication, &*peerVersion, rule)) { if (rule.HasForbidden() && rule.GetForbidden()) { - errorReason = "Stored version is explicitly prohibited, " + PrintStoredAndCurrent(stored, current); + errorReason = "Peer version is explicitly prohibited, " + PrintStoredAndCurrent(peer, current); return false; } else { permitted = true; @@ -589,66 +601,61 @@ bool TCompatibilityInfo::CheckCompatibility(const NKikimrConfig::TCurrentCompati return true; } - const auto* currentVersion = current->HasYdbVersion() ? ¤t->GetYdbVersion() : nullptr; - for (const auto& tag : stored.AcceptedTags) { - auto version = ParseYdbVersionFromTag(tag); - if (storedVersion && currentVersion) { - if (version->GetYear() == currentVersion->GetYear() && - version->GetMajor() == currentVersion->GetMajor() && - version->GetMinor() == currentVersion->GetMinor() && - version->GetHotfix() == currentVersion->GetHotfix()) { + for (const auto& tag : peer.AcceptedTags) { + auto version = ParseVersionFromTag(tag); + if (version && current->HasVersion()) { + if (CompareVersions(*version, current->GetVersion()) == 0) { return true; } - } else if (!storedVersion && !currentVersion) { - if (current->GetBuild() == tag) { + } else if (!version && !current->HasVersion()) { + if (current->GetApplication() == tag) { return true; } } } - if (useDefault) { - if (current->HasYdbVersion() && storedVersion) { - auto currentYdbVersion = current->GetYdbVersion(); - if (!currentYdbVersion.HasYear() || !storedVersion->HasYear()) { - return true; - } - if (currentYdbVersion.GetYear() != storedVersion->GetYear()) { - errorReason = "Default rules used, stored's and current's Year differ, " - + PrintStoredAndCurrent(stored, current); - return false; - } - if (!currentYdbVersion.HasMajor() || !storedVersion->HasMajor()) { - return true; - } - if (std::abs((i32)currentYdbVersion.GetMajor() - (i32)storedVersion->GetMajor()) <= 1) { - return true; - } else { - errorReason = "Default rules used, stored's and current's Major difference is more than 1, " - + PrintStoredAndCurrent(stored, current); - return false; - } - } else if (!current->HasYdbVersion() && !storedVersion) { - if (*storedBuild == current->GetBuild()) { - return true; - } else { - errorReason = "Default rules used, both versions are non-stable, stored's and current's Build differ, " - + PrintStoredAndCurrent(stored, current); - return false; - } + // use common rule + if (current->HasVersion() && peerVersion) { + const auto& currentVersion = current->GetVersion(); + if (!currentVersion.HasYear() || !peerVersion->HasYear()) { + return true; + } + if (currentVersion.GetYear() != peerVersion->GetYear()) { + errorReason = "Incompatible by common rule: peer's and current's Year differ, " + + PrintStoredAndCurrent(peer, current); + return false; + } + if (!currentVersion.HasMajor() || !peerVersion->HasMajor()) { + return true; + } + if (std::abs((i32)currentVersion.GetMajor() - (i32)peerVersion->GetMajor()) <= 1) { + return true; } else { - errorReason = "Default rules used, stable and non-stable versions are incompatible, " - + PrintStoredAndCurrent(stored, current); + errorReason = "Incompatible by common rule: peer's and current's Major differ by more than 1, " + + PrintStoredAndCurrent(peer, current); + return false; + } + } else if (!current->HasVersion() && !peerVersion) { + if (*peerApplication == current->GetApplication()) { + return true; + } else { + errorReason = "Incompatible by common rule: both versions are non-stable, peer's and current's Build differ, " + + PrintStoredAndCurrent(peer, current); return false; } + } else { + errorReason = "Incompatible by common rule: one tag is stable and other is non-stable, " + + PrintStoredAndCurrent(peer, current); + return false; } - errorReason = "Version tag doesn't match any current compatibility rule, current version is not in accepted tags list, " - + PrintStoredAndCurrent(stored, current); + errorReason = "Peer version tag doesn't match any current compatibility rule, current version is not in accepted tags list, " + + PrintStoredAndCurrent(peer, current); return false; } -bool TCompatibilityInfo::CheckCompatibility(const TOldFormat& stored, ui32 componentId, TString& errorReason) { - return CheckCompatibility(GetCurrent(), stored, componentId, errorReason); +bool TCompatibilityInfo::CheckCompatibility(const TOldFormat& peer, TComponentId componentId, TString& errorReason) const { + return CheckCompatibility(GetCurrent(), peer, componentId, errorReason); } } diff --git a/ydb/core/driver_lib/version/version.h b/ydb/core/driver_lib/version/version.h index cefb68ca00..ea2d43d678 100644 --- a/ydb/core/driver_lib/version/version.h +++ b/ydb/core/driver_lib/version/version.h @@ -7,13 +7,16 @@ namespace NKikimr { class TCompatibilityInfo { friend class TCompatibilityInfoTest; + friend class TCompatibilityInfoInitializer; + using TOldFormat = NActors::TInterconnectProxyCommon::TVersionInfo; + using TComponentId = NKikimrConfig::TCompatibilityRule::EComponentId; public: struct TProtoConstructor { TProtoConstructor() = delete; - struct TYdbVersion { + struct TVersion { std::optional<ui32> Year; std::optional<ui32> Major; std::optional<ui32> Minor; @@ -39,16 +42,16 @@ public: }; struct TCompatibilityRule { - std::optional<std::string> Build; - std::optional<TYdbVersion> LowerLimit; - std::optional<TYdbVersion> UpperLimit; + std::optional<std::string> Application; + std::optional<TVersion> LowerLimit; + std::optional<TVersion> UpperLimit; std::optional<ui32> ComponentId; std::optional<bool> Forbidden; NKikimrConfig::TCompatibilityRule ToPB() { NKikimrConfig::TCompatibilityRule res; - if (Build) { - res.SetBuild(Build->data()); + if (Application) { + res.SetApplication(Application->data()); } if (LowerLimit) { res.MutableLowerLimit()->CopyFrom(LowerLimit->ToPB()); @@ -68,17 +71,18 @@ public: }; struct TCurrentCompatibilityInfo { - std::optional<std::string> Build; - std::optional<TYdbVersion> YdbVersion; + std::optional<std::string> Application; + std::optional<TVersion> Version; std::vector<TCompatibilityRule> CanLoadFrom; std::vector<TCompatibilityRule> StoresReadableBy; + std::vector<TCompatibilityRule> CanConnectTo; NKikimrConfig::TCurrentCompatibilityInfo ToPB() { NKikimrConfig::TCurrentCompatibilityInfo res; - Y_VERIFY(Build); - res.SetBuild(Build->data()); - if (YdbVersion) { - res.MutableYdbVersion()->CopyFrom(YdbVersion->ToPB()); + Y_VERIFY(Application); + res.SetApplication(Application->data()); + if (Version) { + res.MutableVersion()->CopyFrom(Version->ToPB()); } for (auto canLoadFrom : CanLoadFrom) { @@ -87,23 +91,26 @@ public: for (auto storesReadableBy : StoresReadableBy) { res.AddStoresReadableBy()->CopyFrom(storesReadableBy.ToPB()); } + for (auto canConnectTo : CanConnectTo) { + res.AddCanConnectTo()->CopyFrom(canConnectTo.ToPB()); + } return res; } }; struct TStoredCompatibilityInfo { - std::optional<std::string> Build; - std::optional<TYdbVersion> YdbVersion; + std::optional<std::string> Application; + std::optional<TVersion> Version; std::vector<TCompatibilityRule> ReadableBy; NKikimrConfig::TStoredCompatibilityInfo ToPB() { NKikimrConfig::TStoredCompatibilityInfo res; - Y_VERIFY(Build); + Y_VERIFY(Application); - res.SetBuild(Build->data()); - if (YdbVersion) { - res.MutableYdbVersion()->CopyFrom(YdbVersion->ToPB()); + res.SetApplication(Application->data()); + if (Version) { + res.MutableVersion()->CopyFrom(Version->ToPB()); } for (auto readableBy : ReadableBy) { @@ -116,36 +123,45 @@ public: }; public: - TCompatibilityInfo() = delete; - static const NKikimrConfig::TCurrentCompatibilityInfo* GetCurrent(); - static const NKikimrConfig::TStoredCompatibilityInfo* GetUnknown(); + TCompatibilityInfo(); - static NKikimrConfig::TStoredCompatibilityInfo MakeStored(NKikimrConfig::TCompatibilityRule::EComponentId componentId); + const NKikimrConfig::TCurrentCompatibilityInfo* GetCurrent() const; + const NKikimrConfig::TStoredCompatibilityInfo* GetDefault(TComponentId componentId) const; // pass nullptr if stored CompatibilityInfo is absent - static bool CheckCompatibility(const NKikimrConfig::TStoredCompatibilityInfo* stored, - ui32 componentId, TString& errorReason); - static bool CheckCompatibility(const NKikimrConfig::TCurrentCompatibilityInfo* current, - const NKikimrConfig::TStoredCompatibilityInfo* stored, ui32 componentId, TString& errorReason); + bool CheckCompatibility(const NKikimrConfig::TStoredCompatibilityInfo* stored, + TComponentId componentId, TString& errorReason) const; + bool CheckCompatibility(const NKikimrConfig::TCurrentCompatibilityInfo* current, + const NKikimrConfig::TStoredCompatibilityInfo* stored, TComponentId componentId, + TString& errorReason) const; - static bool CheckCompatibility(const TOldFormat& stored, ui32 componentId, TString& errorReason); - static bool CheckCompatibility(const NKikimrConfig::TCurrentCompatibilityInfo* current, - const TOldFormat& stored, ui32 componentId, TString& errorReason); + bool CheckCompatibility(const TOldFormat& stored, TComponentId componentId, TString& errorReason) const; + bool CheckCompatibility(const NKikimrConfig::TCurrentCompatibilityInfo* current, + const TOldFormat& stored, TComponentId componentId, TString& errorReason) const; - static bool CompleteFromTag(NKikimrConfig::TCurrentCompatibilityInfo& current); + bool CompleteFromTag(NKikimrConfig::TCurrentCompatibilityInfo& current); - static NKikimrConfig::TStoredCompatibilityInfo MakeStored(ui32 componentId, - const NKikimrConfig::TCurrentCompatibilityInfo* current); + NKikimrConfig::TStoredCompatibilityInfo MakeStored(TComponentId componentId) const; + NKikimrConfig::TStoredCompatibilityInfo MakeStored(TComponentId componentId, + const NKikimrConfig::TCurrentCompatibilityInfo* current) const; private: - static TSpinLock LockCurrent; - static std::optional<NKikimrConfig::TCurrentCompatibilityInfo> CompatibilityInfo; - static std::optional<NKikimrConfig::TStoredCompatibilityInfo> UnknownYdbRelease; + NKikimrConfig::TCurrentCompatibilityInfo CurrentCompatibilityInfo; + + // Last stable YDB release, which doesn't include version control change + // When the compatibility information is not present in component's data, + // we assume component's version to be this version + using TDefaultCompatibilityInfo = std::array<std::optional<NKikimrConfig::TStoredCompatibilityInfo>, + NKikimrConfig::TCompatibilityRule::ComponentsCount>; + TDefaultCompatibilityInfo DefaultCompatibilityInfo; // functions that modify compatibility information are only accessible from friend classes - static void Reset(NKikimrConfig::TCurrentCompatibilityInfo* newCurrent); + // Reset() is not thread-safe! + void Reset(NKikimrConfig::TCurrentCompatibilityInfo* newCurrent); }; +extern TCompatibilityInfo CompatibilityInfo; + // obsolete version control // TODO: remove in the next major release extern TMaybe<NActors::TInterconnectProxyCommon::TVersionInfo> VERSION; diff --git a/ydb/core/formats/arrow/arrow_batch_builder.cpp b/ydb/core/formats/arrow/arrow_batch_builder.cpp index be0040edb2..b0fd2f0b91 100644 --- a/ydb/core/formats/arrow/arrow_batch_builder.cpp +++ b/ydb/core/formats/arrow/arrow_batch_builder.cpp @@ -185,8 +185,9 @@ bool TRecordBatchReader::DeserializeFromStrings(const TString& schemaString, con return true; } -TArrowBatchBuilder::TArrowBatchBuilder(arrow::Compression::type codec) +TArrowBatchBuilder::TArrowBatchBuilder(arrow::Compression::type codec, const std::set<std::string>& notNullColumns) : WriteOptions(arrow::ipc::IpcWriteOptions::Defaults()) + , NotNullColumns(notNullColumns) { Y_VERIFY(arrow::util::Codec::IsAvailable(codec)); auto resCodec = arrow::util::Codec::Create(codec); @@ -198,7 +199,7 @@ TArrowBatchBuilder::TArrowBatchBuilder(arrow::Compression::type codec) bool TArrowBatchBuilder::Start(const std::vector<std::pair<TString, NScheme::TTypeInfo>>& ydbColumns) { YdbSchema = ydbColumns; - auto schema = MakeArrowSchema(ydbColumns); + auto schema = MakeArrowSchema(ydbColumns, NotNullColumns); auto status = arrow::RecordBatchBuilder::Make(schema, arrow::default_memory_pool(), RowsToReserve, &BatchBuilder); NumRows = NumBytes = 0; return status.ok(); diff --git a/ydb/core/formats/arrow/arrow_batch_builder.h b/ydb/core/formats/arrow/arrow_batch_builder.h index 90bded2d72..8670370145 100644 --- a/ydb/core/formats/arrow/arrow_batch_builder.h +++ b/ydb/core/formats/arrow/arrow_batch_builder.h @@ -148,7 +148,7 @@ public: /// @note compression is disabled by default KIKIMR-11690 // Allowed codecs: UNCOMPRESSED, LZ4_FRAME, ZSTD - TArrowBatchBuilder(arrow::Compression::type codec = arrow::Compression::UNCOMPRESSED); + TArrowBatchBuilder(arrow::Compression::type codec = arrow::Compression::UNCOMPRESSED, const std::set<std::string>& notNullColumns = {}); ~TArrowBatchBuilder() = default; bool Start(const std::vector<std::pair<TString, NScheme::TTypeInfo>>& columns, @@ -191,6 +191,7 @@ private: std::unique_ptr<arrow::RecordBatchBuilder> BatchBuilder; std::shared_ptr<arrow::RecordBatch> Batch; size_t RowsToReserve{DEFAULT_ROWS_TO_RESERVE}; + const std::set<std::string> NotNullColumns; protected: size_t NumRows{0}; @@ -198,7 +199,7 @@ protected: private: std::unique_ptr<IBlockBuilder> Clone() const override { - return std::make_unique<TArrowBatchBuilder>(); + return std::make_unique<TArrowBatchBuilder>(WriteOptions.codec->compression_type(), NotNullColumns); } }; diff --git a/ydb/core/formats/arrow/arrow_helpers.cpp b/ydb/core/formats/arrow/arrow_helpers.cpp index b9512531d9..8769474737 100644 --- a/ydb/core/formats/arrow/arrow_helpers.cpp +++ b/ydb/core/formats/arrow/arrow_helpers.cpp @@ -74,18 +74,18 @@ std::shared_ptr<arrow::DataType> GetCSVArrowType(NScheme::TTypeInfo typeId) { } } -std::vector<std::shared_ptr<arrow::Field>> MakeArrowFields(const std::vector<std::pair<TString, NScheme::TTypeInfo>>& columns) { +std::vector<std::shared_ptr<arrow::Field>> MakeArrowFields(const std::vector<std::pair<TString, NScheme::TTypeInfo>>& columns, const std::set<std::string>& notNullColumns) { std::vector<std::shared_ptr<arrow::Field>> fields; fields.reserve(columns.size()); for (auto& [name, ydbType] : columns) { std::string colName(name.data(), name.size()); - fields.emplace_back(std::make_shared<arrow::Field>(colName, GetArrowType(ydbType))); + fields.emplace_back(std::make_shared<arrow::Field>(colName, GetArrowType(ydbType), !notNullColumns.contains(colName))); } return fields; } -std::shared_ptr<arrow::Schema> MakeArrowSchema(const std::vector<std::pair<TString, NScheme::TTypeInfo>>& ydbColumns) { - return std::make_shared<arrow::Schema>(MakeArrowFields(ydbColumns)); +std::shared_ptr<arrow::Schema> MakeArrowSchema(const std::vector<std::pair<TString, NScheme::TTypeInfo>>& ydbColumns, const std::set<std::string>& notNullColumns) { + return std::make_shared<arrow::Schema>(MakeArrowFields(ydbColumns, notNullColumns)); } TString SerializeSchema(const arrow::Schema& schema) { @@ -177,6 +177,14 @@ std::shared_ptr<arrow::RecordBatch> ExtractColumns(const std::shared_ptr<arrow:: } else { return nullptr; } + } else { + auto srcField = srcBatch->schema()->GetFieldByName(field->name()); + Y_VERIFY(srcField); + if (!field->Equals(srcField)) { + AFL_ERROR(NKikimrServices::ARROW_HELPER)("event", "cannot_parse_incoming_batch")("reason", "invalid_column_type")("column", field->name()) + ("column_type", field->ToString(true))("incoming_type", srcField->ToString(true)); + return nullptr; + } } Y_VERIFY(columns.back()); diff --git a/ydb/core/formats/arrow/arrow_helpers.h b/ydb/core/formats/arrow/arrow_helpers.h index 26a2a93b4c..3dda961cd4 100644 --- a/ydb/core/formats/arrow/arrow_helpers.h +++ b/ydb/core/formats/arrow/arrow_helpers.h @@ -47,8 +47,8 @@ inline bool ArrayEqualView(const std::shared_ptr<arrow::Array>& x, const std::sh struct TSortDescription; -std::vector<std::shared_ptr<arrow::Field>> MakeArrowFields(const std::vector<std::pair<TString, NScheme::TTypeInfo>>& columns); -std::shared_ptr<arrow::Schema> MakeArrowSchema(const std::vector<std::pair<TString, NScheme::TTypeInfo>>& columns); +std::vector<std::shared_ptr<arrow::Field>> MakeArrowFields(const std::vector<std::pair<TString, NScheme::TTypeInfo>>& columns, const std::set<std::string>& notNullColumns = {}); +std::shared_ptr<arrow::Schema> MakeArrowSchema(const std::vector<std::pair<TString, NScheme::TTypeInfo>>& columns, const std::set<std::string>& notNullColumns = {}); TString SerializeSchema(const arrow::Schema& schema); std::shared_ptr<arrow::Schema> DeserializeSchema(const TString& str); diff --git a/ydb/core/formats/arrow/converter.cpp b/ydb/core/formats/arrow/converter.cpp index d54053fb33..ecebe48865 100644 --- a/ydb/core/formats/arrow/converter.cpp +++ b/ydb/core/formats/arrow/converter.cpp @@ -167,11 +167,12 @@ std::shared_ptr<arrow::RecordBatch> InplaceConvertColumns(const std::shared_ptr< for (i32 i = 0; i < batch->num_columns(); ++i) { auto& colName = batch->column_name(i); + auto origType = batch->schema()->GetFieldByName(colName); auto it = columnsToConvert.find(TString(colName.data(), colName.size())); if (it != columnsToConvert.end()) { columns[i] = InplaceConvertColumn(columns[i], it->second); } - fields.push_back(std::make_shared<arrow::Field>(colName, columns[i]->type())); + fields.push_back(std::make_shared<arrow::Field>(colName, columns[i]->type(), origType->nullable())); } auto resultSchemaFixed = std::make_shared<arrow::Schema>(std::move(fields)); auto convertedBatch = arrow::RecordBatch::Make(resultSchemaFixed, batch->num_rows(), std::move(columns)); @@ -273,7 +274,6 @@ bool TArrowToYdbConverter::Process(const arrow::RecordBatch& batch, TString& err } if (NeedDataConversion(colType)) { - memPool.Clear(); for (i32 i = 0; i < unroll; ++i) { if (!ConvertData(cells[i][col], colType, memPool, errorMessage)) { return false; @@ -287,6 +287,7 @@ bool TArrowToYdbConverter::Process(const arrow::RecordBatch& batch, TString& err for (i32 i = 0; i < unroll; ++i) { RowWriter_.AddRow(cells[i]); } + memPool.Clear(); } cells.resize(1); #else diff --git a/ydb/core/grpc_services/CMakeLists.darwin-x86_64.txt b/ydb/core/grpc_services/CMakeLists.darwin-x86_64.txt index cc90ccc9d3..ed4da7a640 100644 --- a/ydb/core/grpc_services/CMakeLists.darwin-x86_64.txt +++ b/ydb/core/grpc_services/CMakeLists.darwin-x86_64.txt @@ -24,6 +24,7 @@ target_link_libraries(ydb-core-grpc_services PUBLIC library-cpp-cgiparam cpp-digest-old_crc ydb-core-actorlib_impl + ydb-core-audit ydb-core-base ydb-core-control ydb-core-discovery @@ -67,6 +68,7 @@ target_link_libraries(ydb-core-grpc_services PUBLIC ) target_sources(ydb-core-grpc_services PRIVATE ${CMAKE_SOURCE_DIR}/ydb/core/grpc_services/audit_log.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/grpc_services/audit_dml_operations.cpp ${CMAKE_SOURCE_DIR}/ydb/core/grpc_services/grpc_endpoint_publish_actor.cpp ${CMAKE_SOURCE_DIR}/ydb/core/grpc_services/grpc_helper.cpp ${CMAKE_SOURCE_DIR}/ydb/core/grpc_services/grpc_mon.cpp diff --git a/ydb/core/grpc_services/CMakeLists.linux-aarch64.txt b/ydb/core/grpc_services/CMakeLists.linux-aarch64.txt index 7f6a2f1461..49f15a993a 100644 --- a/ydb/core/grpc_services/CMakeLists.linux-aarch64.txt +++ b/ydb/core/grpc_services/CMakeLists.linux-aarch64.txt @@ -25,6 +25,7 @@ target_link_libraries(ydb-core-grpc_services PUBLIC library-cpp-cgiparam cpp-digest-old_crc ydb-core-actorlib_impl + ydb-core-audit ydb-core-base ydb-core-control ydb-core-discovery @@ -68,6 +69,7 @@ target_link_libraries(ydb-core-grpc_services PUBLIC ) target_sources(ydb-core-grpc_services PRIVATE ${CMAKE_SOURCE_DIR}/ydb/core/grpc_services/audit_log.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/grpc_services/audit_dml_operations.cpp ${CMAKE_SOURCE_DIR}/ydb/core/grpc_services/grpc_endpoint_publish_actor.cpp ${CMAKE_SOURCE_DIR}/ydb/core/grpc_services/grpc_helper.cpp ${CMAKE_SOURCE_DIR}/ydb/core/grpc_services/grpc_mon.cpp diff --git a/ydb/core/grpc_services/CMakeLists.linux-x86_64.txt b/ydb/core/grpc_services/CMakeLists.linux-x86_64.txt index 7f6a2f1461..49f15a993a 100644 --- a/ydb/core/grpc_services/CMakeLists.linux-x86_64.txt +++ b/ydb/core/grpc_services/CMakeLists.linux-x86_64.txt @@ -25,6 +25,7 @@ target_link_libraries(ydb-core-grpc_services PUBLIC library-cpp-cgiparam cpp-digest-old_crc ydb-core-actorlib_impl + ydb-core-audit ydb-core-base ydb-core-control ydb-core-discovery @@ -68,6 +69,7 @@ target_link_libraries(ydb-core-grpc_services PUBLIC ) target_sources(ydb-core-grpc_services PRIVATE ${CMAKE_SOURCE_DIR}/ydb/core/grpc_services/audit_log.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/grpc_services/audit_dml_operations.cpp ${CMAKE_SOURCE_DIR}/ydb/core/grpc_services/grpc_endpoint_publish_actor.cpp ${CMAKE_SOURCE_DIR}/ydb/core/grpc_services/grpc_helper.cpp ${CMAKE_SOURCE_DIR}/ydb/core/grpc_services/grpc_mon.cpp diff --git a/ydb/core/grpc_services/CMakeLists.windows-x86_64.txt b/ydb/core/grpc_services/CMakeLists.windows-x86_64.txt index cc90ccc9d3..ed4da7a640 100644 --- a/ydb/core/grpc_services/CMakeLists.windows-x86_64.txt +++ b/ydb/core/grpc_services/CMakeLists.windows-x86_64.txt @@ -24,6 +24,7 @@ target_link_libraries(ydb-core-grpc_services PUBLIC library-cpp-cgiparam cpp-digest-old_crc ydb-core-actorlib_impl + ydb-core-audit ydb-core-base ydb-core-control ydb-core-discovery @@ -67,6 +68,7 @@ target_link_libraries(ydb-core-grpc_services PUBLIC ) target_sources(ydb-core-grpc_services PRIVATE ${CMAKE_SOURCE_DIR}/ydb/core/grpc_services/audit_log.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/grpc_services/audit_dml_operations.cpp ${CMAKE_SOURCE_DIR}/ydb/core/grpc_services/grpc_endpoint_publish_actor.cpp ${CMAKE_SOURCE_DIR}/ydb/core/grpc_services/grpc_helper.cpp ${CMAKE_SOURCE_DIR}/ydb/core/grpc_services/grpc_mon.cpp diff --git a/ydb/core/grpc_services/audit_dml_operations.cpp b/ydb/core/grpc_services/audit_dml_operations.cpp new file mode 100644 index 0000000000..76fe9b97de --- /dev/null +++ b/ydb/core/grpc_services/audit_dml_operations.cpp @@ -0,0 +1,168 @@ +#include <ydb/public/api/protos/ydb_table.pb.h> +#include <ydb/public/api/protos/ydb_scripting.pb.h> +#include <ydb/public/api/protos/ydb_query.pb.h> + +#include "base/base.h" + +#include "audit_dml_operations.h" + +namespace { + // Query text could be very large, multilined and formatted with indentations. + // It should be prepared and somewhat limited before getting dumped into the logs. + const size_t MAX_QUERY_TEXT_LEN = 1024; + + TString PrepareText(const TString& original) { + TString text = original; + { // transform multiline indented text into a single line + SubstGlobal(text, '\n', ' '); + SubstGlobal(text, '\r', ' '); + while (SubstGlobal(text, " ", " ") > 0) {} + } + return CollapseInPlace(StripInPlace(text), MAX_QUERY_TEXT_LEN); + } + + template <class TxControl> + void AddAuditLogTxControlPart(NKikimr::NGRpcService::IRequestCtx* ctx, const TxControl& tx_control) + { + switch (tx_control.tx_selector_case()) { + case TxControl::kTxId: + ctx->AddAuditLogPart("tx_id", tx_control.tx_id()); + break; + case TxControl::kBeginTx: + ctx->AddAuditLogPart("begin_tx", "1"); + break; + case TxControl::TX_SELECTOR_NOT_SET: + break; + } + ctx->AddAuditLogPart("commit_tx", ToString(tx_control.commit_tx())); + } +} + +namespace NKikimr::NGRpcService { + +void AuditContextStart(IRequestCtxBase* ctx, const TString& database, const TString& userSID) { + ctx->AddAuditLogPart("remote_address", ctx->GetPeerName()); + ctx->AddAuditLogPart("subject", userSID); + ctx->AddAuditLogPart("database", database); + ctx->AddAuditLogPart("operation", ctx->GetRequestName()); + ctx->AddAuditLogPart("start_time", TInstant::Now().ToString()); +} + +void AuditContextEnd(IRequestCtxBase* ctx) { + ctx->AddAuditLogPart("end_time", TInstant::Now().ToString()); +} + +// ExecuteDataQuery +// +template <> +void AuditContextAppend(IRequestCtx* ctx, const Ydb::Table::ExecuteDataQueryRequest& request) { + // query_text or prepared_query_id + { + auto query = request.query(); + if (query.has_yql_text()) { + ctx->AddAuditLogPart("query_text", PrepareText(query.yql_text())); + } else if (query.has_id()) { + ctx->AddAuditLogPart("prepared_query_id", query.id()); + } + } + // tx_id, explicit + // begin_tx, commit_tx flags + AddAuditLogTxControlPart(ctx, request.tx_control()); +} +template <> +void AuditContextAppend(IRequestCtx* ctx, const Ydb::Table::ExecuteDataQueryRequest& request, const Ydb::Table::ExecuteQueryResult& result) { + // tx_id, autocreated + if (request.tx_control().tx_selector_case() == Ydb::Table::TransactionControl::kBeginTx) { + ctx->AddAuditLogPart("tx_id", result.tx_meta().id()); + } + // log updated_row_count collected from ExecuteQueryResult.query_stats? +} + +// PrepareDataQuery +// +template <> +void AuditContextAppend(IRequestCtx* ctx, const Ydb::Table::PrepareDataQueryRequest& request) { + ctx->AddAuditLogPart("query_text", PrepareText(request.yql_text())); +} +template <> +void AuditContextAppend(IRequestCtx* ctx, const Ydb::Table::PrepareDataQueryRequest& request, const Ydb::Table::PrepareQueryResult& result) { + Y_UNUSED(request); + ctx->AddAuditLogPart("prepared_query_id", result.query_id()); +} + +// BeginTransaction +// +template <> +void AuditContextAppend(IRequestCtx* ctx, const Ydb::Table::BeginTransactionRequest& request, const Ydb::Table::BeginTransactionResult& result) { + Y_UNUSED(request); + ctx->AddAuditLogPart("tx_id", result.tx_meta().id()); +} + +// CommitTransaction +// +template <> +void AuditContextAppend(IRequestCtx* ctx, const Ydb::Table::CommitTransactionRequest& request) { + ctx->AddAuditLogPart("tx_id", request.tx_id()); +} +// log updated_row_count collected from CommitTransactionResult.query_stats? + +// RollbackTransaction +// +template <> +void AuditContextAppend(IRequestCtx* ctx, const Ydb::Table::RollbackTransactionRequest& request) { + ctx->AddAuditLogPart("tx_id", request.tx_id()); +} + +// BulkUpsert +// +template <> +void AuditContextAppend(IRequestCtx* ctx, const Ydb::Table::BulkUpsertRequest& request) { + ctx->AddAuditLogPart("table", request.table()); + //NOTE: no type checking for the rows field (should be a list) -- + // -- there is no point in being more thorough than the actual implementation, + // see rpc_load_rows.cpp + ctx->AddAuditLogPart("row_count", ToString(request.rows().value().items_size())); +} + +// ExecuteYqlScript, StreamExecuteYqlScript +// +template <> +void AuditContextAppend(IRequestCtx* ctx, const Ydb::Scripting::ExecuteYqlRequest& request) { + ctx->AddAuditLogPart("query_text", PrepareText(request.script())); +} +// log updated_row_count collected from ExecuteYqlResult.query_stats? + +// ExecuteQuery +// +template <> +void AuditContextAppend(IRequestCtx* ctx, const Ydb::Query::ExecuteQueryRequest& request) { + if (request.exec_mode() != Ydb::Query::EXEC_MODE_EXECUTE) { + return; + } + // query_text + { + switch(request.query_case()) { + case Ydb::Query::ExecuteQueryRequest::kQueryContent: + ctx->AddAuditLogPart("query_text", PrepareText(request.query_content().text())); + break; + case Ydb::Query::ExecuteQueryRequest::QUERY_NOT_SET: + break; + } + } + // tx_id + // begin_tx, commit_tx flags + AddAuditLogTxControlPart(ctx, request.tx_control()); +} +// log updated_row_count collected from ExecuteQueryResponsePart.exec_stats? + +// ExecuteSrcipt +template <> +void AuditContextAppend(IRequestCtx* ctx, const Ydb::Query::ExecuteScriptRequest& request) { + if (request.exec_mode() != Ydb::Query::EXEC_MODE_EXECUTE) { + return; + } + ctx->AddAuditLogPart("query_text", PrepareText(request.script_content().text())); +} +// log updated_row_count collected from ExecuteScriptMetadata.exec_stats? + +} // namespace NKikimr::NGRpcService
\ No newline at end of file diff --git a/ydb/core/grpc_services/audit_dml_operations.h b/ydb/core/grpc_services/audit_dml_operations.h new file mode 100644 index 0000000000..875623e877 --- /dev/null +++ b/ydb/core/grpc_services/audit_dml_operations.h @@ -0,0 +1,84 @@ +#pragma once +#include "defs.h" + +namespace Ydb::Table { + +class ExecuteDataQueryRequest; +class ExecuteQueryResult; +class PrepareDataQueryRequest; +class PrepareQueryResult; +class BeginTransactionRequest; +class BeginTransactionResult; +class CommitTransactionRequest; +class RollbackTransactionRequest; +class BulkUpsertRequest; + +} + +namespace Ydb::Scripting { + +class ExecuteYqlRequest; + +} + +namespace Ydb::Query { + +class ExecuteQueryRequest; +class ExecuteScriptRequest; + +} + +namespace NKikimr::NGRpcService { + +class IRequestCtxBase; +class IRequestCtx; + +// RPC requests audit info collection methods. +// +// AuditContext{Start,Append,End}() methods store collected data into request context objects. +// AuditContextAppend() specializations extract specific info from request (and result) protos. +// + +void AuditContextStart(IRequestCtxBase* ctx, const TString& database, const TString& userSID); +void AuditContextEnd(IRequestCtxBase* ctx); + +template <class TProtoRequest> +void AuditContextAppend(IRequestCtx* /*ctx*/, const TProtoRequest& /*request*/) { + // do nothing by default +} + +template <class TProtoRequest, class TProtoResult> +void AuditContextAppend(IRequestCtx* /*ctx*/, const TProtoRequest& /*request*/, const TProtoResult& /*result*/) { + // do nothing by default +} + +// ExecuteDataQuery +template <> void AuditContextAppend(IRequestCtx* ctx, const Ydb::Table::ExecuteDataQueryRequest& request); +template <> void AuditContextAppend(IRequestCtx* ctx, const Ydb::Table::ExecuteDataQueryRequest& request, const Ydb::Table::ExecuteQueryResult& result); + +// PrepareDataQuery +template <> void AuditContextAppend(IRequestCtx* ctx, const Ydb::Table::PrepareDataQueryRequest& request); +template <> void AuditContextAppend(IRequestCtx* ctx, const Ydb::Table::PrepareDataQueryRequest& request, const Ydb::Table::PrepareQueryResult& result); + +// BeginTransaction +template <> void AuditContextAppend(IRequestCtx* ctx, const Ydb::Table::BeginTransactionRequest& request, const Ydb::Table::BeginTransactionResult& result); + +// CommitTransaction +template <> void AuditContextAppend(IRequestCtx* ctx, const Ydb::Table::CommitTransactionRequest& request); + +// RollbackTransaction +template <> void AuditContextAppend(IRequestCtx* ctx, const Ydb::Table::RollbackTransactionRequest& request); + +// BulkUpsert +template <> void AuditContextAppend(IRequestCtx* ctx, const Ydb::Table::BulkUpsertRequest& request); + +// ExecuteYqlScript, StreamExecuteYqlScript +template <> void AuditContextAppend(IRequestCtx* ctx, const Ydb::Scripting::ExecuteYqlRequest& request); + +// ExecuteQuery +template <> void AuditContextAppend(IRequestCtx* ctx, const Ydb::Query::ExecuteQueryRequest& request); + +// ExecuteSrcipt +template <> void AuditContextAppend(IRequestCtx* ctx, const Ydb::Query::ExecuteScriptRequest& request); + +} // namespace NKikimr::NGRpcService diff --git a/ydb/core/grpc_services/audit_log.cpp b/ydb/core/grpc_services/audit_log.cpp index 8d353d0517..9b652666ed 100644 --- a/ydb/core/grpc_services/audit_log.cpp +++ b/ydb/core/grpc_services/audit_log.cpp @@ -1,19 +1,56 @@ #include "defs.h" -#include "audit_log.h" + +#include <ydb/core/audit/audit_log.h> #include "base/base.h" +#include "audit_log.h" namespace NKikimr { namespace NGRpcService { -void AuditLog(const IRequestProxyCtx* reqCtx, const TString& database, - const TString& subject, const TActorContext& ctx) +void AuditLogConn(const IRequestProxyCtx* ctx, const TString& database, const TString& userSID) { - LOG_NOTICE_S(ctx, NKikimrServices::GRPC_SERVER, "AUDIT: " - << "request name: " << reqCtx->GetRequestName() + static const TString GrpcConnComponentName = "grpc-conn"; + + AUDIT_LOG( + AUDIT_PART("component", GrpcConnComponentName) + + AUDIT_PART("remote_address", ctx->GetPeerName()) + AUDIT_PART("subject", userSID) + AUDIT_PART("database", database) + AUDIT_PART("operation", ctx->GetRequestName()) + ); + + // and transitional, to be removed, output to the common log + LOG_NOTICE_S(TlsActivationContext->AsActorContext(), NKikimrServices::GRPC_SERVER, "AUDIT: " + << "request name: " << ctx->GetRequestName() << ", database: " << database - << ", peer: " << reqCtx->GetPeerName() - << ", subject: " << subject); + << ", peer: " << ctx->GetPeerName() + << ", subject: " << (userSID ? userSID : "no subject") + ); +} + +void AuditLog(ui32 status, const TAuditLogParts& parts) +{ + static const TString GrpcProxyComponentName = "grpc-proxy"; + + //NOTE: EmptyValue couldn't be an empty string as AUDIT_PART() skips parts with an empty values + static const TString EmptyValue = "{none}"; + + AUDIT_LOG( + AUDIT_PART("component", GrpcProxyComponentName) + + // all parts are considered as required, so all empty values gets replaced with a special stub + for (const auto& [name, value] : parts) { + AUDIT_PART(name, (!value.empty() ? value : EmptyValue)) + } + + AUDIT_PART("status", (status == Ydb::StatusIds::SUCCESS ? TString("SUCCESS") : TString("ERROR"))) + AUDIT_PART("detailed_status", (Ydb::StatusIds::StatusCode_IsValid(status) + ? TString(Ydb::StatusIds::StatusCode_Name(status)) + : ToString(status) + )) + ); } } diff --git a/ydb/core/grpc_services/audit_log.h b/ydb/core/grpc_services/audit_log.h index 47742db4ee..b97725c707 100644 --- a/ydb/core/grpc_services/audit_log.h +++ b/ydb/core/grpc_services/audit_log.h @@ -1,12 +1,19 @@ #pragma once +#include "defs.h" namespace NKikimr { namespace NGRpcService { class IRequestProxyCtx; +class IRequestCtxMtSafe; -void AuditLog(const IRequestProxyCtx* reqCtx, const TString& database, - const TString& subject, const TActorContext& ctx); +// grpc "connections" log +void AuditLogConn(const IRequestProxyCtx* reqCtx, const TString& database, const TString& userSID); + +using TAuditLogParts = TVector<std::pair<TString, TString>>; + +// grpc "operations" log +void AuditLog(ui32 status, const TAuditLogParts& parts); } } diff --git a/ydb/core/grpc_services/base/base.h b/ydb/core/grpc_services/base/base.h index c98f212298..4ed03d2dfe 100644 --- a/ydb/core/grpc_services/base/base.h +++ b/ydb/core/grpc_services/base/base.h @@ -274,6 +274,9 @@ public: virtual const TString& GetRequestName() const = 0; virtual void SetDiskQuotaExceeded(bool disk) = 0; virtual bool GetDiskQuotaExceeded() const = 0; + + virtual void AddAuditLogPart(const TStringBuf& name, const TString& value) = 0; + virtual const TAuditLogParts& GetAuditLogParts() const = 0; }; class TRespHookCtx : public TThrRefBase { @@ -323,6 +326,11 @@ enum class TRateLimiterMode : ui8 { #define RLSWITCH(mode) \ IsRlAllowed() ? mode : TRateLimiterMode::Off +enum class TAuditMode : bool { + Off = false, + Auditable = true, +}; + class ICheckerIface; // The way to pass some common data to request processing @@ -336,6 +344,7 @@ public: struct TRequestAuxSettings { TRateLimiterMode RlMode = TRateLimiterMode::Off; void (*CustomAttributeProcessor)(const TSchemeBoardEvents::TDescribeSchemeResult& schemeData, ICheckerIface*) = nullptr; + TAuditMode AuditMode = TAuditMode::Off; }; // grpc_request_proxy part @@ -374,6 +383,12 @@ public: // Pass request for next processing virtual void Pass(const IFacilityProvider& facility) = 0; + + // audit + virtual bool IsAuditable() const { + return false; + } + virtual void SetAuditLogHook(TAuditLogHook&& hook) = 0; }; // Request context @@ -392,11 +407,14 @@ public: virtual void SetCostInfo(float consumed_units) = 0; virtual void SetStreamingNotify(NGrpc::IRequestContextBase::TOnNextReply&& cb) = 0; - virtual void FinishStream() = 0; + virtual void FinishStream(ui32 status) = 0; virtual void SendSerializedResult(TString&& in, Ydb::StatusIds::StatusCode status) = 0; virtual void Reply(NProtoBuf::Message* resp, ui32 status = 0) = 0; + +protected: + virtual void FinishRequest() = 0; }; class IRequestOpCtx : public IRequestCtx { @@ -605,6 +623,19 @@ public: Y_FAIL("unimplemented"); } + void SetAuditLogHook(TAuditLogHook&&) override { + Y_FAIL("unimplemented for TRefreshTokenImpl"); + } + + // IRequestCtxBase + // + void AddAuditLogPart(const TStringBuf&, const TString&) override { + Y_FAIL("unimplemented for TRefreshTokenImpl"); + } + const TAuditLogParts& GetAuditLogParts() const override { + Y_FAIL("unimplemented for TRefreshTokenImpl"); + } + private: const TString Token_; const TString Database_; @@ -830,6 +861,19 @@ public: Y_FAIL("unimplemented"); } + void SetAuditLogHook(TAuditLogHook&&) override { + Y_FAIL("unimplemented for TGRpcRequestBiStreamWrapper"); + } + + // IRequestCtxBase + // + void AddAuditLogPart(const TStringBuf&, const TString&) override { + Y_FAIL("unimplemented for TGRpcRequestBiStreamWrapper"); + } + const TAuditLogParts& GetAuditLogParts() const override { + Y_FAIL("unimplemented for TGRpcRequestBiStreamWrapper"); + } + private: TIntrusivePtr<IStreamCtx> Ctx_; TIntrusiveConstPtr<NACLib::TUserToken> InternalToken_; @@ -843,17 +887,23 @@ private: template <typename TDerived> class TGrpcResponseSenderImpl : public IRequestOpCtx { public: + // IRequestOpCtx + // void SendOperation(const Ydb::Operations::Operation& operation) override { auto self = Derived(); + if (operation.ready()) { + self->FinishRequest(); + } auto resp = self->CreateResponseMessage(); resp->mutable_operation()->CopyFrom(operation); - self->Ctx_->Reply(resp, operation.status()); + self->Reply(resp, operation.status()); } void SendResult(Ydb::StatusIds::StatusCode status, const google::protobuf::RepeatedPtrField<TYdbIssueMessageType>& message) override { auto self = Derived(); + self->FinishRequest(); auto resp = self->CreateResponseMessage(); auto deferred = resp->mutable_operation(); deferred->set_ready(true); @@ -870,6 +920,7 @@ public: const google::protobuf::RepeatedPtrField<TYdbIssueMessageType>& message) override { auto self = Derived(); + self->FinishRequest(); auto resp = self->CreateResponseMessage(); auto deferred = resp->mutable_operation(); deferred->set_ready(true); @@ -885,6 +936,7 @@ public: void SendResult(const google::protobuf::Message& result, Ydb::StatusIds::StatusCode status) override { auto self = Derived(); + self->FinishRequest(); auto resp = self->CreateResponseMessage(); auto deferred = resp->mutable_operation(); deferred->set_ready(true); @@ -1047,12 +1099,14 @@ public: void ReplyUnavaliable() override { TResponse* resp = CreateResponseMessage(); TCommonResponseFiller<TResp, TDerived::IsOp>::Fill(*resp, IssueManager.GetIssues(), CostInfo, Ydb::StatusIds::UNAVAILABLE); + FinishRequest(); Reply(resp, Ydb::StatusIds::UNAVAILABLE); } void ReplyWithYdbStatus(Ydb::StatusIds::StatusCode status) override { TResponse* resp = CreateResponseMessage(); TCommonResponseFiller<TResponse, TDerived::IsOp>::Fill(*resp, IssueManager.GetIssues(), CostInfo, status); + FinishRequest(); Reply(resp, status); } @@ -1155,7 +1209,9 @@ public: return Ctx_->IsClientLost(); } - void FinishStream() override { + void FinishStream(ui32 status) override { + // End Of Request for streaming requests + AuditLogRequestEnd(status); Ctx_->FinishStreamingOk(); } @@ -1191,12 +1247,35 @@ public: Y_FAIL("unimplemented"); } + void SetAuditLogHook(TAuditLogHook&& hook) override { + AuditLogHook = std::move(hook); + } + + // IRequestCtx + // + void FinishRequest() override { + RequestFinished = true; + } + + // IRequestCtxBase + // + void AddAuditLogPart(const TStringBuf& name, const TString& value) override { + AuditLogParts.emplace_back(name, value); + } + const TAuditLogParts& GetAuditLogParts() const override { + return AuditLogParts; + } + void ReplyGrpcError(grpc::StatusCode code, const TString& msg, const TString& details = "") { Ctx_->ReplyError(code, msg, details); } private: void Reply(NProtoBuf::Message *resp, ui32 status) override { + // End Of Request for non streaming requests + if (RequestFinished) { + AuditLogRequestEnd(status); + } if (RespHook) { TRespHook hook = std::move(RespHook); return hook(MakeIntrusive<TRespHookCtx>(Ctx_, resp, GetRequestName(), Ru, status)); @@ -1204,6 +1283,15 @@ private: return Ctx_->Reply(resp, status); } + void AuditLogRequestEnd(ui32 status) { + if (AuditLogHook) { + AuditLogHook(status, GetAuditLogParts()); + // Drop hook to avoid double logging in case when operation implemention + // invokes both FinishRequest() (indirectly) and FinishStream() + AuditLogHook = nullptr; + } + } + TResponse* CreateResponseMessage() { return google::protobuf::Arena::CreateMessage<TResponse>(Ctx_->GetArena()); } @@ -1229,6 +1317,10 @@ private: TMaybe<NRpcService::TRlPath> RlPath; IGRpcProxyCounters::TPtr Counters; std::function<TFinishWrapper(std::function<void()>&&)> FinishWrapper = &GetStdFinishWrapper; + + TAuditLogParts AuditLogParts; + TAuditLogHook AuditLogHook; + bool RequestFinished = false; }; template <ui32 TRpcId, typename TReq, typename TResp, bool IsOperation, typename TDerived> @@ -1308,6 +1400,12 @@ public: } } + // IRequestCtxBaseMtSafe + // + bool IsAuditable() const override { + return (AuxSettings.AuditMode == TAuditMode::Auditable) && !this->IsInternalCall(); + } + private: std::function<void(std::unique_ptr<TRequestIface>, const IFacilityProvider&)> PassMethod; const TRequestAuxSettings AuxSettings; diff --git a/ydb/core/grpc_services/base/iface.h b/ydb/core/grpc_services/base/iface.h index bc0a2728d5..f24561d8a6 100644 --- a/ydb/core/grpc_services/base/iface.h +++ b/ydb/core/grpc_services/base/iface.h @@ -15,6 +15,9 @@ namespace NKikimr { namespace NGRpcService { +using TAuditLogParts = TVector<std::pair<TString, TString>>; +using TAuditLogHook = std::function<void (ui32 status, const TAuditLogParts&)>; + class IRequestCtxBaseMtSafe { public: virtual TMaybe<TString> GetTraceId() const = 0; diff --git a/ydb/core/grpc_services/grpc_request_check_actor.h b/ydb/core/grpc_services/grpc_request_check_actor.h index a589584584..9ede1a768d 100644 --- a/ydb/core/grpc_services/grpc_request_check_actor.h +++ b/ydb/core/grpc_services/grpc_request_check_actor.h @@ -1,6 +1,7 @@ #pragma once #include "defs.h" #include "audit_log.h" +#include "audit_dml_operations.h" #include "service_ratelimiter_events.h" #include "grpc_request_proxy_handle_methods.h" #include "local_rate_limiter.h" @@ -98,6 +99,7 @@ public: TBase::SetPeerName(peerName); InitializeAttributes(schemeData); TBase::SetDatabase(CheckedDatabaseName_); + InitializeAuditSettings(schemeData); } } @@ -124,7 +126,8 @@ public: } if (AppData(ctx)->FeatureFlags.GetEnableGrpcAudit()) { - AuditLog(GrpcRequestBaseCtx_, CheckedDatabaseName_, GetSubject(), ctx); + // log info about input connection (remote address, basically) + AuditLogConn(GrpcRequestBaseCtx_, CheckedDatabaseName_, TBase::GetUserSID()); } // Simple rps limitation @@ -235,11 +238,6 @@ public: } private: - TString GetSubject() const { - const auto sid = TBase::GetUserSID(); - return sid ? sid : "no subject"; - } - static NYql::TIssues GetRlIssues(const Ydb::RateLimiter::AcquireResourceResponse& resp) { NYql::TIssues opIssues; NYql::IssuesFromMessage(resp.operation().issues(), opIssues); @@ -349,6 +347,29 @@ private: } private: + void InitializeAuditSettings(const TSchemeBoardEvents::TDescribeSchemeResult& schemeData) { + const auto& auditSettings = schemeData.GetPathDescription().GetDomainDescription().GetAuditSettings(); + DmlAuditEnabled_ = auditSettings.GetEnableDmlAudit(); + DmlAuditExpectedSubjects_.insert(auditSettings.GetExpectedSubjects().begin(), auditSettings.GetExpectedSubjects().end()); + } + + bool IsAuditEnabledFor(const TString& userSID) const { + return DmlAuditEnabled_ && !DmlAuditExpectedSubjects_.contains(userSID); + }; + + void AuditRequest(IRequestProxyCtx* requestBaseCtx, const TString& databaseName, const TString& userSID) const { + const bool dmlAuditEnabled = requestBaseCtx->IsAuditable() && IsAuditEnabledFor(userSID); + + if (dmlAuditEnabled) { + AuditContextStart(requestBaseCtx, databaseName, userSID); + requestBaseCtx->SetAuditLogHook([requestBaseCtx](ui32 status, const TAuditLogParts& parts) { + AuditContextEnd(requestBaseCtx); + AuditLog(status, parts); + }); + } + } + +private: void ReplyUnauthorizedAndDie(const NYql::TIssue& issue) { GrpcRequestBaseCtx_->RaiseIssue(issue); GrpcRequestBaseCtx_->ReplyWithYdbStatus(Ydb::StatusIds::UNAUTHORIZED); @@ -387,6 +408,9 @@ private: } void HandleAndDie(TAutoPtr<TEventHandle<TEvProxyRuntimeEvent>>& event) { + // Request audit happen after successfull authorization + AuditRequest(GrpcRequestBaseCtx_, CheckedDatabaseName_, TBase::GetUserSID()); + event->Release().Release()->Pass(*this); TBase::PassAway(); } @@ -482,6 +506,8 @@ private: bool SkipCheckConnectRigths_ = false; std::vector<std::pair<TString, TString>> Attributes_; const IFacilityProvider* FacilityProvider_; + bool DmlAuditEnabled_; + std::unordered_set<TString> DmlAuditExpectedSubjects_; }; // default behavior - attributes in schema diff --git a/ydb/core/grpc_services/local_rpc/local_rpc.h b/ydb/core/grpc_services/local_rpc/local_rpc.h index b49e1a9414..f025c505b9 100644 --- a/ydb/core/grpc_services/local_rpc/local_rpc.h +++ b/ydb/core/grpc_services/local_rpc/local_rpc.h @@ -179,7 +179,7 @@ public: Y_FAIL("Unimplemented for local rpc"); } - void FinishStream() override { + void FinishStream(ui32) override { Y_FAIL("Unimplemented for local rpc"); } @@ -223,6 +223,17 @@ public: return InternalCall; } + // IRequestCtx + // + void FinishRequest() override {} + + // IRequestCtxBase + // + void AddAuditLogPart(const TStringBuf&, const TString&) override {} + const NGRpcService::TAuditLogParts& GetAuditLogParts() const override { + Y_FAIL("unimplemented for local rpc"); + } + private: void Reply(NProtoBuf::Message *r, ui32) override { TResp* resp = dynamic_cast<TResp*>(r); diff --git a/ydb/core/grpc_services/query/rpc_attach_session.cpp b/ydb/core/grpc_services/query/rpc_attach_session.cpp index 5ffcff1f86..13dff91cae 100644 --- a/ydb/core/grpc_services/query/rpc_attach_session.cpp +++ b/ydb/core/grpc_services/query/rpc_attach_session.cpp @@ -166,7 +166,7 @@ private: void ReplyFinishStream(Ydb::StatusIds::StatusCode status) { Request->ReplyWithYdbStatus(status); - Request->FinishStream(); + Request->FinishStream(status); this->PassAway(); } diff --git a/ydb/core/grpc_services/query/rpc_execute_query.cpp b/ydb/core/grpc_services/query/rpc_execute_query.cpp index d7fd800374..c0de2d5599 100644 --- a/ydb/core/grpc_services/query/rpc_execute_query.cpp +++ b/ydb/core/grpc_services/query/rpc_execute_query.cpp @@ -5,6 +5,7 @@ #include <ydb/library/ydb_issue/issue_helpers.h> #include <ydb/core/grpc_services/base/base.h> #include <ydb/core/grpc_services/rpc_kqp_base.h> +#include <ydb/core/grpc_services/audit_dml_operations.h> #include <ydb/core/kqp/executer_actor/kqp_executer.h> #include <ydb/public/api/protos/ydb_query.pb.h> @@ -242,10 +243,16 @@ private: } } + AuditContextAppend(Request_.get(), *req); + auto queryType = req->concurrent_result_sets() ? NKikimrKqp::QUERY_TYPE_SQL_GENERIC_CONCURRENT_QUERY : NKikimrKqp::QUERY_TYPE_SQL_GENERIC_QUERY; + + auto cachePolicy = google::protobuf::Arena::CreateMessage<Ydb::Table::QueryCachePolicy>(Request_->GetArena()); + cachePolicy->set_keep_in_cache(true); + auto ev = MakeHolder<NKqp::TEvKqp::TEvQueryRequest>( queryAction, queryType, @@ -257,7 +264,7 @@ private: txControl, &req->parameters(), GetCollectStatsMode(req->stats_mode()), - nullptr, // queryCachePolicy + cachePolicy, nullptr, // operationParams false, // keepSession false, // useCancelAfter @@ -357,6 +364,8 @@ private: auto& kqpResponse = record.GetResponse(); FillQueryStats(*response.mutable_exec_stats(), kqpResponse); + AuditContextAppend(Request_.get(), *Request_->GetProtoRequest(), response); + TString out; Y_PROTOBUF_SUPPRESS_NODISCARD response.SerializeToString(&out); Request_->SendSerializedResult(std::move(out), record.GetYdbStatus()); @@ -412,7 +421,7 @@ private: << Ydb::StatusIds::StatusCode_Name(status)); // Skip sending empty result in case of success status - simplify client logic - if (status != Ydb::StatusIds::SUCCESS) { + if (status != Ydb::StatusIds::SUCCESS || message.size() > 0) { TString out; Ydb::Query::ExecuteQueryResponsePart response; response.set_status(status); @@ -421,7 +430,7 @@ private: Request_->SendSerializedResult(std::move(out), status); } - Request_->FinishStream(); + Request_->FinishStream(status); this->PassAway(); } diff --git a/ydb/core/grpc_services/query/rpc_execute_script.cpp b/ydb/core/grpc_services/query/rpc_execute_script.cpp index 1e1c32bcd2..55bdf55ce5 100644 --- a/ydb/core/grpc_services/query/rpc_execute_script.cpp +++ b/ydb/core/grpc_services/query/rpc_execute_script.cpp @@ -4,6 +4,7 @@ #include <ydb/library/ydb_issue/issue_helpers.h> #include <ydb/core/grpc_services/base/base.h> #include <ydb/core/grpc_services/rpc_kqp_base.h> +#include <ydb/core/grpc_services/audit_dml_operations.h> #include <ydb/core/kqp/common/kqp.h> #include <ydb/public/api/protos/ydb_query.pb.h> #include <ydb/public/lib/operation_id/operation_id.h> @@ -92,6 +93,8 @@ public: return Reply(Ydb::StatusIds::BAD_REQUEST, issues); } + AuditContextAppend(Request_.get(), request); + Ydb::StatusIds::StatusCode status = Ydb::StatusIds::SUCCESS; if (auto scriptRequest = MakeScriptRequest(issues, status)) { if (Send(NKqp::MakeKqpProxyID(SelfId().NodeId()), scriptRequest.Release())) { @@ -162,6 +165,8 @@ private: result.set_status(status); + AuditContextAppend(Request_.get(), *Request_->GetProtoRequest(), result); + TString serializedResult; Y_PROTOBUF_SUPPRESS_NODISCARD result.SerializeToString(&serializedResult); diff --git a/ydb/core/grpc_services/rpc_alter_table.cpp b/ydb/core/grpc_services/rpc_alter_table.cpp index 4b76150195..5aad88b1c1 100644 --- a/ydb/core/grpc_services/rpc_alter_table.cpp +++ b/ydb/core/grpc_services/rpc_alter_table.cpp @@ -488,10 +488,23 @@ private: for (const auto& add : req->add_changefeeds()) { auto op = modifyScheme->MutableCreateCdcStream(); op->SetTableName(name); + if (add.has_retention_period()) { op->SetRetentionPeriodSeconds(add.retention_period().seconds()); } + if (add.has_topic_partitioning_settings()) { + i64 minActivePartitions = add.topic_partitioning_settings().min_active_partitions(); + if (minActivePartitions < 0) { + NYql::TIssues issues; + issues.AddIssue(NYql::TIssue("Topic partitions count must be positive")); + return Reply(Ydb::StatusIds::BAD_REQUEST, issues, ctx); + } else if (minActivePartitions == 0) { + minActivePartitions = 1; + } + op->SetTopicPartitions(minActivePartitions); + } + StatusIds::StatusCode code; TString error; if (!FillChangefeedDescription(*op->MutableStreamDescription(), add, code, error)) { diff --git a/ydb/core/grpc_services/rpc_begin_transaction.cpp b/ydb/core/grpc_services/rpc_begin_transaction.cpp index 3c7a9fcee8..374593f229 100644 --- a/ydb/core/grpc_services/rpc_begin_transaction.cpp +++ b/ydb/core/grpc_services/rpc_begin_transaction.cpp @@ -5,6 +5,7 @@ #include "rpc_kqp_base.h" #include "rpc_common/rpc_common.h" #include "service_table.h" +#include "audit_dml_operations.h" #include <ydb/library/yql/public/issue/yql_issue_message.h> #include <ydb/library/yql/public/issue/yql_issue.h> @@ -47,6 +48,8 @@ private: const auto req = GetProtoRequest(); const auto traceId = Request_->GetTraceId(); + AuditContextAppend(Request_.get(), *req); + TString sessionId; auto ev = MakeHolder<NKqp::TEvKqp::TEvQueryRequest>(); SetAuthToken(ev, *Request_); @@ -101,6 +104,8 @@ private: beginTxResult->mutable_tx_meta()->CopyFrom(kqpResponse.GetTxMeta()); } + AuditContextAppend(Request_.get(), *GetProtoRequest(), *beginTxResult); + ReplyWithResult(Ydb::StatusIds::SUCCESS, issueMessage, *beginTxResult, ctx); } else { return OnQueryResponseErrorWithTxMeta(record, ctx); diff --git a/ydb/core/grpc_services/rpc_commit_transaction.cpp b/ydb/core/grpc_services/rpc_commit_transaction.cpp index b2598d1adc..d06731dd0e 100644 --- a/ydb/core/grpc_services/rpc_commit_transaction.cpp +++ b/ydb/core/grpc_services/rpc_commit_transaction.cpp @@ -5,6 +5,7 @@ #include "rpc_kqp_base.h" #include "rpc_common/rpc_common.h" #include "service_table.h" +#include "audit_dml_operations.h" #include <ydb/library/yql/public/issue/yql_issue_message.h> #include <ydb/library/yql/public/issue/yql_issue.h> @@ -45,6 +46,8 @@ private: const auto req = GetProtoRequest(); const auto traceId = Request_->GetTraceId(); + AuditContextAppend(Request_.get(), *req); + TString sessionId; auto ev = MakeHolder<NKqp::TEvKqp::TEvQueryRequest>(); SetAuthToken(ev, *Request_); @@ -90,6 +93,8 @@ private: FillQueryStats(*commitResult->mutable_query_stats(), kqpResponse); } + AuditContextAppend(Request_.get(), *GetProtoRequest(), *commitResult); + ReplyWithResult(Ydb::StatusIds::SUCCESS, issueMessage, *commitResult, ctx); } else { return OnGenericQueryResponseError(record, ctx); diff --git a/ydb/core/grpc_services/rpc_dynamic_config.cpp b/ydb/core/grpc_services/rpc_dynamic_config.cpp index 38d0e137c7..94193fb7ee 100644 --- a/ydb/core/grpc_services/rpc_dynamic_config.cpp +++ b/ydb/core/grpc_services/rpc_dynamic_config.cpp @@ -147,6 +147,14 @@ private: return TBase::Reply(ev->Get()->Record.GetYdbStatus(), ev->Get()->Record.GetIssues(), TActivationContext::AsActorContext()); } + void Handle(TEvConsole::TEvSetYamlConfigResponse::TPtr& ev) { + return TBase::Reply(Ydb::StatusIds::SUCCESS, ev->Get()->Record.GetIssues(), TActivationContext::AsActorContext()); + } + + void Handle(TEvConsole::TEvReplaceYamlConfigResponse::TPtr& ev) { + return TBase::Reply(Ydb::StatusIds::SUCCESS, ev->Get()->Record.GetIssues(), TActivationContext::AsActorContext()); + } + template<typename T> void Handle(T& ev) { diff --git a/ydb/core/grpc_services/rpc_execute_data_query.cpp b/ydb/core/grpc_services/rpc_execute_data_query.cpp index 2242443121..231abc7221 100644 --- a/ydb/core/grpc_services/rpc_execute_data_query.cpp +++ b/ydb/core/grpc_services/rpc_execute_data_query.cpp @@ -3,6 +3,7 @@ #include "rpc_kqp_base.h" #include "rpc_common/rpc_common.h" #include "service_table.h" +#include "audit_dml_operations.h" #include <ydb/core/grpc_services/base/base.h> #include <ydb/public/api/protos/ydb_scheme.pb.h> @@ -56,6 +57,8 @@ public: const auto traceId = Request_->GetTraceId(); const auto requestType = Request_->GetRequestType(); + AuditContextAppend(Request_.get(), *req); + if (!CheckSession(req->session_id(), Request_.get())) { return Reply(Ydb::StatusIds::BAD_REQUEST, ctx); } @@ -206,6 +209,8 @@ public: return Reply(Ydb::StatusIds::INTERNAL_ERROR, issues, ctx); } + AuditContextAppend(Request_.get(), *GetProtoRequest(), *queryResult); + ReplyWithResult(Ydb::StatusIds::SUCCESS, issueMessage, *queryResult, ctx); } else { return OnQueryResponseErrorWithTxMeta(record, ctx); diff --git a/ydb/core/grpc_services/rpc_execute_yql_script.cpp b/ydb/core/grpc_services/rpc_execute_yql_script.cpp index 2d51d0780d..83467719bc 100644 --- a/ydb/core/grpc_services/rpc_execute_yql_script.cpp +++ b/ydb/core/grpc_services/rpc_execute_yql_script.cpp @@ -1,6 +1,7 @@ #include "service_yql_scripting.h" #include "rpc_kqp_base.h" #include "rpc_common/rpc_common.h" +#include "audit_dml_operations.h" #include <ydb/public/api/protos/ydb_scripting.pb.h> @@ -46,6 +47,8 @@ public: const auto req = GetProtoRequest(); const auto traceId = Request_->GetTraceId(); + AuditContextAppend(Request_.get(), *req); + auto script = req->script(); NYql::TIssues issues; @@ -103,6 +106,8 @@ public: queryResult->mutable_query_stats()->set_query_plan(kqpResponse.GetQueryPlan()); } + AuditContextAppend(Request_.get(), *GetProtoRequest(), *queryResult); + ReplyWithResult(Ydb::StatusIds::SUCCESS, issueMessage, *queryResult, ctx); } }; diff --git a/ydb/core/grpc_services/rpc_load_rows.cpp b/ydb/core/grpc_services/rpc_load_rows.cpp index 6f3f442d4d..9059978e02 100644 --- a/ydb/core/grpc_services/rpc_load_rows.cpp +++ b/ydb/core/grpc_services/rpc_load_rows.cpp @@ -2,6 +2,7 @@ #include "rpc_common/rpc_common.h" #include "service_table.h" +#include "audit_dml_operations.h" #include <ydb/core/tx/tx_proxy/upload_rows_common_impl.h> #include <ydb/core/ydb_convert/ydb_convert.h> @@ -126,6 +127,10 @@ private: return GetProtoRequest(Request.get())->operation_params().report_cost_info() == Ydb::FeatureFlag::ENABLED; } + void AuditContextStart() override { + NKikimr::NGRpcService::AuditContextAppend(Request.get(), *GetProtoRequest(Request.get())); + } + TString GetDatabase() override { return Request->GetDatabaseName().GetOrElse(DatabaseFromDomain(AppData())); } @@ -289,6 +294,10 @@ private: Y_VERIFY(false, "unexpected format"); } + void AuditContextStart() override { + NKikimr::NGRpcService::AuditContextAppend(Request.get(), *GetProtoRequest(Request.get())); + } + TString GetDatabase() override { return Request->GetDatabaseName().GetOrElse(DatabaseFromDomain(AppData())); } @@ -430,7 +439,7 @@ private: auto& nullValue = cvsSettings.null_value(); bool withHeader = cvsSettings.header(); - NFormats::TArrowCSV reader(SrcColumns, withHeader); + NFormats::TArrowCSV reader(SrcColumns, withHeader, NotNullColumns); reader.SetSkipRows(skipRows); if (!delimiter.empty()) { diff --git a/ydb/core/grpc_services/rpc_long_tx.cpp b/ydb/core/grpc_services/rpc_long_tx.cpp index e3d9e95dc1..1ed3f547ca 100644 --- a/ydb/core/grpc_services/rpc_long_tx.cpp +++ b/ydb/core/grpc_services/rpc_long_tx.cpp @@ -9,6 +9,7 @@ #include <ydb/core/base/tablet_pipecache.h> #include <ydb/core/tablet/tablet_pipe_client_cache.h> #include <ydb/core/formats/arrow/arrow_helpers.h> +#include <ydb/core/formats/arrow/serializer/full.h> #include <ydb/core/tx/sharding/sharding.h> #include <ydb/core/scheme/scheme_types_proto.h> #include <ydb/core/tx/schemeshard/schemeshard.h> @@ -419,13 +420,23 @@ class TLongTxWriteRPC : public TLongTxWriteBase<TLongTxWriteRPC> { class TProtoDataWrapper : public NEvWrite::IShardsSplitter::IEvWriteDataAccessor { const TEvLongTxWriteRequest::TRequest* ProtoRequest = nullptr; + mutable std::shared_ptr<arrow::RecordBatch> Batch; public: TProtoDataWrapper(const TEvLongTxWriteRequest::TRequest* request) : ProtoRequest(request) - {} + { + } std::shared_ptr<arrow::RecordBatch> GetDeserializedBatch() const override { - return nullptr; + if (Batch) { + return Batch; + } else { + auto res = NArrow::NSerialization::TFullDataDeserializer().Deserialize(GetSerializedData()); + if (res.ok()) { + Batch = *res; + } + } + return Batch; } TString GetSerializedData() const override { diff --git a/ydb/core/grpc_services/rpc_prepare_data_query.cpp b/ydb/core/grpc_services/rpc_prepare_data_query.cpp index cd995ba5a3..a18487cae8 100644 --- a/ydb/core/grpc_services/rpc_prepare_data_query.cpp +++ b/ydb/core/grpc_services/rpc_prepare_data_query.cpp @@ -5,6 +5,7 @@ #include "rpc_kqp_base.h" #include "rpc_common/rpc_common.h" #include "service_table.h" +#include "audit_dml_operations.h" #include <ydb/core/protos/console_config.pb.h> #include <ydb/core/ydb_convert/ydb_convert.h> @@ -54,6 +55,8 @@ public: SetAuthToken(ev, *Request_); SetDatabase(ev, *Request_); + AuditContextAppend(Request_.get(), *req); + if (traceId) { ev->Record.SetTraceId(traceId.GetRef()); } @@ -103,6 +106,9 @@ public: } queryResult.mutable_parameters_types()->insert({queryParameter.GetName(), parameterType}); } + + AuditContextAppend(Request_.get(), *GetProtoRequest(), queryResult); + ReplyWithResult(Ydb::StatusIds::SUCCESS, issueMessage, queryResult, ctx); } else { return OnGenericQueryResponseError(record, ctx); diff --git a/ydb/core/grpc_services/rpc_read_table.cpp b/ydb/core/grpc_services/rpc_read_table.cpp index 37ee81207b..20bf0bd5e6 100644 --- a/ydb/core/grpc_services/rpc_read_table.cpp +++ b/ydb/core/grpc_services/rpc_read_table.cpp @@ -539,7 +539,7 @@ private: NullSerializeReadTableResponse(message, status, &out); Request_->SendSerializedResult(std::move(out), status); } - Request_->FinishStream(); + Request_->FinishStream(status); LOG_NOTICE_S(ctx, NKikimrServices::READ_TABLE_API, SelfId() << " Finish grpc stream, status: " << (int)status); diff --git a/ydb/core/grpc_services/rpc_rollback_transaction.cpp b/ydb/core/grpc_services/rpc_rollback_transaction.cpp index b9b00a92af..b1d4aaadde 100644 --- a/ydb/core/grpc_services/rpc_rollback_transaction.cpp +++ b/ydb/core/grpc_services/rpc_rollback_transaction.cpp @@ -5,6 +5,7 @@ #include "rpc_kqp_base.h" #include "rpc_common/rpc_common.h" #include "service_table.h" +#include "audit_dml_operations.h" #include <ydb/library/yql/public/issue/yql_issue_message.h> #include <ydb/library/yql/public/issue/yql_issue.h> @@ -80,6 +81,9 @@ private: const auto& kqpResponse = record.GetResponse(); const auto& issueMessage = kqpResponse.GetQueryIssues(); + // RollbackTransaction does not have specific Result, use RollbackTransactionResponse as no-op type substitute + AuditContextAppend(Request_.get(), *GetProtoRequest(), Ydb::Table::RollbackTransactionResponse()); + ReplyWithResult(Ydb::StatusIds::SUCCESS, issueMessage, ctx); } else { return OnGenericQueryResponseError(record, ctx); diff --git a/ydb/core/grpc_services/rpc_stream_execute_scan_query.cpp b/ydb/core/grpc_services/rpc_stream_execute_scan_query.cpp index 1b6893df7a..43429e221a 100644 --- a/ydb/core/grpc_services/rpc_stream_execute_scan_query.cpp +++ b/ydb/core/grpc_services/rpc_stream_execute_scan_query.cpp @@ -284,6 +284,8 @@ private: NYql::IssuesFromMessage(issueMessage, issues); if (record.GetYdbStatus() == Ydb::StatusIds::SUCCESS) { + Request_->SetRuHeader(record.GetConsumedRu()); + Ydb::Table::ExecuteScanQueryPartialResponse response; TString out; auto& kqpResponse = record.GetResponse(); @@ -316,7 +318,6 @@ private: Request_->SendSerializedResult(std::move(out), record.GetYdbStatus()); } } - ReplyFinishStream(record.GetYdbStatus(), issues); } @@ -475,7 +476,7 @@ private: Request_->SendSerializedResult(std::move(out), status); } - Request_->FinishStream(); + Request_->FinishStream(status); this->PassAway(); } diff --git a/ydb/core/grpc_services/rpc_stream_execute_yql_script.cpp b/ydb/core/grpc_services/rpc_stream_execute_yql_script.cpp index b93232ac30..1a788bdc2e 100644 --- a/ydb/core/grpc_services/rpc_stream_execute_yql_script.cpp +++ b/ydb/core/grpc_services/rpc_stream_execute_yql_script.cpp @@ -1,5 +1,6 @@ #include "service_yql_scripting.h" #include "rpc_kqp_base.h" +#include "audit_dml_operations.h" #include <ydb/public/api/protos/ydb_scripting.pb.h> @@ -152,6 +153,8 @@ private: auto req = GetProtoRequest(); const auto traceId = Request_->GetTraceId(); + AuditContextAppend(Request_.get(), *req); + auto script = req->script(); NYql::TIssues issues; @@ -340,6 +343,8 @@ private: NYql::IssuesFromMessage(issueMessage, issues); if (record.GetYdbStatus() == Ydb::StatusIds::SUCCESS) { + Request_->SetRuHeader(record.GetConsumedRu()); + Ydb::Scripting::ExecuteYqlPartialResponse response; TString out; auto& kqpResponse = record.GetResponse(); @@ -351,6 +356,8 @@ private: response.mutable_result()->mutable_query_stats()->set_query_plan(kqpResponse.GetQueryPlan()); } + AuditContextAppend(Request_.get(), *GetProtoRequest(), response); + Y_PROTOBUF_SUPPRESS_NODISCARD response.SerializeToString(&out); RequestPtr()->SendSerializedResult(std::move(out), record.GetYdbStatus()); } @@ -443,7 +450,7 @@ private: RequestPtr()->SendSerializedResult(std::move(out), status); } - RequestPtr()->FinishStream(); + RequestPtr()->FinishStream(status); this->PassAway(); } diff --git a/ydb/core/grpc_services/ya.make b/ydb/core/grpc_services/ya.make index fe28ae3736..c343902d16 100644 --- a/ydb/core/grpc_services/ya.make +++ b/ydb/core/grpc_services/ya.make @@ -2,6 +2,7 @@ LIBRARY() SRCS( audit_log.cpp + audit_dml_operations.cpp grpc_endpoint_publish_actor.cpp grpc_helper.cpp grpc_mon.cpp @@ -86,6 +87,7 @@ PEERDIR( library/cpp/cgiparam library/cpp/digest/old_crc ydb/core/actorlib_impl + ydb/core/audit ydb/core/base ydb/core/control ydb/core/discovery diff --git a/ydb/core/http_proxy/http_req.cpp b/ydb/core/http_proxy/http_req.cpp index 5aae2d8114..d4f347d72e 100644 --- a/ydb/core/http_proxy/http_req.cpp +++ b/ydb/core/http_proxy/http_req.cpp @@ -617,6 +617,7 @@ namespace NKikimr::NHttpProxy { DECLARE_PROCESSOR(CreateStream); DECLARE_PROCESSOR(ListStreams); DECLARE_PROCESSOR(DeleteStream); + DECLARE_PROCESSOR(UpdateStream); DECLARE_PROCESSOR(DescribeStream); DECLARE_PROCESSOR(ListShards); DECLARE_PROCESSOR(PutRecord); diff --git a/ydb/core/http_proxy/ut/CMakeLists.darwin-x86_64.txt b/ydb/core/http_proxy/ut/CMakeLists.darwin-x86_64.txt index 61f440c8bc..a58d83dc9c 100644 --- a/ydb/core/http_proxy/ut/CMakeLists.darwin-x86_64.txt +++ b/ydb/core/http_proxy/ut/CMakeLists.darwin-x86_64.txt @@ -23,6 +23,7 @@ target_link_libraries(ydb-core-http_proxy-ut PUBLIC yql-sql-pg_dummy cpp-client-ydb_types ydb-services-kesus + ydb-services-datastreams ydb-services-persqueue_cluster_discovery ) target_link_options(ydb-core-http_proxy-ut PRIVATE diff --git a/ydb/core/http_proxy/ut/CMakeLists.linux-aarch64.txt b/ydb/core/http_proxy/ut/CMakeLists.linux-aarch64.txt index bc7061e5d5..4c2a361df4 100644 --- a/ydb/core/http_proxy/ut/CMakeLists.linux-aarch64.txt +++ b/ydb/core/http_proxy/ut/CMakeLists.linux-aarch64.txt @@ -23,6 +23,7 @@ target_link_libraries(ydb-core-http_proxy-ut PUBLIC yql-sql-pg_dummy cpp-client-ydb_types ydb-services-kesus + ydb-services-datastreams ydb-services-persqueue_cluster_discovery ) target_link_options(ydb-core-http_proxy-ut PRIVATE diff --git a/ydb/core/http_proxy/ut/CMakeLists.linux-x86_64.txt b/ydb/core/http_proxy/ut/CMakeLists.linux-x86_64.txt index 7362a1b1df..32dd275dd1 100644 --- a/ydb/core/http_proxy/ut/CMakeLists.linux-x86_64.txt +++ b/ydb/core/http_proxy/ut/CMakeLists.linux-x86_64.txt @@ -24,6 +24,7 @@ target_link_libraries(ydb-core-http_proxy-ut PUBLIC yql-sql-pg_dummy cpp-client-ydb_types ydb-services-kesus + ydb-services-datastreams ydb-services-persqueue_cluster_discovery ) target_link_options(ydb-core-http_proxy-ut PRIVATE diff --git a/ydb/core/http_proxy/ut/CMakeLists.windows-x86_64.txt b/ydb/core/http_proxy/ut/CMakeLists.windows-x86_64.txt index 24ec6801be..0ff2ea5eea 100644 --- a/ydb/core/http_proxy/ut/CMakeLists.windows-x86_64.txt +++ b/ydb/core/http_proxy/ut/CMakeLists.windows-x86_64.txt @@ -23,6 +23,7 @@ target_link_libraries(ydb-core-http_proxy-ut PUBLIC yql-sql-pg_dummy cpp-client-ydb_types ydb-services-kesus + ydb-services-datastreams ydb-services-persqueue_cluster_discovery ) target_sources(ydb-core-http_proxy-ut PRIVATE diff --git a/ydb/core/http_proxy/ut/ya.make b/ydb/core/http_proxy/ut/ya.make index 9abb8b9d78..0cbc71062a 100644 --- a/ydb/core/http_proxy/ut/ya.make +++ b/ydb/core/http_proxy/ut/ya.make @@ -12,6 +12,7 @@ PEERDIR( ydb/library/yql/sql/pg_dummy ydb/public/sdk/cpp/client/ydb_types ydb/services/kesus + ydb/services/datastreams ydb/services/persqueue_cluster_discovery ) diff --git a/ydb/core/io_formats/csv.h b/ydb/core/io_formats/csv.h index d2ac59c6ac..7c99cef053 100644 --- a/ydb/core/io_formats/csv.h +++ b/ydb/core/io_formats/csv.h @@ -23,7 +23,7 @@ public: /// If header is true read column names from first line after skipRows. Parse columns as strings in this case. /// @note It's possible to skip header with skipRows and use typed columns instead. - TArrowCSV(const TVector<std::pair<TString, NScheme::TTypeInfo>>& columns, bool header = false); + TArrowCSV(const TVector<std::pair<TString, NScheme::TTypeInfo>>& columns, bool header = false, const std::set<std::string>& notNullColumns = {}); std::shared_ptr<arrow::RecordBatch> ReadNext(const TString& csv, TString& errString); std::shared_ptr<arrow::RecordBatch> ReadSingleBatch(const TString& csv, TString& errString); @@ -66,6 +66,7 @@ private: std::shared_ptr<arrow::csv::StreamingReader> Reader; std::vector<TString> ResultColumns; std::unordered_map<std::string, std::shared_ptr<arrow::DataType>> OriginalColumnTypes; + std::set<std::string> NotNullColumns; std::shared_ptr<arrow::RecordBatch> ConvertColumnTypes(std::shared_ptr<arrow::RecordBatch> parsedBatch) const; diff --git a/ydb/core/io_formats/csv_arrow.cpp b/ydb/core/io_formats/csv_arrow.cpp index 71e7ec31f5..461c00f808 100644 --- a/ydb/core/io_formats/csv_arrow.cpp +++ b/ydb/core/io_formats/csv_arrow.cpp @@ -40,10 +40,11 @@ public: } -TArrowCSV::TArrowCSV(const TVector<std::pair<TString, NScheme::TTypeInfo>>& columns, bool header) +TArrowCSV::TArrowCSV(const TVector<std::pair<TString, NScheme::TTypeInfo>>& columns, bool header, const std::set<std::string>& notNullColumns) : ReadOptions(arrow::csv::ReadOptions::Defaults()) , ParseOptions(arrow::csv::ParseOptions::Defaults()) , ConvertOptions(arrow::csv::ConvertOptions::Defaults()) + , NotNullColumns(notNullColumns) { ConvertOptions.check_utf8 = false; ConvertOptions.timestamp_parsers.clear(); @@ -84,7 +85,7 @@ TArrowCSV::TArrowCSV(const TVector<std::pair<TString, NScheme::TTypeInfo>>& colu std::shared_ptr<arrow::RecordBatch> TArrowCSV::ConvertColumnTypes(std::shared_ptr<arrow::RecordBatch> parsedBatch) const { if (!parsedBatch) { - return parsedBatch; + return nullptr; } const auto& schema = parsedBatch->schema(); @@ -101,7 +102,8 @@ std::shared_ptr<arrow::RecordBatch> TArrowCSV::ConvertColumnTypes(std::shared_pt auto it = OriginalColumnTypes.find(f->name()); Y_VERIFY(it != OriginalColumnTypes.end()); originalType = it->second; - Y_VERIFY(sBuilderFixed.AddField(std::make_shared<arrow::Field>(f->name(), originalType)).ok()); + bool nullable = !NotNullColumns.contains(f->name()); + Y_VERIFY(sBuilderFixed.AddField(std::make_shared<arrow::Field>(f->name(), originalType, nullable)).ok()); } else { continue; } diff --git a/ydb/core/kafka_proxy/actors/actors.h b/ydb/core/kafka_proxy/actors/actors.h index d378aef970..b2a870c728 100644 --- a/ydb/core/kafka_proxy/actors/actors.h +++ b/ydb/core/kafka_proxy/actors/actors.h @@ -44,7 +44,7 @@ struct TContext { bool Authenticated() { return AuthenticationStep == SUCCESS; } }; -template<class T> +template<std::derived_from<TApiMessage> T> class TMessagePtr { public: TMessagePtr(const std::shared_ptr<TBuffer>& buffer, const std::shared_ptr<TApiMessage>& message) @@ -53,6 +53,11 @@ public: , Ptr(dynamic_cast<T*>(message.get())) { } + template<std::derived_from<TApiMessage> O> + TMessagePtr<O> Cast() { + return TMessagePtr<O>(Buffer, Message); + } + T* operator->() const { return Ptr; } diff --git a/ydb/core/kafka_proxy/ut/ut_protocol.cpp b/ydb/core/kafka_proxy/ut/ut_protocol.cpp index 64af30b99d..95c5d78312 100644 --- a/ydb/core/kafka_proxy/ut/ut_protocol.cpp +++ b/ydb/core/kafka_proxy/ut/ut_protocol.cpp @@ -1,6 +1,7 @@ #include <library/cpp/testing/unittest/registar.h> #include "../kafka_messages.h" +#include "../actors/actors.h" #include <ydb/services/ydb/ydb_common_ut.h> #include <ydb/services/ydb/ydb_keys_ut.h> @@ -223,19 +224,20 @@ void Write(TSocketOutput& so, TRequestHeaderData* header, TApiMessage* request) so.Flush(); } -std::unique_ptr<TApiMessage> Read(TSocketInput& si, TRequestHeaderData* requestHeader) { +template<std::derived_from<TApiMessage> T> +TMessagePtr<T> Read(TSocketInput& si, TRequestHeaderData* requestHeader) { TKafkaInt32 size; si.Read(&size, sizeof(size)); NKafka::NormalizeNumber(size); - TBuffer buffer; - buffer.Resize(size); - si.Load(buffer.Data(), size); + auto buffer= std::make_shared<TBuffer>(); + buffer->Resize(size); + si.Load(buffer->Data(), size); TKafkaVersion headerVersion = ResponseHeaderVersion(requestHeader->RequestApiKey, requestHeader->RequestApiVersion); - TKafkaReadable readable(buffer); + TKafkaReadable readable(*buffer); TResponseHeaderData header; header.Read(readable, headerVersion); @@ -245,7 +247,7 @@ std::unique_ptr<TApiMessage> Read(TSocketInput& si, TRequestHeaderData* requestH auto response = CreateResponse(requestHeader->RequestApiKey); response->Read(readable, requestHeader->RequestApiVersion); - return response; + return TMessagePtr<T>(buffer, std::shared_ptr<TApiMessage>(response.release())); } void AssertMessageMeta(const NYdb::NTopic::TReadSessionEvent::TDataReceivedEvent::TMessage& msg, const TString& field, @@ -294,7 +296,7 @@ public: , ClientName(clientName) { } - TApiVersionsResponseData::TPtr ApiVersions() { + TMessagePtr<TApiVersionsResponseData> ApiVersions() { Cerr << ">>>>> ApiVersionsRequest\n"; TRequestHeaderData header = Header(NKafka::EApiKey::API_VERSIONS, 2); @@ -306,7 +308,7 @@ public: return WriteAndRead<TApiVersionsResponseData>(header, request); } - TSaslHandshakeResponseData::TPtr SaslHandshake(const TString& mechanism = "PLAIN") { + TMessagePtr<TSaslHandshakeResponseData> SaslHandshake(const TString& mechanism = "PLAIN") { Cerr << ">>>>> SaslHandshakeRequest\n"; TRequestHeaderData header = Header(NKafka::EApiKey::SASL_HANDSHAKE, 1); @@ -317,7 +319,7 @@ public: return WriteAndRead<TSaslHandshakeResponseData>(header, request); } - TSaslAuthenticateResponseData::TPtr SaslAuthenticate(const TString& user, const TString& password) { + TMessagePtr<TSaslAuthenticateResponseData> SaslAuthenticate(const TString& user, const TString& password) { Cerr << ">>>>> SaslAuthenticateRequestData\n"; TStringBuilder authBytes; @@ -331,7 +333,7 @@ public: return WriteAndRead<TSaslAuthenticateResponseData>(header, request); } - TInitProducerIdResponseData::TPtr InitProducerId() { + TMessagePtr<TInitProducerIdResponseData> InitProducerId() { Cerr << ">>>>> TInitProducerIdRequestData\n"; TRequestHeaderData header = Header(NKafka::EApiKey::INIT_PRODUCER_ID, 4); @@ -342,13 +344,13 @@ public: return WriteAndRead<TInitProducerIdResponseData>(header, request); } - TProduceResponseData::TPtr Produce(const TString& topicName, ui32 partition, const TKafkaRecordBatch& batch) { + TMessagePtr<TProduceResponseData> Produce(const TString& topicName, ui32 partition, const TKafkaRecordBatch& batch) { std::vector<std::pair<ui32, TKafkaRecordBatch>> msgs; msgs.emplace_back(partition, batch); return Produce(topicName, msgs); } - TProduceResponseData::TPtr Produce(const TString& topicName, const std::vector<std::pair<ui32, TKafkaRecordBatch>> msgs) { + TMessagePtr<TProduceResponseData> Produce(const TString& topicName, const std::vector<std::pair<ui32, TKafkaRecordBatch>> msgs) { Cerr << ">>>>> TProduceRequestData\n"; TRequestHeaderData header = Header(NKafka::EApiKey::PRODUCE, 9); @@ -365,7 +367,7 @@ public: return WriteAndRead<TProduceResponseData>(header, request); } - TListOffsetsResponseData::TPtr ListOffsets(ui64 partitionsCount, const TString& topic) { + TMessagePtr<TListOffsetsResponseData> ListOffsets(ui64 partitionsCount, const TString& topic) { Cerr << ">>>>> TListOffsetsResponseData\n"; TRequestHeaderData header = Header(NKafka::EApiKey::LIST_OFFSETS, 4); @@ -385,7 +387,7 @@ public: return WriteAndRead<TListOffsetsResponseData>(header, request); } - TFetchResponseData::TPtr Fetch(const TString& topic) { + TMessagePtr<TFetchResponseData> Fetch(const TString& topic) { Cerr << ">>>>> TFetchResponseData\n"; TRequestHeaderData header = Header(NKafka::EApiKey::FETCH, 3); @@ -406,8 +408,6 @@ public: request.Topics.push_back(topicReq); - - return WriteAndRead<TFetchResponseData>(header, request); } @@ -432,13 +432,10 @@ protected: return Correlation++; } - template <class T> - typename T::TPtr WriteAndRead(TRequestHeaderData& header, TApiMessage& request) { + template <std::derived_from<TApiMessage> T> + TMessagePtr<T> WriteAndRead(TRequestHeaderData& header, TApiMessage& request) { Write(So, &header, &request); - - auto response = Read(Si, &header); - auto* msg = dynamic_cast<T*>(response.release()); - return std::shared_ptr<T>(msg); + return Read<T>(Si, &header); } TRequestHeaderData Header(NKafka::EApiKey apiKey, TKafkaVersion version) { diff --git a/ydb/core/kesus/tablet/tablet_impl.cpp b/ydb/core/kesus/tablet/tablet_impl.cpp index 037619ef30..6418dd8ffa 100644 --- a/ydb/core/kesus/tablet/tablet_impl.cpp +++ b/ydb/core/kesus/tablet/tablet_impl.cpp @@ -110,12 +110,6 @@ void TKesusTablet::VerifyKesusPath(const TString& kesusPath) { KesusPath.Quote().data()); } -void TKesusTablet::Handle(TEvents::TEvPoisonPill::TPtr& ev) { - Y_UNUSED(ev); - Send(Tablet(), new TEvents::TEvPoisonPill()); - Become(&TThis::StateZombie); -} - void TKesusTablet::Handle(TEvents::TEvUndelivered::TPtr& ev) { const auto* msg = ev->Get(); switch (msg->SourceType) { @@ -241,22 +235,11 @@ void TKesusTablet::HandleIgnored() { } STFUNC(TKesusTablet::StateInit) { - switch (ev->GetTypeRewrite()) { - hFunc(TEvents::TEvPoisonPill, Handle); - - default: - StateInitImpl(ev, SelfId()); - break; - } -} - -STFUNC(TKesusTablet::StateZombie) { StateInitImpl(ev, SelfId()); } STFUNC(TKesusTablet::StateWork) { switch (ev->GetTypeRewrite()) { - hFunc(TEvents::TEvPoisonPill, Handle); hFunc(TEvents::TEvUndelivered, Handle); hFunc(TEvInterconnect::TEvNodeConnected, Handle); hFunc(TEvInterconnect::TEvNodeDisconnected, Handle); diff --git a/ydb/core/kesus/tablet/tablet_impl.h b/ydb/core/kesus/tablet/tablet_impl.h index 9118302677..2b20a69fe8 100644 --- a/ydb/core/kesus/tablet/tablet_impl.h +++ b/ydb/core/kesus/tablet/tablet_impl.h @@ -383,7 +383,6 @@ private: private: void VerifyKesusPath(const TString& kesusPath); - void Handle(TEvents::TEvPoisonPill::TPtr& ev); void Handle(TEvents::TEvUndelivered::TPtr& ev); void Handle(TEvInterconnect::TEvNodeConnected::TPtr& ev); void Handle(TEvInterconnect::TEvNodeDisconnected::TPtr& ev); @@ -432,7 +431,6 @@ private: private: STFUNC(StateInit); STFUNC(StateWork); - STFUNC(StateZombie); private: void AddSessionTx(ui64 sessionId) { diff --git a/ydb/core/kesus/tablet/tx_self_check.cpp b/ydb/core/kesus/tablet/tx_self_check.cpp index cb2c83b0e0..3bbad2f441 100644 --- a/ydb/core/kesus/tablet/tx_self_check.cpp +++ b/ydb/core/kesus/tablet/tx_self_check.cpp @@ -73,8 +73,7 @@ void TKesusTablet::Handle(TEvPrivate::TEvSelfCheckTimeout::TPtr& ev) { const auto& ctx = TActivationContext::AsActorContext(); LOG_ERROR_S(ctx, NKikimrServices::KESUS_TABLET, "[" << TabletID() << "] Self-check timeout, attempting suicide"); - Send(Tablet(), new TEvents::TEvPoisonPill()); - Become(&TThis::StateZombie); + HandlePoison(TActivationContext::ActorContextFor(SelfId())); } } diff --git a/ydb/core/kqp/common/compilation/result.h b/ydb/core/kqp/common/compilation/result.h index ea26f9ff23..b9178a01bc 100644 --- a/ydb/core/kqp/common/compilation/result.h +++ b/ydb/core/kqp/common/compilation/result.h @@ -45,6 +45,7 @@ struct TKqpCompileResult { TString Uid; ETableReadType MaxReadType; + bool AllowCache = true; std::shared_ptr<const TPreparedQueryHolder> PreparedQuery; }; diff --git a/ydb/core/kqp/compile_service/kqp_compile_actor.cpp b/ydb/core/kqp/compile_service/kqp_compile_actor.cpp index cd5288ef90..d3f0053196 100644 --- a/ydb/core/kqp/compile_service/kqp_compile_actor.cpp +++ b/ydb/core/kqp/compile_service/kqp_compile_actor.cpp @@ -332,6 +332,7 @@ private: kqpResult.PreparingQuery.release(), AppData()->FunctionRegistry); preparedQueryHolder->MutableLlvmSettings().Fill(Config, queryType); KqpCompileResult->PreparedQuery = preparedQueryHolder; + KqpCompileResult->AllowCache = CanCacheQuery(KqpCompileResult->PreparedQuery->GetPhysicalQuery()); } auto now = TInstant::Now(); diff --git a/ydb/core/kqp/compile_service/kqp_compile_service.cpp b/ydb/core/kqp/compile_service/kqp_compile_service.cpp index c86c9d3fc3..77bbadbe2c 100644 --- a/ydb/core/kqp/compile_service/kqp_compile_service.cpp +++ b/ydb/core/kqp/compile_service/kqp_compile_service.cpp @@ -630,11 +630,13 @@ private: << ", status: " << compileResult->Status << ", compileActor: " << ev->Sender); + bool keepInCache = compileRequest.KeepInCache && compileResult->AllowCache; + try { if (compileResult->Status == Ydb::StatusIds::SUCCESS) { if (QueryCache.FindByUid(compileResult->Uid, false)) { QueryCache.Replace(compileResult); - } else if (compileRequest.KeepInCache) { + } else if (keepInCache) { if (QueryCache.Insert(compileResult)) { Counters->CompileQueryCacheEvicted->Inc(); } diff --git a/ydb/core/kqp/compute_actor/kqp_scan_fetcher_actor.cpp b/ydb/core/kqp/compute_actor/kqp_scan_fetcher_actor.cpp index de296ca58c..75937ff565 100644 --- a/ydb/core/kqp/compute_actor/kqp_scan_fetcher_actor.cpp +++ b/ydb/core/kqp/compute_actor/kqp_scan_fetcher_actor.cpp @@ -193,7 +193,6 @@ void TKqpScanFetcherActor::HandleExecute(TEvKqpCompute::TEvScanError::TPtr& ev) YQL_ENSURE(state->Generation == msg.GetGeneration()); - if (state->State == EShardState::Starting) { if (FindSchemeErrorInIssues(status, issues)) { return EnqueueResolveShard(state); @@ -208,6 +207,13 @@ void TKqpScanFetcherActor::HandleExecute(TEvKqpCompute::TEvScanError::TPtr& ev) InFlightShards.ClearAckState(state); state->ResetRetry(); ++TotalRetries; + if (state->TotalRetries >= MAX_SHARD_RETRIES || TotalRetries >= MAX_TOTAL_SHARD_RETRIES) { + CA_LOG_E("TKqpScanFetcherActor: broken tablet for this request " << state->TabletId + << ", retries limit exceeded (" << state->TotalRetries << "/" << TotalRetries << ")"); + SendGlobalFail(NDqProto::COMPUTE_STATE_FAILURE, YdbStatusToDqStatus(status), issues); + return PassAway(); + } + return StartReadShard(state); } } diff --git a/ydb/core/kqp/counters/kqp_counters.cpp b/ydb/core/kqp/counters/kqp_counters.cpp index 3dd3544763..2cc5bb7be4 100644 --- a/ydb/core/kqp/counters/kqp_counters.cpp +++ b/ydb/core/kqp/counters/kqp_counters.cpp @@ -383,13 +383,16 @@ TString TKqpCountersBase::GetIssueName(ui32 issueCode) { return TStringBuilder() << "CODE:" << ToString(issueCode); } -void TKqpCountersBase::ReportIssues(const Ydb::Issue::IssueMessage& issue) { - auto issueCounter = IssueCounters.FindPtr(issue.issue_code()); +void TKqpCountersBase::ReportIssues( + THashMap<ui32, ::NMonitoring::TDynamicCounters::TCounterPtr>& issueCounters, + const Ydb::Issue::IssueMessage& issue) +{ + auto issueCounter = issueCounters.FindPtr(issue.issue_code()); if (!issueCounter) { auto counterName = TStringBuilder() << "Issues/" << GetIssueName(issue.issue_code()); auto counter = KqpGroup->GetCounter(counterName , true); - auto result = IssueCounters.emplace(issue.issue_code(), counter); + auto result = issueCounters.emplace(issue.issue_code(), counter); issueCounter = &result.first->second; } @@ -400,7 +403,7 @@ void TKqpCountersBase::ReportIssues(const Ydb::Issue::IssueMessage& issue) { } for (auto& childIssue : issue.issues()) { - ReportIssues(childIssue); + ReportIssues(issueCounters, childIssue); } } @@ -970,10 +973,13 @@ void TKqpCounters::ReportResultsBytes(TKqpDbCountersPtr dbCounters, ui64 results } } -void TKqpCounters::ReportIssues(TKqpDbCountersPtr dbCounters, const Ydb::Issue::IssueMessage& issue) { - TKqpCountersBase::ReportIssues(issue); +void TKqpCounters::ReportIssues(TKqpDbCountersPtr dbCounters, + THashMap<ui32, ::NMonitoring::TDynamicCounters::TCounterPtr>& issueCounters, + const Ydb::Issue::IssueMessage& issue) +{ + TKqpCountersBase::ReportIssues(issueCounters, issue); if (dbCounters) { - dbCounters->ReportIssues(issue); + dbCounters->ReportIssues(issueCounters, issue); } } diff --git a/ydb/core/kqp/counters/kqp_counters.h b/ydb/core/kqp/counters/kqp_counters.h index 4be02be974..5d2c7a2ae6 100644 --- a/ydb/core/kqp/counters/kqp_counters.h +++ b/ydb/core/kqp/counters/kqp_counters.h @@ -57,7 +57,8 @@ protected: void ReportResultsBytes(ui64 resultsSize); static TString GetIssueName(ui32 issueCode); - void ReportIssues(const Ydb::Issue::IssueMessage& issue); + void ReportIssues(THashMap<ui32, ::NMonitoring::TDynamicCounters::TCounterPtr>& issueCounters, + const Ydb::Issue::IssueMessage& issue); void ReportQueryLatency(NKikimrKqp::EQueryAction action, const TDuration& duration); @@ -152,8 +153,6 @@ protected: ::NMonitoring::TDynamicCounters::TCounterPtr YdbResponseBytes; ::NMonitoring::TDynamicCounters::TCounterPtr QueryResultsBytes; - THashMap<ui32, ::NMonitoring::TDynamicCounters::TCounterPtr> IssueCounters; - // Workers NMonitoring::THistogramPtr WorkerLifeSpan; NMonitoring::THistogramPtr QueriesPerWorker; @@ -247,7 +246,6 @@ private: using TKqpDbCountersPtr = TIntrusivePtr<TKqpDbCounters>; - class TKqpCounters : public TThrRefBase, public TKqpCountersBase { private: struct TTxByKindCounters { @@ -278,7 +276,9 @@ public: void ReportResponseStatus(TKqpDbCountersPtr dbCounters, ui64 responseSize, Ydb::StatusIds::StatusCode ydbStatus); void ReportResultsBytes(TKqpDbCountersPtr dbCounters, ui64 resultsSize); - void ReportIssues(TKqpDbCountersPtr dbCounters, const Ydb::Issue::IssueMessage& issue); + void ReportIssues(TKqpDbCountersPtr dbCounters, + THashMap<ui32, ::NMonitoring::TDynamicCounters::TCounterPtr>& issueCounters, + const Ydb::Issue::IssueMessage& issue); void ReportQueryWithRangeScan(TKqpDbCountersPtr dbCounters); void ReportQueryWithFullScan(TKqpDbCountersPtr dbCounters); diff --git a/ydb/core/kqp/executer_actor/kqp_result_channel.cpp b/ydb/core/kqp/executer_actor/kqp_result_channel.cpp index 0ffcf1d7c6..3667f9e96b 100644 --- a/ydb/core/kqp/executer_actor/kqp_result_channel.cpp +++ b/ydb/core/kqp/executer_actor/kqp_result_channel.cpp @@ -45,14 +45,18 @@ protected: private: STATEFN(WorkState) { - switch (ev->GetTypeRewrite()) { - hFunc(NYql::NDq::TEvDqCompute::TEvChannelData, HandleWork); - hFunc(TEvKqpExecuter::TEvStreamDataAck, HandleWork); - hFunc(TEvents::TEvPoison, HandlePoison); - default: { - InternalError(TStringBuilder() << "TxId: " << TxId << ", channelId: " << ChannelId - << "Handle unexpected event " << ev->GetTypeRewrite()); + try { + switch (ev->GetTypeRewrite()) { + hFunc(NYql::NDq::TEvDqCompute::TEvChannelData, HandleWork); + hFunc(TEvKqpExecuter::TEvStreamDataAck, HandleWork); + hFunc(TEvents::TEvPoison, HandlePoison); + default: { + InternalError(TStringBuilder() << "TxId: " << TxId << ", channelId: " << ChannelId + << "Handle unexpected event " << ev->GetTypeRewrite()); + } } + } catch (const yexception& ex) { + InternalError(ex.what()); } } @@ -115,8 +119,13 @@ private: private: STATEFN(DeadState) { - switch (ev->GetTypeRewrite()) { - hFunc(TEvents::TEvPoison, HandlePoison); + try { + switch (ev->GetTypeRewrite()) { + hFunc(TEvents::TEvPoison, HandlePoison); + } + + } catch(const yexception& ex) { + InternalError(ex.what()); } } @@ -170,6 +179,7 @@ private: Send(Target, streamEv.Release()); } + private: const TVector<ui32>* ColumnOrder; NKikimr::NMiniKQL::TType* ItemType; diff --git a/ydb/core/kqp/host/kqp_host.cpp b/ydb/core/kqp/host/kqp_host.cpp index d1f5077900..90de67c3e7 100644 --- a/ydb/core/kqp/host/kqp_host.cpp +++ b/ydb/core/kqp/host/kqp_host.cpp @@ -1097,9 +1097,12 @@ private: settings.EndOfQueryCommit = sqlAutoCommit; settings.Flags.insert("FlexibleTypes"); settings.Flags.insert("AnsiLike"); + if (SessionCtx->Query().Type == EKikimrQueryType::Scan || SessionCtx->Query().Type == EKikimrQueryType::YqlScript - || SessionCtx->Query().Type == EKikimrQueryType::YqlScriptStreaming) + || SessionCtx->Query().Type == EKikimrQueryType::YqlScriptStreaming + || SessionCtx->Query().Type == EKikimrQueryType::Query + || SessionCtx->Query().Type == EKikimrQueryType::Script) { // We enable EmitAggApply for filter and aggregate pushdowns to Column Shards settings.Flags.insert("EmitAggApply"); @@ -1107,6 +1110,15 @@ private: settings.Flags.insert("DisableEmitStartsWith"); } + if (SessionCtx->Query().Type == EKikimrQueryType::Query + || SessionCtx->Query().Type == EKikimrQueryType::Script) + { + settings.Flags.insert("AnsiOptionalAs"); + settings.Flags.insert("WarnOnAnsiAliasShadowing"); + settings.Flags.insert("AnsiCurrentRow"); + settings.Flags.insert("AnsiInForEmptyOrNullableItemsCollections"); + } + if (query.ParameterTypes) { NSQLTranslation::TTranslationSettings versionSettings = settings; NYql::TIssues versionIssues; diff --git a/ydb/core/kqp/provider/yql_kikimr_exec.cpp b/ydb/core/kqp/provider/yql_kikimr_exec.cpp index 1557ede0b7..5c396ec6fb 100644 --- a/ydb/core/kqp/provider/yql_kikimr_exec.cpp +++ b/ydb/core/kqp/provider/yql_kikimr_exec.cpp @@ -734,12 +734,21 @@ private: } if (NCommon::HasResOrPullOption(res.Ref(), "ref")) { - ctx.AddError(TIssue(ctx.GetPosition(res.Pos()), TStringBuilder() << "refselect isn't supported for Kikimr provider.")); + ctx.AddError(TIssue(ctx.GetPosition(res.Pos()), TStringBuilder() + << "refselect isn't supported for Kikimr provider.")); return SyncError(); } IDataProvider::TFillSettings fillSettings = NCommon::GetFillSettings(res.Ref()); + if (IsIn({EKikimrQueryType::Query, EKikimrQueryType::Script}, SessionCtx->Query().Type)) { + if (fillSettings.Discard) { + ctx.AddError(YqlIssue(ctx.GetPosition(res.Pos()), TIssuesIds::KIKIMR_BAD_OPERATION, TStringBuilder() + << "DISCARD not supported in YDB queries")); + return SyncError(); + } + } + auto* runResult = SessionCtx->Query().Results.FindPtr(exec.Ref().UniqueId()); if (!runResult) { ctx.AddError(TIssue(ctx.GetPosition(exec.Pos()), TStringBuilder() << "KiExecute run result not found.")); @@ -1427,6 +1436,19 @@ public: const auto duration = TDuration::FromValue(value); auto& retention = *add_changefeed->mutable_retention_period(); retention.set_seconds(duration.Seconds()); + } else if (name == "topic_min_active_partitions") { + auto value = TString( + setting.Value().Cast<TCoDataCtor>().Literal().Cast<TCoAtom>().Value() + ); + + i64 minActivePartitions; + if (!TryFromString(value, minActivePartitions) || minActivePartitions <= 0) { + ctx.AddError(TIssue(ctx.GetPosition(setting.Name().Pos()), + TStringBuilder() << name << " must be greater than 0")); + return SyncError(); + } + + add_changefeed->mutable_topic_partitioning_settings()->set_min_active_partitions(minActivePartitions); } else if (name == "aws_region") { auto value = TString( setting.Value().Cast<TCoDataCtor>().Literal().Cast<TCoAtom>().Value() diff --git a/ydb/core/kqp/provider/yql_kikimr_opt_build.cpp b/ydb/core/kqp/provider/yql_kikimr_opt_build.cpp index c2f5a31f4d..f30ee451af 100644 --- a/ydb/core/kqp/provider/yql_kikimr_opt_build.cpp +++ b/ydb/core/kqp/provider/yql_kikimr_opt_build.cpp @@ -788,7 +788,10 @@ TExprNode::TPtr KiBuildQuery(TExprBase node, TExprContext& ctx, TIntrusivePtr<TK txExplore.GetTableOperations(hasScheme, hasData); if (hasData && hasScheme) { - ctx.AddError(YqlIssue(ctx.GetPosition(commit.Pos()), TIssuesIds::KIKIMR_MIXED_SCHEME_DATA_TX)); + TString message = TStringBuilder() << "Queries with mixed data and scheme operations " + << "are not supported. Use separate queries for different types of operations."; + + ctx.AddError(YqlIssue(ctx.GetPosition(commit.Pos()), TIssuesIds::KIKIMR_MIXED_SCHEME_DATA_TX, message)); return nullptr; } diff --git a/ydb/core/kqp/provider/yql_kikimr_provider.h b/ydb/core/kqp/provider/yql_kikimr_provider.h index a743c6ceb4..3f6582eb3d 100644 --- a/ydb/core/kqp/provider/yql_kikimr_provider.h +++ b/ydb/core/kqp/provider/yql_kikimr_provider.h @@ -349,7 +349,14 @@ public: if (hasData && (newOp & KikimrSchemeOps()) || hasScheme && (newOp & KikimrDataOps())) { - issues.AddIssue(YqlIssue(pos, TIssuesIds::KIKIMR_MIXED_SCHEME_DATA_TX)); + TString message = "Cannot mix scheme and data operations inside transaction."; + + if (IsIn({EKikimrQueryType::YqlScript, EKikimrQueryType::YqlScriptStreaming}, queryType)) { + message = TStringBuilder() << message + << " Use COMMIT statement to indicate end of transaction between scheme and data operations."; + } + + issues.AddIssue(YqlIssue(pos, TIssuesIds::KIKIMR_MIXED_SCHEME_DATA_TX, message)); return {false, issues}; } diff --git a/ydb/core/kqp/provider/yql_kikimr_settings.cpp b/ydb/core/kqp/provider/yql_kikimr_settings.cpp index 115c0ee1e8..9ff5a4ccaa 100644 --- a/ydb/core/kqp/provider/yql_kikimr_settings.cpp +++ b/ydb/core/kqp/provider/yql_kikimr_settings.cpp @@ -121,7 +121,7 @@ bool TKikimrSettings::HasOptEnableOlapPushdown() const { } bool TKikimrSettings::HasOptUseFinalizeByKey() const { - return GetOptionalFlagValue(OptUseFinalizeByKey.Get()) == EOptionalFlag::Enabled; + return GetOptionalFlagValue(OptUseFinalizeByKey.Get()) != EOptionalFlag::Disabled; } EOptionalFlag TKikimrSettings::GetOptPredicateExtract() const { diff --git a/ydb/core/kqp/session_actor/kqp_session_actor.cpp b/ydb/core/kqp/session_actor/kqp_session_actor.cpp index 8c520eab9d..96c90f2144 100644 --- a/ydb/core/kqp/session_actor/kqp_session_actor.cpp +++ b/ydb/core/kqp/session_actor/kqp_session_actor.cpp @@ -879,13 +879,34 @@ public: } bool ExecutePhyTx(const TKqpPhyTxHolder::TConstPtr& tx, bool commit) { - if (tx && tx->GetType() == NKqpProto::TKqpPhyTx::TYPE_SCHEME) { - YQL_ENSURE(QueryState->TxCtx->EffectiveIsolationLevel == NKikimrKqp::ISOLATION_LEVEL_UNDEFINED); - YQL_ENSURE(tx->StagesSize() == 0); + if (tx) { + switch (tx->GetType()) { + case NKqpProto::TKqpPhyTx::TYPE_SCHEME: + YQL_ENSURE(tx->StagesSize() == 0); - SendToSchemeExecuter(tx); - ++QueryState->CurrentTx; - return false; + if (QueryState->TxCtx->EffectiveIsolationLevel != NKikimrKqp::ISOLATION_LEVEL_UNDEFINED) { + ReplyQueryError(Ydb::StatusIds::PRECONDITION_FAILED, + "Scheme operations cannot be executed inside transaction"); + return true; + } + + SendToSchemeExecuter(tx); + ++QueryState->CurrentTx; + return false; + + case NKqpProto::TKqpPhyTx::TYPE_DATA: + case NKqpProto::TKqpPhyTx::TYPE_GENERIC: + if (QueryState->TxCtx->EffectiveIsolationLevel == NKikimrKqp::ISOLATION_LEVEL_UNDEFINED) { + ReplyQueryError(Ydb::StatusIds::PRECONDITION_FAILED, + "Data operations cannot be executed outside of transaction"); + return true; + } + + break; + + default: + break; + } } auto& txCtx = *QueryState->TxCtx; @@ -1479,6 +1500,12 @@ public: } LWTRACK(KqpSessionReplyError, QueryState->Orbit, TStringBuilder() << status); } + + Counters->ReportResponseStatus(Settings.DbCounters, record.ByteSize(), record.GetYdbStatus()); + for (auto& issue : record.GetResponse().GetQueryIssues()) { + Counters->ReportIssues(Settings.DbCounters, CachedIssueCounters, issue); + } + Send(QueryState->Sender, QueryResponse.release(), 0, QueryState->ProxyRequestId); LOG_D("Sent query response back to proxy, proxyRequestId: " << QueryState->ProxyRequestId << ", proxyId: " << QueryState->Sender.ToString()); @@ -1995,6 +2022,8 @@ private: TActorId Owner; TString SessionId; + // cached lookups to issue counters + THashMap<ui32, ::NMonitoring::TDynamicCounters::TCounterPtr> CachedIssueCounters; TInstant CreationTime; TIntrusivePtr<TKqpCounters> Counters; TIntrusivePtr<TKqpRequestCounters> RequestCounters; diff --git a/ydb/core/kqp/session_actor/kqp_worker_common.cpp b/ydb/core/kqp/session_actor/kqp_worker_common.cpp index b57d707f13..ed0dcaaa07 100644 --- a/ydb/core/kqp/session_actor/kqp_worker_common.cpp +++ b/ydb/core/kqp/session_actor/kqp_worker_common.cpp @@ -173,4 +173,14 @@ bool IsSameProtoType(const NKikimrMiniKQL::TType& actual, const NKikimrMiniKQL:: } } +bool CanCacheQuery(const NKqpProto::TKqpPhyQuery& query) { + for (const auto& tx : query.GetTransactions()) { + if (tx.GetType() == NKqpProto::TKqpPhyTx::TYPE_SCHEME) { + return false; + } + } + + return true; +} + } // namespace NKikimr::NKqp diff --git a/ydb/core/kqp/session_actor/kqp_worker_common.h b/ydb/core/kqp/session_actor/kqp_worker_common.h index 5edb413c5a..ad32008494 100644 --- a/ydb/core/kqp/session_actor/kqp_worker_common.h +++ b/ydb/core/kqp/session_actor/kqp_worker_common.h @@ -127,6 +127,8 @@ inline ETableReadType ExtractMostHeavyReadType(const TString& queryPlan) { return maxReadType; } +bool CanCacheQuery(const NKqpProto::TKqpPhyQuery& query); + void SlowLogQuery(const TActorContext &ctx, const NYql::TKikimrConfiguration* config, const TKqpRequestInfo& requestInfo, const TDuration& duration, Ydb::StatusIds::StatusCode status, const TIntrusiveConstPtr<NACLib::TUserToken>& userToken, ui64 parametersSize, NKikimrKqp::TEvQueryResponse *record, const std::function<TString()> extractQueryText); diff --git a/ydb/core/kqp/ut/common/kqp_ut_common.cpp b/ydb/core/kqp/ut/common/kqp_ut_common.cpp index 415840fae9..f4068b12f8 100644 --- a/ydb/core/kqp/ut/common/kqp_ut_common.cpp +++ b/ydb/core/kqp/ut/common/kqp_ut_common.cpp @@ -722,6 +722,11 @@ TCollectedStreamResult CollectStreamResultImpl(TIterator& it) { auto streamPart = it.ReadNext().GetValueSync(); if (!streamPart.IsSuccess()) { UNIT_ASSERT_C(streamPart.EOS(), streamPart.GetIssues().ToString()); + const auto& meta = streamPart.GetResponseMetadata(); + auto mit = meta.find("x-ydb-consumed-units"); + if (mit != meta.end()) { + res.ConsumedRuFromHeader = std::stol(mit->second); + } break; } diff --git a/ydb/core/kqp/ut/common/kqp_ut_common.h b/ydb/core/kqp/ut/common/kqp_ut_common.h index acd8b8192b..8524f29afe 100644 --- a/ydb/core/kqp/ut/common/kqp_ut_common.h +++ b/ydb/core/kqp/ut/common/kqp_ut_common.h @@ -185,6 +185,7 @@ struct TCollectedStreamResult { TMaybe<TString> PlanJson; TMaybe<Ydb::TableStats::QueryStats> QueryStats; ui64 RowsCount = 0; + ui64 ConsumedRuFromHeader = 0; }; template<typename TIterator> diff --git a/ydb/core/kqp/ut/cost/kqp_cost_ut.cpp b/ydb/core/kqp/ut/cost/kqp_cost_ut.cpp index 80bc55fc62..2230fe4432 100644 --- a/ydb/core/kqp/ut/cost/kqp_cost_ut.cpp +++ b/ydb/core/kqp/ut/cost/kqp_cost_ut.cpp @@ -140,13 +140,15 @@ Y_UNIT_TEST_SUITE(KqpCost) { UNIT_ASSERT_VALUES_EQUAL(it.GetStatus(), EStatus::SUCCESS); auto res = CollectStreamResult(it); + UNIT_ASSERT(res.ConsumedRuFromHeader > 0); + CompareYson(R"( [ [[3500u];["None"];[1u];["Anna"]] ] )", res.ResultSetYson); - -/* const auto& stats = *res.QueryStats; +/* + const auto& stats = *res.QueryStats; Cerr << stats.DebugString() << Endl; UNIT_ASSERT_VALUES_EQUAL(stats.query_phases(0).table_access(0).reads().rows(), 1); @@ -154,7 +156,29 @@ Y_UNIT_TEST_SUITE(KqpCost) { */ } + Y_UNIT_TEST_TWIN(ScanScriptingRangeFullScan, SourceRead) { + TKikimrRunner kikimr(GetAppConfig(SourceRead)); + + NYdb::NScripting::TScriptingClient client(kikimr.GetDriver()); + auto query = Q_(R"( + SELECT * FROM `/Root/Test` WHERE Amount < 5000ul ORDER BY Group LIMIT 1; + )"); + + NYdb::NScripting::TExecuteYqlRequestSettings execSettings; + execSettings.CollectQueryStats(ECollectQueryStatsMode::Basic); + auto it = client.StreamExecuteYqlScript(query, execSettings).ExtractValueSync(); + UNIT_ASSERT_VALUES_EQUAL(it.GetStatus(), EStatus::SUCCESS); + auto res = CollectStreamResult(it); + + UNIT_ASSERT(res.ConsumedRuFromHeader > 0); + + CompareYson(R"( + [ + [[3500u];["None"];[1u];["Anna"]] + ] + )", res.ResultSetYson); + } } } diff --git a/ydb/core/kqp/ut/olap/kqp_olap_ut.cpp b/ydb/core/kqp/ut/olap/kqp_olap_ut.cpp index 999f939622..3cd09c5436 100644 --- a/ydb/core/kqp/ut/olap/kqp_olap_ut.cpp +++ b/ydb/core/kqp/ut/olap/kqp_olap_ut.cpp @@ -29,6 +29,7 @@ #include <fmt/format.h> #include <contrib/libs/apache/arrow/cpp/src/arrow/type_traits.h> +#include <ydb/core/formats/arrow/serializer/full.h> namespace NKikimr { namespace NKqp { @@ -265,7 +266,7 @@ Y_UNIT_TEST_SUITE(KqpOlap) { }; TDistribution GetDistribution(const bool verbose = false) { - const TString selectQuery = "PRAGMA Kikimr.OptUseFinalizeByKey='true';SELECT COUNT(*) as c, field FROM `" + TablePath + "` GROUP BY field ORDER BY field"; + const TString selectQuery = "SELECT COUNT(*) as c, field FROM `" + TablePath + "` GROUP BY field ORDER BY field"; auto tableClient = KikimrRunner.GetTableClient(); auto rows = ExecuteScanQuery(tableClient, selectQuery, verbose); @@ -513,7 +514,8 @@ Y_UNIT_TEST_SUITE(KqpOlap) { auto txId = resBeginTx.GetResult().tx_id(); auto batch = lHelper.TestArrowBatch(pathIdBegin, tsBegin, rowCount); - TString data = NArrow::SerializeBatchNoCompression(batch); + + TString data = NArrow::NSerialization::TFullDataSerializer(arrow::ipc::IpcWriteOptions::Defaults()).Serialize(batch); NLongTx::TLongTxWriteResult resWrite = client.Write(txId, testTable, txId, data, Ydb::LongTx::Data::APACHE_ARROW).GetValueSync(); @@ -534,7 +536,7 @@ Y_UNIT_TEST_SUITE(KqpOlap) { auto txId = resBeginTx.GetResult().tx_id(); auto batch = lHelper.TestArrowBatch(pathIdBegin, tsBegin, rowCount); - TString data = NArrow::SerializeBatchNoCompression(batch); + TString data = NArrow::NSerialization::TFullDataSerializer(arrow::ipc::IpcWriteOptions::Defaults()).Serialize(batch); NLongTx::TLongTxWriteResult resWrite = client.Write(txId, testTable, txId, data, Ydb::LongTx::Data::APACHE_ARROW).GetValueSync(); @@ -554,7 +556,7 @@ Y_UNIT_TEST_SUITE(KqpOlap) { auto txId = resBeginTx.GetResult().tx_id(); auto batch = lHelper.TestArrowBatch(); - TString data = NArrow::SerializeBatchNoCompression(batch); + TString data = NArrow::NSerialization::TFullDataSerializer(arrow::ipc::IpcWriteOptions::Defaults()).Serialize(batch); NLongTx::TLongTxWriteResult resWrite = client.Write(txId, testTable, txId, data, Ydb::LongTx::Data::APACHE_ARROW).GetValueSync(); @@ -1881,7 +1883,6 @@ Y_UNIT_TEST_SUITE(KqpOlap) { { TString query = R"( --!syntax_v1 - PRAGMA Kikimr.OptUseFinalizeByKey; SELECT level, COUNT(level) FROM `/Root/olapStore/olapTable` @@ -2119,7 +2120,6 @@ Y_UNIT_TEST_SUITE(KqpOlap) { if (!Pushdown) { queryFixed << "PRAGMA Kikimr.OptEnableOlapPushdown = \"false\";" << Endl; } - queryFixed << "PRAGMA Kikimr.OptUseFinalizeByKey;" << Endl; queryFixed << Query << Endl; Cerr << "REQUEST:\n" << queryFixed << Endl; diff --git a/ydb/core/kqp/ut/scheme/kqp_scheme_ut.cpp b/ydb/core/kqp/ut/scheme/kqp_scheme_ut.cpp index 26669fa883..7f5bf077f3 100644 --- a/ydb/core/kqp/ut/scheme/kqp_scheme_ut.cpp +++ b/ydb/core/kqp/ut/scheme/kqp_scheme_ut.cpp @@ -8,6 +8,7 @@ #include <ydb/public/sdk/cpp/client/draft/ydb_long_tx.h> #include <ydb/core/testlib/cs_helper.h> #include <ydb/core/testlib/common_helper.h> +#include <ydb/core/formats/arrow/serializer/full.h> #include <library/cpp/threading/local_executor/local_executor.h> @@ -3666,6 +3667,115 @@ Y_UNIT_TEST_SUITE(KqpScheme) { } } + Y_UNIT_TEST(ChangefeedTopicPartitions) { + using namespace NTopic; + + TKikimrRunner kikimr(TKikimrSettings().SetPQConfig(DefaultPQConfig())); + auto pq = TTopicClient(kikimr.GetDriver(), TTopicClientSettings().Database("/Root")); + auto db = kikimr.GetTableClient(); + auto session = db.CreateSession().GetValueSync().GetSession(); + + { // Uint64 key + auto query = R"( + --!syntax_v1 + CREATE TABLE `/Root/table_1` ( + Key Uint64, + Value String, + PRIMARY KEY (Key) + ); + )"; + + auto result = session.ExecuteSchemeQuery(query).GetValueSync(); + UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString()); + } + + { // default + auto query = R"( + --!syntax_v1 + ALTER TABLE `/Root/table_1` ADD CHANGEFEED `feed_1` WITH ( + MODE = 'KEYS_ONLY', FORMAT = 'JSON' + ); + )"; + + const auto result = session.ExecuteSchemeQuery(query).GetValueSync(); + UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString()); + + auto desc = pq.DescribeTopic("/Root/table_1/feed_1").ExtractValueSync(); + UNIT_ASSERT_C(desc.IsSuccess(), desc.GetIssues().ToString()); + UNIT_ASSERT_VALUES_EQUAL(desc.GetTopicDescription().GetPartitions().size(), 1); + } + + { // custom + auto query = R"( + --!syntax_v1 + ALTER TABLE `/Root/table_1` ADD CHANGEFEED `feed_2` WITH ( + MODE = 'KEYS_ONLY', FORMAT = 'JSON', TOPIC_MIN_ACTIVE_PARTITIONS = 10 + ); + )"; + + const auto result = session.ExecuteSchemeQuery(query).GetValueSync(); + UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString()); + + auto desc = pq.DescribeTopic("/Root/table_1/feed_2").ExtractValueSync(); + UNIT_ASSERT_C(desc.IsSuccess(), desc.GetIssues().ToString()); + UNIT_ASSERT_VALUES_EQUAL(desc.GetTopicDescription().GetPartitions().size(), 10); + } + + { // non-positive (invalid) + auto query = R"( + --!syntax_v1 + ALTER TABLE `/Root/table_1` ADD CHANGEFEED `feed_3` WITH ( + MODE = 'KEYS_ONLY', FORMAT = 'JSON', TOPIC_MIN_ACTIVE_PARTITIONS = 0 + ); + )"; + + const auto result = session.ExecuteSchemeQuery(query).GetValueSync(); + UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::GENERIC_ERROR, result.GetIssues().ToString()); + } + + { // Utf8 key + auto query = R"( + --!syntax_v1 + CREATE TABLE `/Root/table_2` ( + Key Utf8, + Value String, + PRIMARY KEY (Key) + ); + )"; + + auto result = session.ExecuteSchemeQuery(query).GetValueSync(); + UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString()); + } + + { // default + auto query = R"( + --!syntax_v1 + ALTER TABLE `/Root/table_2` ADD CHANGEFEED `feed_1` WITH ( + MODE = 'KEYS_ONLY', FORMAT = 'JSON' + ); + )"; + + const auto result = session.ExecuteSchemeQuery(query).GetValueSync(); + UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString()); + + auto desc = pq.DescribeTopic("/Root/table_2/feed_1").ExtractValueSync(); + UNIT_ASSERT_C(desc.IsSuccess(), desc.GetIssues().ToString()); + UNIT_ASSERT_VALUES_EQUAL(desc.GetTopicDescription().GetPartitions().size(), 1); + } + + { // custom + auto query = R"( + --!syntax_v1 + ALTER TABLE `/Root/table_2` ADD CHANGEFEED `feed_2` WITH ( + MODE = 'KEYS_ONLY', FORMAT = 'JSON', TOPIC_MIN_ACTIVE_PARTITIONS = 10 + ); + )"; + + const auto result = session.ExecuteSchemeQuery(query).GetValueSync(); + UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::BAD_REQUEST, result.GetIssues().ToString()); + } + } + Y_UNIT_TEST(ChangefeedAttributes) { TKikimrRunner kikimr(TKikimrSettings().SetPQConfig(DefaultPQConfig())); auto db = kikimr.GetTableClient(); @@ -4352,10 +4462,10 @@ Y_UNIT_TEST_SUITE(KqpScheme) { auto schema = std::make_shared<arrow::Schema>( std::vector<std::shared_ptr<arrow::Field>>{ - arrow::field("CUint8", arrow::uint8()), - arrow::field("CInt8", arrow::int8()), - arrow::field("CUint16", arrow::uint16()), - arrow::field("CInt16", arrow::int16()) + arrow::field("CUint8", arrow::uint8(), false), + arrow::field("CInt8", arrow::int8(), false), + arrow::field("CUint16", arrow::uint16(), false), + arrow::field("CInt16", arrow::int16(), false) }); size_t rowsCount = 10; @@ -4908,7 +5018,7 @@ namespace { std::shared_ptr<arrow::Schema> GetArrowSchema(const TVector<TColumnSchema>& columns) { std::vector<std::shared_ptr<arrow::Field>> result; for (auto&& col : columns) { - result.push_back(BuildField(col.GetName(), col.GetType())); + result.push_back(BuildField(col.GetName(), col.GetType(), col.IsNullable())); } return std::make_shared<arrow::Schema>(result); } @@ -4923,48 +5033,48 @@ namespace { return JoinStrings(columnStr, ", "); } - std::shared_ptr<arrow::Field> BuildField(const TString name, const NScheme::TTypeId& typeId) const { + std::shared_ptr<arrow::Field> BuildField(const TString name, const NScheme::TTypeId& typeId, bool nullable) const { switch(typeId) { case NScheme::NTypeIds::Bool: - return arrow::field(name, arrow::boolean()); + return arrow::field(name, arrow::boolean(), nullable); case NScheme::NTypeIds::Int8: - return arrow::field(name, arrow::int8()); + return arrow::field(name, arrow::int8(), nullable); case NScheme::NTypeIds::Int16: - return arrow::field(name, arrow::int16()); + return arrow::field(name, arrow::int16(), nullable); case NScheme::NTypeIds::Int32: - return arrow::field(name, arrow::int32()); + return arrow::field(name, arrow::int32(), nullable); case NScheme::NTypeIds::Int64: - return arrow::field(name, arrow::int64()); + return arrow::field(name, arrow::int64(), nullable); case NScheme::NTypeIds::Uint8: - return arrow::field(name, arrow::uint8()); + return arrow::field(name, arrow::uint8(), nullable); case NScheme::NTypeIds::Uint16: - return arrow::field(name, arrow::uint16()); + return arrow::field(name, arrow::uint16(), nullable); case NScheme::NTypeIds::Uint32: - return arrow::field(name, arrow::uint32()); + return arrow::field(name, arrow::uint32(), nullable); case NScheme::NTypeIds::Uint64: - return arrow::field(name, arrow::uint64()); + return arrow::field(name, arrow::uint64(), nullable); case NScheme::NTypeIds::Float: - return arrow::field(name, arrow::float32()); + return arrow::field(name, arrow::float32(), nullable); case NScheme::NTypeIds::Double: - return arrow::field(name, arrow::float64()); + return arrow::field(name, arrow::float64(), nullable); case NScheme::NTypeIds::String: - return arrow::field(name, arrow::binary()); + return arrow::field(name, arrow::binary(), nullable); case NScheme::NTypeIds::Utf8: - return arrow::field(name, arrow::utf8()); + return arrow::field(name, arrow::utf8(), nullable); case NScheme::NTypeIds::Json: - return arrow::field(name, arrow::utf8()); + return arrow::field(name, arrow::utf8(), nullable); case NScheme::NTypeIds::Yson: - return arrow::field(name, arrow::binary()); + return arrow::field(name, arrow::binary(), nullable); case NScheme::NTypeIds::Date: - return arrow::field(name, arrow::uint16()); + return arrow::field(name, arrow::uint16(), nullable); case NScheme::NTypeIds::Datetime: - return arrow::field(name, arrow::uint32()); + return arrow::field(name, arrow::uint32(), nullable); case NScheme::NTypeIds::Timestamp: - return arrow::field(name, arrow::timestamp(arrow::TimeUnit::TimeUnit::MICRO)); + return arrow::field(name, arrow::timestamp(arrow::TimeUnit::TimeUnit::MICRO), nullable); case NScheme::NTypeIds::Interval: - return arrow::field(name, arrow::duration(arrow::TimeUnit::TimeUnit::MICRO)); + return arrow::field(name, arrow::duration(arrow::TimeUnit::TimeUnit::MICRO), nullable); case NScheme::NTypeIds::JsonDocument: - return arrow::field(name, arrow::binary()); + return arrow::field(name, arrow::binary(), nullable); } return nullptr; } @@ -5018,7 +5128,7 @@ namespace { auto txId = resBeginTx.GetResult().tx_id(); auto batch = updates.BuildArrow(); - TString data = NArrow::SerializeBatchNoCompression(batch); + TString data = NArrow::NSerialization::TFullDataSerializer(arrow::ipc::IpcWriteOptions::Defaults()).Serialize(batch); NLongTx::TLongTxWriteResult resWrite = LongTxClient.Write(txId, table.GetName(), txId, data, Ydb::LongTx::Data::APACHE_ARROW).GetValueSync(); @@ -5297,33 +5407,6 @@ Y_UNIT_TEST_SUITE(KqpOlapScheme) { testHelper.ReadData("SELECT new_column FROM `/Root/ColumnTableTest`", "[[#];[#];[[200u]]]"); } - Y_UNIT_TEST(AddColumnOldScheme) { - TKikimrSettings runnerSettings; - runnerSettings.WithSampleTables = false; - TTestHelper testHelper(runnerSettings); - - TVector<TTestHelper::TColumnSchema> schema = { - TTestHelper::TColumnSchema().SetName("id").SetType(NScheme::NTypeIds::Int32).SetNullable(false), - TTestHelper::TColumnSchema().SetName("resource_id").SetType(NScheme::NTypeIds::Utf8), - TTestHelper::TColumnSchema().SetName("level").SetType(NScheme::NTypeIds::Int32) - }; - - TTestHelper::TColumnTable testTable; - - testTable.SetName("/Root/ColumnTableTest").SetPrimaryKey({"id"}).SetSharding({"id"}).SetSchema(schema); - testHelper.CreateTable(testTable); - { - auto alterQuery = TStringBuilder() << "ALTER TABLE `" << testTable.GetName() << "` ADD COLUMN new_column Uint64;"; - auto alterResult = testHelper.GetSession().ExecuteSchemeQuery(alterQuery).GetValueSync(); - UNIT_ASSERT_VALUES_EQUAL_C(alterResult.GetStatus(), EStatus::SUCCESS, alterResult.GetIssues().ToString()); - } - { - TTestHelper::TUpdatesBuilder tableInserter(testTable.GetArrowSchema(schema)); - tableInserter.AddRow().Add(1).Add("test_res_1").AddNull(); - testHelper.InsertData(testTable, tableInserter, {}, EStatus::SCHEME_ERROR); - } - } - Y_UNIT_TEST(AddColumnOldSchemeBulkUpsert) { TKikimrSettings runnerSettings; runnerSettings.WithSampleTables = false; @@ -5464,6 +5547,41 @@ Y_UNIT_TEST_SUITE(KqpOlapScheme) { } } + Y_UNIT_TEST(NullColumnError) { + TKikimrSettings runnerSettings; + runnerSettings.WithSampleTables = false; + TTestHelper testHelper(runnerSettings); + + TVector<TTestHelper::TColumnSchema> schema = { + TTestHelper::TColumnSchema().SetName("id").SetType(NScheme::NTypeIds::Int32).SetNullable(false), + TTestHelper::TColumnSchema().SetName("resource_id").SetType(NScheme::NTypeIds::Utf8).SetNullable(false), + TTestHelper::TColumnSchema().SetName("level").SetType(NScheme::NTypeIds::Int32).SetNullable(false) + }; + TTestHelper::TColumnTable testTable; + testTable.SetName("/Root/ColumnTableTest").SetPrimaryKey({"id"}).SetSharding({"id"}).SetSchema(schema); + testHelper.CreateTable(testTable); + + TVector<TTestHelper::TColumnSchema> schemaWithNull = { + TTestHelper::TColumnSchema().SetName("id").SetType(NScheme::NTypeIds::Int32).SetNullable(false), + TTestHelper::TColumnSchema().SetName("resource_id").SetType(NScheme::NTypeIds::Utf8).SetNullable(false), + TTestHelper::TColumnSchema().SetName("level").SetType(NScheme::NTypeIds::Int32) + }; + { + TTestHelper::TUpdatesBuilder tableInserter(testTable.GetArrowSchema(schemaWithNull)); + tableInserter.AddRow().Add(1).Add("test_res_1").AddNull(); + tableInserter.AddRow().Add(2).Add("test_res_2").Add(123); + testHelper.InsertData(testTable, tableInserter, {}, EStatus::GENERIC_ERROR); + } + { + TTestHelper::TUpdatesBuilder tableInserter(testTable.GetArrowSchema(schemaWithNull)); + tableInserter.AddRow().Add(1).Add("test_res_1").AddNull(); + tableInserter.AddRow().Add(2).Add("test_res_2").Add(123); + testHelper.BulkUpsert(testTable, tableInserter, Ydb::StatusIds::GENERIC_ERROR); + } + + testHelper.ReadData("SELECT * FROM `/Root/ColumnTableTest` WHERE id=1", "[]"); + } + Y_UNIT_TEST(DropColumn) { TKikimrSettings runnerSettings; runnerSettings.WithSampleTables = false; diff --git a/ydb/core/kqp/ut/service/CMakeLists.darwin-x86_64.txt b/ydb/core/kqp/ut/service/CMakeLists.darwin-x86_64.txt index ce01e6c4d2..b018c01b46 100644 --- a/ydb/core/kqp/ut/service/CMakeLists.darwin-x86_64.txt +++ b/ydb/core/kqp/ut/service/CMakeLists.darwin-x86_64.txt @@ -37,7 +37,8 @@ target_link_options(ydb-core-kqp-ut-service PRIVATE ) target_sources(ydb-core-kqp-ut-service PRIVATE ${CMAKE_SOURCE_DIR}/ydb/core/kqp/ut/service/kqp_document_api_ut.cpp - ${CMAKE_SOURCE_DIR}/ydb/core/kqp/ut/service/kqp_query_service_ut.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/kqp/ut/service/kqp_qs_queries_ut.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/kqp/ut/service/kqp_qs_scripts_ut.cpp ${CMAKE_SOURCE_DIR}/ydb/core/kqp/ut/service/kqp_service_ut.cpp ) set_property( diff --git a/ydb/core/kqp/ut/service/CMakeLists.linux-aarch64.txt b/ydb/core/kqp/ut/service/CMakeLists.linux-aarch64.txt index 7bec8b6702..2af7a6dca8 100644 --- a/ydb/core/kqp/ut/service/CMakeLists.linux-aarch64.txt +++ b/ydb/core/kqp/ut/service/CMakeLists.linux-aarch64.txt @@ -40,7 +40,8 @@ target_link_options(ydb-core-kqp-ut-service PRIVATE ) target_sources(ydb-core-kqp-ut-service PRIVATE ${CMAKE_SOURCE_DIR}/ydb/core/kqp/ut/service/kqp_document_api_ut.cpp - ${CMAKE_SOURCE_DIR}/ydb/core/kqp/ut/service/kqp_query_service_ut.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/kqp/ut/service/kqp_qs_queries_ut.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/kqp/ut/service/kqp_qs_scripts_ut.cpp ${CMAKE_SOURCE_DIR}/ydb/core/kqp/ut/service/kqp_service_ut.cpp ) set_property( diff --git a/ydb/core/kqp/ut/service/CMakeLists.linux-x86_64.txt b/ydb/core/kqp/ut/service/CMakeLists.linux-x86_64.txt index 6850a1fbd8..47e0757159 100644 --- a/ydb/core/kqp/ut/service/CMakeLists.linux-x86_64.txt +++ b/ydb/core/kqp/ut/service/CMakeLists.linux-x86_64.txt @@ -41,7 +41,8 @@ target_link_options(ydb-core-kqp-ut-service PRIVATE ) target_sources(ydb-core-kqp-ut-service PRIVATE ${CMAKE_SOURCE_DIR}/ydb/core/kqp/ut/service/kqp_document_api_ut.cpp - ${CMAKE_SOURCE_DIR}/ydb/core/kqp/ut/service/kqp_query_service_ut.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/kqp/ut/service/kqp_qs_queries_ut.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/kqp/ut/service/kqp_qs_scripts_ut.cpp ${CMAKE_SOURCE_DIR}/ydb/core/kqp/ut/service/kqp_service_ut.cpp ) set_property( diff --git a/ydb/core/kqp/ut/service/CMakeLists.windows-x86_64.txt b/ydb/core/kqp/ut/service/CMakeLists.windows-x86_64.txt index e8ea424062..69865b7eee 100644 --- a/ydb/core/kqp/ut/service/CMakeLists.windows-x86_64.txt +++ b/ydb/core/kqp/ut/service/CMakeLists.windows-x86_64.txt @@ -30,7 +30,8 @@ target_link_libraries(ydb-core-kqp-ut-service PUBLIC ) target_sources(ydb-core-kqp-ut-service PRIVATE ${CMAKE_SOURCE_DIR}/ydb/core/kqp/ut/service/kqp_document_api_ut.cpp - ${CMAKE_SOURCE_DIR}/ydb/core/kqp/ut/service/kqp_query_service_ut.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/kqp/ut/service/kqp_qs_queries_ut.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/kqp/ut/service/kqp_qs_scripts_ut.cpp ${CMAKE_SOURCE_DIR}/ydb/core/kqp/ut/service/kqp_service_ut.cpp ) set_property( diff --git a/ydb/core/kqp/ut/service/kqp_qs_queries_ut.cpp b/ydb/core/kqp/ut/service/kqp_qs_queries_ut.cpp new file mode 100644 index 0000000000..64d2e3b6e4 --- /dev/null +++ b/ydb/core/kqp/ut/service/kqp_qs_queries_ut.cpp @@ -0,0 +1,610 @@ +#include <ydb/core/kqp/counters/kqp_counters.h> +#include <ydb/core/kqp/ut/common/kqp_ut_common.h> +#include <ydb/public/lib/ut_helpers/ut_helpers_query.h> +#include <ydb/public/sdk/cpp/client/ydb_operation/operation.h> +#include <ydb/public/sdk/cpp/client/ydb_proto/accessor.h> +#include <ydb/public/sdk/cpp/client/ydb_types/operation/operation.h> + +#include <ydb/core/kqp/counters/kqp_counters.h> + +namespace NKikimr { +namespace NKqp { + +using namespace NYdb; +using namespace NYdb::NQuery; + +Y_UNIT_TEST_SUITE(KqpQueryService) { + Y_UNIT_TEST(SessionFromPoolError) { + auto kikimr = DefaultKikimrRunner(); + auto settings = NYdb::NQuery::TClientSettings().Database("WrongDB"); + auto db = kikimr.GetQueryClient(settings); + + auto result = db.GetSession().GetValueSync(); + UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::NOT_FOUND, result.GetIssues().ToString()); + } + + Y_UNIT_TEST(SessionFromPoolSuccess) { + auto kikimr = DefaultKikimrRunner(); + NKqp::TKqpCounters counters(kikimr.GetTestServer().GetRuntime()->GetAppData().Counters); + + { + auto db = kikimr.GetQueryClient(); + + TString id; + { + auto result = db.GetSession().GetValueSync(); + UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString()); + UNIT_ASSERT(result.GetSession().GetId()); + id = result.GetSession().GetId(); + } + { + auto result = db.GetSession().GetValueSync(); + UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString()); + UNIT_ASSERT_VALUES_EQUAL(result.GetSession().GetId(), id); + } + } + WaitForZeroSessions(counters); + } + + Y_UNIT_TEST(QueryOnClosedSession) { + auto kikimr = DefaultKikimrRunner(); + auto clientConfig = NGRpcProxy::TGRpcClientConfig(kikimr.GetEndpoint()); + NKqp::TKqpCounters counters(kikimr.GetTestServer().GetRuntime()->GetAppData().Counters); + + { + auto db = kikimr.GetQueryClient(); + + TString id; + { + auto result = db.GetSession().GetValueSync(); + UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString()); + UNIT_ASSERT(result.GetSession().GetId()); + auto session = result.GetSession(); + id = session.GetId(); + + bool allDoneOk = true; + NTestHelpers::CheckDelete(clientConfig, id, Ydb::StatusIds::SUCCESS, allDoneOk); + + UNIT_ASSERT(allDoneOk); + + auto execResult = session.ExecuteQuery("SELECT 1;", + NYdb::NQuery::TTxControl::BeginTx().CommitTx()).ExtractValueSync(); + + UNIT_ASSERT_VALUES_EQUAL(execResult.GetStatus(), EStatus::BAD_SESSION); + } + // closed session must be removed from session pool + { + auto result = db.GetSession().GetValueSync(); + UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString()); + UNIT_ASSERT(result.GetSession().GetId() != id); + } + } + WaitForZeroSessions(counters); + } + + Y_UNIT_TEST(StreamExecuteQueryPure) { + auto kikimr = DefaultKikimrRunner(); + auto db = kikimr.GetQueryClient(); + + auto params = TParamsBuilder() + .AddParam("$value").Int64(17).Build() + .Build(); + + auto it = db.StreamExecuteQuery(R"( + DECLARE $value As Int64; + SELECT $value; + )", TTxControl::BeginTx().CommitTx(), params).ExtractValueSync(); + UNIT_ASSERT_C(it.IsSuccess(), it.GetIssues().ToString()); + + ui64 count = 0; + for (;;) { + auto streamPart = it.ReadNext().GetValueSync(); + if (!streamPart.IsSuccess()) { + UNIT_ASSERT_C(streamPart.EOS(), streamPart.GetIssues().ToString()); + break; + } + + if (streamPart.HasResultSet()) { + auto resultSet = streamPart.ExtractResultSet(); + count += resultSet.RowsCount(); + } + } + + UNIT_ASSERT_VALUES_EQUAL(count, 1); + } + + Y_UNIT_TEST(ExecuteQueryPure) { + auto kikimr = DefaultKikimrRunner(); + auto db = kikimr.GetQueryClient(); + + auto params = TParamsBuilder() + .AddParam("$value").Int64(17).Build() + .Build(); + + auto result = db.ExecuteQuery(R"( + DECLARE $value As Int64; + SELECT $value; + )", TTxControl::BeginTx().CommitTx(), params).ExtractValueSync(); + UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString()); + + CompareYson(R"([[17]])", FormatResultSetYson(result.GetResultSet(0))); + } + + Y_UNIT_TEST(StreamExecuteQuery) { + auto kikimr = DefaultKikimrRunner(); + auto db = kikimr.GetQueryClient(); + + auto it = db.StreamExecuteQuery(R"( + SELECT Key, Value2 FROM TwoShard WHERE Value2 > 0; + )", TTxControl::BeginTx().CommitTx()).ExtractValueSync(); + UNIT_ASSERT_C(it.IsSuccess(), it.GetIssues().ToString()); + + ui64 count = 0; + for (;;) { + auto streamPart = it.ReadNext().GetValueSync(); + if (!streamPart.IsSuccess()) { + UNIT_ASSERT_C(streamPart.EOS(), streamPart.GetIssues().ToString()); + break; + } + + if (streamPart.HasResultSet()) { + auto resultSet = streamPart.ExtractResultSet(); + count += resultSet.RowsCount(); + } + } + + UNIT_ASSERT_VALUES_EQUAL(count, 2); + } + + Y_UNIT_TEST(ExecuteQuery) { + auto kikimr = DefaultKikimrRunner(); + auto db = kikimr.GetQueryClient(); + + auto result = db.ExecuteQuery(R"( + SELECT Key, Value2 FROM TwoShard WHERE Value2 > 0 ORDER BY Key; + )", TTxControl::BeginTx().CommitTx()).ExtractValueSync(); + UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString()); + + CompareYson(R"([ + [[3u];[1]]; + [[4000000003u];[1]] + ])", FormatResultSetYson(result.GetResultSet(0))); + } + + Y_UNIT_TEST(ExecuteQueryPg) { + auto kikimr = DefaultKikimrRunner(); + auto db = kikimr.GetQueryClient(); + + auto settings = TExecuteQuerySettings() + .Syntax(ESyntax::Pg); + + auto result = db.ExecuteQuery(R"( + SELECT * FROM (VALUES + (1::int8, 'one'), + (2::int8, 'two'), + (3::int8, 'three') + ) AS t; + )", TTxControl::BeginTx().CommitTx(), settings).ExtractValueSync(); + UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString()); + + CompareYson(R"([ + ["1";"one"]; + ["2";"two"]; + ["3";"three"] + ])", FormatResultSetYson(result.GetResultSet(0))); + } + + //KIKIMR-18492 + Y_UNIT_TEST(ExecuteQueryPgTableSelect) { + TKikimrRunner kikimr(NKqp::TKikimrSettings().SetWithSampleTables(false)); + auto settings = TExecuteQuerySettings() + .Syntax(ESyntax::Pg); + { + auto db = kikimr.GetTableClient(); + auto session = db.CreateSession().GetValueSync().GetSession(); + auto result = session.ExecuteSchemeQuery(R"( + CREATE TABLE test (id int8,PRIMARY KEY (id)))" + ).GetValueSync(); + + UNIT_ASSERT_C(result.IsSuccess(), result.GetIssues().ToString()); + } + { + auto db = kikimr.GetQueryClient(); + auto result = db.ExecuteQuery( + "SELECT * FROM test", + TTxControl::BeginTx().CommitTx(), settings + ).ExtractValueSync(); + + UNIT_ASSERT_C(result.IsSuccess(), result.GetIssues().ToString()); + CompareYson(R"([])", FormatResultSetYson(result.GetResultSet(0))); + } + } + + Y_UNIT_TEST(ExecuteQueryScalar) { + auto kikimr = DefaultKikimrRunner(); + auto db = kikimr.GetQueryClient(); + + auto result = db.ExecuteQuery(R"( + SELECT COUNT(*) FROM EightShard; + )", TTxControl::BeginTx().CommitTx()).ExtractValueSync(); + UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString()); + + CompareYson(R"([[24u]])", FormatResultSetYson(result.GetResultSet(0))); + } + + Y_UNIT_TEST(ExecuteQueryMultiResult) { + auto kikimr = DefaultKikimrRunner(); + auto db = kikimr.GetQueryClient(); + + auto settings = TExecuteQuerySettings() + .StatsMode(EStatsMode::Basic); + + auto result = db.ExecuteQuery(R"( + SELECT * FROM EightShard WHERE Text = "Value2" AND Data = 1 ORDER BY Key; + SELECT * FROM TwoShard WHERE Key < 10 ORDER BY Key; + )", TTxControl::BeginTx().CommitTx(), settings).ExtractValueSync(); + UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString()); + + auto& stats = NYdb::TProtoAccessor::GetProto(*result.GetStats()); + UNIT_ASSERT_VALUES_EQUAL(stats.query_phases().size(), 1); + + CompareYson(R"([ + [[1];[202u];["Value2"]]; + [[1];[502u];["Value2"]]; + [[1];[802u];["Value2"]]])", FormatResultSetYson(result.GetResultSet(0))); + CompareYson(R"([ + [[1u];["One"];[-1]]; + [[2u];["Two"];[0]]; + [[3u];["Three"];[1]]])", FormatResultSetYson(result.GetResultSet(1))); + } + + Y_UNIT_TEST(ExecuteQueryMultiScalar) { + auto kikimr = DefaultKikimrRunner(); + auto db = kikimr.GetQueryClient(); + + auto result = db.ExecuteQuery(R"( + SELECT COUNT(*) FROM EightShard; + SELECT COUNT(*) FROM TwoShard; + )", TTxControl::BeginTx().CommitTx()).ExtractValueSync(); + UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString()); + + CompareYson(R"([[24u]])", FormatResultSetYson(result.GetResultSet(0))); + CompareYson(R"([[6u]])", FormatResultSetYson(result.GetResultSet(1))); + } + + Y_UNIT_TEST(StreamExecuteQueryMultiResult) { + auto kikimr = DefaultKikimrRunner(); + auto db = kikimr.GetQueryClient(); + + auto it = db.StreamExecuteQuery(R"( + SELECT * FROM EightShard WHERE Text = "Value2" AND Data = 1 ORDER BY Key; + SELECT 2; + SELECT * FROM TwoShard WHERE Key < 10 ORDER BY Key; + )", TTxControl::BeginTx().CommitTx()).ExtractValueSync(); + UNIT_ASSERT_C(it.IsSuccess(), it.GetIssues().ToString()); + + ui64 lastResultSetIndex = 0; + ui64 count = 0; + for (;;) { + auto streamPart = it.ReadNext().GetValueSync(); + if (!streamPart.IsSuccess()) { + UNIT_ASSERT_C(streamPart.EOS(), streamPart.GetIssues().ToString()); + break; + } + + if (streamPart.HasResultSet()) { + if (streamPart.GetResultSetIndex() != lastResultSetIndex) { + UNIT_ASSERT_VALUES_EQUAL(streamPart.GetResultSetIndex(), lastResultSetIndex + 1); + ++lastResultSetIndex; + } + + auto resultSet = streamPart.ExtractResultSet(); + count += resultSet.RowsCount(); + } + } + + UNIT_ASSERT_VALUES_EQUAL(count, 7); + } + + Y_UNIT_TEST(Write) { + auto kikimr = DefaultKikimrRunner(); + auto db = kikimr.GetQueryClient(); + + auto result = db.ExecuteQuery(R"( + UPSERT INTO TwoShard (Key, Value2) VALUES(0, 101); + + SELECT Value2 FROM TwoShard WHERE Key = 0; + )", TTxControl::BeginTx().CommitTx()).ExtractValueSync(); + UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString()); + + CompareYson(R"([[[101]]])", FormatResultSetYson(result.GetResultSet(0))); + } + + Y_UNIT_TEST(Explain) { + auto kikimr = DefaultKikimrRunner(); + auto db = kikimr.GetQueryClient(); + + auto params = TParamsBuilder() + .AddParam("$value").Int64(17).Build() + .Build(); + + auto settings = TExecuteQuerySettings() + .ExecMode(EExecMode::Explain); + + auto result = db.ExecuteQuery(R"( + DECLARE $value As Int64; + SELECT $value; + )", TTxControl::NoTx(), params, settings).ExtractValueSync(); + UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString()); + UNIT_ASSERT(result.GetResultSets().empty()); + + UNIT_ASSERT(result.GetStats().Defined()); + UNIT_ASSERT(result.GetStats()->GetPlan().Defined()); + + NJson::TJsonValue plan; + NJson::ReadJsonTree(*result.GetStats()->GetPlan(), &plan, true); + UNIT_ASSERT(ValidatePlanNodeIds(plan)); + } + + Y_UNIT_TEST(ExecStats) { + auto kikimr = DefaultKikimrRunner(); + auto db = kikimr.GetQueryClient(); + + auto params = TParamsBuilder() + .AddParam("$value").Uint32(10).Build() + .Build(); + + auto settings = TExecuteQuerySettings() + .StatsMode(EStatsMode::Basic); + + auto result = db.ExecuteQuery(R"( + DECLARE $value As Uint32; + SELECT * FROM TwoShard WHERE Key < $value; + )", TTxControl::BeginTx().CommitTx(), params, settings).ExtractValueSync(); + UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString()); + + UNIT_ASSERT_VALUES_EQUAL(result.GetResultSet(0).RowsCount(), 3); + UNIT_ASSERT(result.GetStats().Defined()); + UNIT_ASSERT(!result.GetStats()->GetPlan().Defined()); + + auto& stats = NYdb::TProtoAccessor::GetProto(*result.GetStats()); + UNIT_ASSERT_VALUES_EQUAL(stats.query_phases().size(), 1); + } + + Y_UNIT_TEST(ExecStatsPlan) { + auto kikimr = DefaultKikimrRunner(); + auto db = kikimr.GetQueryClient(); + + auto params = TParamsBuilder() + .AddParam("$value").Uint32(10).Build() + .Build(); + + auto settings = TExecuteQuerySettings() + .StatsMode(EStatsMode::Full); + + auto result = db.ExecuteQuery(R"( + DECLARE $value As Uint32; + SELECT * FROM TwoShard WHERE Key < $value; + )", TTxControl::BeginTx().CommitTx(), params, settings).ExtractValueSync(); + UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString()); + + UNIT_ASSERT_VALUES_EQUAL(result.GetResultSet(0).RowsCount(), 3); + UNIT_ASSERT(result.GetStats().Defined()); + UNIT_ASSERT(result.GetStats()->GetPlan().Defined()); + + NJson::TJsonValue plan; + NJson::ReadJsonTree(*result.GetStats()->GetPlan(), &plan, true); + + auto stages = FindPlanStages(plan); + + i64 totalTasks = 0; + for (const auto& stage : stages) { + totalTasks += stage.GetMapSafe().at("Stats").GetMapSafe().at("TotalTasks").GetIntegerSafe(); + } + UNIT_ASSERT_VALUES_EQUAL(totalTasks, 2); + } + + Y_UNIT_TEST(Ddl) { + NKikimrConfig::TAppConfig appConfig; + appConfig.MutableTableServiceConfig()->SetEnablePreparedDdl(true); + auto setting = NKikimrKqp::TKqpSetting(); + auto serverSettings = TKikimrSettings() + .SetAppConfig(appConfig) + .SetKqpSettings({setting}); + + TKikimrRunner kikimr(serverSettings); + auto db = kikimr.GetQueryClient(); + + auto result = db.ExecuteQuery(R"( + CREATE TABLE TestDdl ( + Key Uint64, + Value String, + PRIMARY KEY (Key) + ); + )", TTxControl::NoTx()).ExtractValueSync(); + UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString()); + UNIT_ASSERT(result.GetResultSets().empty()); + + result = db.ExecuteQuery(R"( + UPSERT INTO TestDdl (Key, Value) VALUES (1, "One"); + SELECT * FROM TestDdl; + )", TTxControl::BeginTx().CommitTx()).ExtractValueSync(); + UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString()); + + CompareYson(R"([[[1u];["One"]]])", FormatResultSetYson(result.GetResultSet(0))); + + /* + result = db.ExecuteQuery(R"( + DROP TABLE TestDdl; + )", TTxControl::NoTx()).ExtractValueSync(); + UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString()); + + result = db.ExecuteQuery(R"( + SELECT * FROM TestDdl; + )", TTxControl::BeginTx().CommitTx()).ExtractValueSync(); + UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SCHEME_ERROR, result.GetIssues().ToString()); + */ + } + + Y_UNIT_TEST(DdlCache) { + NKikimrConfig::TAppConfig appConfig; + appConfig.MutableTableServiceConfig()->SetEnablePreparedDdl(true); + auto setting = NKikimrKqp::TKqpSetting(); + auto serverSettings = TKikimrSettings() + .SetAppConfig(appConfig) + .SetKqpSettings({setting}); + + TKikimrRunner kikimr(serverSettings); + auto db = kikimr.GetQueryClient(); + + auto settings = TExecuteQuerySettings() + .StatsMode(EStatsMode::Basic); + + auto result = db.ExecuteQuery(R"( + CREATE TABLE TestDdl ( + Key Uint64, + Value String, + PRIMARY KEY (Key) + ); + )", TTxControl::NoTx(), settings).ExtractValueSync(); + UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString()); + + auto stats = NYdb::TProtoAccessor::GetProto(*result.GetStats()); + UNIT_ASSERT_VALUES_EQUAL(stats.compilation().from_cache(), false); + + { + // TODO: Switch to query service. + auto session = kikimr.GetTableClient().CreateSession().GetValueSync().GetSession(); + + UNIT_ASSERT(session.ExecuteSchemeQuery(R"( + DROP TABLE TestDdl; + )").GetValueSync().IsSuccess()); + } + + result = db.ExecuteQuery(R"( + CREATE TABLE TestDdl ( + Key Uint64, + Value String, + PRIMARY KEY (Key) + ); + )", TTxControl::NoTx(), settings).ExtractValueSync(); + UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString()); + + stats = NYdb::TProtoAccessor::GetProto(*result.GetStats()); + UNIT_ASSERT_VALUES_EQUAL(stats.compilation().from_cache(), false); + } + + Y_UNIT_TEST(DdlTx) { + NKikimrConfig::TAppConfig appConfig; + appConfig.MutableTableServiceConfig()->SetEnablePreparedDdl(true); + auto setting = NKikimrKqp::TKqpSetting(); + auto serverSettings = TKikimrSettings() + .SetAppConfig(appConfig) + .SetKqpSettings({setting}); + + TKikimrRunner kikimr(serverSettings); + auto db = kikimr.GetQueryClient(); + + auto result = db.ExecuteQuery(R"( + CREATE TABLE TestDdl ( + Key Uint64, + Value String, + PRIMARY KEY (Key) + ); + )", TTxControl::BeginTx().CommitTx()).ExtractValueSync(); + UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::PRECONDITION_FAILED, result.GetIssues().ToString()); + } + + Y_UNIT_TEST(DdlMixedDml) { + NKikimrConfig::TAppConfig appConfig; + appConfig.MutableTableServiceConfig()->SetEnablePreparedDdl(true); + auto setting = NKikimrKqp::TKqpSetting(); + auto serverSettings = TKikimrSettings() + .SetAppConfig(appConfig) + .SetKqpSettings({setting}); + + TKikimrRunner kikimr(serverSettings); + auto db = kikimr.GetQueryClient(); + + auto result = db.ExecuteQuery(R"( + CREATE TABLE TestDdl ( + Key Uint64, + Value String, + PRIMARY KEY (Key) + ); + + UPSERT INTO TestDdl (Key, Value) VALUES (1, "One"); + )", TTxControl::NoTx()).ExtractValueSync(); + UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::GENERIC_ERROR, result.GetIssues().ToString()); + UNIT_ASSERT(HasIssue(result.GetIssues(), NYql::TIssuesIds::KIKIMR_MIXED_SCHEME_DATA_TX)); + } + + Y_UNIT_TEST(DmlNoTx) { + auto kikimr = DefaultKikimrRunner(); + auto db = kikimr.GetQueryClient(); + + auto result = db.ExecuteQuery(R"( + UPSERT INTO KeyValue (Key, Value) VALUES (3, "Three"); + SELECT * FROM KeyValue; + )", TTxControl::NoTx()).ExtractValueSync(); + UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::PRECONDITION_FAILED, result.GetIssues().ToString()); + } + + Y_UNIT_TEST(MaterializeTxResults) { + auto kikimr = DefaultKikimrRunner(); + auto db = kikimr.GetQueryClient(); + + auto result = db.ExecuteQuery(R"( + DELETE FROM KeyValue; + )", TTxControl::BeginTx().CommitTx()).ExtractValueSync(); + UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString()); + + result = db.ExecuteQuery(R"( + SELECT * FROM KeyValue; + )", TTxControl::BeginTx().CommitTx()).ExtractValueSync(); + UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString()); + + CompareYson(R"([])", FormatResultSetYson(result.GetResultSet(0))); + } + + Y_UNIT_TEST(CloseConnection) { + auto kikimr = DefaultKikimrRunner(); + + NKqp::TKqpCounters counters(kikimr.GetTestServer().GetRuntime()->GetAppData().Counters); + + int maxTimeoutMs = 100; + + for (int i = 1; i < maxTimeoutMs; i++) { + auto it = kikimr.GetQueryClient().StreamExecuteQuery(R"( + SELECT * FROM `/Root/EightShard` WHERE Text = "Value1" ORDER BY Key; + )", TTxControl::BeginTx().CommitTx(), TExecuteQuerySettings().ClientTimeout(TDuration::MilliSeconds(i))).GetValueSync(); + + if (it.IsSuccess()) { + try { + for (;;) { + auto streamPart = it.ReadNext().GetValueSync(); + if (!streamPart.IsSuccess()) { + break; + } + } + } catch (const TStreamReadError& ex) { + UNIT_ASSERT_VALUES_EQUAL(ex.Status, NYdb::EStatus::CLIENT_DEADLINE_EXCEEDED); + } catch (const std::exception& ex) { + UNIT_ASSERT_C(false, "unknown exception during the test"); + } + } else { + UNIT_ASSERT_VALUES_EQUAL(it.GetStatus(), NYdb::EStatus::CLIENT_DEADLINE_EXCEEDED); + } + } + + WaitForZeroSessions(counters); + + for (const auto& service: kikimr.GetTestServer().GetGRpcServer().GetServices()) { + UNIT_ASSERT_VALUES_EQUAL(service->RequestsInProgress(), 0); + UNIT_ASSERT(!service->IsUnsafeToShutdown()); + } + } +} + +} // namespace NKqp +} // namespace NKikimr diff --git a/ydb/core/kqp/ut/service/kqp_query_service_ut.cpp b/ydb/core/kqp/ut/service/kqp_qs_scripts_ut.cpp index be6713105b..4575a63eb2 100644 --- a/ydb/core/kqp/ut/service/kqp_query_service_ut.cpp +++ b/ydb/core/kqp/ut/service/kqp_qs_scripts_ut.cpp @@ -13,451 +13,7 @@ namespace NKqp { using namespace NYdb; using namespace NYdb::NQuery; -Y_UNIT_TEST_SUITE(KqpQueryService) { - Y_UNIT_TEST(SessionFromPoolError) { - auto kikimr = DefaultKikimrRunner(); - auto settings = NYdb::NQuery::TClientSettings().Database("WrongDB"); - auto db = kikimr.GetQueryClient(settings); - - auto result = db.GetSession().GetValueSync(); - UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::NOT_FOUND, result.GetIssues().ToString()); - } - - Y_UNIT_TEST(SessionFromPoolSuccess) { - auto kikimr = DefaultKikimrRunner(); - NKqp::TKqpCounters counters(kikimr.GetTestServer().GetRuntime()->GetAppData().Counters); - - { - auto db = kikimr.GetQueryClient(); - - TString id; - { - auto result = db.GetSession().GetValueSync(); - UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString()); - UNIT_ASSERT(result.GetSession().GetId()); - id = result.GetSession().GetId(); - } - { - auto result = db.GetSession().GetValueSync(); - UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString()); - UNIT_ASSERT_VALUES_EQUAL(result.GetSession().GetId(), id); - } - } - WaitForZeroSessions(counters); - } - - Y_UNIT_TEST(QueryOnClosedSession) { - auto kikimr = DefaultKikimrRunner(); - auto clientConfig = NGRpcProxy::TGRpcClientConfig(kikimr.GetEndpoint()); - NKqp::TKqpCounters counters(kikimr.GetTestServer().GetRuntime()->GetAppData().Counters); - - { - auto db = kikimr.GetQueryClient(); - - TString id; - { - auto result = db.GetSession().GetValueSync(); - UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString()); - UNIT_ASSERT(result.GetSession().GetId()); - auto session = result.GetSession(); - id = session.GetId(); - - bool allDoneOk = true; - NTestHelpers::CheckDelete(clientConfig, id, Ydb::StatusIds::SUCCESS, allDoneOk); - - UNIT_ASSERT(allDoneOk); - - auto execResult = session.ExecuteQuery("SELECT 1;", - NYdb::NQuery::TTxControl::BeginTx().CommitTx()).ExtractValueSync(); - - UNIT_ASSERT_VALUES_EQUAL(execResult.GetStatus(), EStatus::BAD_SESSION); - } - // closed session must be removed from session pool - { - auto result = db.GetSession().GetValueSync(); - UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString()); - UNIT_ASSERT(result.GetSession().GetId() != id); - } - } - WaitForZeroSessions(counters); - } - - Y_UNIT_TEST(StreamExecuteQueryPure) { - auto kikimr = DefaultKikimrRunner(); - auto db = kikimr.GetQueryClient(); - - auto params = TParamsBuilder() - .AddParam("$value").Int64(17).Build() - .Build(); - - auto it = db.StreamExecuteQuery(R"( - DECLARE $value As Int64; - SELECT $value; - )", TTxControl::BeginTx().CommitTx(), params).ExtractValueSync(); - UNIT_ASSERT_C(it.IsSuccess(), it.GetIssues().ToString()); - - ui64 count = 0; - for (;;) { - auto streamPart = it.ReadNext().GetValueSync(); - if (!streamPart.IsSuccess()) { - UNIT_ASSERT_C(streamPart.EOS(), streamPart.GetIssues().ToString()); - break; - } - - if (streamPart.HasResultSet()) { - auto resultSet = streamPart.ExtractResultSet(); - count += resultSet.RowsCount(); - } - } - - UNIT_ASSERT_VALUES_EQUAL(count, 1); - } - - Y_UNIT_TEST(ExecuteQueryPure) { - auto kikimr = DefaultKikimrRunner(); - auto db = kikimr.GetQueryClient(); - - auto params = TParamsBuilder() - .AddParam("$value").Int64(17).Build() - .Build(); - - auto result = db.ExecuteQuery(R"( - DECLARE $value As Int64; - SELECT $value; - )", TTxControl::BeginTx().CommitTx(), params).ExtractValueSync(); - UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString()); - - CompareYson(R"([[17]])", FormatResultSetYson(result.GetResultSet(0))); - } - - Y_UNIT_TEST(StreamExecuteQuery) { - auto kikimr = DefaultKikimrRunner(); - auto db = kikimr.GetQueryClient(); - - auto it = db.StreamExecuteQuery(R"( - SELECT Key, Value2 FROM TwoShard WHERE Value2 > 0; - )", TTxControl::BeginTx().CommitTx()).ExtractValueSync(); - UNIT_ASSERT_C(it.IsSuccess(), it.GetIssues().ToString()); - - ui64 count = 0; - for (;;) { - auto streamPart = it.ReadNext().GetValueSync(); - if (!streamPart.IsSuccess()) { - UNIT_ASSERT_C(streamPart.EOS(), streamPart.GetIssues().ToString()); - break; - } - - if (streamPart.HasResultSet()) { - auto resultSet = streamPart.ExtractResultSet(); - count += resultSet.RowsCount(); - } - } - - UNIT_ASSERT_VALUES_EQUAL(count, 2); - } - - Y_UNIT_TEST(ExecuteQuery) { - auto kikimr = DefaultKikimrRunner(); - auto db = kikimr.GetQueryClient(); - - auto result = db.ExecuteQuery(R"( - SELECT Key, Value2 FROM TwoShard WHERE Value2 > 0 ORDER BY Key; - )", TTxControl::BeginTx().CommitTx()).ExtractValueSync(); - UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString()); - - CompareYson(R"([ - [[3u];[1]]; - [[4000000003u];[1]] - ])", FormatResultSetYson(result.GetResultSet(0))); - } - - Y_UNIT_TEST(ExecuteQueryPg) { - auto kikimr = DefaultKikimrRunner(); - auto db = kikimr.GetQueryClient(); - - auto settings = TExecuteQuerySettings() - .Syntax(ESyntax::Pg); - - auto result = db.ExecuteQuery(R"( - SELECT * FROM (VALUES - (1::int8, 'one'), - (2::int8, 'two'), - (3::int8, 'three') - ) AS t; - )", TTxControl::BeginTx().CommitTx(), settings).ExtractValueSync(); - UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString()); - - CompareYson(R"([ - ["1";"one"]; - ["2";"two"]; - ["3";"three"] - ])", FormatResultSetYson(result.GetResultSet(0))); - } - - //KIKIMR-18492 - Y_UNIT_TEST(ExecuteQueryPgTableSelect) { - TKikimrRunner kikimr(NKqp::TKikimrSettings().SetWithSampleTables(false)); - auto settings = TExecuteQuerySettings() - .Syntax(ESyntax::Pg); - { - auto db = kikimr.GetTableClient(); - auto session = db.CreateSession().GetValueSync().GetSession(); - auto result = session.ExecuteSchemeQuery(R"( - CREATE TABLE test (id int8,PRIMARY KEY (id)))" - ).GetValueSync(); - - UNIT_ASSERT_C(result.IsSuccess(), result.GetIssues().ToString()); - } - { - auto db = kikimr.GetQueryClient(); - auto result = db.ExecuteQuery( - "SELECT * FROM test", - TTxControl::BeginTx().CommitTx(), settings - ).ExtractValueSync(); - - UNIT_ASSERT_C(result.IsSuccess(), result.GetIssues().ToString()); - CompareYson(R"([])", FormatResultSetYson(result.GetResultSet(0))); - } - } - - Y_UNIT_TEST(ExecuteQueryScalar) { - auto kikimr = DefaultKikimrRunner(); - auto db = kikimr.GetQueryClient(); - - auto result = db.ExecuteQuery(R"( - SELECT COUNT(*) FROM EightShard; - )", TTxControl::BeginTx().CommitTx()).ExtractValueSync(); - UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString()); - - CompareYson(R"([[24u]])", FormatResultSetYson(result.GetResultSet(0))); - } - - Y_UNIT_TEST(ExecuteQueryMultiResult) { - auto kikimr = DefaultKikimrRunner(); - auto db = kikimr.GetQueryClient(); - - auto settings = TExecuteQuerySettings() - .StatsMode(EStatsMode::Basic); - - auto result = db.ExecuteQuery(R"( - SELECT * FROM EightShard WHERE Text = "Value2" AND Data = 1 ORDER BY Key; - SELECT * FROM TwoShard WHERE Key < 10 ORDER BY Key; - )", TTxControl::BeginTx().CommitTx(), settings).ExtractValueSync(); - UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString()); - - auto& stats = NYdb::TProtoAccessor::GetProto(*result.GetStats()); - UNIT_ASSERT_VALUES_EQUAL(stats.query_phases().size(), 1); - - CompareYson(R"([ - [[1];[202u];["Value2"]]; - [[1];[502u];["Value2"]]; - [[1];[802u];["Value2"]]])", FormatResultSetYson(result.GetResultSet(0))); - CompareYson(R"([ - [[1u];["One"];[-1]]; - [[2u];["Two"];[0]]; - [[3u];["Three"];[1]]])", FormatResultSetYson(result.GetResultSet(1))); - } - - Y_UNIT_TEST(ExecuteQueryMultiScalar) { - auto kikimr = DefaultKikimrRunner(); - auto db = kikimr.GetQueryClient(); - - auto result = db.ExecuteQuery(R"( - SELECT COUNT(*) FROM EightShard; - SELECT COUNT(*) FROM TwoShard; - )", TTxControl::BeginTx().CommitTx()).ExtractValueSync(); - UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString()); - - CompareYson(R"([[24u]])", FormatResultSetYson(result.GetResultSet(0))); - CompareYson(R"([[6u]])", FormatResultSetYson(result.GetResultSet(1))); - } - - Y_UNIT_TEST(StreamExecuteQueryMultiResult) { - auto kikimr = DefaultKikimrRunner(); - auto db = kikimr.GetQueryClient(); - - auto it = db.StreamExecuteQuery(R"( - SELECT * FROM EightShard WHERE Text = "Value2" AND Data = 1 ORDER BY Key; - SELECT 2; - SELECT * FROM TwoShard WHERE Key < 10 ORDER BY Key; - )", TTxControl::BeginTx().CommitTx()).ExtractValueSync(); - UNIT_ASSERT_C(it.IsSuccess(), it.GetIssues().ToString()); - - ui64 lastResultSetIndex = 0; - ui64 count = 0; - for (;;) { - auto streamPart = it.ReadNext().GetValueSync(); - if (!streamPart.IsSuccess()) { - UNIT_ASSERT_C(streamPart.EOS(), streamPart.GetIssues().ToString()); - break; - } - - if (streamPart.HasResultSet()) { - if (streamPart.GetResultSetIndex() != lastResultSetIndex) { - UNIT_ASSERT_VALUES_EQUAL(streamPart.GetResultSetIndex(), lastResultSetIndex + 1); - ++lastResultSetIndex; - } - - auto resultSet = streamPart.ExtractResultSet(); - count += resultSet.RowsCount(); - } - } - - UNIT_ASSERT_VALUES_EQUAL(count, 7); - } - - Y_UNIT_TEST(ExecuteQueryWrite) { - NKikimrConfig::TAppConfig appConfig; - appConfig.MutableTableServiceConfig()->SetEnableKqpImmediateEffects(true); - auto setting = NKikimrKqp::TKqpSetting(); - auto serverSettings = TKikimrSettings() - .SetAppConfig(appConfig) - .SetKqpSettings({setting}); - TKikimrRunner kikimr(serverSettings); - auto db = kikimr.GetQueryClient(); - - auto result = db.ExecuteQuery(R"( - UPSERT INTO TwoShard (Key, Value2) VALUES(0, 101); - - SELECT Value2 FROM TwoShard WHERE Key = 0; - )", TTxControl::BeginTx().CommitTx()).ExtractValueSync(); - UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString()); - - CompareYson(R"([[[101]]])", FormatResultSetYson(result.GetResultSet(0))); - } - - Y_UNIT_TEST(ExplainQuery) { - auto kikimr = DefaultKikimrRunner(); - auto db = kikimr.GetQueryClient(); - - auto params = TParamsBuilder() - .AddParam("$value").Int64(17).Build() - .Build(); - - auto settings = TExecuteQuerySettings() - .ExecMode(EExecMode::Explain); - - auto result = db.ExecuteQuery(R"( - DECLARE $value As Int64; - SELECT $value; - )", TTxControl::NoTx(), params, settings).ExtractValueSync(); - UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString()); - UNIT_ASSERT(result.GetResultSets().empty()); - - UNIT_ASSERT(result.GetStats().Defined()); - UNIT_ASSERT(result.GetStats()->GetPlan().Defined()); - - NJson::TJsonValue plan; - NJson::ReadJsonTree(*result.GetStats()->GetPlan(), &plan, true); - UNIT_ASSERT(ValidatePlanNodeIds(plan)); - } - - Y_UNIT_TEST(ExecStats) { - auto kikimr = DefaultKikimrRunner(); - auto db = kikimr.GetQueryClient(); - - auto params = TParamsBuilder() - .AddParam("$value").Uint32(10).Build() - .Build(); - - auto settings = TExecuteQuerySettings() - .StatsMode(EStatsMode::Basic); - - auto result = db.ExecuteQuery(R"( - DECLARE $value As Uint32; - SELECT * FROM TwoShard WHERE Key < $value; - )", TTxControl::BeginTx().CommitTx(), params, settings).ExtractValueSync(); - UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString()); - - UNIT_ASSERT_VALUES_EQUAL(result.GetResultSet(0).RowsCount(), 3); - UNIT_ASSERT(result.GetStats().Defined()); - UNIT_ASSERT(!result.GetStats()->GetPlan().Defined()); - - auto& stats = NYdb::TProtoAccessor::GetProto(*result.GetStats()); - UNIT_ASSERT_VALUES_EQUAL(stats.query_phases().size(), 1); - } - - Y_UNIT_TEST(ExecStatsPlan) { - auto kikimr = DefaultKikimrRunner(); - auto db = kikimr.GetQueryClient(); - - auto params = TParamsBuilder() - .AddParam("$value").Uint32(10).Build() - .Build(); - - auto settings = TExecuteQuerySettings() - .StatsMode(EStatsMode::Full); - - auto result = db.ExecuteQuery(R"( - DECLARE $value As Uint32; - SELECT * FROM TwoShard WHERE Key < $value; - )", TTxControl::BeginTx().CommitTx(), params, settings).ExtractValueSync(); - UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString()); - - UNIT_ASSERT_VALUES_EQUAL(result.GetResultSet(0).RowsCount(), 3); - UNIT_ASSERT(result.GetStats().Defined()); - UNIT_ASSERT(result.GetStats()->GetPlan().Defined()); - - NJson::TJsonValue plan; - NJson::ReadJsonTree(*result.GetStats()->GetPlan(), &plan, true); - - auto stages = FindPlanStages(plan); - - i64 totalTasks = 0; - for (const auto& stage : stages) { - totalTasks += stage.GetMapSafe().at("Stats").GetMapSafe().at("TotalTasks").GetIntegerSafe(); - } - UNIT_ASSERT_VALUES_EQUAL(totalTasks, 2); - } - - Y_UNIT_TEST(QueryDdl) { - NKikimrConfig::TAppConfig appConfig; - appConfig.MutableTableServiceConfig()->SetEnablePreparedDdl(true); - appConfig.MutableTableServiceConfig()->SetEnableKqpImmediateEffects(true); - auto setting = NKikimrKqp::TKqpSetting(); - auto serverSettings = TKikimrSettings() - .SetAppConfig(appConfig) - .SetKqpSettings({setting}); - - TKikimrRunner kikimr(serverSettings); - auto db = kikimr.GetQueryClient(); - - auto result = db.ExecuteQuery(R"( - CREATE TABLE TestDdl ( - Key Uint64, - Value String, - PRIMARY KEY (Key) - ); - )", TTxControl::NoTx()).ExtractValueSync(); - UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString()); - UNIT_ASSERT(result.GetResultSets().empty()); - - result = db.ExecuteQuery(R"( - UPSERT INTO TestDdl (Key, Value) VALUES (1, "One"); - SELECT * FROM TestDdl; - )", TTxControl::BeginTx().CommitTx()).ExtractValueSync(); - UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString()); - - CompareYson(R"([[[1u];["One"]]])", FormatResultSetYson(result.GetResultSet(0))); - } - - Y_UNIT_TEST(MaterializeTxResults) { - auto kikimr = DefaultKikimrRunner(); - auto db = kikimr.GetQueryClient(); - - auto result = db.ExecuteQuery(R"( - DELETE FROM KeyValue; - )", TTxControl::BeginTx().CommitTx()).ExtractValueSync(); - UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString()); - - result = db.ExecuteQuery(R"( - SELECT * FROM KeyValue; - )", TTxControl::BeginTx().CommitTx()).ExtractValueSync(); - UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString()); - - CompareYson(R"([])", FormatResultSetYson(result.GetResultSet(0))); - } - +Y_UNIT_TEST_SUITE(KqpQueryServiceScripts) { NYdb::NQuery::TScriptExecutionOperation WaitScriptExecutionOperation(const NYdb::TOperation::TOperationId& operationId, const NYdb::TDriver& ydbDriver, i32 tries = -1) { NYdb::NOperation::TOperationClient client(ydbDriver); NThreading::TFuture<NYdb::NQuery::TScriptExecutionOperation> op; @@ -889,44 +445,6 @@ Y_UNIT_TEST_SUITE(KqpQueryService) { UNIT_ASSERT_C(cancelStatus.GetStatus() == NYdb::EStatus::PRECONDITION_FAILED, cancelStatus.GetIssues().ToString()); } - Y_UNIT_TEST(CloseConnection) { - auto kikimr = DefaultKikimrRunner(); - - NKqp::TKqpCounters counters(kikimr.GetTestServer().GetRuntime()->GetAppData().Counters); - - int maxTimeoutMs = 100; - - for (int i = 1; i < maxTimeoutMs; i++) { - auto it = kikimr.GetQueryClient().StreamExecuteQuery(R"( - SELECT * FROM `/Root/EightShard` WHERE Text = "Value1" ORDER BY Key; - )", TTxControl::BeginTx().CommitTx(), TExecuteQuerySettings().ClientTimeout(TDuration::MilliSeconds(i))).GetValueSync(); - - if (it.IsSuccess()) { - try { - for (;;) { - auto streamPart = it.ReadNext().GetValueSync(); - if (!streamPart.IsSuccess()) { - break; - } - } - } catch (const TStreamReadError& ex) { - UNIT_ASSERT_VALUES_EQUAL(ex.Status, NYdb::EStatus::CLIENT_DEADLINE_EXCEEDED); - } catch (const std::exception& ex) { - UNIT_ASSERT_C(false, "unknown exception during the test"); - } - } else { - UNIT_ASSERT_VALUES_EQUAL(it.GetStatus(), NYdb::EStatus::CLIENT_DEADLINE_EXCEEDED); - } - } - - WaitForZeroSessions(counters); - - for (const auto& service: kikimr.GetTestServer().GetGRpcServer().GetServices()) { - UNIT_ASSERT_VALUES_EQUAL(service->RequestsInProgress(), 0); - UNIT_ASSERT(!service->IsUnsafeToShutdown()); - } - } - NYdb::NQuery::TScriptExecutionOperation WaitScriptExecutionFail(const NYdb::TOperation::TOperationId& operationId, const NYdb::TDriver& ydbDriver) { NYdb::NOperation::TOperationClient client(ydbDriver); NThreading::TFuture<NYdb::NQuery::TScriptExecutionOperation> op; diff --git a/ydb/core/kqp/ut/service/ya.make b/ydb/core/kqp/ut/service/ya.make index 23472755bc..92d7725ab1 100644 --- a/ydb/core/kqp/ut/service/ya.make +++ b/ydb/core/kqp/ut/service/ya.make @@ -14,7 +14,8 @@ ENDIF() SRCS( kqp_document_api_ut.cpp - kqp_query_service_ut.cpp + kqp_qs_queries_ut.cpp + kqp_qs_scripts_ut.cpp kqp_service_ut.cpp ) diff --git a/ydb/core/kqp/ut/yql/kqp_yql_ut.cpp b/ydb/core/kqp/ut/yql/kqp_yql_ut.cpp index cb35369dcf..f645601d8b 100644 --- a/ydb/core/kqp/ut/yql/kqp_yql_ut.cpp +++ b/ydb/core/kqp/ut/yql/kqp_yql_ut.cpp @@ -465,6 +465,36 @@ Y_UNIT_TEST_SUITE(KqpYql) { 29] ])", FormatResultSetYson(result.GetResultSet(0))); } + + Y_UNIT_TEST(Discard) { + auto kikimr = DefaultKikimrRunner(); + auto db = kikimr.GetQueryClient(); + + auto result = db.ExecuteQuery(R"( + DISCARD SELECT 1; + )", NYdb::NQuery::TTxControl::BeginTx().CommitTx()).ExtractValueSync(); + UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::GENERIC_ERROR, result.GetIssues().ToString()); + UNIT_ASSERT(HasIssue(result.GetIssues(), NYql::TIssuesIds::KIKIMR_BAD_OPERATION)); + } + + Y_UNIT_TEST(AnsiIn) { + auto kikimr = DefaultKikimrRunner(); + auto db = kikimr.GetQueryClient(); + + auto result = db.ExecuteQuery(R"( + $list = AsList( + Just(1), + Just(2), + NULL + ); + + SELECT 1 in $list; + )", NYdb::NQuery::TTxControl::BeginTx().CommitTx()).ExtractValueSync(); + UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString()); + UNIT_ASSERT_C(result.GetIssues().Size() == 0, result.GetIssues().ToString()); + + CompareYson(R"([[[%true]]])", FormatResultSetYson(result.GetResultSet(0))); + } } } // namespace NKqp diff --git a/ydb/core/load_test/service_actor.cpp b/ydb/core/load_test/service_actor.cpp index 3b5c0ea337..e8df92ff32 100644 --- a/ydb/core/load_test/service_actor.cpp +++ b/ydb/core/load_test/service_actor.cpp @@ -818,7 +818,7 @@ public: auto status = google::protobuf::util::JsonStringToMessage(content, &*record); success = status.ok(); } else { - Y_FAIL_S("content: " << content.Quote()); + LOG_D("Unable to parse request, content: " << content.Quote()); } if (!success) { record.reset(); diff --git a/ydb/core/mind/bscontroller/bsc.cpp b/ydb/core/mind/bscontroller/bsc.cpp index 6117764369..e128d3c9cc 100644 --- a/ydb/core/mind/bscontroller/bsc.cpp +++ b/ydb/core/mind/bscontroller/bsc.cpp @@ -215,7 +215,7 @@ void TBlobStorageController::ValidateInternalState() { Y_VERIFY(donor); Y_VERIFY(donor->Mood == TMood::Donor); Y_VERIFY(donor->GroupId == vslot->GroupId); - Y_VERIFY(donor->GroupGeneration < vslot->GroupGeneration + group->ContentChanged); + Y_VERIFY(donor->GroupGeneration < vslot->GroupGeneration); Y_VERIFY(donor->GetShortVDiskId() == vslot->GetShortVDiskId()); } if (vslot->Group) { diff --git a/ydb/core/mind/bscontroller/cmds_storage_pool.cpp b/ydb/core/mind/bscontroller/cmds_storage_pool.cpp index 72fee19f58..5433b599d9 100644 --- a/ydb/core/mind/bscontroller/cmds_storage_pool.cpp +++ b/ydb/core/mind/bscontroller/cmds_storage_pool.cpp @@ -155,7 +155,15 @@ namespace NKikimr::NBsController { } auto &storagePools = StoragePools.Unshare(); - storagePools[id] = std::move(storagePool); + if (const auto [spIt, inserted] = storagePools.try_emplace(id, std::move(storagePool)); !inserted) { + TStoragePoolInfo& cur = spIt->second; + if (cur.SchemeshardId != storagePool.SchemeshardId || cur.PathItemId != storagePool.PathItemId) { + for (auto it = r.first; it != r.second; ++it) { + GroupContentChanged.insert(it->second); + } + } + cur = std::move(storagePool); // update existing storage pool + } Fit.PoolsAndGroups.emplace(id, std::nullopt); } @@ -209,7 +217,7 @@ namespace NKikimr::NBsController { for (const TVSlotInfo *vslot : groupInfo->VDisksInGroup) { DestroyVSlot(vslot->VSlotId); } - Groups.DeleteExistingEntry(groupId); + DeleteExistingGroup(groupId); } else { throw TExError() << "GroupId# " << groupId << " not found"; } @@ -653,7 +661,7 @@ namespace NKikimr::NBsController { vslot->Mood = TMood::Wipe; vslot->Status = NKikimrBlobStorage::EVDiskStatus::INIT_PENDING; vslot->IsReady = false; - group->MoodChanged = true; + GroupFailureModelChanged.insert(group->ID); group->CalculateGroupStatus(); } diff --git a/ydb/core/mind/bscontroller/config.cpp b/ydb/core/mind/bscontroller/config.cpp index 15c93ef89c..05a6070d4c 100644 --- a/ydb/core/mind/bscontroller/config.cpp +++ b/ydb/core/mind/bscontroller/config.cpp @@ -266,16 +266,15 @@ namespace NKikimr::NBsController { TTransactionContext& txc, TString *errorDescription) { NIceDb::TNiceDb db(txc.DB); - for (auto&& [base, overlay] : state.Groups.Diff()) { - if (base && overlay->second && std::exchange(overlay->second->ContentChanged, false)) { - const auto& groupInfo = overlay->second; - ++groupInfo->Generation; - for (const TVSlotInfo *slot : groupInfo->VDisksInGroup) { - if (slot->GroupGeneration != groupInfo->Generation) { - TVSlotInfo *mutableSlot = state.VSlots.FindForUpdate(slot->VSlotId); - Y_VERIFY(mutableSlot); - mutableSlot->GroupGeneration = groupInfo->Generation; - } + for (TGroupId groupId : state.GroupContentChanged) { + TGroupInfo *group = state.Groups.FindForUpdate(groupId); + Y_VERIFY(group); + ++group->Generation; + for (const TVSlotInfo *slot : group->VDisksInGroup) { + if (slot->GroupGeneration != group->Generation) { + TVSlotInfo *mutableSlot = state.VSlots.FindForUpdate(slot->VSlotId); + Y_VERIFY(mutableSlot); + mutableSlot->GroupGeneration = group->Generation; } } } @@ -297,12 +296,8 @@ namespace NKikimr::NBsController { // check that group modification would not degrade failure model if (!suppressFailModelChecking) { - for (auto&& [base, overlay] : state.Groups.Diff()) { - if (!overlay->second || !base) { - continue; - } - auto& group = overlay->second; - if ((base->second->Generation != group->Generation || group->MoodChanged) && group->VDisksInGroup) { + for (TGroupId groupId : state.GroupFailureModelChanged) { + if (const TGroupInfo *group = state.Groups.Find(groupId); group && group->VDisksInGroup) { // process only groups with changed content; create topology for group auto& topology = *group->Topology; // fill in vector of failed disks (that are not fully operational) @@ -315,14 +310,16 @@ namespace NKikimr::NBsController { // check the failure model auto& checker = *topology.QuorumChecker; if (!checker.CheckFailModelForGroup(failed)) { - *errorDescription = TStringBuilder() << "GroupId# " << base->first + *errorDescription = TStringBuilder() << "GroupId# " << groupId << " may lose data while modifying group"; return false; } else if (!suppressDegradedGroupsChecking && checker.IsDegraded(failed)) { - *errorDescription = TStringBuilder() << "GroupId# " << base->first + *errorDescription = TStringBuilder() << "GroupId# " << groupId << " may become DEGRADED while modifying group"; return false; } + } else { + Y_VERIFY(group); // group must exist } } } @@ -342,10 +339,21 @@ namespace NKikimr::NBsController { state.PDisks.DeleteExistingEntry(pdiskId); } - MakeTableMerger<Schema::HostConfig>(&HostConfigs, &state.HostConfigs.Get(), this)(txc); - MakeTableMerger<Schema::Box>(&Boxes, &state.Boxes.Get(), this)(txc); - MakeTableMerger<Schema::BoxStoragePool>(&StoragePools, &state.StoragePools.Get(), this)(txc); - MakeTableMerger<Schema::Node>(&Nodes, &state.Nodes.Get(), this)(txc); + if (state.HostConfigs.Changed()) { + MakeTableMerger<Schema::HostConfig>(&HostConfigs, &state.HostConfigs.Get(), this)(txc); + } + if (state.Boxes.Changed()) { + MakeTableMerger<Schema::Box>(&Boxes, &state.Boxes.Get(), this)(txc); + } + if (state.StoragePools.Changed()) { + MakeTableMerger<Schema::BoxStoragePool>(&StoragePools, &state.StoragePools.Get(), this)(txc); + } + if (state.Nodes.Changed()) { + MakeTableMerger<Schema::Node>(&Nodes, &state.Nodes.Get(), this)(txc); + } + if (state.BlobDepotDeleteQueue.Changed()) { + MakeTableMerger<Schema::BlobDepotDeleteQueue>(&BlobDepotDeleteQueue, &state.BlobDepotDeleteQueue.Get(), this)(txc); + } // apply overlay maps to their respective tables state.PDisks.ApplyToTable(this, txc); @@ -699,7 +707,7 @@ namespace NKikimr::NBsController { Y_VERIFY(donor); Y_VERIFY(donor->Mood == TMood::Donor); Y_VERIFY(donor->GroupId == vslot.GroupId); - Y_VERIFY(donor->GroupGeneration < vslot.GroupGeneration + group->ContentChanged); + Y_VERIFY(donor->GroupGeneration < vslot.GroupGeneration + GroupContentChanged.count(vslot.GroupId)); Y_VERIFY(donor->GetShortVDiskId() == vslot.GetShortVDiskId()); } }); @@ -737,7 +745,6 @@ namespace NKikimr::NBsController { for (const auto& slot : VDisksInGroup) { slot.Mutable().Group = this; } - MoodChanged = false; } void TBlobStorageController::Serialize(NKikimrBlobStorage::TDefineHostConfig *pb, const THostConfigId &id, diff --git a/ydb/core/mind/bscontroller/config.h b/ydb/core/mind/bscontroller/config.h index 9e7f2bf408..be44193e01 100644 --- a/ydb/core/mind/bscontroller/config.h +++ b/ydb/core/mind/bscontroller/config.h @@ -59,6 +59,7 @@ namespace NKikimr { TCowHolder<TMap<TBoxId, TBoxInfo>> Boxes; TCowHolder<TMap<TBoxStoragePoolId, TStoragePoolInfo>> StoragePools; TCowHolder<TMultiMap<TBoxStoragePoolId, TGroupId>> StoragePoolGroups; + TCowHolder<TMap<TGroupId, TBlobDepotDeleteQueueInfo>> BlobDepotDeleteQueue; // system-level configuration TOverlayMap<TPDiskId, TPDiskInfo> PDisks; @@ -113,6 +114,9 @@ namespace NKikimr { TConfigFitAction Fit; + THashSet<TGroupId> GroupContentChanged; + THashSet<TGroupId> GroupFailureModelChanged; + public: TConfigState(TBlobStorageController &controller, const THostRecordMap &hostRecords, TInstant timestamp) : Self(controller) @@ -120,6 +124,7 @@ namespace NKikimr { , Boxes(&controller.Boxes) , StoragePools(&controller.StoragePools) , StoragePoolGroups(&controller.StoragePoolGroups) + , BlobDepotDeleteQueue(&controller.BlobDepotDeleteQueue) , PDisks(controller.PDisks) , DrivesSerials(controller.DrivesSerials) , Nodes(&controller.Nodes) @@ -148,6 +153,7 @@ namespace NKikimr { Boxes.Commit(); StoragePools.Commit(); StoragePoolGroups.Commit(); + BlobDepotDeleteQueue.Commit(); PDisks.Commit(); DrivesSerials.Commit(); Nodes.Commit(); @@ -168,9 +174,10 @@ namespace NKikimr { bool Changed() const { return HostConfigs.Changed() || Boxes.Changed() || StoragePools.Changed() || - StoragePoolGroups.Changed() || PDisks.Changed() || DrivesSerials.Changed() || Nodes.Changed() || - VSlots.Changed() || Groups.Changed() || IndexGroupSpeciesToGroup.Changed() || NextGroupId.Changed() || - NextStoragePoolId.Changed() || SerialManagementStage.Changed() || NextVirtualGroupId.Changed(); + StoragePoolGroups.Changed() || BlobDepotDeleteQueue.Changed() || PDisks.Changed() || + DrivesSerials.Changed() || Nodes.Changed() || VSlots.Changed() || Groups.Changed() || + IndexGroupSpeciesToGroup.Changed() || NextGroupId.Changed() || NextStoragePoolId.Changed() || + SerialManagementStage.Changed() || NextVirtualGroupId.Changed(); } bool NormalizeHostKey(NKikimrBlobStorage::THostKey *host) const { @@ -236,6 +243,26 @@ namespace NKikimr { return res; } + void DeleteExistingGroup(TGroupId groupId) { + const TGroupInfo *group = Groups.Find(groupId); + Y_VERIFY(group); + if (group->VirtualGroupState) { // this was a BlobDepot-based group, enqueue BlobDepot for deletion + // parse blob depot config to figure out whether hive was contacted; if not, skip the HiveId field + Y_VERIFY(group->BlobDepotConfig); + NKikimrBlobDepot::TBlobDepotConfig config; + const bool success = config.ParseFromString(*group->BlobDepotConfig); + Y_VERIFY(success); + if (config.GetHiveContacted()) { + const auto [it, inserted] = BlobDepotDeleteQueue.Unshare().try_emplace(groupId, group->HiveId, + config.HasTabletId() ? MakeMaybe(config.GetTabletId()) : Nothing()); + Y_VERIFY(inserted); + } + } + Groups.DeleteExistingEntry(groupId); + GroupContentChanged.erase(groupId); + GroupFailureModelChanged.erase(groupId); + } + private: template<typename TCommand, typename TKey, typename TValue> static ui64 CheckGeneration(const TCommand &cmd, const TMap<TKey, TValue> &map, const TKey &id) { diff --git a/ydb/core/mind/bscontroller/config_fit_groups.cpp b/ydb/core/mind/bscontroller/config_fit_groups.cpp index b2b4f77865..2f11343f70 100644 --- a/ydb/core/mind/bscontroller/config_fit_groups.cpp +++ b/ydb/core/mind/bscontroller/config_fit_groups.cpp @@ -352,7 +352,8 @@ namespace NKikimr { // create slots for the new group auto newSlots = CreateVSlotsForGroup(groupInfo, group, preservedSlots); - groupInfo->ContentChanged = true; + State.GroupContentChanged.insert(groupId); + State.GroupFailureModelChanged.insert(groupId); if (replacedSlots) { if (!IgnoreGroupFailModelChecks) { diff --git a/ydb/core/mind/bscontroller/defs.h b/ydb/core/mind/bscontroller/defs.h index 5ad4450915..8b0d721a98 100644 --- a/ydb/core/mind/bscontroller/defs.h +++ b/ydb/core/mind/bscontroller/defs.h @@ -16,6 +16,7 @@ #include <ydb/core/blobstorage/groupinfo/blobstorage_groupinfo_blobmap.h> #include <ydb/core/blobstorage/groupinfo/blobstorage_groupinfo_sets.h> #include <ydb/core/blob_depot/events.h> +#include <ydb/core/driver_lib/version/version.h> #include <ydb/core/engine/minikql/flat_local_tx_factory.h> #include <ydb/core/mind/table_adapter.h> #include <ydb/core/protos/blobstorage_config.pb.h> diff --git a/ydb/core/mind/bscontroller/impl.h b/ydb/core/mind/bscontroller/impl.h index cf7d04d44f..f037a69ab4 100644 --- a/ydb/core/mind/bscontroller/impl.h +++ b/ydb/core/mind/bscontroller/impl.h @@ -560,8 +560,6 @@ public: TGroupLatencyStats LatencyStats; TBoxStoragePoolId StoragePoolId; mutable TStorageStatusFlags StatusFlags; - bool ContentChanged = false; - bool MoodChanged = false; TActorId VirtualGroupSetupMachineId; @@ -1371,6 +1369,33 @@ public: void OnClone(const THolder<TDriveSerialInfo>&) {} }; + struct TBlobDepotDeleteQueueInfo { + using Table = Schema::BlobDepotDeleteQueue; + + TMaybe<Table::HiveId::Type> HiveId; + TMaybe<Table::BlobDepotId::Type> BlobDepotId; + TActorId VirtualGroupSetupMachineId; + + TBlobDepotDeleteQueueInfo() = default; + + TBlobDepotDeleteQueueInfo(TMaybe<Table::HiveId::Type> hiveId, TMaybe<Table::BlobDepotId::Type> blobDepotId) + : HiveId(std::move(hiveId)) + , BlobDepotId(std::move(blobDepotId)) + {} + + template<typename T> + static void Apply(TBlobStorageController* /*controller*/, T&& callback) { + static TTableAdapter<Table, TBlobDepotDeleteQueueInfo, + Table::HiveId, + Table::BlobDepotId + > adapter( + &TBlobDepotDeleteQueueInfo::HiveId, + &TBlobDepotDeleteQueueInfo::BlobDepotId + ); + callback(&adapter); + } + }; + struct THostRecord { TNodeId NodeId; TNodeLocation Location; @@ -1461,6 +1486,7 @@ private: TMap<TBoxId, TBoxInfo> Boxes; TMap<TBoxStoragePoolId, TStoragePoolInfo> StoragePools; TMultiMap<TBoxStoragePoolId, TGroupId> StoragePoolGroups; + TMap<TGroupId, TBlobDepotDeleteQueueInfo> BlobDepotDeleteQueue; ui64 NextOperationLogIndex = 1; TActorId StatProcessorActorId; TInstant LastMetricsCommit; @@ -1683,6 +1709,11 @@ private: TActivationContext::Send(new IEventHandle(TEvents::TSystem::Poison, 0, actorId, SelfId(), nullptr, 0)); } } + for (const auto& [groupId, info] : BlobDepotDeleteQueue) { + if (const auto& actorId = info.VirtualGroupSetupMachineId) { + TActivationContext::Send(new IEventHandle(TEvents::TSystem::Poison, 0, actorId, SelfId(), nullptr, 0)); + } + } return TActor::PassAway(); } @@ -1786,6 +1817,7 @@ private: TScrubState(TBlobStorageController *self); ~TScrubState(); void HandleTimer(); + void Clear(); void AddItem(TVSlotId vslotId, std::optional<TString> state, TInstant scrubCycleStartTime, TInstant scrubCycleFinishTime, std::optional<bool> success); void OnDeletePDisk(TPDiskId pdiskId); @@ -2039,6 +2071,9 @@ public: StartVirtualGroupSetupMachine(info.Get()); } } + for (auto& [groupId, info] : BlobDepotDeleteQueue) { + StartVirtualGroupDeleteMachine(groupId, info); + } for (; !InitQueue.empty(); InitQueue.pop_front()) { TAutoPtr<IEventHandle> &ev = InitQueue.front(); @@ -2091,6 +2126,7 @@ public: void CommitVirtualGroupUpdates(TConfigState& state); void StartVirtualGroupSetupMachine(TGroupInfo *group); + void StartVirtualGroupDeleteMachine(ui32 groupId, TBlobDepotDeleteQueueInfo& info); void Handle(TEvBlobStorage::TEvControllerGroupDecommittedNotify::TPtr ev); diff --git a/ydb/core/mind/bscontroller/load_everything.cpp b/ydb/core/mind/bscontroller/load_everything.cpp index f8e49dff93..334b7018cc 100644 --- a/ydb/core/mind/bscontroller/load_everything.cpp +++ b/ydb/core/mind/bscontroller/load_everything.cpp @@ -37,6 +37,7 @@ public: auto groupLatencies = db.Table<Schema::GroupLatencies>().Select(); auto scrubState = db.Table<Schema::ScrubState>().Select(); auto pdiskSerial = db.Table<Schema::DriveSerial>().Select(); + auto blobDepotDeleteQueue = db.Table<Schema::BlobDepotDeleteQueue>().Select(); if (!state.IsReady() || !nodes.IsReady() || !disk.IsReady() @@ -55,7 +56,8 @@ public: || !groupStoragePool.IsReady() || !groupLatencies.IsReady() || !scrubState.IsReady() - || !pdiskSerial.IsReady()) { + || !pdiskSerial.IsReady() + || !blobDepotDeleteQueue.IsReady()) { return false; } } @@ -237,7 +239,8 @@ public: if (!NTableAdapter::FetchTable<Schema::HostConfig>(db, Self, Self->HostConfigs) || !NTableAdapter::FetchTable<Schema::Box>(db, Self, Self->Boxes) || !NTableAdapter::FetchTable<Schema::BoxStoragePool>(db, Self, Self->StoragePools) - || !NTableAdapter::FetchTable<Schema::DriveSerial>(db, Self, Self->DrivesSerials)) { + || !NTableAdapter::FetchTable<Schema::DriveSerial>(db, Self, Self->DrivesSerials) + || !NTableAdapter::FetchTable<Schema::BlobDepotDeleteQueue>(db, Self, Self->BlobDepotDeleteQueue)) { return false; } for (const auto& [storagePoolId, storagePool] : Self->StoragePools) { @@ -472,6 +475,7 @@ public: } // scrub state + Self->ScrubState.Clear(); { using Table = Schema::ScrubState; auto scrubState = db.Table<Table>().Select(); diff --git a/ydb/core/mind/bscontroller/migrate.cpp b/ydb/core/mind/bscontroller/migrate.cpp index 20d10f8b62..adc66684d3 100644 --- a/ydb/core/mind/bscontroller/migrate.cpp +++ b/ydb/core/mind/bscontroller/migrate.cpp @@ -157,6 +157,18 @@ class TBlobStorageController::TTxMigrate : public TTransactionBase<TBlobStorageC } }; + class TTxUpdateCompatibilityInfo : public TTxBase { + public: + bool Execute(TTransactionContext& txc) override { + TString currentCompatibilityInfo; + auto componentId = NKikimrConfig::TCompatibilityRule::BlobStorageController; + bool success = CompatibilityInfo.MakeStored(componentId).SerializeToString(¤tCompatibilityInfo); + Y_VERIFY(success); + NIceDb::TNiceDb(txc.DB).Table<Schema::State>().Key(true).Update<Schema::State::CompatibilityInfo>(currentCompatibilityInfo); + return true; + } + }; + TDeque<THolder<TTxBase>> Queue; public: @@ -170,12 +182,28 @@ public: NIceDb::TNiceDb db(txc.DB); - auto state = db.Table<Schema::State>().Select<Schema::State::SchemaVersion, Schema::State::InstanceId>(); + auto state = db.Table<Schema::State>().Select<Schema::State::SchemaVersion, Schema::State::InstanceId, + Schema::State::CompatibilityInfo>(); + if (!state.IsReady()) { return false; } bool hasInstanceId = false; if (state.IsValid()) { + std::optional<NKikimrConfig::TStoredCompatibilityInfo> stored; + if (state.HaveValue<Schema::State::CompatibilityInfo>()) { + stored.emplace(); + bool success = stored->ParseFromString(state.GetValue<Schema::State::CompatibilityInfo>()); + Y_VERIFY(success); + } + if (!AppData()->FeatureFlags.GetSuppressCompatibilityCheck() && !CompatibilityInfo.CheckCompatibility( + stored ? &*stored : nullptr, + NKikimrConfig::TCompatibilityRule::BlobStorageController, + CompatibilityError)) { + IncompatibleData = true; + return true; + } + const ui32 version = state.GetValue<Schema::State::SchemaVersion>(); if (Schema::CurrentSchemaVersion >= Schema::BoxHostMigrationSchemaVersion && version < Schema::BoxHostMigrationSchemaVersion) { Y_FAIL("unsupported schema"); @@ -199,14 +227,25 @@ public: Queue.emplace_back(new TTxFillInNonNullConfigForPDisk); Queue.emplace_back(new TTxDropDriveStatus); + + Queue.emplace_back(new TTxUpdateCompatibilityInfo); return true; } - void Complete(const TActorContext&) override { - STLOG(PRI_DEBUG, BS_CONTROLLER, BSCTXM02, "Complete tx"); - Self->Execute(new TTxQueue(Self, std::move(Queue))); + void Complete(const TActorContext& ctx) override { + STLOG(PRI_DEBUG, BS_CONTROLLER, BSCTXM02, "Complete tx", (IncompatibleData, IncompatibleData)); + if (IncompatibleData) { + STLOG(PRI_ALERT, BS_CONTROLLER, BSCTXM03, "CompatibilityInfo check failed", (ErrorReason, CompatibilityError)); + ctx.Send(new IEventHandle(TEvents::TSystem::Poison, 0, Self->SelfId(), {}, nullptr, 0)); + } else { + Self->Execute(new TTxQueue(Self, std::move(Queue))); + } } + +private: + bool IncompatibleData = false; + TString CompatibilityError; }; ITransaction* TBlobStorageController::CreateTxMigrate() { diff --git a/ydb/core/mind/bscontroller/scheme.h b/ydb/core/mind/bscontroller/scheme.h index 3671789737..c28dc70636 100644 --- a/ydb/core/mind/bscontroller/scheme.h +++ b/ydb/core/mind/bscontroller/scheme.h @@ -102,12 +102,13 @@ struct Schema : NIceDb::Schema { struct GroupLayoutSanitizer : Column<18, NScheme::NTypeIds::Bool> { static constexpr Type Default = false; }; struct NextVirtualGroupId : Column<19, Group::ID::ColumnType> { static constexpr Type Default = 0; }; struct AllowMultipleRealmsOccupation : Column<20, NScheme::NTypeIds::Bool> { static constexpr Type Default = true; }; + struct CompatibilityInfo : Column<21, NScheme::NTypeIds::String> {}; using TKey = TableKey<FixedKey>; using TColumns = TableColumns<FixedKey, NextGroupID, SchemaVersion, NextOperationLogIndex, DefaultMaxSlots, InstanceId, SelfHealEnable, DonorModeEnable, ScrubPeriodicity, SerialManagementStage, NextStoragePoolId, PDiskSpaceMarginPromille, GroupReserveMin, GroupReservePart, MaxScrubbedDisksAtOnce, PDiskSpaceColorBorder, - GroupLayoutSanitizer, NextVirtualGroupId, AllowMultipleRealmsOccupation>; + GroupLayoutSanitizer, NextVirtualGroupId, AllowMultipleRealmsOccupation, CompatibilityInfo>; }; struct VSlot : Table<5> { @@ -408,35 +409,45 @@ struct Schema : NIceDb::Schema { // struct VirtualGroupPool : Table<130> {}; + struct BlobDepotDeleteQueue : Table<131> { + struct GroupId : Column<1, NScheme::NTypeIds::Uint32> {}; // PK + struct HiveId : Column<2, NScheme::NTypeIds::Uint64> {}; + struct BlobDepotId : Column<3, NScheme::NTypeIds::Uint64> {}; // may be null if creation wasn't confirmed + + using TKey = TableKey<GroupId>; + using TColumns = TableColumns<GroupId, HiveId, BlobDepotId>; + }; + using TTables = SchemaTables< - Node, - PDisk, - Group, - State, - VSlot, - VDiskMetrics, - PDiskMetrics, - GroupLatencies, - Box, - BoxUser, - HostConfig, - HostConfigDrive, - BoxHostV2, - BoxStoragePool, - BoxStoragePoolUser, - BoxStoragePoolPDiskFilter, - GroupStoragePool, - OperationLog, - MigrationPlan, - MigrationEntry, - ScrubState, - DriveSerial - >; + Node, + PDisk, + Group, + State, + VSlot, + VDiskMetrics, + PDiskMetrics, + GroupLatencies, + Box, + BoxUser, + HostConfig, + HostConfigDrive, + BoxHostV2, + BoxStoragePool, + BoxStoragePoolUser, + BoxStoragePoolPDiskFilter, + GroupStoragePool, + OperationLog, + MigrationPlan, + MigrationEntry, + ScrubState, + DriveSerial, + BlobDepotDeleteQueue + >; using TSettings = SchemaSettings< - ExecutorLogBatching<true>, - ExecutorLogFlushPeriod<TDuration::MicroSeconds(512).GetValue()> - >; + ExecutorLogBatching<true>, + ExecutorLogFlushPeriod<TDuration::MicroSeconds(512).GetValue()> + >; }; } // NBsController diff --git a/ydb/core/mind/bscontroller/scrub.cpp b/ydb/core/mind/bscontroller/scrub.cpp index 4bf46624df..8d3d7a638f 100644 --- a/ydb/core/mind/bscontroller/scrub.cpp +++ b/ydb/core/mind/bscontroller/scrub.cpp @@ -144,6 +144,8 @@ class TBlobStorageController::TScrubState::TImpl { Y_FAIL(); } + friend class TBlobStorageController; + public: TImpl(TBlobStorageController *self) : Self(self) @@ -780,6 +782,10 @@ void TBlobStorageController::TScrubState::HandleTimer() { TActivationContext::Schedule(TDuration::Minutes(1), new IEventHandle(Impl->SelfId(), {}, new TEvPrivate::TEvScrub)); } +void TBlobStorageController::TScrubState::Clear() { + Impl.reset(new TImpl(Impl->Self)); +} + void TBlobStorageController::TScrubState::AddItem(TVSlotId vslotId, std::optional<TString> state, TInstant scrubCycleStartTime, TInstant scrubCycleFinishTime, std::optional<bool> success) { Impl->AddItem(vslotId, std::move(state), scrubCycleStartTime, scrubCycleFinishTime, success); diff --git a/ydb/core/mind/bscontroller/virtual_group.cpp b/ydb/core/mind/bscontroller/virtual_group.cpp index fc1659dd8f..e6c9879500 100644 --- a/ydb/core/mind/bscontroller/virtual_group.cpp +++ b/ydb/core/mind/bscontroller/virtual_group.cpp @@ -216,6 +216,7 @@ namespace NKikimr::NBsController { TBlobStorageController *Self; const TActorId ControllerId; const TGroupId GroupId; + const std::optional<TBlobDepotDeleteQueueInfo> DeleteInfo; private: class TTxUpdateGroup : public TTransactionBase<TBlobStorageController> { @@ -224,12 +225,12 @@ namespace NKikimr::NBsController { const TGroupId GroupId; const std::weak_ptr<TToken> Token; std::optional<TConfigState> State; - const std::function<bool(TGroupInfo&)> Callback; + const std::function<bool(TGroupInfo&, TConfigState&)> Callback; public: TTxType GetTxType() const override { return NBlobStorageController::TXTYPE_UPDATE_GROUP; } - TTxUpdateGroup(TVirtualGroupSetupMachine *machine, std::function<bool(TGroupInfo&)>&& callback) + TTxUpdateGroup(TVirtualGroupSetupMachine *machine, std::function<bool(TGroupInfo&, TConfigState&)>&& callback) : TTransactionBase(machine->Self) , Machine(machine) , MachineId(Machine->SelfId()) @@ -248,8 +249,8 @@ namespace NKikimr::NBsController { State.emplace(*Self, Self->HostRecords, TActivationContext::Now()); TGroupInfo *group = State->Groups.FindForUpdate(GroupId); Y_VERIFY(group); - if (!Callback(*group)) { - State->Groups.DeleteExistingEntry(group->ID); + if (!Callback(*group, *State)) { + State->DeleteExistingGroup(group->ID); } group->CalculateGroupStatus(); TString error; @@ -269,6 +270,48 @@ namespace NKikimr::NBsController { } }; + class TTxDeleteBlobDepot : public TTransactionBase<TBlobStorageController> { + TVirtualGroupSetupMachine* const Machine; + const TActorId MachineId; + const TGroupId GroupId; + const std::weak_ptr<TToken> Token; + std::optional<TConfigState> State; + + public: + TTxType GetTxType() const override { return NBlobStorageController::TXTYPE_DELETE_BLOB_DEPOT; } + + TTxDeleteBlobDepot(TVirtualGroupSetupMachine *machine) + : TTransactionBase(machine->Self) + , Machine(machine) + , MachineId(Machine->SelfId()) + , GroupId(Machine->GroupId) + , Token(Machine->Token) + {} + + bool Execute(TTransactionContext& txc, const TActorContext&) override { + if (Token.expired()) { + return true; // actor is already dead + } + State.emplace(*Self, Self->HostRecords, TActivationContext::Now()); + const size_t n = State->BlobDepotDeleteQueue.Unshare().erase(GroupId); + Y_VERIFY(n == 1); + TString error; + if (State->Changed() && !Self->CommitConfigUpdates(*State, true, true, true, txc, &error)) { + STLOG(PRI_ERROR, BS_CONTROLLER, BSCVG17, "failed to commit update", (VirtualGroupId, GroupId), (Error, error)); + State->Rollback(); + State.reset(); + } + return true; + } + + void Complete(const TActorContext&) override { + if (State) { + State->ApplyConfigUpdates(); + } + TActivationContext::Send(new IEventHandle(TEvents::TSystem::Bootstrap, 0, MachineId, {}, nullptr, 0)); + } + }; + public: TVirtualGroupSetupMachine(TBlobStorageController *self, TGroupInfo& group) : Self(self) @@ -276,12 +319,31 @@ namespace NKikimr::NBsController { , GroupId(group.ID) {} + TVirtualGroupSetupMachine(TBlobStorageController *self, ui32 groupId, const TBlobDepotDeleteQueueInfo& info) + : Self(self) + , ControllerId(Self->SelfId()) + , GroupId(groupId) + , DeleteInfo(info) + {} + void Bootstrap() { Become(&TThis::StateFunc); if (Expired()) { // BS_CONTROLLER is already dead return PassAway(); } + if (DeleteInfo) { + Y_VERIFY(Self->BlobDepotDeleteQueue.contains(GroupId)); + STLOG(PRI_DEBUG, BS_CONTROLLER, BSCVG19, "Bootstrap for delete", (GroupId, GroupId), + (HiveId, DeleteInfo->HiveId), (BlobDepotId, DeleteInfo->BlobDepotId)); + if (DeleteInfo->HiveId) { + HiveDelete(*DeleteInfo->HiveId, DeleteInfo->BlobDepotId); + } else { + OnBlobDepotDeleted(); + } + return; + } + TGroupInfo *group = GetGroup(); if (!group->VirtualGroupState) { // group was deleted or reset to non-decommitting during the last transaction return PassAway(); @@ -331,7 +393,7 @@ namespace NKikimr::NBsController { template<typename T> void UpdateBlobDepotConfig(T&& callback) { - Self->Execute(std::make_unique<TTxUpdateGroup>(this, [this, callback](TGroupInfo& group) { + Self->Execute(std::make_unique<TTxUpdateGroup>(this, [this, callback](TGroupInfo& group, TConfigState&) { auto& config = GetConfig(&group); callback(config); TString data; @@ -345,9 +407,11 @@ namespace NKikimr::NBsController { //////////////////////////////////////////////////////////////////////////////////////////////////////////////// TActorId HivePipeId; + TActorId TenantHivePipeId; TActorId BlobDepotPipeId; - TActorId SchemeshardPipeId; ui64 RootHiveId = 0; + bool TenantHiveInvalidated = false; + bool TenantHiveInvalidateInProgress = false; void HiveCreate(TGroupInfo *group) { auto& config = GetConfig(group); @@ -355,9 +419,19 @@ namespace NKikimr::NBsController { ConfigureBlobDepot(); } else if (!group->HiveId) { HiveResolve(group); + } else if (TenantHiveInvalidateInProgress && TenantHivePipeId) { + // tenant hive storage pool invalidation still in progress, wait + } else if (config.GetIsDecommittingGroup() && config.HasTenantHiveId() && !TenantHiveInvalidated) { + TenantHivePipeId = Register(NTabletPipe::CreateClient(SelfId(), config.GetTenantHiveId(), + NTabletPipe::TClientRetryPolicy::WithRetries())); + HiveInvalidateGroups(TenantHivePipeId, group); + TenantHiveInvalidateInProgress = true; } else if (!HivePipeId) { Y_VERIFY(group->HiveId); HivePipeId = Register(NTabletPipe::CreateClient(SelfId(), *group->HiveId, NTabletPipe::TClientRetryPolicy::WithRetries())); + if (config.GetIsDecommittingGroup()) { + HiveInvalidateGroups(HivePipeId, group); + } } else { HiveCreateTablet(group); } @@ -368,50 +442,42 @@ namespace NKikimr::NBsController { Y_VERIFY(!group->HiveId); const TString& database = *group->Database; - // find schemeshard serving this database - ui64 schemeshardId = 0; - const auto& domainsInfo = AppData()->DomainsInfo; for (const auto& [_, domain] : domainsInfo->Domains) { const TString domainPath = TStringBuilder() << '/' << domain->Name; - if (database == domainPath) { // database is domain root + if (database == domainPath || database.StartsWith(TStringBuilder() << domainPath << '/')) { RootHiveId = domainsInfo->GetHive(domain->DefaultHiveUid); if (RootHiveId == TDomainsInfo::BadTabletId) { return CreateFailed(TStringBuilder() << "failed to resolve Hive -- BadTabletId for Database# " << database); } - schemeshardId = domain->SchemeRoot; - break; - } else if (database.StartsWith(TStringBuilder() << domainPath << '/')) { // database is subdomain - schemeshardId = domain->SchemeRoot; break; } } - if (!schemeshardId) { - return CreateFailed(TStringBuilder() << "failed to resolve Hive -- Schemeshard not found for Database# " << database); - } - - Y_VERIFY(!SchemeshardPipeId); - SchemeshardPipeId = Register(NTabletPipe::CreateClient(SelfId(), schemeshardId, NTabletPipe::TClientRetryPolicy::WithRetries())); - NTabletPipe::SendData(SelfId(), SchemeshardPipeId, new NSchemeShard::TEvSchemeShard::TEvDescribeScheme(database)); + auto req = MakeHolder<NSchemeCache::TSchemeCacheNavigate>(); + auto& item = req->ResultSet.emplace_back(); + item.Path = NKikimr::SplitPath(database); + item.RedirectRequired = false; + item.Operation = NSchemeCache::TSchemeCacheNavigate::OpPath; + Send(MakeSchemeCacheID(), new TEvTxProxySchemeCache::TEvNavigateKeySet(req)); } - void Handle(NSchemeShard::TEvSchemeShard::TEvDescribeSchemeResult::TPtr ev) { - NTabletPipe::CloseAndForgetClient(SelfId(), SchemeshardPipeId); - const auto& record = ev->Get()->GetRecord(); - STLOG(PRI_DEBUG, BS_CONTROLLER, BSCVG16, "TEvDescribeSchemeResult", (GroupId, GroupId), (Record, record)); - if (record.GetStatus() != NKikimrScheme::StatusSuccess) { - return CreateFailed(TStringBuilder() << "failed to resolve Hive -- Status# " - << NKikimrScheme::EStatus_Name(record.GetStatus()) << " Reason# " << record.GetReason()); - } else if (!record.HasPathDescription()) { - return CreateFailed("failed to resolve Hive -- no PathDescription in TEvDescribeSchemeResult"); - } else if (const auto& path = record.GetPathDescription(); !path.HasDomainDescription()) { - return CreateFailed("failed to resolve Hive -- database path is not a domain"); - } else if (const auto& domain = path.GetDomainDescription(); !domain.HasProcessingParams()) { - return CreateFailed("failed to resolve Hive -- no ProcessingParams in TEvDescribeSchemeResult"); - } else if (const auto& params = domain.GetProcessingParams(); !params.HasHive() && !RootHiveId) { - return CreateFailed("failed to resolve Hive -- no Hive in TEvDescribeSchemeResult"); + void Handle(TEvTxProxySchemeCache::TEvNavigateKeySetResult::TPtr ev) { + auto& response = *ev->Get()->Request; + Y_VERIFY(response.ResultSet.size() == 1); + auto& item = response.ResultSet.front(); + auto& domainInfo = item.DomainInfo; + + STLOG(PRI_DEBUG, BS_CONTROLLER, BSCVG16, "TEvDescribeSchemeResult", (GroupId, GroupId), + (Result, response.ToString(*AppData()->TypeRegistry))); + + if (item.Status != NSchemeCache::TSchemeCacheNavigate::EStatus::Ok || !domainInfo || !item.DomainDescription) { + return CreateFailed(TStringBuilder() << "failed to resolve Hive -- erroneous reply from SchemeCache or not a domain"); + } else if (const auto& params = domainInfo->Params; !params.HasHive() && !RootHiveId) { + return CreateFailed("failed to resolve Hive -- no Hive in SchemeCache reply"); } else { + auto& domain = item.DomainDescription->Description; + THashSet<std::tuple<TString, TString>> storagePools; // name, kind THashSet<TString> storagePoolNames; for (const auto& item : domain.GetStoragePools()) { @@ -441,71 +507,72 @@ namespace NKikimr::NBsController { return CreateFailed("failed to resolve Hive -- Hive is zero"); } - NKikimrSubDomains::TDomainKey domainKey; - domainKey.CopyFrom(domain.GetDomainKey()); + auto descr = item.DomainDescription; - Self->Execute(std::make_unique<TTxUpdateGroup>(this, [=](TGroupInfo& group) { + Self->Execute(std::make_unique<TTxUpdateGroup>(this, [=](TGroupInfo& group, TConfigState&) { auto& config = GetConfig(&group); - config.MutableHiveParams()->MutableObjectDomain()->CopyFrom(domainKey); + if (hiveId != RootHiveId) { + config.SetTenantHiveId(hiveId); + } + config.MutableHiveParams()->MutableObjectDomain()->CopyFrom(descr->Description.GetDomainKey()); TString data; const bool success = config.SerializeToString(&data); Y_VERIFY(success); group.BlobDepotConfig = data; - group.HiveId = hiveId; + group.HiveId = RootHiveId; return true; })); } } void HiveCreateTablet(TGroupInfo *group) { - TChannelsBindings bindings; - std::unordered_set<TString> names; - auto invalidateEv = std::make_unique<TEvHive::TEvInvalidateStoragePools>(); - auto& record = invalidateEv->Record; + auto ev = std::make_unique<TEvHive::TEvCreateTablet>(); auto& config = GetConfig(group); - - auto ev = std::make_unique<TEvHive::TEvCreateTablet>(Self->TabletID(), group->ID, TTabletTypes::BlobDepot, bindings); - if (config.HasHiveParams()) { + if (config.HasHiveParams()) { ev->Record.CopyFrom(config.GetHiveParams()); } ev->Record.SetOwner(Self->TabletID()); - ev->Record.SetOwnerIdx(group->ID); + ev->Record.SetOwnerIdx(GroupId); ev->Record.SetTabletType(TTabletTypes::BlobDepot); - auto *channels = ev->Record.MutableBindedChannels(); - channels->Clear(); + ev->Record.ClearBindedChannels(); for (const auto& item : config.GetChannelProfiles()) { + const TString& storagePoolName = item.GetStoragePoolName(); + NKikimrStoragePool::TChannelBind binding; + binding.SetStoragePoolName(storagePoolName); + if (config.GetIsDecommittingGroup()) { + binding.SetPhysicalGroupsOnly(true); + } for (ui32 i = 0; i < item.GetCount(); ++i) { - const TString& storagePoolName = item.GetStoragePoolName(); - - NKikimrStoragePool::TChannelBind binding; - binding.SetStoragePoolName(storagePoolName); - if (config.GetIsDecommittingGroup()) { - binding.SetPhysicalGroupsOnly(true); - if (i == 0 && names.insert(storagePoolName).second) { - record.AddStoragePoolName(storagePoolName); - } - } - - channels->Add()->CopyFrom(binding); + ev->Record.AddBindedChannels()->CopyFrom(binding); } } - if (!names.empty()) { - NTabletPipe::SendData(SelfId(), HivePipeId, invalidateEv.release()); - } - - if (config.GetIsDecommittingGroup()) { - NTabletPipe::SendData(SelfId(), HivePipeId, new TEvHive::TEvReassignOnDecommitGroup(group->ID)); - } - STLOG(PRI_INFO, BS_CONTROLLER, BSCVG00, "sending TEvCreateTablet", (GroupId, group->ID), (HiveId, *group->HiveId), (Msg, ev->Record)); NTabletPipe::SendData(SelfId(), HivePipeId, ev.release()); } + void HiveInvalidateGroups(TActorId pipeId, TGroupInfo *group) { + auto& config = GetConfig(group); + Y_VERIFY(config.GetIsDecommittingGroup()); + + auto invalidateEv = std::make_unique<TEvHive::TEvInvalidateStoragePools>(); + auto& record = invalidateEv->Record; + std::unordered_set<TString> names; + for (const auto& item : config.GetChannelProfiles()) { + const TString& storagePoolName = item.GetStoragePoolName(); + if (names.insert(storagePoolName).second) { + record.AddStoragePoolName(storagePoolName); + } + } + NTabletPipe::SendData(SelfId(), pipeId, invalidateEv.release()); + + NTabletPipe::SendData(SelfId(), pipeId, new TEvHive::TEvReassignOnDecommitGroup(GroupId)); + } + void HiveDelete(TGroupInfo *group) { auto& config = GetConfig(group); if (!config.GetHiveContacted() || !group->HiveId) { @@ -514,16 +581,20 @@ namespace NKikimr::NBsController { return DeleteBlobDepot(); } + HiveDelete(*group->HiveId, config.HasTabletId() ? MakeMaybe(config.GetTabletId()) : Nothing()); + } + + void HiveDelete(ui64 hiveId, TMaybe<ui64> tabletId) { Y_VERIFY(!HivePipeId); - Y_VERIFY(group->HiveId); - HivePipeId = Register(NTabletPipe::CreateClient(SelfId(), *group->HiveId, NTabletPipe::TClientRetryPolicy::WithRetries())); + Y_VERIFY(hiveId); + HivePipeId = Register(NTabletPipe::CreateClient(SelfId(), hiveId, NTabletPipe::TClientRetryPolicy::WithRetries())); - auto ev = config.HasTabletId() - ? std::make_unique<TEvHive::TEvDeleteTablet>(Self->TabletID(), group->ID, config.GetTabletId(), 0) - : std::make_unique<TEvHive::TEvDeleteTablet>(Self->TabletID(), group->ID, 0); + auto ev = tabletId + ? std::make_unique<TEvHive::TEvDeleteTablet>(Self->TabletID(), GroupId, *tabletId, 0) + : std::make_unique<TEvHive::TEvDeleteTablet>(Self->TabletID(), GroupId, 0); - STLOG(PRI_INFO, BS_CONTROLLER, BSCVG12, "sending TEvDeleteTablet", (GroupId, group->ID), - (HiveId, *group->HiveId), (Msg, ev->Record)); + STLOG(PRI_INFO, BS_CONTROLLER, BSCVG12, "sending TEvDeleteTablet", (GroupId, GroupId), + (HiveId, hiveId), (Msg, ev->Record)); NTabletPipe::SendData(SelfId(), HivePipeId, ev.release()); } @@ -531,11 +602,11 @@ namespace NKikimr::NBsController { void Handle(TEvTabletPipe::TEvClientConnected::TPtr ev) { STLOG(PRI_DEBUG, BS_CONTROLLER, BSCVG02, "received TEvClientConnected", (GroupId, GroupId), (Status, ev->Get()->Status), (ClientId, ev->Get()->ClientId), (HivePipeId, HivePipeId), - (BlobDepotPipeId, BlobDepotPipeId), (SchemeshardPipeId, SchemeshardPipeId)); + (BlobDepotPipeId, BlobDepotPipeId)); if (ev->Get()->Status != NKikimrProto::OK) { OnPipeError(ev->Get()->ClientId); - } else if (ev->Get()->ClientId == HivePipeId) { + } else if (ev->Get()->ClientId == HivePipeId && !DeleteInfo) { TGroupInfo *group = GetGroup(); if (group->VirtualGroupState == NKikimrBlobStorage::EVirtualGroupState::NEW) { auto& config = GetConfig(group); @@ -552,14 +623,13 @@ namespace NKikimr::NBsController { void Handle(TEvTabletPipe::TEvClientDestroyed::TPtr ev) { STLOG(PRI_DEBUG, BS_CONTROLLER, BSCVG03, "received TEvClientDestroyed", (GroupId, GroupId), - (ClientId, ev->Get()->ClientId), (HivePipeId, HivePipeId), (BlobDepotPipeId, BlobDepotPipeId), - (SchemeshardPipeId, SchemeshardPipeId)); + (ClientId, ev->Get()->ClientId), (HivePipeId, HivePipeId), (BlobDepotPipeId, BlobDepotPipeId)); OnPipeError(ev->Get()->ClientId); } void OnPipeError(TActorId clientId) { - for (auto *pipeId : {&HivePipeId, &BlobDepotPipeId, &SchemeshardPipeId}) { + for (auto *pipeId : {&HivePipeId, &TenantHivePipeId, &BlobDepotPipeId}) { if (*pipeId == clientId) { *pipeId = {}; Bootstrap(); @@ -576,6 +646,12 @@ namespace NKikimr::NBsController { void Handle(TEvHive::TEvReassignOnDecommitGroupReply::TPtr ev) { STLOG(PRI_INFO, BS_CONTROLLER, BSCVG07, "received TEvReassignOnDecommitGroupReply", (GroupId, GroupId), (Msg, ev->Get()->Record)); + if (TenantHiveInvalidateInProgress) { + NTabletPipe::CloseAndForgetClient(SelfId(), TenantHivePipeId); + TenantHiveInvalidateInProgress = false; + TenantHiveInvalidated = true; + Bootstrap(); + } } void Handle(TEvHive::TEvCreateTabletReply::TPtr ev) { @@ -602,7 +678,7 @@ namespace NKikimr::NBsController { } void CreateFailed(const TString& error) { - Self->Execute(std::make_unique<TTxUpdateGroup>(this, [=](TGroupInfo& group) { + Self->Execute(std::make_unique<TTxUpdateGroup>(this, [=](TGroupInfo& group, TConfigState&) { group.VirtualGroupState = NKikimrBlobStorage::EVirtualGroupState::CREATE_FAILED; group.NeedAlter = false; group.ErrorReason = error; @@ -618,7 +694,11 @@ namespace NKikimr::NBsController { void Handle(TEvHive::TEvDeleteTabletReply::TPtr ev) { STLOG(PRI_INFO, BS_CONTROLLER, BSCVG13, "received TEvDeleteTabletReply", (GroupId, GroupId), (Msg, ev->Get()->Record)); - DeleteBlobDepot(); + if (DeleteInfo) { + OnBlobDepotDeleted(); + } else { + DeleteBlobDepot(); + } } void ConfigureBlobDepot() { @@ -638,7 +718,7 @@ namespace NKikimr::NBsController { void DeleteBlobDepot() { auto *group = GetGroup(); STLOG(PRI_DEBUG, BS_CONTROLLER, BSCVG15, "DeleteBlobDepot", (GroupId, group->ID)); - Self->Execute(std::make_unique<TTxUpdateGroup>(this, [](TGroupInfo& group) { + Self->Execute(std::make_unique<TTxUpdateGroup>(this, [](TGroupInfo& group, TConfigState&) { if (group.VDisksInGroup) { group.VirtualGroupName = {}; group.VirtualGroupState = {}; @@ -654,10 +734,15 @@ namespace NKikimr::NBsController { })); } + void OnBlobDepotDeleted() { + STLOG(PRI_DEBUG, BS_CONTROLLER, BSCVG18, "OnBlobDepotDeleted", (GroupId, GroupId)); + Self->Execute(std::make_unique<TTxDeleteBlobDepot>(this)); + } + void Handle(TEvBlobDepot::TEvApplyConfigResult::TPtr /*ev*/) { NTabletPipe::CloseAndForgetClient(SelfId(), BlobDepotPipeId); - Self->Execute(std::make_unique<TTxUpdateGroup>(this, [&](TGroupInfo& group) { + Self->Execute(std::make_unique<TTxUpdateGroup>(this, [&](TGroupInfo& group, TConfigState& state) { group.VirtualGroupState = NKikimrBlobStorage::EVirtualGroupState::WORKING; auto& config = GetConfig(&group); Y_VERIFY(config.HasTabletId()); @@ -665,7 +750,7 @@ namespace NKikimr::NBsController { group.NeedAlter = false; if (group.DecommitStatus == NKikimrBlobStorage::TGroupDecommitStatus::PENDING) { group.DecommitStatus = NKikimrBlobStorage::TGroupDecommitStatus::IN_PROGRESS; - group.ContentChanged = true; + state.GroupContentChanged.insert(GroupId); } return true; })); @@ -688,14 +773,13 @@ namespace NKikimr::NBsController { //////////////////////////////////////////////////////////////////////////////////////////////////////////////// void PassAway() override { - if (!Expired()) { + if (!Expired() && !DeleteInfo) { TGroupInfo *group = GetGroup(); group->VirtualGroupSetupMachineId = {}; } NTabletPipe::CloseClient(SelfId(), HivePipeId); NTabletPipe::CloseClient(SelfId(), BlobDepotPipeId); - NTabletPipe::CloseClient(SelfId(), SchemeshardPipeId); TActorBootstrapped::PassAway(); } @@ -709,7 +793,7 @@ namespace NKikimr::NBsController { cFunc(TEvents::TSystem::Bootstrap, Bootstrap); hFunc(TEvTabletPipe::TEvClientConnected, Handle); hFunc(TEvTabletPipe::TEvClientDestroyed, Handle); - hFunc(NSchemeShard::TEvSchemeShard::TEvDescribeSchemeResult, Handle); + hFunc(TEvTxProxySchemeCache::TEvNavigateKeySetResult, Handle); hFunc(TEvHive::TEvCreateTabletReply, Handle); hFunc(TEvHive::TEvTabletCreationResult, Handle); hFunc(TEvHive::TEvInvalidateStoragePoolsReply, Handle); @@ -723,6 +807,7 @@ namespace NKikimr::NBsController { } TGroupInfo *GetGroup() { + Y_VERIFY(!DeleteInfo); TGroupInfo *res = Self->FindGroup(GroupId); Y_VERIFY(res); return res; @@ -731,6 +816,8 @@ namespace NKikimr::NBsController { bool Expired() const { if (!TlsActivationContext->Mailbox.FindActor(ControllerId.LocalId())) { // BS_CONTROLLER died return true; + } else if (DeleteInfo) { + return !Self->BlobDepotDeleteQueue.contains(GroupId); } else if (const TGroupInfo *group = Self->FindGroup(GroupId); !group) { // group is deleted return true; } else if (group->VirtualGroupSetupMachineId != SelfId()) { // another machine is started @@ -773,6 +860,14 @@ namespace NKikimr::NBsController { startSetupMachine(restartNeeded); } } + + if (state.BlobDepotDeleteQueue.Changed()) { + for (const auto& [prev, cur] : Diff(&BlobDepotDeleteQueue, &state.BlobDepotDeleteQueue.Unshare())) { + if (!prev) { // a new item was just inserted, start delete machine + StartVirtualGroupDeleteMachine(cur->first, cur->second); + } + } + } } void TBlobStorageController::StartVirtualGroupSetupMachine(TGroupInfo *group) { @@ -780,6 +875,11 @@ namespace NKikimr::NBsController { group->VirtualGroupSetupMachineId = RegisterWithSameMailbox(new TVirtualGroupSetupMachine(this, *group)); } + void TBlobStorageController::StartVirtualGroupDeleteMachine(ui32 groupId, TBlobDepotDeleteQueueInfo& info) { + Y_VERIFY(!info.VirtualGroupSetupMachineId); + info.VirtualGroupSetupMachineId = RegisterWithSameMailbox(new TVirtualGroupSetupMachine(this, groupId, info)); + } + void TBlobStorageController::Handle(TEvBlobStorage::TEvControllerGroupDecommittedNotify::TPtr ev) { class TTxDecommitGroup : public TTransactionBase<TBlobStorageController> { TEvBlobStorage::TEvControllerGroupDecommittedNotify::TPtr Ev; @@ -822,8 +922,8 @@ namespace NKikimr::NBsController { } group->VDisksInGroup.clear(); group->DecommitStatus = NKikimrBlobStorage::TGroupDecommitStatus::DONE; - group->ContentChanged = true; group->Topology = std::make_shared<TBlobStorageGroupInfo::TTopology>(group->Topology->GType, 0, 0, 0); + state.GroupContentChanged.insert(groupId); } STLOG(PRI_INFO, BS_CONTROLLER, BSCVG10, "decommission update processed", (Status, Status), diff --git a/ydb/core/mind/hive/hive_impl.cpp b/ydb/core/mind/hive/hive_impl.cpp index 5b2b7f09a7..e9a63d7472 100644 --- a/ydb/core/mind/hive/hive_impl.cpp +++ b/ydb/core/mind/hive/hive_impl.cpp @@ -273,6 +273,11 @@ void THive::ExecuteProcessBootQueue(NIceDb::TNiceDb& db, TSideEffects& sideEffec } } +void THive::HandleInit(TEvPrivate::TEvProcessBootQueue::TPtr&) { + BLOG_W("Received TEvProcessBootQueue while in StateInit"); + Schedule(TDuration::Seconds(1), new TEvPrivate::TEvProcessBootQueue()); +} + void THive::Handle(TEvPrivate::TEvProcessBootQueue::TPtr&) { BLOG_TRACE("ProcessBootQueue - executing"); Execute(CreateProcessBootQueue()); @@ -2056,6 +2061,7 @@ TResourceRawValues THive::GetDefaultResourceInitialMaximumValues() { } void THive::ProcessTabletBalancer() { + BLOG_D("ProcessTabletBalancer(" << ProcessTabletBalancerScheduled << ", " << ProcessTabletBalancerPostponed << ")"); if (!ProcessTabletBalancerScheduled && !ProcessTabletBalancerPostponed && BootQueue.BootQueue.empty()) { Schedule(GetBalancerCooldown(), new TEvPrivate::TEvProcessTabletBalancer()); ProcessTabletBalancerScheduled = true; @@ -2101,6 +2107,11 @@ double THive::GetUsage() const { return stats.MaxUsage; } +void THive::HandleInit(TEvPrivate::TEvProcessTabletBalancer::TPtr&) { + BLOG_W("Received TEvProcessTabletBalancer while in StateInit"); + Schedule(TDuration::Seconds(1), new TEvPrivate::TEvProcessTabletBalancer()); +} + void THive::Handle(TEvPrivate::TEvProcessTabletBalancer::TPtr&) { ProcessTabletBalancerScheduled = false; if (!SubActors.empty()) { @@ -2436,7 +2447,7 @@ void THive::UpdateTabletFollowersNumber(TLeaderTabletInfo& tablet, NIceDb::TNice TDuration THive::GetBalancerCooldown() const { switch(LastBalancerTrigger) { case EBalancerType::None: - return TDuration::Seconds(0); + return TDuration::Seconds(1); case EBalancerType::Scatter: return GetMinPeriodBetweenBalance(); case EBalancerType::Emergency: @@ -2635,6 +2646,8 @@ void THive::EnqueueIncomingEvent(STATEFN_SIG) { STFUNC(THive::StateInit) { switch (ev->GetTypeRewrite()) { hFunc(TEvInterconnect::TEvNodesInfo, Handle); + hFunc(TEvPrivate::TEvProcessBootQueue, HandleInit); + hFunc(TEvPrivate::TEvProcessTabletBalancer, HandleInit); // We subscribe to config updates before hive is fully loaded hFunc(TEvPrivate::TEvProcessIncomingEvent, Handle); fFunc(NConsole::TEvConsole::TEvConfigNotificationRequest::EventType, EnqueueIncomingEvent); diff --git a/ydb/core/mind/hive/hive_impl.h b/ydb/core/mind/hive/hive_impl.h index c074a73699..f3c34594c6 100644 --- a/ydb/core/mind/hive/hive_impl.h +++ b/ydb/core/mind/hive/hive_impl.h @@ -491,9 +491,11 @@ protected: void Handle(TEvPrivate::TEvKickTablet::TPtr&); void Handle(TEvPrivate::TEvBootTablets::TPtr&); void Handle(TEvPrivate::TEvCheckTabletNodeAlive::TPtr&); + void HandleInit(TEvPrivate::TEvProcessBootQueue::TPtr&); void Handle(TEvPrivate::TEvProcessBootQueue::TPtr&); void Handle(TEvPrivate::TEvPostponeProcessBootQueue::TPtr&); void Handle(TEvPrivate::TEvProcessDisconnectNode::TPtr&); + void HandleInit(TEvPrivate::TEvProcessTabletBalancer::TPtr&); void Handle(TEvPrivate::TEvProcessTabletBalancer::TPtr&); void Handle(TEvPrivate::TEvUnlockTabletReconnectTimeout::TPtr&); void Handle(TEvPrivate::TEvProcessPendingOperations::TPtr&); diff --git a/ydb/core/mind/hive/tx__load_everything.cpp b/ydb/core/mind/hive/tx__load_everything.cpp index 7dcf9ae246..97a294a143 100644 --- a/ydb/core/mind/hive/tx__load_everything.cpp +++ b/ydb/core/mind/hive/tx__load_everything.cpp @@ -13,7 +13,7 @@ public: TTxType GetTxType() const override { return NHive::TXTYPE_LOAD_EVERYTHING; } bool Execute(TTransactionContext &txc, const TActorContext&) override { - BLOG_D("THive::TTxLoadEverything::Execute"); + BLOG_NOTICE("THive::TTxLoadEverything::Execute"); TAppData* appData = AppData(); TDomainsInfo* domainsInfo = appData->DomainsInfo.Get(); @@ -55,6 +55,9 @@ public: auto domainsRowset = db.Table<Schema::SubDomain>().Select(); auto blockedOwnersRowset = db.Table<Schema::BlockedOwner>().Select(); auto tabletOwnersRowset = db.Table<Schema::TabletOwners>().Select(); + auto nodeRowset = db.Table<Schema::Node>().Select(); + auto configRowset = db.Table<Schema::State>().Select(); + auto categoryRowset = db.Table<Schema::TabletCategory>().Select(); if (!tabletRowset.IsReady() || !tabletChannelRowset.IsReady() || !tabletChannelGenRowset.IsReady() @@ -66,7 +69,10 @@ public: || !sequencesRowset.IsReady() || !domainsRowset.IsReady() || !blockedOwnersRowset.IsReady() - || !tabletOwnersRowset.IsReady()) + || !tabletOwnersRowset.IsReady() + || !nodeRowset.IsReady() + || !configRowset.IsReady() + || !categoryRowset.IsReady()) return false; } @@ -230,7 +236,7 @@ public: } } - BLOG_D("THive::TTxLoadEverything loaded " << numSequences << " sequences"); + BLOG_NOTICE("THive::TTxLoadEverything loaded " << numSequences << " sequences"); auto tabletTypeAllowedMetrics = db.Table<Schema::TabletTypeMetrics>().Select(); if (!tabletTypeAllowedMetrics.IsReady()) @@ -266,7 +272,7 @@ public: if (!domainRowset.Next()) return false; } - BLOG_D("THive::TTxLoadEverything loaded " << numSubDomains << " subdomains"); + BLOG_NOTICE("THive::TTxLoadEverything loaded " << numSubDomains << " subdomains"); } { @@ -280,7 +286,7 @@ public: if (!blockedOwnerRowset.Next()) return false; } - BLOG_D("THive::TTxLoadEverything loaded " << numBlockedOwners << " blocked owners"); + BLOG_NOTICE("THive::TTxLoadEverything loaded " << numBlockedOwners << " blocked owners"); } { @@ -323,7 +329,7 @@ public: if (!nodeRowset.Next()) return false; } - BLOG_D("THive::TTxLoadEverything loaded " << numNodes << " nodes"); + BLOG_NOTICE("THive::TTxLoadEverything loaded " << numNodes << " nodes"); } { @@ -340,7 +346,7 @@ public: if (!categoryRowset.Next()) return false; } - BLOG_D("THive::TTxLoadEverything loaded " << numTabletCategories << " tablet categories"); + BLOG_NOTICE("THive::TTxLoadEverything loaded " << numTabletCategories << " tablet categories"); } if (Self->CurrentConfig.GetSystemTabletCategoryId() != 0 && Self->TabletCategories.empty()) { @@ -445,7 +451,7 @@ public: if (!tabletRowset.Next()) return false; } - BLOG_D("THive::TTxLoadEverything loaded " << numTablets << " tablets"); + BLOG_NOTICE("THive::TTxLoadEverything loaded " << numTablets << " tablets"); } { @@ -481,7 +487,7 @@ public: if (!tabletChannelRowset.Next()) return false; } - BLOG_D("THive::TTxLoadEverything loaded " << numTabletChannels << " tablet/channel pairs (" + BLOG_NOTICE("THive::TTxLoadEverything loaded " << numTabletChannels << " tablet/channel pairs (" << numMissingTablets << " for missing tablets)"); } @@ -513,14 +519,14 @@ public: if (!tabletChannelGenRowset.Next()) return false; } - BLOG_D("THive::TTxLoadEverything loaded " << numTabletChannelHistories << " tablet/channel history items (" + BLOG_NOTICE("THive::TTxLoadEverything loaded " << numTabletChannelHistories << " tablet/channel history items (" << numMissingTablets << " for missing tablets)"); } for (auto& [tabletId, tabletInfo] : Self->Tablets) { tabletInfo.AcquireAllocationUnits(); } - BLOG_D("THive::TTxLoadEverything initialized allocation units for " << Self->Tablets.size() << " tablets"); + BLOG_NOTICE("THive::TTxLoadEverything initialized allocation units for " << Self->Tablets.size() << " tablets"); { size_t numTabletFollowerGroups = 0; @@ -560,7 +566,7 @@ public: if (!tabletFollowerGroupRowset.Next()) return false; } - BLOG_D("THive::TTxLoadEverything loaded " << numTabletFollowerGroups << " tablet follower groups (" + BLOG_NOTICE("THive::TTxLoadEverything loaded " << numTabletFollowerGroups << " tablet follower groups (" << numMissingTablets << " for missing tablets)"); } @@ -598,7 +604,7 @@ public: if (!tabletFollowerRowset.Next()) return false; } - BLOG_D("THive::TTxLoadEverything loaded " << numTabletFollowers << " tablet followers (" + BLOG_NOTICE("THive::TTxLoadEverything loaded " << numTabletFollowers << " tablet followers (" << numMissingTablets << " for missing tablets)"); } @@ -628,7 +634,7 @@ public: if (!metricsRowset.Next()) return false; } - BLOG_D("THive::TTxLoadEverything loaded " << numMetrics << " metrics (" + BLOG_NOTICE("THive::TTxLoadEverything loaded " << numMetrics << " metrics (" << numMissingTablets << " for missing tablets)"); } @@ -641,7 +647,7 @@ public: ++itNode; } } - BLOG_D("THive::TTxLoadEverything deleted " << numDeletedNodes << " unnecessary nodes"); + BLOG_NOTICE("THive::TTxLoadEverything deleted " << numDeletedNodes << " unnecessary nodes"); TTabletId nextTabletId = Max(maxTabletId + 1, Self->NextTabletId); @@ -694,7 +700,7 @@ public: } void Complete(const TActorContext& ctx) override { - BLOG_D("THive::TTxLoadEverything::Complete " << Self->DatabaseConfig.ShortDebugString()); + BLOG_NOTICE("THive::TTxLoadEverything::Complete " << Self->DatabaseConfig.ShortDebugString()); i64 tabletsTotal = 0; for (auto it = Self->Tablets.begin(); it != Self->Tablets.end(); ++it) { ++tabletsTotal; diff --git a/ydb/core/mind/node_broker.cpp b/ydb/core/mind/node_broker.cpp index e197db1022..a65366b4bc 100644 --- a/ydb/core/mind/node_broker.cpp +++ b/ydb/core/mind/node_broker.cpp @@ -347,7 +347,7 @@ void TNodeBroker::ApplyStateDiff(const TStateDiff &diff) "Remove node " << it->second.IdString()); ExpiredNodes.erase(it); - if (!IsBannedId(id) && NodeIdDomain(id) == DomainId) + if (!IsBannedId(id) && NodeIdDomain(id) == DomainId && id >= MinDynamicId && id <= MaxDynamicId) FreeIds.Set(id); } diff --git a/ydb/core/mind/node_broker_ut.cpp b/ydb/core/mind/node_broker_ut.cpp index 2f6de4e58f..2ec8ff9a64 100644 --- a/ydb/core/mind/node_broker_ut.cpp +++ b/ydb/core/mind/node_broker_ut.cpp @@ -1238,6 +1238,48 @@ Y_UNIT_TEST_SUITE(TNodeBrokerTest) { CheckLeaseExtension(runtime, sender, 1024, TStatus::OK, epoch); CheckLeaseExtension(runtime, sender, 1088, TStatus::OK, epoch); } + + Y_UNIT_TEST(DoNotReuseDynnodeIdsBelowMinDynamicNodeId) + { + TTestBasicRuntime runtime(8, false); + Setup(runtime); + TActorId sender = runtime.AllocateEdgeActor(); + + // There should be no dynamic nodes initially. + auto epoch = GetEpoch(runtime, sender); + + // Register node 1024. + CheckRegistration(runtime, sender, "host1", 1001, "host1.yandex.net", "1.2.3.4", + 1, 2, 3, 4, TStatus::OK, 1024, epoch.GetNextEnd()); + + // Update config and restart NodeBroker + auto dnConfig = runtime.GetAppData().DynamicNameserviceConfig; + dnConfig->MinDynamicNodeId += 64; + dnConfig->MaxDynamicNodeId += 64; + RestartNodeBroker(runtime); + + // Wait until epoch expiration. + WaitForEpochUpdate(runtime, sender); + epoch = GetEpoch(runtime, sender); + CheckLeaseExtension(runtime, sender, 1024, TStatus::OK, epoch); + CheckNodeInfo(runtime, sender, 1024, TStatus::OK); + + WaitForEpochUpdate(runtime, sender); + CheckNodeInfo(runtime, sender, 1024, TStatus::OK); + + // Wait until node's lease expires + WaitForEpochUpdate(runtime, sender); + WaitForEpochUpdate(runtime, sender); + WaitForEpochUpdate(runtime, sender); + WaitForEpochUpdate(runtime, sender); + epoch = GetEpoch(runtime, sender); + + CheckNodeInfo(runtime, sender, 1024, TStatus::WRONG_REQUEST); + + // Register node 1088. + CheckRegistration(runtime, sender, "host2", 1001, "host2.yandex.net", "1.2.3.5", + 1, 2, 3, 5, TStatus::OK, 1088, epoch.GetNextEnd()); + } } Y_UNIT_TEST_SUITE(TDynamicNameserverTest) { diff --git a/ydb/core/persqueue/partition.cpp b/ydb/core/persqueue/partition.cpp index 9cb989a21a..fe3989f4b3 100644 --- a/ydb/core/persqueue/partition.cpp +++ b/ydb/core/persqueue/partition.cpp @@ -24,6 +24,7 @@ namespace NKikimr::NPQ { static const TDuration WAKE_TIMEOUT = TDuration::Seconds(5); static const TDuration UPDATE_AVAIL_SIZE_INTERVAL = TDuration::MilliSeconds(100); +static const TDuration MIN_UPDATE_COUNTERS_DELAY = TDuration::MilliSeconds(300); static const ui32 MAX_USERS = 1000; static const ui32 MAX_TXS = 1000; @@ -489,7 +490,7 @@ void TPartition::InitComplete(const TActorContext& ctx) { CreateMirrorerActor(); } - ReportCounters(ctx); + ReportCounters(ctx, true); } @@ -529,6 +530,7 @@ void TPartition::Handle(TEvPQ::TEvPipeDisconnected::TPtr& ev, const TActorContex void TPartition::Handle(TEvPQ::TEvPartitionStatus::TPtr& ev, const TActorContext& ctx) { NKikimrPQ::TStatusResponse::TPartResult result; result.SetPartition(Partition); + if (DiskIsFull || WaitingForSubDomainQuota(ctx)) { result.SetStatus(NKikimrPQ::TStatusResponse::STATUS_DISK_IS_FULL); } else if (EndOffset - StartOffset >= static_cast<ui64>(Config.GetPartitionConfig().GetMaxCountInPartition()) || @@ -965,12 +967,18 @@ ui64 TPartition::GetSizeLag(i64 offset) { } -bool TPartition::UpdateCounters(const TActorContext& ctx) { +bool TPartition::UpdateCounters(const TActorContext& ctx, bool force) { if (!PartitionCountersLabeled) { return false; } - // per client counters + const auto now = ctx.Now(); + if ((now - LastCountersUpdate < MIN_UPDATE_COUNTERS_DELAY) && !force) + return false; + + LastCountersUpdate = now; + + // per client counters for (auto& userInfoPair : UsersInfoStorage->GetAll()) { auto& userInfo = userInfoPair.second; if (!userInfo.LabeledCounters) @@ -1191,8 +1199,8 @@ bool TPartition::UpdateCounters(const TActorContext& ctx) { return haveChanges; } -void TPartition::ReportCounters(const TActorContext& ctx) { - if (UpdateCounters(ctx)) { +void TPartition::ReportCounters(const TActorContext& ctx, bool force) { + if (UpdateCounters(ctx, force)) { ctx.Send(Tablet, new TEvPQ::TEvPartitionLabeledCounters(Partition, *PartitionCountersLabeled)); } } diff --git a/ydb/core/persqueue/partition.h b/ydb/core/persqueue/partition.h index 1dc8a8cb01..b7ff07d633 100644 --- a/ydb/core/persqueue/partition.h +++ b/ydb/core/persqueue/partition.h @@ -173,8 +173,8 @@ private: void ProcessTimestampsForNewData(const ui64 prevEndOffset, const TActorContext& ctx); void ReadTimestampForOffset(const TString& user, TUserInfo& ui, const TActorContext& ctx); - void ReportCounters(const TActorContext& ctx); - bool UpdateCounters(const TActorContext& ctx); + void ReportCounters(const TActorContext& ctx, bool force = false); + bool UpdateCounters(const TActorContext& ctx, bool force = false); void ScheduleUpdateAvailableSize(const TActorContext& ctx); void SetDeadlinesForWrites(const TActorContext& ctx); @@ -606,6 +606,7 @@ private: TTabletCountersBase TabletCounters; THolder<TPartitionLabeledCounters> PartitionCountersLabeled; + TInstant LastCountersUpdate; TSubscriber Subscriber; diff --git a/ydb/core/persqueue/partition_read.cpp b/ydb/core/persqueue/partition_read.cpp index 6b7e14c032..0b2150d85a 100644 --- a/ydb/core/persqueue/partition_read.cpp +++ b/ydb/core/persqueue/partition_read.cpp @@ -970,7 +970,7 @@ void TPartition::HandleSetOffsetResponse(ui64 cookie, const TActorContext& ctx) TxIdHasChanged = false; if (ChangeConfig) { - ReportCounters(ctx); + ReportCounters(ctx, true); ChangeConfig = nullptr; } diff --git a/ydb/core/persqueue/read_balancer.cpp b/ydb/core/persqueue/read_balancer.cpp index 12e36c82ed..2cef4af0ae 100644 --- a/ydb/core/persqueue/read_balancer.cpp +++ b/ydb/core/persqueue/read_balancer.cpp @@ -182,9 +182,10 @@ void TPersQueueReadBalancer::TTxWrite::Complete(const TActorContext &ctx) { Self->WaitingResponse.clear(); Self->NoGroupsInBase = false; - - Self->Inited = true; - Self->InitDone(ctx); + if (!Self->Inited) { + Self->Inited = true; + Self->InitDone(ctx); + } } struct TPersQueueReadBalancer::TTxWritePartitionStats : public ITransaction { @@ -471,14 +472,6 @@ void TPersQueueReadBalancer::Handle(TEvPersQueue::TEvDescribe::TPtr &ev, const T } -void TPersQueueReadBalancer::Handle(TEvents::TEvPoisonPill &ev, const TActorContext& ctx) { - Y_UNUSED(ev); - Y_UNUSED(ctx); - Become(&TThis::StateBroken); - ctx.Send(Tablet(), new TEvents::TEvPoisonPill); -} - - void TPersQueueReadBalancer::Handle(TEvPersQueue::TEvUpdateBalancerConfig::TPtr &ev, const TActorContext& ctx) { auto& record = ev->Get()->Record; if ((int)record.GetVersion() < Version && Inited) { @@ -512,6 +505,7 @@ void TPersQueueReadBalancer::Handle(TEvPersQueue::TEvUpdateBalancerConfig::TPtr res->Record.SetTxId(ev->Get()->Record.GetTxId()); res->Record.SetOrigin(TabletID()); ctx.Send(ev->Sender, res.Release()); + return; } WaitingResponse.push_back(ev->Sender); diff --git a/ydb/core/persqueue/read_balancer.h b/ydb/core/persqueue/read_balancer.h index 33b3b465b3..3d52486cee 100644 --- a/ydb/core/persqueue/read_balancer.h +++ b/ydb/core/persqueue/read_balancer.h @@ -179,11 +179,6 @@ class TPersQueueReadBalancer : public TActor<TPersQueueReadBalancer>, public TTa friend struct TTxWrite; - void Handle(TEvents::TEvPoisonPill::TPtr&, const TActorContext &ctx) { - Become(&TThis::StateBroken); - ctx.Send(Tablet(), new TEvents::TEvPoisonPill); - } - void HandleWakeup(TEvents::TEvWakeup::TPtr&, const TActorContext &ctx) { LOG_DEBUG(ctx, NKikimrServices::PERSQUEUE_READ_BALANCER, TStringBuilder() << "TPersQueueReadBalancer::HandleWakeup"); @@ -312,7 +307,6 @@ class TPersQueueReadBalancer : public TActor<TPersQueueReadBalancer>, public TTa void AnswerWaitingRequests(const TActorContext& ctx); void Handle(TEvPersQueue::TEvPartitionReleased::TPtr& ev, const TActorContext& ctx); - void Handle(TEvents::TEvPoisonPill &ev, const TActorContext& ctx); void Handle(TEvPersQueue::TEvStatusResponse::TPtr& ev, const TActorContext& ctx); void Handle(TEvPQ::TEvStatsWakeup::TPtr& ev, const TActorContext& ctx); @@ -573,7 +567,6 @@ public: TMetricsTimeKeeper keeper(ResourceMetrics, ctx); switch (ev->GetTypeRewrite()) { - HFunc(TEvents::TEvPoisonPill, Handle); HFunc(TEvPersQueue::TEvUpdateBalancerConfig, HandleOnInit); HFunc(TEvPersQueue::TEvWakeupClient, Handle); HFunc(TEvPersQueue::TEvDescribe, Handle); @@ -597,7 +590,6 @@ public: TMetricsTimeKeeper keeper(ResourceMetrics, ctx); switch (ev->GetTypeRewrite()) { - HFunc(TEvents::TEvPoisonPill, Handle); HFunc(TEvents::TEvWakeup, HandleWakeup); HFunc(TEvPersQueue::TEvUpdateACL, HandleUpdateACL); HFunc(TEvPersQueue::TEvCheckACL, Handle); @@ -626,15 +618,6 @@ public: } } - STFUNC(StateBroken) { - auto ctx(ActorContext()); - TMetricsTimeKeeper keeper(ResourceMetrics, ctx); - - switch (ev->GetTypeRewrite()) { - HFunc(TEvTablet::TEvTabletDead, HandleTabletDead) - } - } - }; } diff --git a/ydb/core/persqueue/transaction.cpp b/ydb/core/persqueue/transaction.cpp index 900f5f1814..0979f9c26d 100644 --- a/ydb/core/persqueue/transaction.cpp +++ b/ydb/core/persqueue/transaction.cpp @@ -183,7 +183,7 @@ void TDistributedTransaction::OnPartitionResult(const E& event, EDecision decisi Y_VERIFY(Partitions.contains(event.Partition)); - SetDecision(decision); + SetDecision(SelfDecision, decision); ++PartitionRepliesCount; } @@ -192,17 +192,19 @@ void TDistributedTransaction::OnReadSet(const NKikimrTx::TEvReadSet& event, const TActorId& sender, std::unique_ptr<TEvTxProcessing::TEvReadSetAck> ack) { - Y_VERIFY(event.HasStep() && (Step == event.GetStep())); + Y_VERIFY((Step == Max<ui64>()) || (event.HasStep() && (Step == event.GetStep()))); Y_VERIFY(event.HasTxId() && (TxId == event.GetTxId())); if (Senders.contains(event.GetTabletProducer())) { NKikimrTx::TReadSetData data; Y_VERIFY(event.HasReadSet() && data.ParseFromString(event.GetReadSet())); - SetDecision(event.GetTabletProducer(), data.GetDecision()); + SetDecision(ParticipantsDecision, data.GetDecision()); ReadSetAcks[sender] = std::move(ack); ++ReadSetCount; + } else { + Y_VERIFY_DEBUG(false, "unknown sender tablet %" PRIu64, event.GetTabletProducer()); } } @@ -224,18 +226,6 @@ void TDistributedTransaction::OnTxCommitDone(const TEvPQ::TEvTxCommitDone& event ++PartitionRepliesCount; } -void TDistributedTransaction::SetDecision(NKikimrTx::TReadSetData::EDecision decision) -{ - SetDecision(SelfDecision, decision); -} - -void TDistributedTransaction::SetDecision(ui64 tabletId, NKikimrTx::TReadSetData::EDecision decision) -{ - if (Senders.contains(tabletId)) { - SetDecision(ParticipantsDecision, decision); - } -} - auto TDistributedTransaction::GetDecision() const -> EDecision { constexpr EDecision commit = NKikimrTx::TReadSetData::DECISION_COMMIT; diff --git a/ydb/core/persqueue/transaction.h b/ydb/core/persqueue/transaction.h index b11cba6c53..1650d33a02 100644 --- a/ydb/core/persqueue/transaction.h +++ b/ydb/core/persqueue/transaction.h @@ -66,9 +66,6 @@ struct TDistributedTransaction { bool WriteInProgress = false; - void SetDecision(EDecision decision); - void SetDecision(ui64 tablet, EDecision decision); - EDecision GetDecision() const; bool HaveParticipantsDecision() const; diff --git a/ydb/core/persqueue/ut/common/pq_ut_common.cpp b/ydb/core/persqueue/ut/common/pq_ut_common.cpp index e3e2e27da0..1770a936e9 100644 --- a/ydb/core/persqueue/ut/common/pq_ut_common.cpp +++ b/ydb/core/persqueue/ut/common/pq_ut_common.cpp @@ -187,12 +187,12 @@ void CmdGetOffset(const ui32 partition, const TString& user, i64 offset, TTestCo } void PQBalancerPrepare(const TString topic, const TVector<std::pair<ui32, std::pair<ui64, ui32>>>& map, const ui64 ssId, - TTestContext& context, const bool requireAuth) { - PQBalancerPrepare(topic, map, ssId, *context.Runtime, context.BalancerTabletId, context.Edge, requireAuth); + TTestContext& context, const bool requireAuth, bool kill) { + PQBalancerPrepare(topic, map, ssId, *context.Runtime, context.BalancerTabletId, context.Edge, requireAuth, kill); } void PQBalancerPrepare(const TString topic, const TVector<std::pair<ui32, std::pair<ui64, ui32>>>& map, const ui64 ssId, - TTestActorRuntime& runtime, ui64 balancerTabletId, TActorId edge, const bool requireAuth) { + TTestActorRuntime& runtime, ui64 balancerTabletId, TActorId edge, const bool requireAuth, bool kill) { TAutoPtr<IEventHandle> handle; static int version = 0; ++version; @@ -237,10 +237,12 @@ void PQBalancerPrepare(const TString topic, const TVector<std::pair<ui32, std::p } } //TODO: check state - ForwardToTablet(runtime, balancerTabletId, edge, new TEvents::TEvPoisonPill()); - TDispatchOptions rebootOptions; - rebootOptions.FinalEvents.push_back(TDispatchOptions::TFinalEventCondition(TEvTablet::EvRestored, 2)); - runtime.DispatchEvents(rebootOptions); + if (kill) { + ForwardToTablet(runtime, balancerTabletId, edge, new TEvents::TEvPoisonPill()); + TDispatchOptions rebootOptions; + rebootOptions.FinalEvents.push_back(TDispatchOptions::TFinalEventCondition(TEvTablet::EvRestored, 2)); + runtime.DispatchEvents(rebootOptions); + } } void PQGetPartInfo(ui64 startOffset, ui64 endOffset, TTestContext& tc) { diff --git a/ydb/core/persqueue/ut/common/pq_ut_common.h b/ydb/core/persqueue/ut/common/pq_ut_common.h index 003c89642a..edf96841b4 100644 --- a/ydb/core/persqueue/ut/common/pq_ut_common.h +++ b/ydb/core/persqueue/ut/common/pq_ut_common.h @@ -276,7 +276,8 @@ void PQBalancerPrepare( TTestActorRuntime& runtime, ui64 tabletId, TActorId edge, - const bool requireAuth = false); + const bool requireAuth = false, + bool kill = true); void PQTabletRestart( TTestActorRuntime& runtime, @@ -298,7 +299,8 @@ void PQBalancerPrepare( const TVector<std::pair<ui32, std::pair<ui64, ui32>>>& map, const ui64 ssId, TTestContext& context, - const bool requireAuth = false); + const bool requireAuth = false, + bool kill = true); void PQTabletRestart(TTestContext& context); diff --git a/ydb/core/persqueue/ut/pq_ut.cpp b/ydb/core/persqueue/ut/pq_ut.cpp index 6bc2b6d43d..6f9f482a84 100644 --- a/ydb/core/persqueue/ut/pq_ut.cpp +++ b/ydb/core/persqueue/ut/pq_ut.cpp @@ -2021,6 +2021,43 @@ Y_UNIT_TEST(TestWriteTimeLag) { CmdGetOffset(0, "aaa", 0, tc, -1, 0); } +Y_UNIT_TEST(TestManyConsumers) { + TTestContext tc; + TFinalizer finalizer(tc); + tc.Prepare(); + + tc.Runtime->SetScheduledLimit(150); + tc.Runtime->SetDispatchTimeout(TDuration::Seconds(1)); + tc.Runtime->SetLogPriority(NKikimrServices::PERSQUEUE, NLog::PRI_DEBUG); + + TVector<std::pair<TString, bool>> consumers; + for (ui32 i = 0; i < 2000; ++i) { + consumers.push_back(std::make_pair<TString, bool>(TStringBuilder() << "consumer_" << i, false)); + } + + PQTabletPrepare({}, consumers, tc); + + TFakeSchemeShardState::TPtr state{new TFakeSchemeShardState()}; + ui64 ssId = 325; + BootFakeSchemeShard(*tc.Runtime, ssId, state); + + for (ui32 i = 0; i < 100; ++i) { + PQBalancerPrepare(TOPIC_NAME, {{0,{tc.TabletId, 1}}}, ssId, tc, false, false); + } + + for (ui32 i = 0; i < 100; ++i) { + tc.Runtime->SendToPipe(tc.TabletId, tc.Edge, new TEvPersQueue::TEvStatus(), 0, GetPipeConfigWithRetries()); + + TAutoPtr<IEventHandle> handle; + TEvPersQueue::TEvStatusResponse *result; + result = tc.Runtime->GrabEdgeEvent<TEvPersQueue::TEvStatusResponse>(handle); + Y_UNUSED(result); + } + PQBalancerPrepare(TOPIC_NAME, {{0,{tc.TabletId, 1}}}, ssId, tc, false, true); + +} + + void CheckEventSequence(TTestContext& tc, std::function<void()> scenario, std::deque<ui32> expectedEvents) { tc.Runtime->SetObserverFunc([&expectedEvents](TTestActorRuntimeBase&, TAutoPtr<IEventHandle>& ev) { @@ -2067,5 +2104,7 @@ Y_UNIT_TEST(TestTabletRestoreEventsOrder) { }); } + + } // Y_UNIT_TEST_SUITE(TPQTest) } // namespace NKikimr::NPQ diff --git a/ydb/core/persqueue/ut/pqtablet_ut.cpp b/ydb/core/persqueue/ut/pqtablet_ut.cpp index 9f770b8fc7..a6717ee0ab 100644 --- a/ydb/core/persqueue/ut/pqtablet_ut.cpp +++ b/ydb/core/persqueue/ut/pqtablet_ut.cpp @@ -59,7 +59,6 @@ struct TReadSetParams { ui64 Source = 0; ui64 Target = 0; bool Predicate = false; - ui64 SeqNo = 0; }; struct TDropTabletParams { @@ -148,7 +147,7 @@ protected: void WaitPlanStepAccepted(const TPlanStepAcceptedMatcher& matcher = {}); void WaitReadSet(NHelpers::TPQTabletMock& tablet, const TReadSetMatcher& matcher); - void SendReadSet(NHelpers::TPQTabletMock& tablet, const TReadSetParams& params); + void SendReadSet(const TReadSetParams& params); void WaitReadSetAck(NHelpers::TPQTabletMock& tablet, const TReadSetAckMatcher& matcher); void SendReadSetAck(NHelpers::TPQTabletMock& tablet); @@ -359,6 +358,26 @@ void TPQTabletFixture::WaitReadSet(NHelpers::TPQTabletMock& tablet, const TReadS } } +void TPQTabletFixture::SendReadSet(const TReadSetParams& params) +{ + NKikimrTx::TReadSetData payload; + payload.SetDecision(params.Predicate ? NKikimrTx::TReadSetData::DECISION_COMMIT : NKikimrTx::TReadSetData::DECISION_ABORT); + + TString body; + Y_VERIFY(payload.SerializeToString(&body)); + + auto event = std::make_unique<TEvTxProcessing::TEvReadSet>(params.Step, + params.TxId, + params.Source, + params.Target, + params.Source, + body, + 0); + + SendToPipe(Ctx->Edge, + event.release()); +} + void TPQTabletFixture::WaitReadSetAck(NHelpers::TPQTabletMock& tablet, const TReadSetAckMatcher& matcher) { if (!tablet.ReadSetAck.Defined()) { @@ -917,6 +936,31 @@ Y_UNIT_TEST_F(Test_Waiting_For_TEvReadSet_Without_Senders, TPQTabletFixture) TestWaitingForTEvReadSet(0, 2); } +Y_UNIT_TEST_F(TEvReadSet_comes_before_TEvPlanStep, TPQTabletFixture) +{ + const ui64 mockTabletId = 22222; + + CreatePQTabletMock(mockTabletId); + PQTabletPrepare({.partitions=1}, {}, *Ctx); + + const ui64 txId = 67890; + + SendProposeTransactionRequest({.TxId=txId, + .Senders={mockTabletId}, .Receivers={mockTabletId}, + .TxOps={ + {.Partition=0, .Consumer="user", .Begin=0, .End=1, .Path="/topic"} + }}); + WaitProposeTransactionResponse({.TxId=txId, + .Status=NKikimrPQ::TEvProposeTransactionResult::PREPARED}); + + SendReadSet({.Step=100, .TxId=txId, .Source=mockTabletId, .Target=Ctx->TabletId, .Predicate=true}); + + SendPlanStep({.Step=100, .TxIds={txId}}); + + WaitPlanStepAck({.Step=100, .TxIds={txId}}); // TEvPlanStepAck для координатора + WaitPlanStepAccepted({.Step=100}); +} + } } diff --git a/ydb/core/persqueue/writer/source_id_encoding.cpp b/ydb/core/persqueue/writer/source_id_encoding.cpp index e42a9ba7d1..44e39b7679 100644 --- a/ydb/core/persqueue/writer/source_id_encoding.cpp +++ b/ydb/core/persqueue/writer/source_id_encoding.cpp @@ -16,7 +16,7 @@ namespace NKikimr { namespace NPQ { -TString GetSourceIdSelectQueryFromPath(const TString& path, ESourceIdTableGeneration generation) { +TString GetSelectSourceIdQueryFromPath(const TString& path, ESourceIdTableGeneration generation) { TStringBuilder res; switch (generation) { case ESourceIdTableGeneration::SrcIdMeta2: @@ -42,12 +42,12 @@ TString GetSourceIdSelectQueryFromPath(const TString& path, ESourceIdTableGenera return res; } -TString GetSourceIdSelectQuery(const TString& root, ESourceIdTableGeneration generation) { +TString GetSelectSourceIdQuery(const TString& root, ESourceIdTableGeneration generation) { switch (generation) { case ESourceIdTableGeneration::SrcIdMeta2: - return GetSourceIdSelectQueryFromPath(root + "/SourceIdMeta2", generation); + return GetSelectSourceIdQueryFromPath(root + "/SourceIdMeta2", generation); case ESourceIdTableGeneration::PartitionMapping: - return GetUpdateIdSelectQueryFromPath( + return GetSelectSourceIdQueryFromPath( NGRpcProxy::V1::TSrcIdMetaInitManager::GetInstant()->GetStorageTablePath(), generation ); @@ -56,7 +56,7 @@ TString GetSourceIdSelectQuery(const TString& root, ESourceIdTableGeneration gen } } -TString GetUpdateIdSelectQueryFromPath(const TString& path, ESourceIdTableGeneration generation) { +TString GetUpdateSourceIdQueryFromPath(const TString& path, ESourceIdTableGeneration generation) { TStringBuilder res; switch (generation) { case ESourceIdTableGeneration::SrcIdMeta2: @@ -90,13 +90,14 @@ TString GetUpdateIdSelectQueryFromPath(const TString& path, ESourceIdTableGenera return res; } -TString GetUpdateIdSelectQuery(const TString& root, ESourceIdTableGeneration generation) { +TString GetUpdateSourceIdQuery(const TString& root, ESourceIdTableGeneration generation) { switch (generation) { case ESourceIdTableGeneration::SrcIdMeta2: - return GetUpdateIdSelectQueryFromPath(root + "/SourceIdMeta2"); + return GetUpdateSourceIdQueryFromPath(root + "/SourceIdMeta2", generation); case ESourceIdTableGeneration::PartitionMapping: - return GetUpdateIdSelectQueryFromPath( - NGRpcProxy::V1::TSrcIdMetaInitManager::GetInstant()->GetStorageTablePath() + return GetUpdateSourceIdQueryFromPath( + NGRpcProxy::V1::TSrcIdMetaInitManager::GetInstant()->GetStorageTablePath(), + generation ); default: Y_FAIL(); diff --git a/ydb/core/persqueue/writer/source_id_encoding.h b/ydb/core/persqueue/writer/source_id_encoding.h index 74e672146c..6f0bd3a073 100644 --- a/ydb/core/persqueue/writer/source_id_encoding.h +++ b/ydb/core/persqueue/writer/source_id_encoding.h @@ -13,11 +13,11 @@ enum class ESourceIdTableGeneration { PartitionMapping }; -TString GetSourceIdSelectQuery(const TString& root, ESourceIdTableGeneration = ESourceIdTableGeneration::SrcIdMeta2); -TString GetUpdateIdSelectQuery(const TString& root, ESourceIdTableGeneration = ESourceIdTableGeneration::SrcIdMeta2); +TString GetSelectSourceIdQuery(const TString& root, ESourceIdTableGeneration = ESourceIdTableGeneration::SrcIdMeta2); +TString GetUpdateSourceIdQuery(const TString& root, ESourceIdTableGeneration = ESourceIdTableGeneration::SrcIdMeta2); -TString GetSourceIdSelectQueryFromPath(const TString& path, ESourceIdTableGeneration = ESourceIdTableGeneration::SrcIdMeta2); -TString GetUpdateIdSelectQueryFromPath(const TString& path, ESourceIdTableGeneration = ESourceIdTableGeneration::SrcIdMeta2); +TString GetSelectSourceIdQueryFromPath(const TString& path, ESourceIdTableGeneration = ESourceIdTableGeneration::SrcIdMeta2); +TString GetUpdateSourceIdQueryFromPath(const TString& path, ESourceIdTableGeneration = ESourceIdTableGeneration::SrcIdMeta2); namespace NSourceIdEncoding { diff --git a/ydb/core/protos/blob_depot_config.proto b/ydb/core/protos/blob_depot_config.proto index 71314eb295..51b64d8494 100644 --- a/ydb/core/protos/blob_depot_config.proto +++ b/ydb/core/protos/blob_depot_config.proto @@ -24,4 +24,5 @@ message TBlobDepotConfig { optional uint64 TabletId = 4; optional bool HiveContacted = 5; optional NKikimrHive.TEvCreateTablet HiveParams = 6; // extra hive parameters + optional uint64 TenantHiveId = 7; } diff --git a/ydb/core/protos/config.proto b/ydb/core/protos/config.proto index 4a6433c306..adbd456b71 100644 --- a/ydb/core/protos/config.proto +++ b/ydb/core/protos/config.proto @@ -819,6 +819,7 @@ message TFeatureFlags { optional bool EnableGetNodeLabels = 99 [default = false]; optional bool EnableTopicMessageMeta = 100 [default = false]; optional bool EnableIcNodeCache = 101 [default = true]; + optional bool SuppressCompatibilityCheck = 103 [default = false]; } message THttpProxyConfig { @@ -1995,9 +1996,10 @@ message TCompatibilityRule { PDisk = 4; VDisk = 5; BlobStorageController = 6; + ComponentsCount = 7; } - optional string Build = 1; + optional string Application = 1; optional TYdbVersion LowerLimit = 2; optional TYdbVersion UpperLimit = 3; @@ -2010,20 +2012,21 @@ message TCompatibilityRule { } message TCurrentCompatibilityInfo { - required string Build = 1; + required string Application = 1; - // if YdbVersion is empty, build is assumed to be non-stable - optional TYdbVersion YdbVersion = 2; + // if Version is empty, build is assumed to be non-stable + optional TYdbVersion Version = 2; repeated TCompatibilityRule CanLoadFrom = 3; repeated TCompatibilityRule StoresReadableBy = 4; + repeated TCompatibilityRule CanConnectTo = 5; } message TStoredCompatibilityInfo { - required string Build = 1; + required string Application = 1; - // if YdbVersion is empty, build is assumed to be non-stable - optional TYdbVersion YdbVersion = 2; + // if Version is empty, build is assumed to be non-stable + optional TYdbVersion Version = 2; repeated TCompatibilityRule ReadableBy = 3; } diff --git a/ydb/core/protos/console_config.proto b/ydb/core/protos/console_config.proto index 900978eadb..2bfcfefb2a 100644 --- a/ydb/core/protos/console_config.proto +++ b/ydb/core/protos/console_config.proto @@ -243,6 +243,7 @@ message TSetYamlConfigRequest { } message TSetYamlConfigResponse { + repeated Ydb.Issue.IssueMessage Issues = 1; } message TReplaceYamlConfigRequest { @@ -251,6 +252,7 @@ message TReplaceYamlConfigRequest { } message TReplaceYamlConfigResponse { + repeated Ydb.Issue.IssueMessage Issues = 1; } message TDropConfigRequest { diff --git a/ydb/core/protos/counters_bs_controller.proto b/ydb/core/protos/counters_bs_controller.proto index 77e2dfb8c3..f5e4815ef9 100644 --- a/ydb/core/protos/counters_bs_controller.proto +++ b/ydb/core/protos/counters_bs_controller.proto @@ -270,4 +270,5 @@ enum ETxTypes { TXTYPE_GROUP_METRICS_EXCHANGE = 25 [(TxTypeOpts) = {Name: "TTxGroupMetricsExchange"}]; TXTYPE_DECOMMIT_GROUP = 26 [(TxTypeOpts) = {Name: "TTxDecommitGroup"}]; TXTYPE_UPDATE_GROUP = 27 [(TxTypeOpts) = {Name: "TTxUpdateGroup"}]; + TXTYPE_DELETE_BLOB_DEPOT = 28 [(TxTypeOpts) = {Name: "TTxDeleteBlobDepot"}]; } diff --git a/ydb/core/protos/counters_datashard.proto b/ydb/core/protos/counters_datashard.proto index d43054d946..038f0517c2 100644 --- a/ydb/core/protos/counters_datashard.proto +++ b/ydb/core/protos/counters_datashard.proto @@ -24,6 +24,7 @@ enum ESimpleCounters { COUNTER_READ_ITERATORS_WAITING = 14 [(CounterOpts) = {Name: "ReadIteratorsWaiting"}]; COUNTER_READ_ITERATORS_COUNT = 15 [(CounterOpts) = {Name: "ReadIteratorsCount"}]; COUNTER_READ_ITERATORS_EXHAUSTED_COUNT = 16 [(CounterOpts) = {Name: "ReadIteratorsExhaustedCount"}]; + COUNTER_CHANGE_DELIVERY_LAG = 17 [(CounterOpts) = {Name: "ChangeDeliveryLag"}]; } enum ECumulativeCounters { diff --git a/ydb/core/protos/flat_scheme_op.proto b/ydb/core/protos/flat_scheme_op.proto index eec4c42fbb..eeac14d368 100644 --- a/ydb/core/protos/flat_scheme_op.proto +++ b/ydb/core/protos/flat_scheme_op.proto @@ -757,6 +757,7 @@ message TCreateCdcStream { optional string TableName = 1; optional TCdcStreamDescription StreamDescription = 2; optional uint64 RetentionPeriodSeconds = 3 [default = 86400]; // 1d by default + optional uint32 TopicPartitions = 4; } message TAlterCdcStream { diff --git a/ydb/core/protos/flat_tx_scheme.proto b/ydb/core/protos/flat_tx_scheme.proto index ed2d300245..adf767d166 100644 --- a/ydb/core/protos/flat_tx_scheme.proto +++ b/ydb/core/protos/flat_tx_scheme.proto @@ -209,6 +209,7 @@ message TEvInitTenantSchemeShard { optional NKikimrSubDomains.TSchemeQuotas DeclaredSchemeQuotas = 16; optional Ydb.Cms.DatabaseQuotas DatabaseQuotas = 17; + optional NKikimrSubDomains.TAuditSettings AuditSettings = 18; } message TEvInitTenantSchemeShardResult { @@ -376,6 +377,8 @@ message TEvUpdateTenantSchemeShard { optional Ydb.Cms.DatabaseQuotas DatabaseQuotas = 14; optional string UpdateTenantRootACL = 13; + + optional NKikimrSubDomains.TAuditSettings AuditSettings = 15; } message TEvFindTabletSubDomainPathId { diff --git a/ydb/core/protos/subdomains.proto b/ydb/core/protos/subdomains.proto index cfc5e1f89e..83490ca6d2 100644 --- a/ydb/core/protos/subdomains.proto +++ b/ydb/core/protos/subdomains.proto @@ -22,6 +22,7 @@ message TSubDomainSettings { optional bool ExternalSysViewProcessor = 10 [default = false]; optional TSchemeQuotas DeclaredSchemeQuotas = 11; optional Ydb.Cms.DatabaseQuotas DatabaseQuotas = 12; + optional TAuditSettings AuditSettings = 13; } message TProcessingParams { @@ -65,6 +66,11 @@ message TDomainState { optional bool DiskQuotaExceeded = 1; } +message TAuditSettings { + optional bool EnableDmlAudit = 1 [default = false]; + repeated string ExpectedSubjects = 2; +} + message TDomainDescription { optional fixed64 SchemeShardId_Depricated = 1; optional fixed64 PathId_Depricated = 2; @@ -91,6 +97,8 @@ message TDomainDescription { optional TDomainState DomainState = 16; optional NLoginProto.TSecurityState SecurityState = 20; + + optional TAuditSettings AuditSettings = 21; } message TSchemeQuotas { diff --git a/ydb/core/quoter/kesus_quoter_proxy.cpp b/ydb/core/quoter/kesus_quoter_proxy.cpp index 56060b20d8..2971f81664 100644 --- a/ydb/core/quoter/kesus_quoter_proxy.cpp +++ b/ydb/core/quoter/kesus_quoter_proxy.cpp @@ -184,7 +184,11 @@ class TKesusQuoterProxy : public TActorBootstrapped<TKesusQuoterProxy> { const auto& cfg = Props.GetHierarchicalDRRResourceConfig(); const double speed = cfg.GetMaxUnitsPerSecond(); const double prefetch = cfg.GetPrefetchCoefficient() ? cfg.GetPrefetchCoefficient() : NKesus::NQuoter::PREFETCH_COEFFICIENT_DEFAULT; - const double watermark = std::clamp(cfg.GetPrefetchWatermark() ? cfg.GetPrefetchWatermark() : NKesus::NQuoter::PREFETCH_WATERMARK_DEFAULT, 0.0, 1.0); + double watermark = std::clamp(cfg.GetPrefetchWatermark() ? cfg.GetPrefetchWatermark() : NKesus::NQuoter::PREFETCH_WATERMARK_DEFAULT, 0.0, 1.0); + + if (Props.GetHierarchicalDRRResourceConfig().HasReplicatedBucket()) { + watermark = 0.999; + } const double prevBucketMaxSize = ResourceBucketMaxSize; ResourceBucketMaxSize = Max(0.0, speed * prefetch); @@ -206,7 +210,8 @@ class TKesusQuoterProxy : public TActorBootstrapped<TKesusQuoterProxy> { if (Props.GetAccountingConfig().GetEnabled()) { AccountingReportPeriod = TDuration::MilliSeconds(Props.GetAccountingConfig().GetReportPeriodMs()); - THolder<TTimeSeriesVec<double>> history(new TTimeSeriesVec<double>(Props.GetAccountingConfig().GetCollectPeriodSec())); + const ui64 intervalsInSec = 100; // as far as default resolution in TTimeSerisVec is 10'000 + THolder<TTimeSeriesVec<double>> history(new TTimeSeriesVec<double>(Props.GetAccountingConfig().GetCollectPeriodSec() * intervalsInSec)); if (History) { history->Add(*History.Get()); } diff --git a/ydb/core/sys_view/processor/processor_impl.cpp b/ydb/core/sys_view/processor/processor_impl.cpp index 1bd8bb5b05..fdecd30cfa 100644 --- a/ydb/core/sys_view/processor/processor_impl.cpp +++ b/ydb/core/sys_view/processor/processor_impl.cpp @@ -386,11 +386,6 @@ void TSysViewProcessor::IgnoreFailure(TNodeId nodeId) { NodesInFlight.erase(nodeId); } -void TSysViewProcessor::Handle(TEvents::TEvPoisonPill::TPtr&) { - Become(&TThis::StateBroken); - Send(Tablet(), new TEvents::TEvPoisonPill); -} - void TSysViewProcessor::Handle(TEvents::TEvUndelivered::TPtr& ev) { auto nodeId = (TNodeId)ev.Get()->Cookie; SVLOG_W("[" << TabletID() << "] TEvUndelivered: node id# " << nodeId); diff --git a/ydb/core/sys_view/processor/processor_impl.h b/ydb/core/sys_view/processor/processor_impl.h index 1b9a2a7a13..92c5506d89 100644 --- a/ydb/core/sys_view/processor/processor_impl.h +++ b/ydb/core/sys_view/processor/processor_impl.h @@ -130,7 +130,6 @@ private: void Handle(TEvTxProxySchemeCache::TEvWatchNotifyUpdated::TPtr& ev); void Handle(TEvTxProxySchemeCache::TEvWatchNotifyDeleted::TPtr& ev); - void Handle(TEvents::TEvPoisonPill::TPtr& ev); void Handle(TEvents::TEvUndelivered::TPtr& ev); void Handle(TEvInterconnect::TEvNodeDisconnected::TPtr& ev); @@ -189,7 +188,6 @@ private: STFUNC(StateInit) { switch(ev->GetTypeRewrite()) { hFunc(TEvSysView::TEvConfigureProcessor, Handle); - hFunc(TEvents::TEvPoisonPill, Handle); IgnoreFunc(TEvSysView::TEvIntervalQuerySummary); IgnoreFunc(TEvSysView::TEvGetIntervalMetricsResponse); IgnoreFunc(TEvSysView::TEvGetQueryMetricsRequest); @@ -206,7 +204,6 @@ private: STFUNC(StateOffline) { switch(ev->GetTypeRewrite()) { - hFunc(TEvents::TEvPoisonPill, Handle); hFunc(TEvSysView::TEvConfigureProcessor, Handle); IgnoreFunc(TEvSysView::TEvIntervalQuerySummary); IgnoreFunc(TEvSysView::TEvGetIntervalMetricsResponse); @@ -244,7 +241,6 @@ private: hFunc(TEvTxProxySchemeCache::TEvNavigateKeySetResult, Handle); hFunc(TEvTxProxySchemeCache::TEvWatchNotifyUpdated, Handle); hFunc(TEvTxProxySchemeCache::TEvWatchNotifyDeleted, Handle); - hFunc(TEvents::TEvPoisonPill, Handle); hFunc(TEvents::TEvUndelivered, Handle); hFunc(TEvInterconnect::TEvNodeDisconnected, Handle); IgnoreFunc(TEvInterconnect::TEvNodeConnected); @@ -258,10 +254,6 @@ private: } } - STFUNC(StateBroken) { - HandleDefaultEvents(ev, SelfId()); - } - private: // limit on number of distinct queries when gathering summaries static constexpr size_t DistinctQueriesLimit = 1024; diff --git a/ydb/core/tablet/private/aggregated_counters.cpp b/ydb/core/tablet/private/aggregated_counters.cpp index f4d0424a26..45be5a952b 100644 --- a/ydb/core/tablet/private/aggregated_counters.cpp +++ b/ydb/core/tablet/private/aggregated_counters.cpp @@ -142,6 +142,9 @@ void TAggregatedSimpleCounters::RecalcAll() { sumValues.resize(count, 0); for (size_t i = 0; i < count; ++i) { + if (!ChangedCounters[i]) { + continue; + } auto* histCounter = HistSimpleCounters[i].Get(); if (histCounter) { histCounter->Clear(); @@ -259,6 +262,9 @@ void TAggregatedCumulativeCounters::RecalcAll() { maxValues.resize(count, 0); for (size_t i = 0; i < count; ++i) { + if (!ChangedCounters[i]) { + continue; + } auto* histCounter = HistCumulativeCounters[i].Get(); if (histCounter) { histCounter->Clear(); diff --git a/ydb/core/tablet/tablet_pipe_ut.cpp b/ydb/core/tablet/tablet_pipe_ut.cpp index 10f1650afa..7e3ac2e084 100644 --- a/ydb/core/tablet/tablet_pipe_ut.cpp +++ b/ydb/core/tablet/tablet_pipe_ut.cpp @@ -81,7 +81,6 @@ namespace NKikimr { HFunc(TEvTabletPipe::TEvClientConnected, Handle); HFunc(TEvTabletPipe::TEvClientDestroyed, Handle); HFunc(TEvents::TEvPong, Handle); - HFunc(TEvents::TEvPoisonPill, Handle); default: HandleDefaultEvents(ev, SelfId()); } @@ -147,11 +146,6 @@ namespace NKikimr { Cout << "Got pong\n"; } - void Handle(TEvents::TEvPoisonPill::TPtr &ev, const TActorContext &ctx) { - Y_UNUSED(ev); - ctx.Send(Tablet(), new TEvents::TEvPoisonPill); - } - void Send(const TActorContext& ctx) { Cout << "Send data to another tablet\n"; NTabletPipe::SendData(ctx, ClientId, new TEvents::TEvPing()); @@ -246,7 +240,6 @@ namespace NKikimr { HFunc(TEvTabletPipe::TEvServerDisconnected, Handle); HFunc(TEvTabletPipe::TEvServerDestroyed, Handle); HFunc(TEvents::TEvPing, Handle); - HFunc(TEvents::TEvPoisonPill, Handle); HFunc(TEvConsumerTablet::TEvReject, Handle); HFunc(TEvPrivate::TEvGetServerPipeInfo, Handle); default: @@ -279,11 +272,6 @@ namespace NKikimr { ctx.Send(ev->Sender, new TEvents::TEvPong()); } - void Handle(TEvents::TEvPoisonPill::TPtr &ev, const TActorContext &ctx) { - Y_UNUSED(ev); - ctx.Send(Tablet(), new TEvents::TEvPoisonPill); - } - void Handle(TEvTabletPipe::TEvServerConnected::TPtr &ev, const TActorContext &ctx) { Y_UNUSED(ev); Y_UNUSED(ctx); @@ -371,7 +359,6 @@ namespace NKikimr { HFunc(TEvTabletPipe::TEvServerConnected, Handle); HFunc(TEvTabletPipe::TEvServerDisconnected, Handle); HFunc(TEvents::TEvPing, Handle); - HFunc(TEvents::TEvPoisonPill, Handle); default: HandleDefaultEvents(ev, SelfId()); } @@ -383,11 +370,6 @@ namespace NKikimr { ctx.Send(ev->Sender, new TEvents::TEvPong()); } - void Handle(TEvents::TEvPoisonPill::TPtr &ev, const TActorContext &ctx) { - Y_UNUSED(ev); - ctx.Send(Tablet(), new TEvents::TEvPoisonPill); - } - void Handle(TEvTabletPipe::TEvServerConnected::TPtr &ev, const TActorContext &ctx) { Y_UNUSED(ev); Y_UNUSED(ctx); @@ -1099,7 +1081,6 @@ Y_UNIT_TEST_SUITE(TTabletPipeTest) { IgnoreFunc(TEvTabletPipe::TEvServerConnected); IgnoreFunc(TEvTabletPipe::TEvServerDisconnected); HFunc(TEvents::TEvPing, Handle); - HFunc(TEvents::TEvPoisonPill, Handle); default: HandleDefaultEvents(ev, SelfId()); } @@ -1127,11 +1108,6 @@ Y_UNIT_TEST_SUITE(TTabletPipeTest) { SendViaSession(ev->InterconnectSession, ctx, ev->Sender, new TEvents::TEvPong()); } - void Handle(TEvents::TEvPoisonPill::TPtr &ev, const TActorContext &ctx) { - Y_UNUSED(ev); - ctx.Send(Tablet(), new TEvents::TEvPoisonPill); - } - void OnDetach(const TActorContext &ctx) override { Cout << "Tablet dead\n"; return Die(ctx); diff --git a/ydb/core/testlib/cs_helper.cpp b/ydb/core/testlib/cs_helper.cpp index 0a2710ee2e..c6aa613636 100644 --- a/ydb/core/testlib/cs_helper.cpp +++ b/ydb/core/testlib/cs_helper.cpp @@ -107,7 +107,7 @@ void THelperSchemaless::SendDataViaActorSystem(TString testTable, ui64 pathIdBeg std::shared_ptr<arrow::Schema> THelper::GetArrowSchema() const { std::vector<std::shared_ptr<arrow::Field>> fields; - fields.emplace_back(arrow::field("timestamp", arrow::timestamp(arrow::TimeUnit::TimeUnit::MICRO))); + fields.emplace_back(arrow::field("timestamp", arrow::timestamp(arrow::TimeUnit::TimeUnit::MICRO), false)); fields.emplace_back(arrow::field("resource_id", arrow::utf8())); fields.emplace_back(arrow::field("uid", arrow::utf8())); fields.emplace_back(arrow::field("level", arrow::int32())); @@ -217,111 +217,111 @@ void THelper::CreateOlapTableWithStore(TString tableName /*= "olapTable"*/, TStr std::shared_ptr<arrow::Schema> TCickBenchHelper::GetArrowSchema() const { return std::make_shared<arrow::Schema>( std::vector<std::shared_ptr<arrow::Field>> { - arrow::field("WatchID", arrow::int64()), - arrow::field("JavaEnable", arrow::int16()), - arrow::field("Title", arrow::utf8()), - arrow::field("GoodEvent", arrow::int16()), - arrow::field("EventTime", arrow::timestamp(arrow::TimeUnit::TimeUnit::MICRO)), - arrow::field("EventDate", arrow::timestamp(arrow::TimeUnit::TimeUnit::MICRO)), // TODO: Date - arrow::field("CounterID", arrow::int32()), - arrow::field("ClientIP", arrow::int32()), - arrow::field("RegionID", arrow::int32()), - arrow::field("UserID", arrow::int64()), - arrow::field("CounterClass", arrow::int16()), - arrow::field("OS", arrow::int16()), - arrow::field("UserAgent", arrow::int16()), - arrow::field("URL", arrow::utf8()), - arrow::field("Referer", arrow::utf8()), - arrow::field("IsRefresh", arrow::int16()), - arrow::field("RefererCategoryID", arrow::int16()), - arrow::field("RefererRegionID", arrow::int32()), - arrow::field("URLCategoryID", arrow::int16()), - arrow::field("URLRegionID", arrow::int32()), - arrow::field("ResolutionWidth", arrow::int16()), - arrow::field("ResolutionHeight", arrow::int16()), - arrow::field("ResolutionDepth", arrow::int16()), - arrow::field("FlashMajor", arrow::int16()), - arrow::field("FlashMinor", arrow::int16()), - arrow::field("FlashMinor2", arrow::utf8()), - arrow::field("NetMajor", arrow::int16()), - arrow::field("NetMinor", arrow::int16()), - arrow::field("UserAgentMajor", arrow::int16()), - arrow::field("UserAgentMinor", arrow::binary()), - arrow::field("CookieEnable", arrow::int16()), - arrow::field("JavascriptEnable", arrow::int16()), - arrow::field("IsMobile", arrow::int16()), - arrow::field("MobilePhone", arrow::int16()), - arrow::field("MobilePhoneModel", arrow::utf8()), - arrow::field("Params", arrow::utf8()), - arrow::field("IPNetworkID", arrow::int32()), - arrow::field("TraficSourceID", arrow::int16()), - arrow::field("SearchEngineID", arrow::int16()), - arrow::field("SearchPhrase", arrow::utf8()), - arrow::field("AdvEngineID", arrow::int16()), - arrow::field("IsArtifical", arrow::int16()), - arrow::field("WindowClientWidth", arrow::int16()), - arrow::field("WindowClientHeight", arrow::int16()), - arrow::field("ClientTimeZone", arrow::int16()), - arrow::field("ClientEventTime", arrow::timestamp(arrow::TimeUnit::TimeUnit::MICRO)), - arrow::field("SilverlightVersion1", arrow::int16()), - arrow::field("SilverlightVersion2", arrow::int16()), - arrow::field("SilverlightVersion3", arrow::int32()), - arrow::field("SilverlightVersion4", arrow::int16()), - arrow::field("PageCharset", arrow::utf8()), - arrow::field("CodeVersion", arrow::int32()), - arrow::field("IsLink", arrow::int16()), - arrow::field("IsDownload", arrow::int16()), - arrow::field("IsNotBounce", arrow::int16()), - arrow::field("FUniqID", arrow::int64()), - arrow::field("OriginalURL", arrow::utf8()), - arrow::field("HID", arrow::int32()), - arrow::field("IsOldCounter", arrow::int16()), - arrow::field("IsEvent", arrow::int16()), - arrow::field("IsParameter", arrow::int16()), - arrow::field("DontCountHits", arrow::int16()), - arrow::field("WithHash", arrow::int16()), - arrow::field("HitColor", arrow::binary()), - arrow::field("LocalEventTime", arrow::timestamp(arrow::TimeUnit::TimeUnit::MICRO)), - arrow::field("Age", arrow::int16()), - arrow::field("Sex", arrow::int16()), - arrow::field("Income", arrow::int16()), - arrow::field("Interests", arrow::int16()), - arrow::field("Robotness", arrow::int16()), - arrow::field("RemoteIP", arrow::int32()), - arrow::field("WindowName", arrow::int32()), - arrow::field("OpenerName", arrow::int32()), - arrow::field("HistoryLength", arrow::int16()), - arrow::field("BrowserLanguage", arrow::utf8()), - arrow::field("BrowserCountry", arrow::utf8()), - arrow::field("SocialNetwork", arrow::utf8()), - arrow::field("SocialAction", arrow::utf8()), - arrow::field("HTTPError", arrow::int16()), - arrow::field("SendTiming", arrow::int32()), - arrow::field("DNSTiming", arrow::int32()), - arrow::field("ConnectTiming", arrow::int32()), - arrow::field("ResponseStartTiming", arrow::int32()), - arrow::field("ResponseEndTiming", arrow::int32()), - arrow::field("FetchTiming", arrow::int32()), - arrow::field("SocialSourceNetworkID", arrow::int16()), - arrow::field("SocialSourcePage", arrow::utf8()), - arrow::field("ParamPrice", arrow::int64()), - arrow::field("ParamOrderID", arrow::utf8()), - arrow::field("ParamCurrency", arrow::utf8()), - arrow::field("ParamCurrencyID", arrow::int16()), - arrow::field("OpenstatServiceName", arrow::utf8()), - arrow::field("OpenstatCampaignID", arrow::utf8()), - arrow::field("OpenstatAdID", arrow::utf8()), - arrow::field("OpenstatSourceID", arrow::utf8()), - arrow::field("UTMSource", arrow::utf8()), - arrow::field("UTMMedium", arrow::utf8()), - arrow::field("UTMCampaign", arrow::utf8()), - arrow::field("UTMContent", arrow::utf8()), - arrow::field("UTMTerm", arrow::utf8()), - arrow::field("FromTag", arrow::utf8()), - arrow::field("HasGCLID", arrow::int16()), - arrow::field("RefererHash", arrow::int64()), - arrow::field("URLHash", arrow::int64()), - arrow::field("CLID", arrow::int32()) + arrow::field("WatchID", arrow::int64(), false), + arrow::field("JavaEnable", arrow::int16(), false), + arrow::field("Title", arrow::utf8(), false), + arrow::field("GoodEvent", arrow::int16(), false), + arrow::field("EventTime", arrow::timestamp(arrow::TimeUnit::TimeUnit::MICRO), false), + arrow::field("EventDate", arrow::timestamp(arrow::TimeUnit::TimeUnit::MICRO), false), // TODO: Date + arrow::field("CounterID", arrow::int32(), false), + arrow::field("ClientIP", arrow::int32(), false), + arrow::field("RegionID", arrow::int32(), false), + arrow::field("UserID", arrow::int64(), false), + arrow::field("CounterClass", arrow::int16(), false), + arrow::field("OS", arrow::int16(), false), + arrow::field("UserAgent", arrow::int16(), false), + arrow::field("URL", arrow::utf8(), false), + arrow::field("Referer", arrow::utf8(), false), + arrow::field("IsRefresh", arrow::int16(), false), + arrow::field("RefererCategoryID", arrow::int16(), false), + arrow::field("RefererRegionID", arrow::int32(), false), + arrow::field("URLCategoryID", arrow::int16(), false), + arrow::field("URLRegionID", arrow::int32(), false), + arrow::field("ResolutionWidth", arrow::int16(), false), + arrow::field("ResolutionHeight", arrow::int16(), false), + arrow::field("ResolutionDepth", arrow::int16(), false), + arrow::field("FlashMajor", arrow::int16(), false), + arrow::field("FlashMinor", arrow::int16(), false), + arrow::field("FlashMinor2", arrow::utf8(), false), + arrow::field("NetMajor", arrow::int16(), false), + arrow::field("NetMinor", arrow::int16(), false), + arrow::field("UserAgentMajor", arrow::int16(), false), + arrow::field("UserAgentMinor", arrow::binary(), false), + arrow::field("CookieEnable", arrow::int16(), false), + arrow::field("JavascriptEnable", arrow::int16(), false), + arrow::field("IsMobile", arrow::int16(), false), + arrow::field("MobilePhone", arrow::int16(), false), + arrow::field("MobilePhoneModel", arrow::utf8(), false), + arrow::field("Params", arrow::utf8(), false), + arrow::field("IPNetworkID", arrow::int32(), false), + arrow::field("TraficSourceID", arrow::int16(), false), + arrow::field("SearchEngineID", arrow::int16(), false), + arrow::field("SearchPhrase", arrow::utf8(), false), + arrow::field("AdvEngineID", arrow::int16(), false), + arrow::field("IsArtifical", arrow::int16(), false), + arrow::field("WindowClientWidth", arrow::int16(), false), + arrow::field("WindowClientHeight", arrow::int16(), false), + arrow::field("ClientTimeZone", arrow::int16(), false), + arrow::field("ClientEventTime", arrow::timestamp(arrow::TimeUnit::TimeUnit::MICRO), false), + arrow::field("SilverlightVersion1", arrow::int16(), false), + arrow::field("SilverlightVersion2", arrow::int16(), false), + arrow::field("SilverlightVersion3", arrow::int32(), false), + arrow::field("SilverlightVersion4", arrow::int16(), false), + arrow::field("PageCharset", arrow::utf8(), false), + arrow::field("CodeVersion", arrow::int32(), false), + arrow::field("IsLink", arrow::int16(), false), + arrow::field("IsDownload", arrow::int16(), false), + arrow::field("IsNotBounce", arrow::int16(), false), + arrow::field("FUniqID", arrow::int64(), false), + arrow::field("OriginalURL", arrow::utf8(), false), + arrow::field("HID", arrow::int32(), false), + arrow::field("IsOldCounter", arrow::int16(), false), + arrow::field("IsEvent", arrow::int16(), false), + arrow::field("IsParameter", arrow::int16(), false), + arrow::field("DontCountHits", arrow::int16(), false), + arrow::field("WithHash", arrow::int16(), false), + arrow::field("HitColor", arrow::binary(), false), + arrow::field("LocalEventTime", arrow::timestamp(arrow::TimeUnit::TimeUnit::MICRO), false), + arrow::field("Age", arrow::int16(), false), + arrow::field("Sex", arrow::int16(), false), + arrow::field("Income", arrow::int16(), false), + arrow::field("Interests", arrow::int16(), false), + arrow::field("Robotness", arrow::int16(), false), + arrow::field("RemoteIP", arrow::int32(), false), + arrow::field("WindowName", arrow::int32(), false), + arrow::field("OpenerName", arrow::int32(), false), + arrow::field("HistoryLength", arrow::int16(), false), + arrow::field("BrowserLanguage", arrow::utf8(), false), + arrow::field("BrowserCountry", arrow::utf8(), false), + arrow::field("SocialNetwork", arrow::utf8(), false), + arrow::field("SocialAction", arrow::utf8(), false), + arrow::field("HTTPError", arrow::int16(), false), + arrow::field("SendTiming", arrow::int32(), false), + arrow::field("DNSTiming", arrow::int32(), false), + arrow::field("ConnectTiming", arrow::int32(), false), + arrow::field("ResponseStartTiming", arrow::int32(), false), + arrow::field("ResponseEndTiming", arrow::int32(), false), + arrow::field("FetchTiming", arrow::int32(), false), + arrow::field("SocialSourceNetworkID", arrow::int16(), false), + arrow::field("SocialSourcePage", arrow::utf8(), false), + arrow::field("ParamPrice", arrow::int64(), false), + arrow::field("ParamOrderID", arrow::utf8(), false), + arrow::field("ParamCurrency", arrow::utf8(), false), + arrow::field("ParamCurrencyID", arrow::int16(), false), + arrow::field("OpenstatServiceName", arrow::utf8(), false), + arrow::field("OpenstatCampaignID", arrow::utf8(), false), + arrow::field("OpenstatAdID", arrow::utf8(), false), + arrow::field("OpenstatSourceID", arrow::utf8(), false), + arrow::field("UTMSource", arrow::utf8(), false), + arrow::field("UTMMedium", arrow::utf8(), false), + arrow::field("UTMCampaign", arrow::utf8(), false), + arrow::field("UTMContent", arrow::utf8(), false), + arrow::field("UTMTerm", arrow::utf8(), false), + arrow::field("FromTag", arrow::utf8(), false), + arrow::field("HasGCLID", arrow::int16(), false), + arrow::field("RefererHash", arrow::int64(), false), + arrow::field("URLHash", arrow::int64(), false), + arrow::field("CLID", arrow::int32(), false) }); } @@ -385,7 +385,7 @@ std::shared_ptr<arrow::RecordBatch> TCickBenchHelper::TestArrowBatch(ui64, ui64 std::shared_ptr<arrow::Schema> TTableWithNullsHelper::GetArrowSchema() const { return std::make_shared<arrow::Schema>( std::vector<std::shared_ptr<arrow::Field>>{ - arrow::field("id", arrow::int32()), + arrow::field("id", arrow::int32(), false), arrow::field("resource_id", arrow::utf8()), arrow::field("level", arrow::int32()), arrow::field("binary_str", arrow::binary()), diff --git a/ydb/core/testlib/tablet_flat_dummy.cpp b/ydb/core/testlib/tablet_flat_dummy.cpp index 4126e63b21..8e8dbc9f51 100644 --- a/ydb/core/testlib/tablet_flat_dummy.cpp +++ b/ydb/core/testlib/tablet_flat_dummy.cpp @@ -82,12 +82,6 @@ class TDummyFlatTablet : public TActor<TDummyFlatTablet>, public NTabletFlatExec friend struct TTxSchemeInit; friend struct TTxInit; - void Handle(TEvents::TEvPoisonPill::TPtr &ev, const TActorContext &ctx) { - Y_UNUSED(ev); - Become(&TThis::StateBroken); - ctx.Send(Tablet(), new TEvents::TEvPoisonPill); - } - void OnActivateExecutor(const TActorContext &ctx) override { Become(&TThis::StateWork); if (Executor()->GetStats().IsFollower) @@ -125,18 +119,11 @@ public: STFUNC(StateWork) { switch (ev->GetTypeRewrite()) { - HFunc(TEvents::TEvPoisonPill, Handle); default: HandleDefaultEvents(ev, SelfId()); break; } } - - STFUNC(StateBroken) { - switch (ev->GetTypeRewrite()) { - HFunc(TEvTablet::TEvTabletDead, HandleTabletDead) - } - } }; } // namespace diff --git a/ydb/core/tx/columnshard/columnshard_ut_common.cpp b/ydb/core/tx/columnshard/columnshard_ut_common.cpp index 345dbe751a..dbc52f1b2c 100644 --- a/ydb/core/tx/columnshard/columnshard_ut_common.cpp +++ b/ydb/core/tx/columnshard/columnshard_ut_common.cpp @@ -253,9 +253,9 @@ std::vector<TCell> MakeTestCells(const std::vector<TTypeInfo>& types, ui32 value TString MakeTestBlob(std::pair<ui64, ui64> range, const std::vector<std::pair<TString, TTypeInfo>>& columns, - const TTestBlobOptions& options) { + const TTestBlobOptions& options, const std::set<std::string>& notNullColumns) { TString err; - NArrow::TArrowBatchBuilder batchBuilder(arrow::Compression::LZ4_FRAME); + NArrow::TArrowBatchBuilder batchBuilder(arrow::Compression::LZ4_FRAME, notNullColumns); batchBuilder.Start(columns, 0, 0, err); std::vector<ui32> nullPositions; diff --git a/ydb/core/tx/columnshard/columnshard_ut_common.h b/ydb/core/tx/columnshard/columnshard_ut_common.h index 6f994b27dc..17d88628b3 100644 --- a/ydb/core/tx/columnshard/columnshard_ut_common.h +++ b/ydb/core/tx/columnshard/columnshard_ut_common.h @@ -437,7 +437,7 @@ struct TTestBlobOptions { TCell MakeTestCell(const TTypeInfo& typeInfo, ui32 value, std::vector<TString>& mem); TString MakeTestBlob(std::pair<ui64, ui64> range, const std::vector<std::pair<TString, NScheme::TTypeInfo>>& columns, - const TTestBlobOptions& options = {}); + const TTestBlobOptions& options = {}, const std::set<std::string>& notNullColumns = {}); TSerializedTableRange MakeTestRange(std::pair<ui64, ui64> range, bool inclusiveFrom, bool inclusiveTo, const std::vector<std::pair<TString, NScheme::TTypeInfo>>& columns); diff --git a/ydb/core/tx/columnshard/engines/column_engine_logs.cpp b/ydb/core/tx/columnshard/engines/column_engine_logs.cpp index a78578d092..cf530f0a4a 100644 --- a/ydb/core/tx/columnshard/engines/column_engine_logs.cpp +++ b/ydb/core/tx/columnshard/engines/column_engine_logs.cpp @@ -379,7 +379,7 @@ bool TColumnEngineForLogs::LoadGranules(IDbWrapper& db) { bool TColumnEngineForLogs::LoadColumns(IDbWrapper& db, THashSet<TUnifiedBlobId>& lostBlobs) { return ColumnsTable->Load(db, [&](const TColumnRecord& rec) { - auto& indexInfo = GetIndexInfo(); + auto& indexInfo = VersionedIndex.GetSchema(NOlap::TSnapshot(rec.PlanStep, rec.TxId))->GetIndexInfo(); Y_VERIFY(rec.Valid()); // Do not count the blob as lost since it exists in the index. lostBlobs.erase(rec.BlobRange.BlobId); diff --git a/ydb/core/tx/columnshard/engines/column_features.cpp b/ydb/core/tx/columnshard/engines/column_features.cpp index dd6341ec7a..f039fb7814 100644 --- a/ydb/core/tx/columnshard/engines/column_features.cpp +++ b/ydb/core/tx/columnshard/engines/column_features.cpp @@ -23,20 +23,17 @@ NArrow::NTransformation::ITransformer::TPtr TColumnFeatures::GetLoadTransformer( } std::shared_ptr<NKikimr::NOlap::TColumnLoader> TColumnFeatures::GetLoader(const TIndexInfo& info) const { - if (!LoaderCache) { - NArrow::NTransformation::ITransformer::TPtr transformer = GetLoadTransformer(); - auto schema = info.GetColumnSchema(ColumnId); - if (!transformer) { - LoaderCache = std::make_shared<TColumnLoader>(transformer, - std::make_shared<NArrow::NSerialization::TBatchPayloadDeserializer>(schema), - schema, ColumnId); - } else { - LoaderCache = std::make_shared<TColumnLoader>(transformer, - std::make_shared<NArrow::NSerialization::TFullDataDeserializer>(), - schema, ColumnId); - } + NArrow::NTransformation::ITransformer::TPtr transformer = GetLoadTransformer(); + auto schema = info.GetColumnSchema(ColumnId); + if (!transformer) { + return std::make_shared<TColumnLoader>(transformer, + std::make_shared<NArrow::NSerialization::TBatchPayloadDeserializer>(schema), + schema, ColumnId); + } else { + return std::make_shared<TColumnLoader>(transformer, + std::make_shared<NArrow::NSerialization::TFullDataDeserializer>(), + schema, ColumnId); } - return LoaderCache; } std::optional<NKikimr::NOlap::TColumnFeatures> TColumnFeatures::BuildFromProto(const NKikimrSchemeOp::TOlapColumnDescription& columnInfo, const ui32 columnId) { diff --git a/ydb/core/tx/columnshard/engines/column_features.h b/ydb/core/tx/columnshard/engines/column_features.h index bb5e79428a..f0e10458bb 100644 --- a/ydb/core/tx/columnshard/engines/column_features.h +++ b/ydb/core/tx/columnshard/engines/column_features.h @@ -74,7 +74,7 @@ public: return ColumnId; } - std::shared_ptr<arrow::Schema> GetExpectedSchema() const { + const std::shared_ptr<arrow::Schema>& GetExpectedSchema() const { return ExpectedSchema; } @@ -99,7 +99,6 @@ private: const ui32 ColumnId; std::optional<NArrow::TCompression> Compression; std::optional<NArrow::NDictionary::TEncodingSettings> DictionaryEncoding; - mutable std::shared_ptr<TColumnLoader> LoaderCache; public: TColumnFeatures(const ui32 columnId) : ColumnId(columnId) diff --git a/ydb/core/tx/columnshard/engines/index_info.cpp b/ydb/core/tx/columnshard/engines/index_info.cpp index 2ca6b57cfa..e6dcfb149c 100644 --- a/ydb/core/tx/columnshard/engines/index_info.cpp +++ b/ydb/core/tx/columnshard/engines/index_info.cpp @@ -98,7 +98,7 @@ TString TIndexInfo::GetColumnName(ui32 id, bool required) const { return {}; } - Y_VERIFY(ci != Columns.end()); + Y_VERIFY_S(ci != Columns.end(), "Unknown columnId" << id); return ci->second.Name; } } @@ -349,9 +349,10 @@ bool TIndexInfo::DeserializeFromProto(const NKikimrSchemeOp::TColumnTableSchema& for (const auto& col : schema.GetColumns()) { const ui32 id = col.GetId(); const TString& name = col.GetName(); + const bool notNull = col.HasNotNull() ? col.GetNotNull() : false; auto typeInfoMod = NScheme::TypeInfoModFromProtoColumnType(col.GetTypeId(), col.HasTypeInfo() ? &col.GetTypeInfo() : nullptr); - Columns[id] = NTable::TColumn(name, id, typeInfoMod.TypeInfo, typeInfoMod.TypeMod); + Columns[id] = NTable::TColumn(name, id, typeInfoMod.TypeInfo, typeInfoMod.TypeMod, notNull); ColumnNames[name] = id; std::optional<TColumnFeatures> cFeatures = TColumnFeatures::BuildFromProto(col, id); if (!cFeatures) { @@ -402,7 +403,7 @@ std::shared_ptr<arrow::Schema> MakeArrowSchema(const NTable::TScheme::TTableSche const auto& column = it->second; std::string colName(column.Name.data(), column.Name.size()); - fields.emplace_back(std::make_shared<arrow::Field>(colName, NArrow::GetArrowType(column.PType))); + fields.emplace_back(std::make_shared<arrow::Field>(colName, NArrow::GetArrowType(column.PType), !column.NotNull)); } return std::make_shared<arrow::Schema>(std::move(fields)); diff --git a/ydb/core/tx/columnshard/engines/predicate/container.h b/ydb/core/tx/columnshard/engines/predicate/container.h index b43f6fbf3f..668feeaf1a 100644 --- a/ydb/core/tx/columnshard/engines/predicate/container.h +++ b/ydb/core/tx/columnshard/engines/predicate/container.h @@ -75,7 +75,7 @@ public: const auto& keyFields = key->fields(); size_t minSize = std::min(batchFields.size(), keyFields.size()); for (size_t i = 0; i < minSize; ++i) { - Y_VERIFY_DEBUG(batchFields[i]->Equals(*keyFields[i])); + Y_VERIFY_DEBUG(batchFields[i]->type()->Equals(*keyFields[i]->type())); } if (batchFields.size() <= keyFields.size()) { return NArrow::TReplaceKey::FromBatch(Object->Batch, Object->Batch->schema(), 0); diff --git a/ydb/core/tx/datashard/change_exchange_split.cpp b/ydb/core/tx/datashard/change_exchange_split.cpp index 644640b45e..f889b400eb 100644 --- a/ydb/core/tx/datashard/change_exchange_split.cpp +++ b/ydb/core/tx/datashard/change_exchange_split.cpp @@ -19,17 +19,33 @@ namespace NKikimr { namespace NDataShard { class TCdcPartitionWorker: public TActorBootstrapped<TCdcPartitionWorker> { + TStringBuf GetLogPrefix() const { + if (!LogPrefix) { + LogPrefix = TStringBuilder() + << "[ChangeExchangeSplitCdcPartitionWorker]" + << "[" << SrcTabletId << "]" + << "[" << PartitionId << "]" + << SelfId() /* contains brackets */ << " "; + } + + return LogPrefix.GetRef(); + } + void Ack() { + LOG_I("Send ack"); Send(Parent, new TEvChangeExchange::TEvSplitAck()); PassAway(); } void Leave() { + LOG_I("Leave"); Send(Parent, new TEvents::TEvGone()); PassAway(); } void Handle(TEvPersQueue::TEvResponse::TPtr& ev) { + LOG_D("Handle " << ev->Get()->ToString()); + const auto& response = ev->Get()->Record; switch (response.GetStatus()) { @@ -52,12 +68,14 @@ class TCdcPartitionWorker: public TActorBootstrapped<TCdcPartitionWorker> { void Handle(TEvTabletPipe::TEvClientConnected::TPtr& ev) { if (ev->Get()->TabletId == TabletId && ev->Get()->Status != NKikimrProto::OK) { + LOG_W("Pipe connection error"); Leave(); } } void Handle(TEvTabletPipe::TEvClientDestroyed::TPtr& ev) { if (ev->Get()->TabletId == TabletId) { + LOG_W("Pipe disconnected"); Leave(); } } @@ -131,6 +149,7 @@ private: const ui64 TabletId; const ui64 SrcTabletId; const TVector<ui64> DstTabletIds; + mutable TMaybe<TString> LogPrefix; TActorId PipeClient; @@ -375,12 +394,7 @@ class TCdcWorker: public TActorBootstrapped<TCdcWorker>, private TSchemeCacheHel } STATEFN(StateWork) { - switch (ev->GetTypeRewrite()) { - hFunc(TEvChangeExchange::TEvSplitAck, Handle); - hFunc(TEvents::TEvGone, Handle); - default: - return StateBase(ev); - } + return StateBase(ev); } void Handle(TEvChangeExchange::TEvSplitAck::TPtr& ev) { @@ -400,7 +414,7 @@ class TCdcWorker: public TActorBootstrapped<TCdcWorker>, private TSchemeCacheHel Workers[it->second] = TActorId(); Pending.erase(it); - if (Pending.empty()) { + if (!IsResolving() && Pending.empty()) { Ack(); } } @@ -457,6 +471,8 @@ public: STATEFN(StateBase) { switch (ev->GetTypeRewrite()) { + hFunc(TEvChangeExchange::TEvSplitAck, Handle); + hFunc(TEvents::TEvGone, Handle); sFunc(TEvents::TEvPoison, PassAway); } } diff --git a/ydb/core/tx/datashard/change_sender_async_index.cpp b/ydb/core/tx/datashard/change_sender_async_index.cpp index 534de7cbea..947160f002 100644 --- a/ydb/core/tx/datashard/change_sender_async_index.cpp +++ b/ydb/core/tx/datashard/change_sender_async_index.cpp @@ -2,6 +2,7 @@ #include "change_exchange_impl.h" #include "change_sender_common_ops.h" #include "change_sender_monitoring.h" +#include "datashard_impl.h" #include <ydb/core/base/tablet_pipecache.h> #include <ydb/library/services/services.pb.h> @@ -58,22 +59,34 @@ class TAsyncIndexChangeSenderShard: public TActorBootstrapped<TAsyncIndexChangeS /// Handshake void Handshake() { - auto ev = MakeHolder<TEvChangeExchange::TEvHandshake>(); - ev->Record.SetOrigin(DataShard.TabletId); - ev->Record.SetGeneration(DataShard.Generation); - - Send(LeaderPipeCache, new TEvPipeCache::TEvForward(ev.Release(), ShardId, true)); + Send(DataShard.ActorId, new TDataShard::TEvPrivate::TEvConfirmReadonlyLease, 0, ++LeaseConfirmationCookie); Become(&TThis::StateHandshake); } STATEFN(StateHandshake) { switch (ev->GetTypeRewrite()) { + hFunc(TDataShard::TEvPrivate::TEvReadonlyLeaseConfirmation, Handle); hFunc(TEvChangeExchange::TEvStatus, Handshake); default: return StateBase(ev); } } + void Handle(TDataShard::TEvPrivate::TEvReadonlyLeaseConfirmation::TPtr& ev) { + if (ev->Cookie != LeaseConfirmationCookie) { + LOG_W("Readonly lease confirmation cookie mismatch" + << ": expected# " << LeaseConfirmationCookie + << ", got# " << ev->Cookie); + return; + } + + auto handshake = MakeHolder<TEvChangeExchange::TEvHandshake>(); + handshake->Record.SetOrigin(DataShard.TabletId); + handshake->Record.SetGeneration(DataShard.Generation); + + Send(LeaderPipeCache, new TEvPipeCache::TEvForward(handshake.Release(), ShardId, true)); + } + void Handshake(TEvChangeExchange::TEvStatus::TPtr& ev) { LOG_D("Handshake " << ev->Get()->ToString()); @@ -189,6 +202,10 @@ class TAsyncIndexChangeSenderShard: public TActorBootstrapped<TAsyncIndexChangeS } bool CanRetry() const { + if (CurrentStateFunc() != static_cast<TReceiveFunc>(&TThis::StateHandshake)) { + return false; + } + return Attempt < MaxAttempts; } @@ -266,6 +283,7 @@ public: , ShardId(shardId) , IndexTablePathId(indexTablePathId) , TagMap(tagMap) + , LeaseConfirmationCookie(0) , LastRecordOrder(0) { } @@ -292,6 +310,7 @@ private: mutable TMaybe<TString> LogPrefix; TActorId LeaderPipeCache; + ui64 LeaseConfirmationCookie; ui64 LastRecordOrder; // Retry on delivery problem diff --git a/ydb/core/tx/datashard/change_sender_cdc_stream.cpp b/ydb/core/tx/datashard/change_sender_cdc_stream.cpp index 89341a2fe9..76468434fd 100644 --- a/ydb/core/tx/datashard/change_sender_cdc_stream.cpp +++ b/ydb/core/tx/datashard/change_sender_cdc_stream.cpp @@ -36,6 +36,14 @@ class TCdcChangeSenderPartition: public TActorBootstrapped<TCdcChangeSenderParti /// Init + void Init() { + auto opts = TPartitionWriterOpts() + .WithCheckState(true) + .WithAutoRegister(true); + Writer = RegisterWithSameMailbox(CreatePartitionWriter(SelfId(), {}, ShardId, PartitionId, {}, SourceId, opts)); + Become(&TThis::StateInit); + } + STATEFN(StateInit) { switch (ev->GetTypeRewrite()) { hFunc(TEvPartitionWriter::TEvInitResult, Handle); @@ -236,7 +244,13 @@ class TCdcChangeSenderPartition: public TActorBootstrapped<TCdcChangeSenderParti void Disconnected() { LOG_D("Disconnected"); - Leave(); + + if (CurrentStateFunc() != static_cast<TReceiveFunc>(&TThis::StateInit)) { + return Leave(); + } + + CloseWriter(); + Schedule(TDuration::MilliSeconds(100), new TEvents::TEvWakeup()); } void Lost() { @@ -249,11 +263,14 @@ class TCdcChangeSenderPartition: public TActorBootstrapped<TCdcChangeSenderParti PassAway(); } - void PassAway() override { - if (Writer) { - Send(Writer, new TEvents::TEvPoisonPill()); + void CloseWriter() { + if (const auto& writer = std::exchange(Writer, {})) { + Send(writer, new TEvents::TEvPoisonPill()); } + } + void PassAway() override { + CloseWriter(); TActorBootstrapped::PassAway(); } @@ -278,17 +295,14 @@ public: } void Bootstrap() { - auto opts = TPartitionWriterOpts() - .WithCheckState(true) - .WithAutoRegister(true); - Writer = RegisterWithSameMailbox(CreatePartitionWriter(SelfId(), {}, ShardId, PartitionId, {}, SourceId, opts)); - Become(&TThis::StateInit); + Init(); } STATEFN(StateBase) { switch (ev->GetTypeRewrite()) { sFunc(TEvPartitionWriter::TEvDisconnected, Disconnected); hFunc(NMon::TEvRemoteHttpInfo, Handle); + sFunc(TEvents::TEvWakeup, Init); sFunc(TEvents::TEvPoison, PassAway); } } @@ -654,7 +668,11 @@ class TCdcChangeSenderMain Y_VERIFY(!prev->KeyRange.ToBound.Defined()); } - CreateSenders(MakePartitionIds(KeyDesc->Partitions)); + const auto topicVersion = entry.Self->Info.GetVersion().GetGeneralVersion(); + const bool versionChanged = !TopicVersion || TopicVersion != topicVersion; + TopicVersion = topicVersion; + + CreateSenders(MakePartitionIds(KeyDesc->Partitions), versionChanged); Become(&TThis::StateMain); } @@ -773,6 +791,7 @@ public: explicit TCdcChangeSenderMain(const TDataShardId& dataShard, const TPathId& streamPathId) : TActorBootstrapped() , TBaseChangeSender(this, this, dataShard, streamPathId) + , TopicVersion(0) { } @@ -807,6 +826,7 @@ private: TUserTable::TCdcStream Stream; TPathId TopicPathId; + ui64 TopicVersion; THolder<TKeyDesc> KeyDesc; THashMap<ui32, ui64> PartitionToShard; diff --git a/ydb/core/tx/datashard/change_sender_common_ops.cpp b/ydb/core/tx/datashard/change_sender_common_ops.cpp index 92b15db6f2..95ac84280b 100644 --- a/ydb/core/tx/datashard/change_sender_common_ops.cpp +++ b/ydb/core/tx/datashard/change_sender_common_ops.cpp @@ -9,10 +9,9 @@ namespace NKikimr::NDataShard { -void TBaseChangeSender::RegisterSender(THashMap<ui64, TSender>& senders, ui64 partitionId) { - Y_VERIFY(!senders.contains(partitionId)); - auto& sender = senders[partitionId]; - sender.ActorId = ActorOps->Register(CreateSender(partitionId)); +void TBaseChangeSender::LazyCreateSender(THashMap<ui64, TSender>& senders, ui64 partitionId) { + auto res = senders.emplace(partitionId, TSender{}); + Y_VERIFY(res.second); for (const auto& [order, broadcast] : Broadcasting) { if (AddBroadcastPartition(order, partitionId)) { @@ -22,6 +21,14 @@ void TBaseChangeSender::RegisterSender(THashMap<ui64, TSender>& senders, ui64 pa } } +void TBaseChangeSender::RegisterSender(ui64 partitionId) { + Y_VERIFY(Senders.contains(partitionId)); + auto& sender = Senders.at(partitionId); + + Y_VERIFY(!sender.ActorId); + sender.ActorId = ActorOps->RegisterWithSameMailbox(CreateSender(partitionId)); +} + void TBaseChangeSender::CreateMissingSenders(const TVector<ui64>& partitionIds) { THashMap<ui64, TSender> senders; @@ -31,7 +38,7 @@ void TBaseChangeSender::CreateMissingSenders(const TVector<ui64>& partitionIds) senders.emplace(partitionId, std::move(it->second)); Senders.erase(it); } else { - RegisterSender(senders, partitionId); + LazyCreateSender(senders, partitionId); } } @@ -39,7 +46,9 @@ void TBaseChangeSender::CreateMissingSenders(const TVector<ui64>& partitionIds) ReEnqueueRecords(sender); ProcessBroadcasting(&TBaseChangeSender::RemoveBroadcastPartition, partitionId, sender.Broadcasting); - ActorOps->Send(sender.ActorId, new TEvents::TEvPoisonPill()); + if (sender.ActorId) { + ActorOps->Send(sender.ActorId, new TEvents::TEvPoisonPill()); + } } Senders = std::move(senders); @@ -47,7 +56,7 @@ void TBaseChangeSender::CreateMissingSenders(const TVector<ui64>& partitionIds) void TBaseChangeSender::RecreateSenders(const TVector<ui64>& partitionIds) { for (const auto& partitionId : partitionIds) { - RegisterSender(Senders, partitionId); + LazyCreateSender(Senders, partitionId); } } @@ -67,7 +76,9 @@ void TBaseChangeSender::CreateSenders(const TVector<ui64>& partitionIds, bool pa void TBaseChangeSender::KillSenders() { for (const auto& [_, sender] : std::exchange(Senders, {})) { - ActorOps->Send(sender.ActorId, new TEvents::TEvPoisonPill()); + if (sender.ActorId) { + ActorOps->Send(sender.ActorId, new TEvents::TEvPoisonPill()); + } } } @@ -145,6 +156,7 @@ void TBaseChangeSender::SendRecords() { auto it = PendingSent.begin(); THashSet<ui64> sendTo; + THashSet<ui64> registrations; bool needToResolve = false; while (it != PendingSent.end()) { @@ -158,6 +170,10 @@ void TBaseChangeSender::SendRecords() { auto& sender = Senders.at(partitionId); sender.Prepared.push_back(std::move(it->second)); + if (!sender.ActorId) { + Y_VERIFY(!sender.Ready); + registrations.insert(partitionId); + } if (sender.Ready) { sendTo.insert(partitionId); } @@ -167,6 +183,10 @@ void TBaseChangeSender::SendRecords() { if (Senders.contains(partitionId)) { auto& sender = Senders.at(partitionId); sender.Prepared.push_back(std::move(it->second)); + if (!sender.ActorId) { + Y_VERIFY(!sender.Ready); + registrations.insert(partitionId); + } if (sender.Ready) { sendTo.insert(partitionId); } @@ -181,6 +201,10 @@ void TBaseChangeSender::SendRecords() { it = PendingSent.erase(it); } + for (const auto partitionId : registrations) { + RegisterSender(partitionId); + } + for (const auto partitionId : sendTo) { SendPreparedRecords(partitionId); } @@ -265,6 +289,7 @@ void TBaseChangeSender::SendPreparedRecords(ui64 partitionId) { } } + Y_VERIFY(sender.ActorId); ActorOps->Send(sender.ActorId, new TEvChangeExchange::TEvRecords(std::exchange(sender.Prepared, {}))); } diff --git a/ydb/core/tx/datashard/change_sender_common_ops.h b/ydb/core/tx/datashard/change_sender_common_ops.h index 09856d460b..f269cc17bd 100644 --- a/ydb/core/tx/datashard/change_sender_common_ops.h +++ b/ydb/core/tx/datashard/change_sender_common_ops.h @@ -98,7 +98,8 @@ class TBaseChangeSender: public IChangeSender { THashSet<ui64> CompletedPartitions; }; - void RegisterSender(THashMap<ui64, TSender>& senders, ui64 partitionId); + void LazyCreateSender(THashMap<ui64, TSender>& senders, ui64 partitionId); + void RegisterSender(ui64 partitionId); void CreateMissingSenders(const TVector<ui64>& partitionIds); void RecreateSenders(const TVector<ui64>& partitionIds); diff --git a/ydb/core/tx/datashard/datashard.cpp b/ydb/core/tx/datashard/datashard.cpp index bcdf22a1d2..fe8f0d10eb 100644 --- a/ydb/core/tx/datashard/datashard.cpp +++ b/ydb/core/tx/datashard/datashard.cpp @@ -861,6 +861,7 @@ void TDataShard::RemoveChangeRecord(NIceDb::TNiceDb& db, ui64 order) { } } + UpdateChangeDeliveryLag(AppData()->TimeProvider->Now()); ChangesQueue.erase(it); IncCounter(COUNTER_CHANGE_RECORDS_REMOVED); @@ -884,11 +885,19 @@ void TDataShard::EnqueueChangeRecords(TVector<IDataShardChangeCollector::TChange << ": at tablet: " << TabletID() << ", records: " << JoinSeq(", ", records)); + const auto now = AppData()->TimeProvider->Now(); TVector<TEvChangeExchange::TEvEnqueueRecords::TRecordInfo> forward(Reserve(records.size())); for (const auto& record : records) { forward.emplace_back(record.Order, record.PathId, record.BodySize); - if (auto res = ChangesQueue.emplace(record.Order, record); res.second) { + auto res = ChangesQueue.emplace( + std::piecewise_construct, + std::forward_as_tuple(record.Order), + std::forward_as_tuple(record, now) + ); + if (res.second) { + ChangesList.PushBack(&res.first->second); + Y_VERIFY(ChangesQueueBytes <= (Max<ui64>() - record.BodySize)); ChangesQueueBytes += record.BodySize; @@ -899,6 +908,7 @@ void TDataShard::EnqueueChangeRecords(TVector<IDataShardChangeCollector::TChange } } + UpdateChangeDeliveryLag(now); IncCounter(COUNTER_CHANGE_RECORDS_ENQUEUED, forward.size()); SetCounter(COUNTER_CHANGE_QUEUE_SIZE, ChangesQueue.size()); @@ -906,6 +916,14 @@ void TDataShard::EnqueueChangeRecords(TVector<IDataShardChangeCollector::TChange Send(OutChangeSender, new TEvChangeExchange::TEvEnqueueRecords(std::move(forward))); } +void TDataShard::UpdateChangeDeliveryLag(TInstant now) { + if (!ChangesList.Empty()) { + SetCounter(COUNTER_CHANGE_DELIVERY_LAG, (now - ChangesList.Front()->EnqueuedAt).MilliSeconds()); + } else { + SetCounter(COUNTER_CHANGE_DELIVERY_LAG, 0); + } +} + void TDataShard::CreateChangeSender(const TActorContext& ctx) { Y_VERIFY(!OutChangeSender); OutChangeSender = Register(NDataShard::CreateChangeSender(this)); @@ -2171,6 +2189,10 @@ void TDataShard::SendWithConfirmedReadOnlyLease( SendWithConfirmedReadOnlyLease(TMonotonic::Zero(), target, event, cookie, sessionId); } +void TDataShard::Handle(TEvPrivate::TEvConfirmReadonlyLease::TPtr& ev, const TActorContext&) { + SendWithConfirmedReadOnlyLease(ev->Get()->Timestamp, ev->Sender, new TEvPrivate::TEvReadonlyLeaseConfirmation, ev->Cookie); +} + void TDataShard::SendImmediateReadResult( TMonotonic readTime, const TActorId& target, @@ -3127,6 +3149,7 @@ void TDataShard::Handle(TEvDataShard::TEvCancelTransactionProposal::TPtr &ev, co void TDataShard::DoPeriodicTasks(const TActorContext &ctx) { UpdateLagCounters(ctx); + UpdateChangeDeliveryLag(ctx.Now()); UpdateTableStats(ctx); SendPeriodicTableStats(ctx); CollectCpuUsage(ctx); diff --git a/ydb/core/tx/datashard/datashard__init.cpp b/ydb/core/tx/datashard/datashard__init.cpp index 28d7730929..c7c05f1dab 100644 --- a/ydb/core/tx/datashard/datashard__init.cpp +++ b/ydb/core/tx/datashard/datashard__init.cpp @@ -116,6 +116,7 @@ void TDataShard::TTxInit::Complete(const TActorContext &ctx) { if (!Self->ChangesQueue) { if (!Self->ChangeExchangeSplitter.Done()) { + Self->KillChangeSender(ctx); Self->ChangeExchangeSplitter.DoSplit(ctx); } else { for (const auto dstTabletId : Self->ChangeSenderActivator.GetDstSet()) { diff --git a/ydb/core/tx/datashard/datashard__read_iterator.cpp b/ydb/core/tx/datashard/datashard__read_iterator.cpp index 990aa260e1..85ba28eb03 100644 --- a/ydb/core/tx/datashard/datashard__read_iterator.cpp +++ b/ydb/core/tx/datashard/datashard__read_iterator.cpp @@ -1086,14 +1086,16 @@ public: Result->Record, Ydb::StatusIds::OVERLOADED, TStringBuilder() << "Shard in state " << DatashardStateName(Self->State) - << ", tablet id: " << Self->TabletID()); + << ", tablet id: " << Self->TabletID() + << ", node# " << ctx.SelfID.NodeId()); return EExecutionStatus::DelayComplete; } else { SetStatusError( Result->Record, Ydb::StatusIds::SCHEME_ERROR, TStringBuilder() << "Shard in state " << DatashardStateName(Self->State) - << ", will be deleted soon, tablet id: " << Self->TabletID()); + << ", will be deleted soon, tablet id: " << Self->TabletID() + << ", node# " << ctx.SelfID.NodeId()); return EExecutionStatus::DelayComplete; } } @@ -1105,7 +1107,8 @@ public: Result->Record, Ydb::StatusIds::OVERLOADED, TStringBuilder() << "Shard in state " << DatashardStateName(Self->State) - << ", tablet id: " << Self->TabletID()); + << ", tablet id: " << Self->TabletID() + << ", node# " << ctx.SelfID.NodeId()); return EExecutionStatus::DelayComplete; } case TShardState::Uninitialized: @@ -1116,7 +1119,8 @@ public: Result->Record, Ydb::StatusIds::INTERNAL_ERROR, TStringBuilder() << "Wrong shard state: " << DatashardStateName(Self->State) - << ", tablet id: " << Self->TabletID()); + << ", tablet id: " << Self->TabletID() + << ", node# " << ctx.SelfID.NodeId()); return EExecutionStatus::DelayComplete; } @@ -1131,7 +1135,8 @@ public: SetStatusError( Result->Record, Ydb::StatusIds::NOT_FOUND, - TStringBuilder() << "Unknown table id: " << tableId); + TStringBuilder() << "Unknown table id: " << tableId + << " (shard# " << Self->TabletID() << " node# " << ctx.SelfID.NodeId() << " state# " << DatashardStateName(Self->State) << ")"); return EExecutionStatus::DelayComplete; } auto& userTableInfo = it->second; @@ -1161,7 +1166,8 @@ public: TStringBuilder() << "Table id " << tableId << " lost snapshot at " << state.ReadVersion << " shard " << Self->TabletID() << " with lowWatermark " << Self->GetSnapshotManager().GetLowWatermark() - << (Self->IsFollower() ? " RO replica" : "")); + << (Self->IsFollower() ? " RO replica" : "") + << " (node# " << ctx.SelfID.NodeId() << " state# " << DatashardStateName(Self->State) << ")"); return EExecutionStatus::DelayComplete; } } @@ -1172,7 +1178,8 @@ public: Result->Record, Ydb::StatusIds::SCHEME_ERROR, TStringBuilder() << "Schema changed, current " << userTableInfo->GetTableSchemaVersion() - << ", requested table schemaversion " << state.SchemaVersion); + << ", requested table schemaversion " << state.SchemaVersion + << " (shard# " << Self->TabletID() << " node# " << ctx.SelfID.NodeId() << " state# " << DatashardStateName(Self->State) << ")"); return EExecutionStatus::DelayComplete; } } @@ -1204,7 +1211,8 @@ public: SetStatusError( Result->Record, Ydb::StatusIds::ABORTED, - TStringBuilder() << "Transaction was already committed or aborted"); + TStringBuilder() << "Transaction was already committed or aborted" + << " (shard# " << Self->TabletID() << " node# " << ctx.SelfID.NodeId() << " state# " << DatashardStateName(Self->State) << ")"); return EExecutionStatus::DelayComplete; } } @@ -1364,7 +1372,8 @@ public: Result->Record, Ydb::StatusIds::SCHEME_ERROR, TStringBuilder() << "Wrong schemaversion " << record.GetTableId().GetSchemaVersion() - << " requested, table schemaversion " << state.SchemaVersion); + << " requested, table schemaversion " << state.SchemaVersion + << " (shard# " << Self->TabletID() << " node# " << ctx.SelfID.NodeId() << " state# " << DatashardStateName(Self->State) << ")"); return; } } @@ -1378,7 +1387,8 @@ public: Result->Record, Ydb::StatusIds::NOT_FOUND, TStringBuilder() << "Failed to get scheme for table local id: " - << state.PathId.LocalPathId); + << state.PathId.LocalPathId + << " (shard# " << Self->TabletID() << " node# " << ctx.SelfID.NodeId() << " state# " << DatashardStateName(Self->State) << ")"); return; } TableInfo = TShortTableInfo(state.PathId.LocalPathId, *schema); @@ -1421,7 +1431,8 @@ public: SetStatusError( Result->Record, Ydb::StatusIds::SCHEME_ERROR, - TStringBuilder() << "Unknown column: " << col); + TStringBuilder() << "Unknown column: " << col + << " (shard# " << Self->TabletID() << " node# " << ctx.SelfID.NodeId() << " state# " << DatashardStateName(Self->State) << ")"); return; } @@ -1462,7 +1473,9 @@ public: LOG_DEBUG_S(ctx, NKikimrServices::TX_DATASHARD, Self->TabletID() << " read iterator# " << readId << " TReadOperation::Execute() finished without Result, aborting"); Result = MakeEvReadResult(ctx.SelfID.NodeId()); - SetStatusError(Result->Record, Ydb::StatusIds::ABORTED, "Iterator aborted"); + SetStatusError(Result->Record, Ydb::StatusIds::ABORTED, TStringBuilder() + << "Iterator aborted" + << " (shard# " << Self->TabletID() << " node# " << ctx.SelfID.NodeId() << " state# " << DatashardStateName(Self->State) << ")"); Result->Record.SetReadId(readId.ReadId); Self->SendImmediateReadResult(Sender, Result.release(), 0, state.SessionId); Self->DeleteReadIterator(it); @@ -1470,7 +1483,9 @@ public: } if (!Result->Record.HasStatus() && Reader && Reader->HadInconsistentResult()) { - SetStatusError(Result->Record, Ydb::StatusIds::ABORTED, "Read conflict with concurrent transaction"); + SetStatusError(Result->Record, Ydb::StatusIds::ABORTED, TStringBuilder() + << "Read conflict with concurrent transaction" + << " (shard# " << Self->TabletID() << " node# " << ctx.SelfID.NodeId() << " state# " << DatashardStateName(Self->State) << ")"); } // error happened and status set @@ -1557,7 +1572,8 @@ private: SetStatusError( Result->Record, Ydb::StatusIds::NOT_FOUND, - TStringBuilder() << "Unknown table id: " << state.PathId.LocalPathId); + TStringBuilder() << "Unknown table id: " << state.PathId.LocalPathId + << " (shard# " << Self->TabletID() << " node# " << ctx.SelfID.NodeId() << " state# " << DatashardStateName(Self->State) << ")"); return true; } auto userTableInfo = it->second; @@ -1568,7 +1584,8 @@ private: Result->Record, Ydb::StatusIds::SCHEME_ERROR, TStringBuilder() << "Schema changed, current " << currentSchemaVersion - << ", requested table schemaversion " << state.SchemaVersion); + << ", requested table schemaversion " << state.SchemaVersion + << " (shard# " << Self->TabletID() << " node# " << ctx.SelfID.NodeId() << " state# " << DatashardStateName(Self->State) << ")"); return true; } @@ -1580,7 +1597,8 @@ private: Result->Record, Ydb::StatusIds::NOT_FOUND, TStringBuilder() << "Failed to get scheme for table local id: " - << state.PathId.LocalPathId); + << state.PathId.LocalPathId + << " (shard# " << Self->TabletID() << " node# " << ctx.SelfID.NodeId() << " state# " << DatashardStateName(Self->State) << ")"); return true; } TableInfo = TShortTableInfo(state.PathId.LocalPathId, *schema); @@ -1610,7 +1628,8 @@ private: TStringBuilder() << "Table id " << tableId << " lost snapshot at " << state.ReadVersion << " shard " << Self->TabletID() << " with lowWatermark " << Self->GetSnapshotManager().GetLowWatermark() - << (Self->IsFollower() ? " RO replica" : "")); + << (Self->IsFollower() ? " RO replica" : "") + << " (node# " << ctx.SelfID.NodeId() << " state# " << DatashardStateName(Self->State) << ")"); return true; } } @@ -1829,7 +1848,8 @@ public: } ReplyError( Ydb::StatusIds::INTERNAL_ERROR, - TStringBuilder() << "Failed to sync follower: " << errMessage, + TStringBuilder() << "Failed to sync follower: " << errMessage + << " (shard# " << Self->TabletID() << " node# " << ctx.SelfID.NodeId() << " state# " << DatashardStateName(Self->State) << ")", ctx.SelfID.NodeId()); return true; } @@ -1854,7 +1874,8 @@ public: Ydb::StatusIds::BAD_REQUEST, TStringBuilder() << "Requesting ownerId: " << state.PathId.OwnerId << ", tableId: " << state.PathId.LocalPathId - << ", from wrong owner: " << Self->GetPathOwnerId(), + << ", from shard with owner: " << Self->GetPathOwnerId() + << " (shard# " << Self->TabletID() << " node# " << ctx.SelfID.NodeId() << " state# " << DatashardStateName(Self->State) << ")", ctx.SelfID.NodeId()); return true; } @@ -1864,7 +1885,8 @@ public: if (it == Self->TableInfos.end()) { ReplyError( Ydb::StatusIds::NOT_FOUND, - TStringBuilder() << "Unknown table id: " << tableId, + TStringBuilder() << "Unknown table id: " << tableId + << " (shard# " << Self->TabletID() << " node# " << ctx.SelfID.NodeId() << " state# " << DatashardStateName(Self->State) << ")", ctx.SelfID.NodeId()); return true; } @@ -1873,7 +1895,8 @@ public: if (userTableInfo->IsBackup) { ReplyError( Ydb::StatusIds::BAD_REQUEST, - "Can't read from a backup table", + TStringBuilder() << "Can't read from a backup table" + << " (shard# " << Self->TabletID() << " node# " << ctx.SelfID.NodeId() << " state# " << DatashardStateName(Self->State) << ")", ctx.SelfID.NodeId()); return true; } @@ -1881,7 +1904,8 @@ public: if (!Self->IsMvccEnabled()) { ReplyError( Ydb::StatusIds::UNSUPPORTED, - "Cannot use read iterators without mvcc", + TStringBuilder() << "Cannot use read iterators without mvcc" + << " (shard# " << Self->TabletID() << " node# " << ctx.SelfID.NodeId() << " state# " << DatashardStateName(Self->State) << ")", ctx.SelfID.NodeId()); return true; } @@ -1952,7 +1976,8 @@ public: TStringBuilder() << "Table id " << tableId << " has no snapshot at " << state.ReadVersion << " shard " << Self->TabletID() << " with lowWatermark " << Self->GetSnapshotManager().GetLowWatermark() - << (Self->IsFollower() ? " RO replica" : ""), + << (Self->IsFollower() ? " RO replica" : "") + << " (node# " << ctx.SelfID.NodeId() << " state# " << DatashardStateName(Self->State) << ")", ctx.SelfID.NodeId()); return true; } @@ -1963,21 +1988,24 @@ public: if (Self->IsFollower()) { ReplyError( Ydb::StatusIds::UNSUPPORTED, - "Followers don't support system table reads", + TStringBuilder() << "Followers don't support system table reads" + << " (shard# " << Self->TabletID() << " node# " << ctx.SelfID.NodeId() << " state# " << DatashardStateName(Self->State) << ")", ctx.SelfID.NodeId()); return true; } if (!state.IsHeadRead) { ReplyError( Ydb::StatusIds::BAD_REQUEST, - TStringBuilder() << "Cannot read system table using snapshot " << state.ReadVersion, + TStringBuilder() << "Cannot read system table using snapshot " << state.ReadVersion + << " (shard# " << Self->TabletID() << " node# " << ctx.SelfID.NodeId() << " state# " << DatashardStateName(Self->State) << ")", ctx.SelfID.NodeId()); return true; } if (record.GetTableId().GetTableId() >= TDataShard::Schema::MinLocalTid) { ReplyError( Ydb::StatusIds::BAD_REQUEST, - "Cannot read from user tables using system tables", + TStringBuilder() << "Cannot read from user tables using system tables" + << " (shard# " << Self->TabletID() << " node# " << ctx.SelfID.NodeId() << " state# " << DatashardStateName(Self->State) << ")", ctx.SelfID.NodeId()); return true; } @@ -1985,7 +2013,8 @@ public: ReplyError( Ydb::StatusIds::UNSUPPORTED, TStringBuilder() << "Unsupported result format " - << (int)record.GetResultFormat() << " when reading from system tables", + << (int)record.GetResultFormat() << " when reading from system tables" + << " (shard# " << Self->TabletID() << " node# " << ctx.SelfID.NodeId() << " state# " << DatashardStateName(Self->State) << ")", ctx.SelfID.NodeId()); return true; } @@ -1994,7 +2023,8 @@ public: Ydb::StatusIds::BAD_REQUEST, TStringBuilder() << "Cannot request system table at shard " << record.GetTableId().GetOwnerId() << ", localTid: " << record.GetTableId().GetTableId() - << ", with schema: " << record.GetTableId().GetSchemaVersion(), + << ", with schema: " << record.GetTableId().GetSchemaVersion() + << " (shard# " << Self->TabletID() << " node# " << ctx.SelfID.NodeId() << " state# " << DatashardStateName(Self->State) << ")", ctx.SelfID.NodeId()); return true; } @@ -2166,7 +2196,8 @@ public: SetStatusError( Result->Record, Ydb::StatusIds::NOT_FOUND, - TStringBuilder() << "Unknown table id: " << state.PathId.LocalPathId); + TStringBuilder() << "Unknown table id: " << state.PathId.LocalPathId + << " (shard# " << Self->TabletID() << " node# " << ctx.SelfID.NodeId() << " state# " << DatashardStateName(Self->State) << ")"); SendResult(ctx); return true; } @@ -2178,7 +2209,8 @@ public: Result->Record, Ydb::StatusIds::SCHEME_ERROR, TStringBuilder() << "Schema changed, current " << currentSchemaVersion - << ", requested table schemaversion " << state.SchemaVersion); + << ", requested table schemaversion " << state.SchemaVersion + << " (shard# " << Self->TabletID() << " node# " << ctx.SelfID.NodeId() << " state# " << DatashardStateName(Self->State) << ")"); SendResult(ctx); return true; } @@ -2191,7 +2223,8 @@ public: Result->Record, Ydb::StatusIds::NOT_FOUND, TStringBuilder() << "Failed to get scheme for table local id: " - << state.PathId.LocalPathId); + << state.PathId.LocalPathId + << " (shard# " << Self->TabletID() << " node# " << ctx.SelfID.NodeId() << " state# " << DatashardStateName(Self->State) << ")"); SendResult(ctx); return true; } @@ -2222,7 +2255,8 @@ public: TStringBuilder() << "Table id " << tableId << " lost snapshot at " << state.ReadVersion << " shard " << Self->TabletID() << " with lowWatermark " << Self->GetSnapshotManager().GetLowWatermark() - << (Self->IsFollower() ? " RO replica" : "")); + << (Self->IsFollower() ? " RO replica" : "") + << " (node# " << ctx.SelfID.NodeId() << " state# " << DatashardStateName(Self->State) << ")"); SendResult(ctx); return true; } @@ -2418,7 +2452,8 @@ void TDataShard::Handle(TEvDataShard::TEvRead::TPtr& ev, const TActorContext& ct const auto& record = request->Record; if (Y_UNLIKELY(!record.HasReadId())) { auto result = MakeEvReadResult(ctx.SelfID.NodeId()); - SetStatusError(result->Record, Ydb::StatusIds::BAD_REQUEST, "Missing ReadId"); + SetStatusError(result->Record, Ydb::StatusIds::BAD_REQUEST, + TStringBuilder() << "Missing ReadId at shard " << TabletID()); ctx.Send(ev->Sender, result.release()); return; } @@ -2444,14 +2479,15 @@ void TDataShard::Handle(TEvDataShard::TEvRead::TPtr& ev, const TActorContext& ct if (Y_UNLIKELY(Pipeline.HasWaitingReadIterator(readId) || ReadIterators.contains(readId))) { replyWithError( Ydb::StatusIds::ALREADY_EXISTS, - TStringBuilder() << "Request " << readId.ReadId << " already executing"); + TStringBuilder() << "Request " << readId.ReadId << " already executing at shard " << TabletID()); return; } - if (!IsStateActive()) { + if (!IsStateNewReadAllowed()) { replyWithError( Ydb::StatusIds::OVERLOADED, - TStringBuilder() << "Shard " << TabletID() << " is splitting/merging"); + TStringBuilder() << "Shard " << TabletID() << " is splitting/merging" + << " (node# " << SelfId().NodeId() << " state# " << DatashardStateName(State) << ")"); return; } @@ -2474,7 +2510,8 @@ void TDataShard::Handle(TEvDataShard::TEvRead::TPtr& ev, const TActorContext& ct if (Pipeline.HasDrop()) { replyWithError( Ydb::StatusIds::INTERNAL_ERROR, - TStringBuilder() << "Request " << readId.ReadId << " rejected, because pipeline is in process of drop"); + TStringBuilder() << "Request " << readId.ReadId << " rejected, because pipeline is in process of drop" + << " (shard# " << TabletID() << " node# " << SelfId().NodeId() << " state# " << DatashardStateName(State) << ")"); return; } @@ -2484,22 +2521,29 @@ void TDataShard::Handle(TEvDataShard::TEvRead::TPtr& ev, const TActorContext& ct if (totalInFly > GetMaxTxInFly()) { replyWithError( Ydb::StatusIds::OVERLOADED, - TStringBuilder() << "Request " << readId.ReadId << " rejected, MaxTxInFly was exceeded"); + TStringBuilder() << "Request " << readId.ReadId << " rejected, MaxTxInFly was exceeded" + << " (shard# " << TabletID() << " node# " << SelfId().NodeId() << " state# " << DatashardStateName(State) << ")"); return; } if (!request->Keys.empty() && !request->Ranges.empty()) { - replyWithError(Ydb::StatusIds::BAD_REQUEST, "Both keys and ranges are forbidden"); + replyWithError(Ydb::StatusIds::BAD_REQUEST, TStringBuilder() + << "Both keys and ranges are forbidden" + << " (shard# " << TabletID() << " node# " << SelfId().NodeId() << " state# " << DatashardStateName(State) << ")"); return; } if (request->Keys.empty() && request->Ranges.empty()) { - replyWithError(Ydb::StatusIds::BAD_REQUEST, "Neither keys nor ranges"); + replyWithError(Ydb::StatusIds::BAD_REQUEST, TStringBuilder() + << "Neither keys nor ranges specified" + << " (shard# " << TabletID() << " node# " << SelfId().NodeId() << " state# " << DatashardStateName(State) << ")"); return; } if (record.HasProgram()) { - replyWithError(Ydb::StatusIds::BAD_REQUEST, "PushDown is not supported"); + replyWithError(Ydb::StatusIds::BAD_REQUEST, TStringBuilder() + << "PushDown is not supported" + << " (shard# " << TabletID() << " node# " << SelfId().NodeId() << " state# " << DatashardStateName(State) << ")"); return; } @@ -2510,8 +2554,9 @@ void TDataShard::Handle(TEvDataShard::TEvRead::TPtr& ev, const TActorContext& ct readVersion.TxId = record.GetSnapshot().GetTxId(); if (readVersion.Step == Max<ui64>()) { replyWithError( - Ydb::StatusIds::UNSUPPORTED, - "invalid snapshot value specified"); + Ydb::StatusIds::UNSUPPORTED, TStringBuilder() + << "invalid snapshot value specified" + << " (shard# " << TabletID() << " node# " << SelfId().NodeId() << " state# " << DatashardStateName(State) << ")"); return; } isHeadRead = false; @@ -2579,7 +2624,9 @@ void TDataShard::Handle(TEvDataShard::TEvReadAck::TPtr& ev, const TActorContext& LOG_DEBUG_S(ctx, NKikimrServices::TX_DATASHARD, TabletID() << " ReadAck: " << record); auto result = MakeEvReadResult(ctx.SelfID.NodeId()); - SetStatusError(result->Record, Ydb::StatusIds::BAD_REQUEST, "Missing mandatory fields in TEvReadAck"); + SetStatusError(result->Record, Ydb::StatusIds::BAD_REQUEST, TStringBuilder() + << "Missing mandatory fields in TEvReadAck" + << " (shard# " << TabletID() << " node# " << SelfId().NodeId() << " state# " << DatashardStateName(State) << ")"); if (record.HasReadId()) result->Record.SetReadId(record.GetReadId()); ctx.Send(ev->Sender, result.release()); @@ -2609,7 +2656,8 @@ void TDataShard::Handle(TEvDataShard::TEvReadAck::TPtr& ev, const TActorContext& // We received ACK on message we hadn't sent yet if (state.SeqNo < record.GetSeqNo()) { auto issueStr = TStringBuilder() << TabletID() << " ReadAck from future: " << record.GetSeqNo() - << ", current seqNo# " << state.SeqNo; + << ", current seqNo# " << state.SeqNo + << " (shard# " << TabletID() << " node# " << SelfId().NodeId() << " state# " << DatashardStateName(State) << ")"; LOG_DEBUG_S(ctx, NKikimrServices::TX_DATASHARD, issueStr); auto result = MakeEvReadResult(ctx.SelfID.NodeId()); diff --git a/ydb/core/tx/datashard/datashard_change_receiving.cpp b/ydb/core/tx/datashard/datashard_change_receiving.cpp index af1e9d278d..6bc48aee03 100644 --- a/ydb/core/tx/datashard/datashard_change_receiving.cpp +++ b/ydb/core/tx/datashard/datashard_change_receiving.cpp @@ -1,7 +1,6 @@ #include "datashard_impl.h" -namespace NKikimr { -namespace NDataShard { +namespace NKikimr::NDataShard { using namespace NTabletFlatExecutor; @@ -28,10 +27,7 @@ public: break; } - auto it = Self->InChangeSenders.find(req.GetOrigin()); - if (it == Self->InChangeSenders.end()) { - ok = ok && db.Table<Schema::ChangeSenders>().Key(req.GetOrigin()).Precharge(); - } + ok = ok && db.Table<Schema::ChangeSenders>().Key(req.GetOrigin()).Precharge(); } return ok; @@ -69,29 +65,25 @@ public: return true; } - auto it = Self->InChangeSenders.find(req.GetOrigin()); - if (it == Self->InChangeSenders.end()) { - auto rowset = db.Table<Schema::ChangeSenders>().Key(req.GetOrigin()).Select(); - if (!rowset.IsReady()) { - return false; - } + auto rowset = db.Table<Schema::ChangeSenders>().Key(req.GetOrigin()).Select(); + if (!rowset.IsReady()) { + return false; + } - if (rowset.IsValid()) { - const auto generation = rowset.GetValue<Schema::ChangeSenders::Generation>(); - const auto lastRecordOrder = rowset.GetValueOrDefault<Schema::ChangeSenders::LastRecordOrder>(0); - it = Self->InChangeSenders.emplace(req.GetOrigin(), TInChangeSender(generation, lastRecordOrder)).first; - } else { - it = Self->InChangeSenders.emplace(req.GetOrigin(), TInChangeSender(req.GetGeneration())).first; - } + TInChangeSender info(req.GetGeneration()); + if (rowset.IsValid()) { + info.Generation = rowset.GetValue<Schema::ChangeSenders::Generation>(); + info.LastRecordOrder = rowset.GetValueOrDefault<Schema::ChangeSenders::LastRecordOrder>(0); } - if (it->second.Generation > req.GetGeneration()) { + auto it = Self->InChangeSenders.emplace(req.GetOrigin(), info).first; + if (it->second.Generation > req.GetGeneration()) { // use in-memory Generation resp.SetStatus(NKikimrChangeExchange::TEvStatus::STATUS_REJECT); resp.SetReason(NKikimrChangeExchange::TEvStatus::REASON_STALE_ORIGIN); } else { - it->second.Generation = req.GetGeneration(); + it->second.Generation = req.GetGeneration(); // update in-memory Generation resp.SetStatus(NKikimrChangeExchange::TEvStatus::STATUS_OK); - resp.SetLastRecordOrder(it->second.LastRecordOrder); + resp.SetLastRecordOrder(info.LastRecordOrder); // use persistent LastRecordOrder } return true; @@ -444,5 +436,4 @@ void TDataShard::Handle(TEvChangeExchange::TEvApplyRecords::TPtr& ev, const TAct Execute(new TTxApplyChangeRecords(this, ev), ctx); } -} // NDataShard -} // NKikimr +} diff --git a/ydb/core/tx/datashard/datashard_change_sending.cpp b/ydb/core/tx/datashard/datashard_change_sending.cpp index aeac9bc5a6..4829485e94 100644 --- a/ydb/core/tx/datashard/datashard_change_sending.cpp +++ b/ydb/core/tx/datashard/datashard_change_sending.cpp @@ -319,6 +319,7 @@ public: } if (ChangeExchangeSplit) { + Self->KillChangeSender(ctx); Self->ChangeExchangeSplitter.DoSplit(ctx); } diff --git a/ydb/core/tx/datashard/datashard_impl.h b/ydb/core/tx/datashard/datashard_impl.h index 6e89e953c2..001f41b611 100644 --- a/ydb/core/tx/datashard/datashard_impl.h +++ b/ydb/core/tx/datashard/datashard_impl.h @@ -297,6 +297,8 @@ class TDataShard friend class TTxStartMvccStateChange; friend class TTxExecuteMvccStateChange; + friend class TAsyncIndexChangeSenderShard; + class TTxPersistSubDomainPathId; class TTxPersistSubDomainOutOfSpace; @@ -343,6 +345,8 @@ class TDataShard EvCdcStreamScanContinue, EvRestartOperation, // used to restart after an aborted scan (e.g. backup) EvChangeExchangeExecuteHandshakes, + EvConfirmReadonlyLease, + EvReadonlyLeaseConfirmation, EvEnd }; @@ -525,6 +529,17 @@ class TDataShard }; struct TEvChangeExchangeExecuteHandshakes : public TEventLocal<TEvChangeExchangeExecuteHandshakes, EvChangeExchangeExecuteHandshakes> {}; + + struct TEvConfirmReadonlyLease : public TEventLocal<TEvConfirmReadonlyLease, EvConfirmReadonlyLease> { + explicit TEvConfirmReadonlyLease(TMonotonic ts = TMonotonic::Zero()) + : Timestamp(ts) + { + } + + const TMonotonic Timestamp; + }; + + struct TEvReadonlyLeaseConfirmation: public TEventLocal<TEvReadonlyLeaseConfirmation, EvReadonlyLeaseConfirmation> {}; }; struct Schema : NIceDb::Schema { @@ -1277,6 +1292,8 @@ class TDataShard void Handle(TEvPrivate::TEvRemoveLockChangeRecords::TPtr& ev, const TActorContext& ctx); + void Handle(TEvPrivate::TEvConfirmReadonlyLease::TPtr& ev, const TActorContext& ctx); + void HandleByReplicationSourceOffsetsServer(STATEFN_SIG); void DoPeriodicTasks(const TActorContext &ctx); @@ -1431,6 +1448,12 @@ public: State == TShardState::Frozen; } + bool IsStateNewReadAllowed() const { + return State == TShardState::Ready || + State == TShardState::Readonly || + State == TShardState::Frozen; + } + bool IsStateFrozen() const { return State == TShardState::Frozen; } @@ -1763,6 +1786,7 @@ public: void MoveChangeRecord(NIceDb::TNiceDb& db, ui64 lockId, ui64 lockOffset, const TPathId& pathId); void RemoveChangeRecord(NIceDb::TNiceDb& db, ui64 order); void EnqueueChangeRecords(TVector<IDataShardChangeCollector::TChange>&& records); + void UpdateChangeDeliveryLag(TInstant now); void CreateChangeSender(const TActorContext& ctx); void KillChangeSender(const TActorContext& ctx); void MaybeActivateChangeSender(const TActorContext& ctx); @@ -2569,28 +2593,31 @@ private: } }; - struct TEnqueuedRecord { + struct TEnqueuedRecordTag {}; + struct TEnqueuedRecord: public TIntrusiveListItem<TEnqueuedRecord, TEnqueuedRecordTag> { ui64 BodySize; TPathId TableId; ui64 SchemaVersion; bool SchemaSnapshotAcquired; + TInstant EnqueuedAt; ui64 LockId; ui64 LockOffset; explicit TEnqueuedRecord(ui64 bodySize, const TPathId& tableId, - ui64 schemaVersion, ui64 lockId = 0, ui64 lockOffset = 0) + ui64 schemaVersion, TInstant now, ui64 lockId = 0, ui64 lockOffset = 0) : BodySize(bodySize) , TableId(tableId) , SchemaVersion(schemaVersion) , SchemaSnapshotAcquired(false) + , EnqueuedAt(now) , LockId(lockId) , LockOffset(lockOffset) { } - explicit TEnqueuedRecord(const IDataShardChangeCollector::TChange& record) - : TEnqueuedRecord(record.BodySize, record.TableId, - record.SchemaVersion, record.LockId, record.LockOffset) + explicit TEnqueuedRecord(const IDataShardChangeCollector::TChange& record, TInstant now) + : TEnqueuedRecord(record.BodySize, record.TableId, record.SchemaVersion, now, + record.LockId, record.LockOffset) { } }; @@ -2608,6 +2635,7 @@ private: bool RequestChangeRecordsInFly = false; bool RemoveChangeRecordsInFly = false; THashMap<ui64, TEnqueuedRecord> ChangesQueue; // ui64 is order + TIntrusiveList<TEnqueuedRecord, TEnqueuedRecordTag> ChangesList; ui64 ChangesQueueBytes = 0; TActorId OutChangeSender; bool OutChangeSenderSuspended = false; @@ -2851,6 +2879,7 @@ protected: HFunc(TEvLongTxService::TEvLockStatus, Handle); HFunc(TEvDataShard::TEvGetOpenTxs, Handle); HFuncTraced(TEvPrivate::TEvRemoveLockChangeRecords, Handle); + HFunc(TEvPrivate::TEvConfirmReadonlyLease, Handle); default: if (!HandleDefaultEvents(ev, SelfId())) { ALOG_WARN(NKikimrServices::TX_DATASHARD, diff --git a/ydb/core/tx/datashard/datashard_split_src.cpp b/ydb/core/tx/datashard/datashard_split_src.cpp index 8fbcf1af96..49338d0dec 100644 --- a/ydb/core/tx/datashard/datashard_split_src.cpp +++ b/ydb/core/tx/datashard/datashard_split_src.cpp @@ -415,6 +415,7 @@ public: LOG_DEBUG_S(ctx, NKikimrServices::TX_DATASHARD, Self->TabletID() << " Sending snapshots from src for split OpId " << Self->SrcSplitOpId); Self->SplitSrcSnapshotSender.DoSend(ctx); if (ChangeExchangeSplit) { + Self->KillChangeSender(ctx); Self->ChangeExchangeSplitter.DoSplit(ctx); } } diff --git a/ydb/core/tx/datashard/datashard_ut_change_exchange.cpp b/ydb/core/tx/datashard/datashard_ut_change_exchange.cpp index 192fffbfdc..551fe90803 100644 --- a/ydb/core/tx/datashard/datashard_ut_change_exchange.cpp +++ b/ydb/core/tx/datashard/datashard_ut_change_exchange.cpp @@ -111,7 +111,7 @@ Y_UNIT_TEST_SUITE(AsyncIndexChangeExchange) { } void SenderShouldShakeHands(const TString& path, ui32 times, const TShardedTableOptions& opts, - TMaybe<TShardedTableOptions::TIndex> addIndex = Nothing()) + TMaybe<TShardedTableOptions::TIndex> addIndex, const TString& query) { const auto pathParts = SplitPath(path); UNIT_ASSERT(pathParts.size() > 1); @@ -146,9 +146,12 @@ Y_UNIT_TEST_SUITE(AsyncIndexChangeExchange) { CreateShardedTable(server, sender, workingDir, tableName, opts); if (addIndex) { - AsyncAlterAddIndex(server, domainName, path, *addIndex); + WaitTxNotification(server, sender, AsyncAlterAddIndex(server, domainName, path, *addIndex)); } + // trigger initialization + ExecSQL(server, sender, query); + if (counter != times) { TDispatchOptions opts; opts.FinalEvents.emplace_back([&](IEventHandle&) { @@ -159,7 +162,8 @@ Y_UNIT_TEST_SUITE(AsyncIndexChangeExchange) { } Y_UNIT_TEST(SenderShouldShakeHandsOnce) { - SenderShouldShakeHands("/Root/Table", 1, TableWithIndex(SimpleAsyncIndex())); + SenderShouldShakeHands("/Root/Table", 1, TableWithIndex(SimpleAsyncIndex()), {}, + "UPSERT INTO `/Root/Table` (pkey, ikey) VALUES (1, 10);"); } Y_UNIT_TEST(SenderShouldShakeHandsTwice) { @@ -172,12 +176,14 @@ Y_UNIT_TEST_SUITE(AsyncIndexChangeExchange) { .Indexes({ {"by_i1key", {"i1key"}, {}, NKikimrSchemeOp::EIndexTypeGlobalAsync}, {"by_i2key", {"i2key"}, {}, NKikimrSchemeOp::EIndexTypeGlobalAsync}, - }) + }), {}, + "UPSERT INTO `/Root/Table` (pkey, i1key, i2key) VALUES (1, 10, 100);" ); } Y_UNIT_TEST(SenderShouldShakeHandsAfterAddingIndex) { - SenderShouldShakeHands("/Root/Table", 1, TableWoIndexes(), SimpleAsyncIndex()); + SenderShouldShakeHands("/Root/Table", 1, TableWoIndexes(), SimpleAsyncIndex(), + "UPSERT INTO `/Root/Table` (pkey, ikey) VALUES (1, 10);"); } void ShouldDeliverChanges(const TString& path, const TShardedTableOptions& opts, @@ -2695,6 +2701,38 @@ Y_UNIT_TEST_SUITE(Cdc) { checkAwsRegion("/Root/Table/Stream2", "customRegion"); } + Y_UNIT_TEST(SequentialSplitMerge) { + TTestPqEnv env(SimpleTable(), Updates(NKikimrSchemeOp::ECdcStreamFormatJson), false); + SetSplitMergePartCountLimit(env.GetServer()->GetRuntime(), -1); + + // split + auto tabletIds = GetTableShards(env.GetServer(), env.GetEdgeActor(), "/Root/Table"); + UNIT_ASSERT_VALUES_EQUAL(tabletIds.size(), 1); + + WaitTxNotification(env.GetServer(), env.GetEdgeActor(), + AsyncSplitTable(env.GetServer(), env.GetEdgeActor(), "/Root/Table", tabletIds.at(0), 4)); + + // merge + tabletIds = GetTableShards(env.GetServer(), env.GetEdgeActor(), "/Root/Table"); + UNIT_ASSERT_VALUES_EQUAL(tabletIds.size(), 2); + + WaitTxNotification(env.GetServer(), env.GetEdgeActor(), + AsyncMergeTable(env.GetServer(), env.GetEdgeActor(), "/Root/Table", tabletIds)); + + ExecSQL(env.GetServer(), env.GetEdgeActor(), R"( + UPSERT INTO `/Root/Table` (key, value) VALUES + (1, 10), + (2, 20), + (3, 30); + )"); + + WaitForContent(env.GetServer(), env.GetEdgeActor(), "/Root/Table/Stream", { + R"({"update":{"value":10},"key":[1]})", + R"({"update":{"value":20},"key":[2]})", + R"({"update":{"value":30},"key":[3]})", + }); + } + } // Cdc } // NKikimr diff --git a/ydb/core/tx/datashard/datashard_ut_read_iterator.cpp b/ydb/core/tx/datashard/datashard_ut_read_iterator.cpp index cbe15edc18..50d3b57acb 100644 --- a/ydb/core/tx/datashard/datashard_ut_read_iterator.cpp +++ b/ydb/core/tx/datashard/datashard_ut_read_iterator.cpp @@ -2470,8 +2470,11 @@ Y_UNIT_TEST_SUITE(DataShardReadIterator) { waitFor([&]{ return serverConnectedCount != 0; }, "intercepted EvServerConnected"); if (!connectedFromDifferentNode) { ++node; + sender = runtime.AllocateEdgeActor(node); + serverConnectedCount = 0; table.ClientId = runtime.ConnectToPipe(table.TabletId, sender, node, GetPipeConfigWithRetries()); UNIT_ASSERT(table.ClientId); + waitFor([&]{ return serverConnectedCount != 0; }, "intercepted EvServerConnected"); } UNIT_ASSERT(connectedFromDifferentNode); @@ -2491,10 +2494,10 @@ Y_UNIT_TEST_SUITE(DataShardReadIterator) { runtime.DisconnectNodes(0, 1); table.ClientId = runtime.ConnectToPipe(table.TabletId, sender, node, GetPipeConfigWithRetries()); - exhaustedCount = helper.GetSimpleCounter("table-1", "DataShard/ReadIteratorsExhaustedCount", 0); + exhaustedCount = helper.GetSimpleCounter("table-1", "DataShard/ReadIteratorsExhaustedCount", node); while (exhaustedCount != 0) { SimulateSleep(helper.Server, TDuration::Seconds(1)); - exhaustedCount = helper.GetSimpleCounter("table-1", "DataShard/ReadIteratorsExhaustedCount", 0); + exhaustedCount = helper.GetSimpleCounter("table-1", "DataShard/ReadIteratorsExhaustedCount", node); } iteratorsCount = helper.GetSimpleCounter("table-1", "DataShard/ReadIteratorsCount", node); diff --git a/ydb/core/tx/long_tx_service/acquire_snapshot_impl.cpp b/ydb/core/tx/long_tx_service/acquire_snapshot_impl.cpp index f103f138c1..c99eec71a4 100644 --- a/ydb/core/tx/long_tx_service/acquire_snapshot_impl.cpp +++ b/ydb/core/tx/long_tx_service/acquire_snapshot_impl.cpp @@ -6,6 +6,8 @@ #include <library/cpp/actors/core/actor_bootstrapped.h> +#include <util/random/random.h> + #define TXLOG_LOG(priority, stream) \ LOG_LOG_S(*TlsActivationContext, priority, NKikimrServices::LONG_TX_SERVICE, LogPrefix << stream) #define TXLOG_DEBUG(stream) TXLOG_LOG(NActors::NLog::PRI_DEBUG, stream) @@ -99,13 +101,21 @@ namespace NLongTxService { if (!entry.DomainInfo) { return ReplyError(Ydb::StatusIds::INTERNAL_ERROR, "Missing domain info for a resolved database"); } - if (entry.DomainInfo->Coordinators.List().empty()) { + + const TVector<ui64>& coordinators = entry.DomainInfo->Coordinators.List(); + if (coordinators.empty()) { return ReplyError(Ydb::StatusIds::UNAVAILABLE, TStringBuilder() << "The specified database '" << DatabaseName << "' has no coordinators"); } - for (ui64 coordinator : entry.DomainInfo->Coordinators.List()) { - SendAcquireStep(coordinator); + // Prefer a single random coordinator for each request + ui64 primary = coordinators[RandomNumber<ui64>(coordinators.size())]; + for (ui64 coordinator : coordinators) { + if (coordinator == primary) { + SendAcquireStep(coordinator); + } else { + BackupCoordinators.insert(coordinator); + } } Become(&TThis::StateWaitStep); @@ -135,6 +145,12 @@ namespace NLongTxService { << " NotDelivered# " << msg->NotDelivered); WaitingCoordinators.erase(tabletId); + if (WaitingCoordinators.empty() && !BackupCoordinators.empty()) { + for (ui64 coordinator : BackupCoordinators) { + SendAcquireStep(coordinator); + } + BackupCoordinators.clear(); + } if (WaitingCoordinators.empty()) { return ReplyError(Ydb::StatusIds::UNAVAILABLE, "Database coordinators are unavailable"); } @@ -175,6 +191,7 @@ namespace NLongTxService { const TActorId LeaderPipeCache; TString LogPrefix; THashSet<ui64> WaitingCoordinators; + THashSet<ui64> BackupCoordinators; }; void TLongTxServiceActor::StartAcquireSnapshotActor(const TString& databaseName, TDatabaseSnapshotState& state) { @@ -185,6 +202,11 @@ namespace NLongTxService { req.BeginTxRequests.swap(state.PendingBeginTxRequests); Register(new TAcquireSnapshotActor(SelfId(), reqId, databaseName)); state.ActiveRequests.insert(reqId); + + if (Settings.Counters) { + Settings.Counters->AcquireReadSnapshotOutRequests->Inc(); + Settings.Counters->AcquireReadSnapshotOutInFlight->Inc(); + } } } // namespace NLongTxService diff --git a/ydb/core/tx/long_tx_service/long_tx_service.cpp b/ydb/core/tx/long_tx_service/long_tx_service.cpp index 10ed8def0c..7769727c61 100644 --- a/ydb/core/tx/long_tx_service/long_tx_service.cpp +++ b/ydb/core/tx/long_tx_service/long_tx_service.cpp @@ -4,6 +4,13 @@ namespace NKikimr { namespace NLongTxService { + TLongTxServiceCounters::TLongTxServiceCounters(const TGroupPtr& group) + : AcquireReadSnapshotInRequests(group->GetCounter("AcquireReadSnapshotInRequests", true)) + , AcquireReadSnapshotOutRequests(group->GetCounter("AcquireReadSnapshotOutRequests", true)) + , AcquireReadSnapshotInInFlight(group->GetCounter("AcquireReadSnapshotInInFlight")) + , AcquireReadSnapshotOutInFlight(group->GetCounter("AcquireReadSnapshotOutInFlight")) + {} + IActor* CreateLongTxService(const TLongTxServiceSettings& settings) { return new TLongTxServiceActor(settings); } diff --git a/ydb/core/tx/long_tx_service/long_tx_service.h b/ydb/core/tx/long_tx_service/long_tx_service.h index 7e0c6d47fd..e680c83139 100644 --- a/ydb/core/tx/long_tx_service/long_tx_service.h +++ b/ydb/core/tx/long_tx_service/long_tx_service.h @@ -1,10 +1,25 @@ #pragma once #include "defs.h" +#include <library/cpp/monlib/dynamic_counters/counters.h> + namespace NKikimr { namespace NLongTxService { + struct TLongTxServiceCounters : public TAtomicRefCount<TLongTxServiceCounters> { + using TGroupPtr = TIntrusivePtr<NMonitoring::TDynamicCounters>; + using TCounterPtr = ::NMonitoring::TDynamicCounters::TCounterPtr; + + TCounterPtr AcquireReadSnapshotInRequests; + TCounterPtr AcquireReadSnapshotOutRequests; + TCounterPtr AcquireReadSnapshotInInFlight; + TCounterPtr AcquireReadSnapshotOutInFlight; + + explicit TLongTxServiceCounters(const TGroupPtr& group); + }; + struct TLongTxServiceSettings { + TIntrusiveConstPtr<TLongTxServiceCounters> Counters; // TODO: add settings for long tx service }; diff --git a/ydb/core/tx/long_tx_service/long_tx_service_impl.cpp b/ydb/core/tx/long_tx_service/long_tx_service_impl.cpp index dda94582ba..d77d3b30ae 100644 --- a/ydb/core/tx/long_tx_service/long_tx_service_impl.cpp +++ b/ydb/core/tx/long_tx_service/long_tx_service_impl.cpp @@ -335,6 +335,10 @@ const TString& TLongTxServiceActor::GetDatabaseNameOrLegacyDefault(const TString } void TLongTxServiceActor::Handle(TEvLongTxService::TEvAcquireReadSnapshot::TPtr& ev) { + if (Settings.Counters) { + Settings.Counters->AcquireReadSnapshotInRequests->Inc(); + } + auto* msg = ev->Get(); const TString& databaseName = GetDatabaseNameOrLegacyDefault(msg->Record.GetDatabaseName()); TXLOG_DEBUG("Received TEvAcquireReadSnapshot from " << ev->Sender << " for database " << databaseName); @@ -357,6 +361,11 @@ void TLongTxServiceActor::Handle(TEvLongTxService::TEvAcquireReadSnapshot::TPtr& req.Cookie = ev->Cookie; req.Orbit = std::move(msg->Orbit); } + + if (Settings.Counters) { + Settings.Counters->AcquireReadSnapshotInInFlight->Inc(); + } + ScheduleAcquireSnapshot(databaseName, state); } @@ -425,6 +434,11 @@ void TLongTxServiceActor::Handle(TEvPrivate::TEvAcquireSnapshotFinished::TPtr& e } } + if (Settings.Counters) { + Settings.Counters->AcquireReadSnapshotInInFlight->Sub(req->UserRequests.size()); + Settings.Counters->AcquireReadSnapshotOutInFlight->Dec(); + } + state->ActiveRequests.erase(ev->Cookie); AcquireSnapshotInFlight.erase(ev->Cookie); diff --git a/ydb/core/tx/scheme_board/cache.cpp b/ydb/core/tx/scheme_board/cache.cpp index a049d65a45..010d2eadc3 100644 --- a/ydb/core/tx/scheme_board/cache.cpp +++ b/ydb/core/tx/scheme_board/cache.cpp @@ -247,7 +247,7 @@ namespace { << ", recipient# " << Context->Sender << ", result# " << Context->Request->ToString(*AppData()->TypeRegistry)); - this->Send(Context->Sender, new TEvResult(Context->Request.Release())); + this->Send(Context->Sender, new TEvResult(Context->Request.Release()), 0, Context->Cookie); this->PassAway(); } @@ -2489,7 +2489,7 @@ class TSchemeCache: public TMonitorableActor<TSchemeCache> { template <typename TContext, typename TEvent> TIntrusivePtr<TContext> MakeContext(TEvent& ev) const { - TIntrusivePtr<TContext> context(new TContext(ev->Sender, ev->Get()->Request, Now())); + TIntrusivePtr<TContext> context(new TContext(ev->Sender, ev->Cookie, ev->Get()->Request, Now())); if (context->Request->DatabaseName) { if (auto* db = Cache.FindPtr(CanonizePath(context->Request->DatabaseName))) { @@ -2592,7 +2592,7 @@ class TSchemeCache: public TMonitorableActor<TSchemeCache> { void Handle(TEvTxProxySchemeCache::TEvInvalidateTable::TPtr& ev) { SBC_LOG_D("Handle TEvTxProxySchemeCache::TEvInvalidateTable" << ": self# " << SelfId()); - Send(ev->Sender, new TEvTxProxySchemeCache::TEvInvalidateTableResult(ev->Get()->Sender)); + Send(ev->Sender, new TEvTxProxySchemeCache::TEvInvalidateTableResult(ev->Get()->Sender), 0, ev->Cookie); } TActorId EnsureWatchCache() { diff --git a/ydb/core/tx/scheme_cache/scheme_cache.h b/ydb/core/tx/scheme_cache/scheme_cache.h index e799a91e29..60058e684c 100644 --- a/ydb/core/tx/scheme_cache/scheme_cache.h +++ b/ydb/core/tx/scheme_cache/scheme_cache.h @@ -376,13 +376,15 @@ struct TSchemeCacheRequest { struct TSchemeCacheRequestContext : TAtomicRefCount<TSchemeCacheRequestContext>, TNonCopyable { TActorId Sender; + ui64 Cookie; ui64 WaitCounter; TAutoPtr<TSchemeCacheRequest> Request; const TInstant CreatedAt; TIntrusivePtr<TDomainInfo> ResolvedDomainInfo; // resolved from DatabaseName - TSchemeCacheRequestContext(const TActorId& sender, TAutoPtr<TSchemeCacheRequest> request, const TInstant& now = TInstant::Now()) + TSchemeCacheRequestContext(const TActorId& sender, ui64 cookie, TAutoPtr<TSchemeCacheRequest> request, const TInstant& now = TInstant::Now()) : Sender(sender) + , Cookie(cookie) , WaitCounter(0) , Request(request) , CreatedAt(now) @@ -391,13 +393,15 @@ struct TSchemeCacheRequestContext : TAtomicRefCount<TSchemeCacheRequestContext>, struct TSchemeCacheNavigateContext : TAtomicRefCount<TSchemeCacheNavigateContext>, TNonCopyable { TActorId Sender; + ui64 Cookie; ui64 WaitCounter; TAutoPtr<TSchemeCacheNavigate> Request; const TInstant CreatedAt; TIntrusivePtr<TDomainInfo> ResolvedDomainInfo; // resolved from DatabaseName - TSchemeCacheNavigateContext(const TActorId& sender, TAutoPtr<TSchemeCacheNavigate> request, const TInstant& now = TInstant::Now()) + TSchemeCacheNavigateContext(const TActorId& sender, ui64 cookie, TAutoPtr<TSchemeCacheNavigate> request, const TInstant& now = TInstant::Now()) : Sender(sender) + , Cookie(cookie) , WaitCounter(0) , Request(request) , CreatedAt(now) diff --git a/ydb/core/tx/schemeshard/CMakeLists.darwin-x86_64.txt b/ydb/core/tx/schemeshard/CMakeLists.darwin-x86_64.txt index 08540cd41c..f849322d20 100644 --- a/ydb/core/tx/schemeshard/CMakeLists.darwin-x86_64.txt +++ b/ydb/core/tx/schemeshard/CMakeLists.darwin-x86_64.txt @@ -7,6 +7,7 @@ add_subdirectory(ut_async_index) +add_subdirectory(ut_auditsettings) add_subdirectory(ut_backup) add_subdirectory(ut_base) add_subdirectory(ut_base_reboots) @@ -32,7 +33,6 @@ add_subdirectory(ut_move) add_subdirectory(ut_move_reboots) add_subdirectory(ut_olap) add_subdirectory(ut_olap_reboots) -add_subdirectory(ut_pq) add_subdirectory(ut_pq_reboots) add_subdirectory(ut_reboots) add_subdirectory(ut_replication) diff --git a/ydb/core/tx/schemeshard/CMakeLists.linux-aarch64.txt b/ydb/core/tx/schemeshard/CMakeLists.linux-aarch64.txt index c495205d90..4ade42dc5e 100644 --- a/ydb/core/tx/schemeshard/CMakeLists.linux-aarch64.txt +++ b/ydb/core/tx/schemeshard/CMakeLists.linux-aarch64.txt @@ -7,6 +7,7 @@ add_subdirectory(ut_async_index) +add_subdirectory(ut_auditsettings) add_subdirectory(ut_backup) add_subdirectory(ut_base) add_subdirectory(ut_base_reboots) @@ -32,7 +33,6 @@ add_subdirectory(ut_move) add_subdirectory(ut_move_reboots) add_subdirectory(ut_olap) add_subdirectory(ut_olap_reboots) -add_subdirectory(ut_pq) add_subdirectory(ut_pq_reboots) add_subdirectory(ut_reboots) add_subdirectory(ut_replication) diff --git a/ydb/core/tx/schemeshard/CMakeLists.linux-x86_64.txt b/ydb/core/tx/schemeshard/CMakeLists.linux-x86_64.txt index c495205d90..4ade42dc5e 100644 --- a/ydb/core/tx/schemeshard/CMakeLists.linux-x86_64.txt +++ b/ydb/core/tx/schemeshard/CMakeLists.linux-x86_64.txt @@ -7,6 +7,7 @@ add_subdirectory(ut_async_index) +add_subdirectory(ut_auditsettings) add_subdirectory(ut_backup) add_subdirectory(ut_base) add_subdirectory(ut_base_reboots) @@ -32,7 +33,6 @@ add_subdirectory(ut_move) add_subdirectory(ut_move_reboots) add_subdirectory(ut_olap) add_subdirectory(ut_olap_reboots) -add_subdirectory(ut_pq) add_subdirectory(ut_pq_reboots) add_subdirectory(ut_reboots) add_subdirectory(ut_replication) diff --git a/ydb/core/tx/schemeshard/CMakeLists.windows-x86_64.txt b/ydb/core/tx/schemeshard/CMakeLists.windows-x86_64.txt index 63834ed7c0..ce473c865d 100644 --- a/ydb/core/tx/schemeshard/CMakeLists.windows-x86_64.txt +++ b/ydb/core/tx/schemeshard/CMakeLists.windows-x86_64.txt @@ -7,6 +7,7 @@ add_subdirectory(ut_async_index) +add_subdirectory(ut_auditsettings) add_subdirectory(ut_backup) add_subdirectory(ut_base) add_subdirectory(ut_base_reboots) @@ -32,7 +33,6 @@ add_subdirectory(ut_move) add_subdirectory(ut_move_reboots) add_subdirectory(ut_olap) add_subdirectory(ut_olap_reboots) -add_subdirectory(ut_pq) add_subdirectory(ut_pq_reboots) add_subdirectory(ut_reboots) add_subdirectory(ut_replication) diff --git a/ydb/core/tx/schemeshard/schemeshard__init.cpp b/ydb/core/tx/schemeshard/schemeshard__init.cpp index 70963a215b..d245261301 100644 --- a/ydb/core/tx/schemeshard/schemeshard__init.cpp +++ b/ydb/core/tx/schemeshard/schemeshard__init.cpp @@ -1524,6 +1524,12 @@ struct TSchemeShard::TTxInit : public TTransactionBase<TSchemeShard> { if (domainInfo->GetDiskQuotaExceeded()) { Self->ChangeDiskSpaceQuotaExceeded(+1); } + + if (rowset.HaveValue<Schema::SubDomains::AuditSettings>()) { + NKikimrSubDomains::TAuditSettings value; + Y_VERIFY(ParseFromStringNoSizeLimit(value, rowset.GetValue<Schema::SubDomains::AuditSettings>())); + domainInfo->SetAuditSettings(value); + } } if (!rowset.Next()) diff --git a/ydb/core/tx/schemeshard/schemeshard__init_root.cpp b/ydb/core/tx/schemeshard/schemeshard__init_root.cpp index 6d37d4f2e7..4660444414 100644 --- a/ydb/core/tx/schemeshard/schemeshard__init_root.cpp +++ b/ydb/core/tx/schemeshard/schemeshard__init_root.cpp @@ -392,6 +392,10 @@ struct TSchemeShard::TTxInitTenantSchemeShard : public TSchemeShard::TRwTxBase { subdomain->SetDatabaseQuotas(record.GetDatabaseQuotas(), Self); } + if (record.HasAuditSettings()) { + subdomain->SetAuditSettings(record.GetAuditSettings()); + } + RegisterShard(db, subdomain, processingParams.GetCoordinators(), TTabletTypes::Coordinator); RegisterShard(db, subdomain, processingParams.GetMediators(), TTabletTypes::Mediator); RegisterShard(db, subdomain, TVector<ui64>{processingParams.GetSchemeShard()}, TTabletTypes::SchemeShard); diff --git a/ydb/core/tx/schemeshard/schemeshard__operation_alter_extsubdomain.cpp b/ydb/core/tx/schemeshard/schemeshard__operation_alter_extsubdomain.cpp index cdb070e4f0..a690454a47 100644 --- a/ydb/core/tx/schemeshard/schemeshard__operation_alter_extsubdomain.cpp +++ b/ydb/core/tx/schemeshard/schemeshard__operation_alter_extsubdomain.cpp @@ -794,6 +794,13 @@ public: alter->SetDatabaseQuotas(inputSettings.GetDatabaseQuotas()); } + if (const auto& auditSettings = subdomainInfo->GetAuditSettings()) { + alter->SetAuditSettings(*auditSettings); + } + if (inputSettings.HasAuditSettings()) { + alter->ApplyAuditSettings(inputSettings.GetAuditSettings()); + } + LOG_D("TAlterExtSubDomain Propose" << ", opId: " << OperationId << ", subdomain ver " << subdomainInfo->GetVersion() diff --git a/ydb/core/tx/schemeshard/schemeshard__operation_alter_subdomain.cpp b/ydb/core/tx/schemeshard/schemeshard__operation_alter_subdomain.cpp index 39000ffb62..c4f30ba670 100644 --- a/ydb/core/tx/schemeshard/schemeshard__operation_alter_subdomain.cpp +++ b/ydb/core/tx/schemeshard/schemeshard__operation_alter_subdomain.cpp @@ -290,6 +290,13 @@ public: alterData->SetDatabaseQuotas(settings.GetDatabaseQuotas()); } + if (const auto& auditSettings = subDomainInfo->GetAuditSettings()) { + alterData->SetAuditSettings(*auditSettings); + } + if (settings.HasAuditSettings()) { + alterData->ApplyAuditSettings(settings.GetAuditSettings()); + } + NIceDb::TNiceDb db(context.GetDB()); subDomain->LastTxId = OperationId.GetTxId(); diff --git a/ydb/core/tx/schemeshard/schemeshard__operation_common.cpp b/ydb/core/tx/schemeshard/schemeshard__operation_common.cpp index 1d6b4428e1..2fd931b943 100644 --- a/ydb/core/tx/schemeshard/schemeshard__operation_common.cpp +++ b/ydb/core/tx/schemeshard/schemeshard__operation_common.cpp @@ -695,6 +695,7 @@ THolder<TEvPersQueue::TEvProposeTransaction> TConfigureParts::MakeEvProposeTrans const TTopicTabletInfo& pqShard, const TString& topicName, const TString& topicPath, + const std::optional<NKikimrPQ::TBootstrapConfig>& bootstrapConfig, const TString& cloudId, const TString& folderId, const TString& databaseId, @@ -715,9 +716,10 @@ THolder<TEvPersQueue::TEvProposeTransaction> TConfigureParts::MakeEvProposeTrans folderId, databaseId, databasePath); - MakeBootstrapConfig(*event->Record.MutableConfig()->MutableBootstrapConfig(), - pqGroup, - txType); + if (bootstrapConfig) { + Y_VERIFY(txType == TTxState::TxCreatePQGroup); + event->Record.MutableConfig()->MutableBootstrapConfig()->CopyFrom(*bootstrapConfig); + } LOG_DEBUG_S(context.Ctx, NKikimrServices::FLAT_TX_SCHEMESHARD, "Propose configure PersQueue" << @@ -731,6 +733,7 @@ THolder<TEvPersQueue::TEvUpdateConfig> TConfigureParts::MakeEvUpdateConfig(TTxId const TTopicTabletInfo& pqShard, const TString& topicName, const TString& topicPath, + const std::optional<NKikimrPQ::TBootstrapConfig>& bootstrapConfig, const TString& cloudId, const TString& folderId, const TString& databaseId, @@ -750,9 +753,10 @@ THolder<TEvPersQueue::TEvUpdateConfig> TConfigureParts::MakeEvUpdateConfig(TTxId folderId, databaseId, databasePath); - MakeBootstrapConfig(*event->Record.MutableBootstrapConfig(), - pqGroup, - txType); + if (bootstrapConfig) { + Y_VERIFY(txType == TTxState::TxCreatePQGroup); + event->Record.MutableBootstrapConfig()->CopyFrom(*bootstrapConfig); + } LOG_DEBUG_S(context.Ctx, NKikimrServices::FLAT_TX_SCHEMESHARD, "Propose configure PersQueue" << diff --git a/ydb/core/tx/schemeshard/schemeshard__operation_common.h b/ydb/core/tx/schemeshard/schemeshard__operation_common.h index 735cc89563..47c80bde21 100644 --- a/ydb/core/tx/schemeshard/schemeshard__operation_common.h +++ b/ydb/core/tx/schemeshard/schemeshard__operation_common.h @@ -2,9 +2,11 @@ #include "schemeshard__operation_part.h" #include "schemeshard_impl.h" + +#include <ydb/core/base/subdomain.h> +#include <ydb/core/persqueue/writer/source_id_encoding.h> #include <ydb/core/tx/columnshard/columnshard.h> #include <ydb/core/tx/tx_processing.h> -#include <ydb/core/base/subdomain.h> namespace NKikimr { namespace NSchemeShard { @@ -657,7 +659,39 @@ public: } TString databasePath = TPath::Init(context.SS->RootPathId(), context.SS).PathString(); - TString topicPath = TPath::Init(txState->TargetPathId, context.SS).PathString(); + auto topicPath = TPath::Init(txState->TargetPathId, context.SS); + + std::optional<NKikimrPQ::TBootstrapConfig> bootstrapConfig; + if (txState->TxType == TTxState::TxCreatePQGroup && topicPath.Parent().IsCdcStream()) { + bootstrapConfig.emplace(); + + auto tablePath = topicPath.Parent().Parent(); // table/cdc_stream/topic + Y_VERIFY(tablePath.IsResolved()); + + Y_VERIFY(context.SS->Tables.contains(tablePath.Base()->PathId)); + auto table = context.SS->Tables.at(tablePath.Base()->PathId); + + const auto& partitions = table->GetPartitions(); + + for (ui32 i = 0; i < partitions.size(); ++i) { + const auto& cur = partitions.at(i); + + Y_VERIFY(context.SS->ShardInfos.contains(cur.ShardIdx)); + const auto& shard = context.SS->ShardInfos.at(cur.ShardIdx); + + auto& mg = *bootstrapConfig->AddExplicitMessageGroups(); + mg.SetId(NPQ::NSourceIdEncoding::EncodeSimple(ToString(shard.TabletID))); + + if (i != partitions.size() - 1) { + mg.MutableKeyRange()->SetToBound(cur.EndOfRange); + } + + if (i) { + const auto& prev = partitions.at(i - 1); + mg.MutableKeyRange()->SetFromBound(prev.EndOfRange); + } + } + } for (auto shard : txState->Shards) { TShardIdx idx = shard.Idx; @@ -680,7 +714,8 @@ public: *pqGroup, *pqShard, topicName, - topicPath, + topicPath.PathString(), + bootstrapConfig, cloudId, folderId, databaseId, @@ -692,7 +727,8 @@ public: *pqGroup, *pqShard, topicName, - topicPath, + topicPath.PathString(), + bootstrapConfig, cloudId, folderId, databaseId, @@ -839,16 +875,6 @@ private: } } - static void MakeBootstrapConfig(NKikimrPQ::TBootstrapConfig& config, - const TTopicInfo& pqGroup, - TTxState::ETxType txType) - { - if (pqGroup.AlterData && pqGroup.AlterData->BootstrapConfig) { - Y_VERIFY(txType == TTxState::TxCreatePQGroup); - Y_VERIFY(ParseFromStringNoSizeLimit(config, pqGroup.AlterData->BootstrapConfig)); - } - } - static void ParsePQTabletConfig(NKikimrPQ::TPQTabletConfig& config, const TTopicInfo& pqGroup) { @@ -869,6 +895,7 @@ private: const TTopicTabletInfo& pqShard, const TString& topicName, const TString& topicPath, + const std::optional<NKikimrPQ::TBootstrapConfig>& bootstrapConfig, const TString& cloudId, const TString& folderId, const TString& databaseId, @@ -881,6 +908,7 @@ private: const TTopicTabletInfo& pqShard, const TString& topicName, const TString& topicPath, + const std::optional<NKikimrPQ::TBootstrapConfig>& bootstrapConfig, const TString& cloudId, const TString& folderId, const TString& databaseId, diff --git a/ydb/core/tx/schemeshard/schemeshard__operation_common_subdomain.h b/ydb/core/tx/schemeshard/schemeshard__operation_common_subdomain.h index f94c27897f..9e9eee08f6 100644 --- a/ydb/core/tx/schemeshard/schemeshard__operation_common_subdomain.h +++ b/ydb/core/tx/schemeshard/schemeshard__operation_common_subdomain.h @@ -232,6 +232,9 @@ public: if (alterData->GetDatabaseQuotas()) { event->Record.MutableDatabaseQuotas()->CopyFrom(*alterData->GetDatabaseQuotas()); } + if (alterData->GetAuditSettings()) { + event->Record.MutableAuditSettings()->CopyFrom(*alterData->GetAuditSettings()); + } LOG_DEBUG_S(context.Ctx, NKikimrServices::FLAT_TX_SCHEMESHARD, "Send configure request to schemeshard: " << tabletID << " opId: " << OperationId << diff --git a/ydb/core/tx/schemeshard/schemeshard__operation_create_cdc_stream.cpp b/ydb/core/tx/schemeshard/schemeshard__operation_create_cdc_stream.cpp index 26fbd74762..84c6dac324 100644 --- a/ydb/core/tx/schemeshard/schemeshard__operation_create_cdc_stream.cpp +++ b/ydb/core/tx/schemeshard/schemeshard__operation_create_cdc_stream.cpp @@ -3,7 +3,6 @@ #include "schemeshard_impl.h" #include <ydb/core/engine/mkql_proto.h> -#include <ydb/core/persqueue/writer/source_id_encoding.h> #include <ydb/core/scheme/scheme_types_proto.h> #define LOG_D(stream) LOG_DEBUG_S (context.Ctx, NKikimrServices::FLAT_TX_SCHEMESHARD, "[" << context.SS->TabletID() << "] " << stream) @@ -712,6 +711,37 @@ TVector<ISubOperation::TPtr> CreateNewCdcStream(TOperationId opId, const TTxTran << "Initial scan is not supported yet")}; } + Y_VERIFY(context.SS->Tables.contains(tablePath.Base()->PathId)); + auto table = context.SS->Tables.at(tablePath.Base()->PathId); + + TVector<TString> boundaries; + if (op.HasTopicPartitions()) { + if (op.GetTopicPartitions() <= 0) { + return {CreateReject(opId, NKikimrScheme::StatusInvalidParameter, "Topic partitions count must be greater than 0")}; + } + + const auto& keyColumns = table->KeyColumnIds; + const auto& columns = table->Columns; + + Y_VERIFY(!keyColumns.empty()); + Y_VERIFY(columns.contains(keyColumns.at(0))); + const auto firstKeyColumnType = columns.at(keyColumns.at(0)).PType; + + if (!TSchemeShard::FillUniformPartitioning(boundaries, keyColumns.size(), firstKeyColumnType, op.GetTopicPartitions(), AppData()->TypeRegistry, errStr)) { + return {CreateReject(opId, NKikimrScheme::StatusInvalidParameter, errStr)}; + } + } else { + const auto& partitions = table->GetPartitions(); + boundaries.reserve(partitions.size() - 1); + + for (ui32 i = 0; i < partitions.size(); ++i) { + const auto& partition = partitions.at(i); + if (i != partitions.size() - 1) { + boundaries.push_back(partition.EndOfRange); + } + } + } + TVector<ISubOperation::TPtr> result; if (initialScan) { @@ -748,16 +778,12 @@ TVector<ISubOperation::TPtr> CreateNewCdcStream(TOperationId opId, const TTxTran } { - Y_VERIFY(context.SS->Tables.contains(tablePath.Base()->PathId)); - auto table = context.SS->Tables.at(tablePath.Base()->PathId); - const auto& partitions = table->GetPartitions(); - auto outTx = TransactionTemplate(streamPath.PathString(), NKikimrSchemeOp::EOperationType::ESchemeOpCreatePersQueueGroup); outTx.SetFailOnExist(!acceptExisted); auto& desc = *outTx.MutableCreatePersQueueGroup(); desc.SetName("streamImpl"); - desc.SetTotalGroupCount(partitions.size()); + desc.SetTotalGroupCount(op.HasTopicPartitions() ? op.GetTopicPartitions() : table->GetPartitions().size()); desc.SetPartitionPerTablet(2); auto& pqConfig = *desc.MutablePQTabletConfig(); @@ -784,37 +810,19 @@ TVector<ISubOperation::TPtr> CreateNewCdcStream(TOperationId opId, const TTxTran } } - auto& bootstrapConfig = *desc.MutableBootstrapConfig(); - for (ui32 i = 0; i < partitions.size(); ++i) { - const auto& cur = partitions.at(i); - - Y_VERIFY(context.SS->ShardInfos.contains(cur.ShardIdx)); - const auto& shard = context.SS->ShardInfos.at(cur.ShardIdx); - - auto& mg = *bootstrapConfig.AddExplicitMessageGroups(); - mg.SetId(NPQ::NSourceIdEncoding::EncodeSimple(ToString(shard.TabletID))); - - if (i != partitions.size() - 1) { - TSerializedCellVec endKey(cur.EndOfRange); - Y_VERIFY(endKey.GetCells().size() <= table->KeyColumnIds.size()); - - TString errStr; - auto& boundary = *desc.AddPartitionBoundaries(); - for (ui32 ki = 0; ki < endKey.GetCells().size(); ++ki) { - const auto& cell = endKey.GetCells()[ki]; - const auto tag = table->KeyColumnIds.at(ki); - Y_VERIFY(table->Columns.contains(tag)); - const auto typeId = table->Columns.at(tag).PType; - const bool ok = NMiniKQL::CellToValue(typeId, cell, *boundary.AddTuple(), errStr); - Y_VERIFY(ok, "Failed to build key tuple at position %" PRIu32 " error: %s", ki, errStr.data()); - } - - mg.MutableKeyRange()->SetToBound(cur.EndOfRange); - } - - if (i) { - const auto& prev = partitions.at(i - 1); - mg.MutableKeyRange()->SetFromBound(prev.EndOfRange); + for (const auto& serialized : boundaries) { + TSerializedCellVec endKey(serialized); + Y_VERIFY(endKey.GetCells().size() <= table->KeyColumnIds.size()); + + TString errStr; + auto& boundary = *desc.AddPartitionBoundaries(); + for (ui32 ki = 0; ki < endKey.GetCells().size(); ++ki) { + const auto& cell = endKey.GetCells()[ki]; + const auto tag = table->KeyColumnIds.at(ki); + Y_VERIFY(table->Columns.contains(tag)); + const auto typeId = table->Columns.at(tag).PType; + const bool ok = NMiniKQL::CellToValue(typeId, cell, *boundary.AddTuple(), errStr); + Y_VERIFY(ok, "Failed to build key tuple at position %" PRIu32 " error: %s", ki, errStr.data()); } } diff --git a/ydb/core/tx/schemeshard/schemeshard__operation_create_extsubdomain.cpp b/ydb/core/tx/schemeshard/schemeshard__operation_create_extsubdomain.cpp index 19ece7b117..0c61d6c8b5 100644 --- a/ydb/core/tx/schemeshard/schemeshard__operation_create_extsubdomain.cpp +++ b/ydb/core/tx/schemeshard/schemeshard__operation_create_extsubdomain.cpp @@ -156,7 +156,6 @@ public: return result; } - bool requestedStoragePools = !settings.GetStoragePools().empty(); if (requestedStoragePools) { return paramErrorResult("only declaration at creation is allowed, do not set up storage"); @@ -228,6 +227,10 @@ public: alter->SetDatabaseQuotas(settings.GetDatabaseQuotas()); } + if (settings.HasAuditSettings()) { + alter->SetAuditSettings(settings.GetAuditSettings()); + } + Y_VERIFY(!context.SS->SubDomains.contains(newNode->PathId)); auto& subDomainInfo = context.SS->SubDomains[newNode->PathId]; subDomainInfo = new TSubDomainInfo(); diff --git a/ydb/core/tx/schemeshard/schemeshard__operation_create_pq.cpp b/ydb/core/tx/schemeshard/schemeshard__operation_create_pq.cpp index 15dc6e0aee..d3d235a54f 100644 --- a/ydb/core/tx/schemeshard/schemeshard__operation_create_pq.cpp +++ b/ydb/core/tx/schemeshard/schemeshard__operation_create_pq.cpp @@ -504,6 +504,18 @@ public: context.OnComplete.Dependence(parentTxId, OperationId.GetTxId()); } + if (parentPath.Base()->IsCdcStream()) { + auto tablePath = parentPath.Parent(); + Y_VERIFY(tablePath.IsResolved()); + + Y_VERIFY(context.SS->Tables.contains(tablePath.Base()->PathId)); + auto table = context.SS->Tables.at(tablePath.Base()->PathId); + + for (const auto& splitOpId : table->GetSplitOpsInFlight()) { + context.OnComplete.Dependence(splitOpId.GetTxId(), OperationId.GetTxId()); + } + } + context.SS->ChangeTxState(db, OperationId, TTxState::CreateParts); context.OnComplete.ActivateTx(OperationId); diff --git a/ydb/core/tx/schemeshard/schemeshard__operation_create_subdomain.cpp b/ydb/core/tx/schemeshard/schemeshard__operation_create_subdomain.cpp index f5a58df674..56af6981bf 100644 --- a/ydb/core/tx/schemeshard/schemeshard__operation_create_subdomain.cpp +++ b/ydb/core/tx/schemeshard/schemeshard__operation_create_subdomain.cpp @@ -298,6 +298,10 @@ public: alter->SetDatabaseQuotas(settings.GetDatabaseQuotas()); } + if (settings.HasAuditSettings()) { + alter->SetAuditSettings(settings.GetAuditSettings()); + } + Y_VERIFY(!context.SS->SubDomains.contains(newNode->PathId)); auto& subDomainInfo = context.SS->SubDomains[newNode->PathId]; subDomainInfo = new TSubDomainInfo(); diff --git a/ydb/core/tx/schemeshard/schemeshard__operation_side_effects.cpp b/ydb/core/tx/schemeshard/schemeshard__operation_side_effects.cpp index e0ab1cecde..dd221a3b0a 100644 --- a/ydb/core/tx/schemeshard/schemeshard__operation_side_effects.cpp +++ b/ydb/core/tx/schemeshard/schemeshard__operation_side_effects.cpp @@ -453,6 +453,9 @@ void TSideEffects::DoUpdateTenant(TSchemeShard* ss, NTabletFlatExecutor::TTransa if (subDomain->GetDatabaseQuotas()) { message->Record.MutableDatabaseQuotas()->CopyFrom(*subDomain->GetDatabaseQuotas()); } + if (const auto& auditSettings = subDomain->GetAuditSettings()) { + message->Record.MutableAuditSettings()->CopyFrom(*auditSettings); + } hasChanges = true; } diff --git a/ydb/core/tx/schemeshard/schemeshard__sync_update_tenants.cpp b/ydb/core/tx/schemeshard/schemeshard__sync_update_tenants.cpp index a74b28a6be..58455f5f41 100644 --- a/ydb/core/tx/schemeshard/schemeshard__sync_update_tenants.cpp +++ b/ydb/core/tx/schemeshard/schemeshard__sync_update_tenants.cpp @@ -8,7 +8,6 @@ namespace NSchemeShard { using namespace NTabletFlatExecutor; - struct TSchemeShard::TTxSyncTenant : public TSchemeShard::TRwTxBase { TPathId PathId; TSideEffects SideEffects; @@ -114,6 +113,11 @@ struct TSchemeShard::TTxUpdateTenant : public TSchemeShard::TRwTxBase { Self->PersistSubDomainDatabaseQuotas(db, Self->RootPathId(), *subdomain); } + if (record.HasAuditSettings()) { + subdomain->SetAuditSettings(record.GetAuditSettings()); + Self->PersistSubDomainAuditSettings(db, Self->RootPathId(), *subdomain); + } + Self->PersistStoragePools(db, Self->RootPathId(), *subdomain); SideEffects.PublishToSchemeBoard(InvalidOperationId, Self->RootPathId()); MakeSync(); diff --git a/ydb/core/tx/schemeshard/schemeshard_impl.cpp b/ydb/core/tx/schemeshard/schemeshard_impl.cpp index 4814d84a53..d65a261a07 100644 --- a/ydb/core/tx/schemeshard/schemeshard_impl.cpp +++ b/ydb/core/tx/schemeshard/schemeshard_impl.cpp @@ -52,7 +52,7 @@ bool ResolvePoolNames( return true; } -} // namespace +} // anonymous namespace const TSchemeLimits TSchemeShard::DefaultLimits = {}; @@ -1873,6 +1873,8 @@ void TSchemeShard::PersistSubDomainAlter(NIceDb::TNiceDb& db, const TPathId& pat NIceDb::TNull<Schema::SubDomainsAlterData::DatabaseQuotas>()); } + PersistSubDomainAuditSettingsAlter(db, pathId, subDomain); + for (auto shardIdx: subDomain.GetPrivateShards()) { db.Table<Schema::SubDomainShardsAlterData>().Key(pathId.LocalPathId, shardIdx.GetLocalId()).Update(); } @@ -1934,6 +1936,8 @@ void TSchemeShard::PersistSubDomain(NIceDb::TNiceDb& db, const TPathId& pathId, PersistSubDomainDatabaseQuotas(db, pathId, subDomain); PersistSubDomainState(db, pathId, subDomain); + PersistSubDomainAuditSettings(db, pathId, subDomain); + db.Table<Schema::SubDomainsAlterData>().Key(pathId.LocalPathId).Delete(); for (auto shardIdx: subDomain.GetPrivateShards()) { @@ -2035,6 +2039,26 @@ void TSchemeShard::PersistRemoveSubDomain(NIceDb::TNiceDb& db, const TPathId& pa } } +template <class Table> +void PersistSubDomainAuditSettingsImpl(NIceDb::TNiceDb& db, const TPathId& pathId, const TSubDomainInfo::TMaybeAuditSettings& value) { + using Field = typename Table::AuditSettings; + if (value) { + TString serialized; + Y_VERIFY(value->SerializeToString(&serialized)); + db.Table<Table>().Key(pathId.LocalPathId).Update(NIceDb::TUpdate<Field>(serialized)); + } else { + db.Table<Table>().Key(pathId.LocalPathId).template UpdateToNull<Field>(); + } +} + +void TSchemeShard::PersistSubDomainAuditSettings(NIceDb::TNiceDb& db, const TPathId& pathId, const TSubDomainInfo& subDomain) { + PersistSubDomainAuditSettingsImpl<Schema::SubDomains>(db, pathId, subDomain.GetAuditSettings()); +} + +void TSchemeShard::PersistSubDomainAuditSettingsAlter(NIceDb::TNiceDb& db, const TPathId& pathId, const TSubDomainInfo& subDomain) { + PersistSubDomainAuditSettingsImpl<Schema::SubDomainsAlterData>(db, pathId, subDomain.GetAuditSettings()); +} + void TSchemeShard::PersistACL(NIceDb::TNiceDb& db, const TPathElement::TPtr path) { if (path->PathId.OwnerId == TabletID()) { db.Table<Schema::Paths>().Key(path->PathId.LocalPathId).Update( @@ -6005,8 +6029,8 @@ void TSchemeShard::Handle(TEvSchemeShard::TEvNotifyTxCompletionResult::TPtr& ev, "Message:\n" << ev->Get()->Record.ShortDebugString()); const auto txId = TTxId(ev->Get()->Record.GetTxId()); - bool executed = false; - + bool executed = false; + if (TxIdToExport.contains(txId) || TxIdToDependentExport.contains(txId)) { Execute(CreateTxProgressExport(txId), ctx); executed = true; diff --git a/ydb/core/tx/schemeshard/schemeshard_impl.h b/ydb/core/tx/schemeshard/schemeshard_impl.h index 5f3970d2a8..caf4dd8b70 100644 --- a/ydb/core/tx/schemeshard/schemeshard_impl.h +++ b/ydb/core/tx/schemeshard/schemeshard_impl.h @@ -658,6 +658,8 @@ public: void PersistSubDomainSecurityStateVersion(NIceDb::TNiceDb& db, const TPathId& pathId, const TSubDomainInfo& subDomain); void PersistSubDomainPrivateShards(NIceDb::TNiceDb& db, const TPathId& pathId, const TSubDomainInfo& subDomain); void PersistDeleteSubDomainAlter(NIceDb::TNiceDb& db, const TPathId& pathId, const TSubDomainInfo& subDomain); + void PersistSubDomainAuditSettings(NIceDb::TNiceDb& db, const TPathId& pathId, const TSubDomainInfo& subDomain); + void PersistSubDomainAuditSettingsAlter(NIceDb::TNiceDb& db, const TPathId& pathId, const TSubDomainInfo& subDomain); void PersistKesusInfo(NIceDb::TNiceDb& db, TPathId pathId, const TKesusInfo::TPtr); void PersistKesusVersion(NIceDb::TNiceDb& db, TPathId pathId, const TKesusInfo::TPtr); void PersistAddKesusAlter(NIceDb::TNiceDb& db, TPathId pathId, const TKesusInfo::TPtr); diff --git a/ydb/core/tx/schemeshard/schemeshard_info_types.cpp b/ydb/core/tx/schemeshard/schemeshard_info_types.cpp index a2cd4af71e..d2dfabc09b 100644 --- a/ydb/core/tx/schemeshard/schemeshard_info_types.cpp +++ b/ydb/core/tx/schemeshard/schemeshard_info_types.cpp @@ -20,6 +20,30 @@ namespace NKikimr { namespace NSchemeShard { +void TSubDomainInfo::ApplyAuditSettings(const TSubDomainInfo::TMaybeAuditSettings& diff) { + if (diff.Defined()) { + const auto& input = diff.GetRef(); + if (AuditSettings.Defined()) { + NKikimrSubDomains::TAuditSettings next = AuditSettings.GetRef(); + if (input.HasEnableDmlAudit()) { + next.SetEnableDmlAudit(input.GetEnableDmlAudit()); + } + if (input.ExpectedSubjectsSize() > 0) { + next.ClearExpectedSubjects(); + // instead of CopyFrom, manually copy all but empty elements + for (const auto& i : input.GetExpectedSubjects()) { + if (!i.empty()) { + next.AddExpectedSubjects(i); + } + } + } + AuditSettings = next; + } else { + AuditSettings = input; + } + } +} + TTableInfo::TAlterDataPtr TTableInfo::CreateAlterData( TPtr source, NKikimrSchemeOp::TTableDescription& op, @@ -1321,6 +1345,7 @@ void TTableInfo::SetPartitioning(TVector<TTableShardInfo>&& newPartitioning) { newAggregatedStats.RowCount += newStats.RowCount; newAggregatedStats.DataSize += newStats.DataSize; newAggregatedStats.IndexSize += newStats.IndexSize; + newAggregatedStats.InFlightTxCount += newStats.InFlightTxCount; cpuTotal += newStats.GetCurrentRawCpuUsage(); newAggregatedStats.Memory += newStats.Memory; newAggregatedStats.Network += newStats.Network; diff --git a/ydb/core/tx/schemeshard/schemeshard_info_types.h b/ydb/core/tx/schemeshard/schemeshard_info_types.h index 4da453c2d1..6820fcb19c 100644 --- a/ydb/core/tx/schemeshard/schemeshard_info_types.h +++ b/ydb/core/tx/schemeshard/schemeshard_info_types.h @@ -1682,7 +1682,6 @@ struct TSubDomainInfo: TSimpleRefCount<TSubDomainInfo> { CountDiskSpaceQuotas(counters, GetDiskSpaceQuotas(), AlterData->GetDiskSpaceQuotas()); CountStreamShardsQuota(counters, GetStreamShardsQuota(), AlterData->GetStreamShardsQuota()); CountStreamReservedStorageQuota(counters, GetStreamReservedStorageQuota(), AlterData->GetStreamReservedStorageQuota()); - } ui64 GetStreamShardsQuota() const { @@ -2103,6 +2102,18 @@ struct TSubDomainInfo: TSimpleRefCount<TSubDomainInfo> { ++SecurityStateVersion; } + using TMaybeAuditSettings = TMaybe<NKikimrSubDomains::TAuditSettings, NMaybe::TPolicyUndefinedFail>; + + void SetAuditSettings(const NKikimrSubDomains::TAuditSettings& value) { + AuditSettings.ConstructInPlace(value); + } + + const TMaybeAuditSettings& GetAuditSettings() const { + return AuditSettings; + } + + void ApplyAuditSettings(const TMaybeAuditSettings& diff); + private: bool InitiatedAsGlobal = false; NKikimrSubDomains::TProcessingParams ProcessingParams; @@ -2136,6 +2147,8 @@ private: NLoginProto::TSecurityState SecurityState; ui64 SecurityStateVersion = 0; + TMaybeAuditSettings AuditSettings; + TVector<TTabletId> FilterPrivateTablets(TTabletTypes::EType type, const THashMap<TShardIdx, TShardInfo>& allShards) const { TVector<TTabletId> tablets; for (auto shardId: PrivateShards) { diff --git a/ydb/core/tx/schemeshard/schemeshard_path_describer.cpp b/ydb/core/tx/schemeshard/schemeshard_path_describer.cpp index 8c40125151..00c6421b4b 100644 --- a/ydb/core/tx/schemeshard/schemeshard_path_describer.cpp +++ b/ydb/core/tx/schemeshard/schemeshard_path_describer.cpp @@ -708,6 +708,10 @@ void TPathDescriber::DescribeDomainRoot(TPathElement::TPtr pathEl) { if (subDomainInfo->GetDiskQuotaExceeded()) { entry->MutableDomainState()->SetDiskQuotaExceeded(true); } + + if (const auto& auditSettings = subDomainInfo->GetAuditSettings()) { + entry->MutableAuditSettings()->CopyFrom(*auditSettings); + } } void TPathDescriber::DescribeDomainExtra(TPathElement::TPtr pathEl) { diff --git a/ydb/core/tx/schemeshard/schemeshard_schema.h b/ydb/core/tx/schemeshard/schemeshard_schema.h index c9d88ec9dc..4d83ecc72e 100644 --- a/ydb/core/tx/schemeshard/schemeshard_schema.h +++ b/ydb/core/tx/schemeshard/schemeshard_schema.h @@ -734,6 +734,7 @@ struct Schema : NIceDb::Schema { struct TableCdcStreamsLimit : Column<27, NScheme::NTypeIds::Uint64> {}; struct ExportsLimit : Column<28, NScheme::NTypeIds::Uint64> {}; struct ImportsLimit : Column<29, NScheme::NTypeIds::Uint64> {}; + struct AuditSettings : Column<30, NScheme::NTypeIds::String> {}; using TKey = TableKey<PathId>; using TColumns = TableColumns< @@ -765,7 +766,8 @@ struct Schema : NIceDb::Schema { SecurityStateVersion, TableCdcStreamsLimit, ExportsLimit, - ImportsLimit + ImportsLimit, + AuditSettings >; }; @@ -787,6 +789,7 @@ struct Schema : NIceDb::Schema { struct SharedHiveId : Column<7, NScheme::NTypeIds::Uint64> { using Type = TTabletId; static constexpr Type Default = InvalidTabletId; }; struct DeclaredSchemeQuotas : Column<8, NScheme::NTypeIds::String> {}; struct DatabaseQuotas : Column<9, NScheme::NTypeIds::String> {}; + struct AuditSettings : Column<10, NScheme::NTypeIds::String> {}; using TKey = TableKey<PathId>; using TColumns = TableColumns< @@ -798,7 +801,8 @@ struct Schema : NIceDb::Schema { ResourcesDomainLocalPathId, SharedHiveId, DeclaredSchemeQuotas, - DatabaseQuotas + DatabaseQuotas, + AuditSettings >; }; diff --git a/ydb/core/tx/schemeshard/ut_async_index.cpp b/ydb/core/tx/schemeshard/ut_async_index.cpp deleted file mode 100644 index 97ae68c13c..0000000000 --- a/ydb/core/tx/schemeshard/ut_async_index.cpp +++ /dev/null @@ -1,48 +0,0 @@ -#include <ydb/core/tx/schemeshard/ut_helpers/helpers.h> -#include <ydb/core/testlib/tablet_helpers.h> - -using namespace NKikimr; -using namespace NSchemeShard; -using namespace NSchemeShardUT_Private; - -Y_UNIT_TEST_SUITE(TAsyncIndexTests) { - Y_UNIT_TEST(CreateTable) { - TTestBasicRuntime runtime; - TTestEnv env(runtime); - ui64 txId = 100; - - TestCreateIndexedTable(runtime, ++txId, "/MyRoot", R"( - TableDescription { - Name: "Table" - Columns { Name: "key" Type: "Uint64" } - Columns { Name: "indexed" Type: "Uint64" } - KeyColumnNames: ["key"] - } - IndexDescription { - Name: "UserDefinedIndex" - KeyColumnNames: ["indexed"] - Type: EIndexTypeGlobalAsync - } - )"); - env.TestWaitNotification(runtime, txId); - } - - Y_UNIT_TEST(OnlineBuild) { - TTestBasicRuntime runtime; - TTestEnv env(runtime); - ui64 txId = 100; - - TestCreateTable(runtime, ++txId, "/MyRoot", R"( - Name: "Table" - Columns { Name: "key" Type: "Uint64" } - Columns { Name: "indexed" Type: "Uint64" } - KeyColumnNames: ["key"] - )"); - env.TestWaitNotification(runtime, txId); - - TestBuildIndex(runtime, ++txId, TTestTxConfig::SchemeShard, "/MyRoot", "/MyRoot/Table", TBuildIndexConfig{ - "UserDefinedIndex", NKikimrSchemeOp::EIndexTypeGlobalAsync, {"indexed"}, {} - }); - env.TestWaitNotification(runtime, txId); - } -} diff --git a/ydb/core/tx/schemeshard/ut_async_index/CMakeLists.darwin-x86_64.txt b/ydb/core/tx/schemeshard/ut_async_index/CMakeLists.darwin-x86_64.txt index edb5199f19..f6be4ef56d 100644 --- a/ydb/core/tx/schemeshard/ut_async_index/CMakeLists.darwin-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_async_index/CMakeLists.darwin-x86_64.txt @@ -20,8 +20,11 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_async_index PUBLIC library-cpp-cpuid_check cpp-testing-unittest_main core-tx-schemeshard + ydb-core-base + ydb-core-scheme core-testlib-default tx-schemeshard-ut_helpers + lib-deprecated-kicli ) target_link_options(ydb-core-tx-schemeshard-ut_async_index PRIVATE -Wl,-platform_version,macos,11.0,11.0 @@ -31,7 +34,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_async_index PRIVATE CoreFoundation ) target_sources(ydb-core-tx-schemeshard-ut_async_index PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_async_index.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_async_index/ut_async_index.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_async_index/CMakeLists.linux-aarch64.txt b/ydb/core/tx/schemeshard/ut_async_index/CMakeLists.linux-aarch64.txt index 1a0b1ae3b6..beb0a09e41 100644 --- a/ydb/core/tx/schemeshard/ut_async_index/CMakeLists.linux-aarch64.txt +++ b/ydb/core/tx/schemeshard/ut_async_index/CMakeLists.linux-aarch64.txt @@ -20,8 +20,11 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_async_index PUBLIC yutil cpp-testing-unittest_main core-tx-schemeshard + ydb-core-base + ydb-core-scheme core-testlib-default tx-schemeshard-ut_helpers + lib-deprecated-kicli ) target_link_options(ydb-core-tx-schemeshard-ut_async_index PRIVATE -ldl @@ -34,7 +37,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_async_index PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_async_index PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_async_index.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_async_index/ut_async_index.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_async_index/CMakeLists.linux-x86_64.txt b/ydb/core/tx/schemeshard/ut_async_index/CMakeLists.linux-x86_64.txt index ce7674381d..aafc565e97 100644 --- a/ydb/core/tx/schemeshard/ut_async_index/CMakeLists.linux-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_async_index/CMakeLists.linux-x86_64.txt @@ -21,8 +21,11 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_async_index PUBLIC library-cpp-cpuid_check cpp-testing-unittest_main core-tx-schemeshard + ydb-core-base + ydb-core-scheme core-testlib-default tx-schemeshard-ut_helpers + lib-deprecated-kicli ) target_link_options(ydb-core-tx-schemeshard-ut_async_index PRIVATE -ldl @@ -35,7 +38,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_async_index PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_async_index PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_async_index.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_async_index/ut_async_index.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_async_index/CMakeLists.windows-x86_64.txt b/ydb/core/tx/schemeshard/ut_async_index/CMakeLists.windows-x86_64.txt index 9396669bb7..91e315749c 100644 --- a/ydb/core/tx/schemeshard/ut_async_index/CMakeLists.windows-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_async_index/CMakeLists.windows-x86_64.txt @@ -20,11 +20,14 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_async_index PUBLIC library-cpp-cpuid_check cpp-testing-unittest_main core-tx-schemeshard + ydb-core-base + ydb-core-scheme core-testlib-default tx-schemeshard-ut_helpers + lib-deprecated-kicli ) target_sources(ydb-core-tx-schemeshard-ut_async_index PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_async_index.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_async_index/ut_async_index.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_async_index/ut_async_index.cpp b/ydb/core/tx/schemeshard/ut_async_index/ut_async_index.cpp new file mode 100644 index 0000000000..e341c97712 --- /dev/null +++ b/ydb/core/tx/schemeshard/ut_async_index/ut_async_index.cpp @@ -0,0 +1,258 @@ +#include <ydb/core/base/path.h> +#include <ydb/core/scheme/scheme_tablecell.h> +#include <ydb/core/tx/schemeshard/ut_helpers/helpers.h> +#include <ydb/core/testlib/tablet_helpers.h> +#include <ydb/public/lib/deprecated/kicli/kicli.h> + +using namespace NKikimr; +using namespace NSchemeShard; +using namespace NSchemeShardUT_Private; + +Y_UNIT_TEST_SUITE(TAsyncIndexTests) { + Y_UNIT_TEST(CreateTable) { + TTestBasicRuntime runtime; + TTestEnv env(runtime); + ui64 txId = 100; + + TestCreateIndexedTable(runtime, ++txId, "/MyRoot", R"( + TableDescription { + Name: "Table" + Columns { Name: "key" Type: "Uint64" } + Columns { Name: "indexed" Type: "Uint64" } + KeyColumnNames: ["key"] + } + IndexDescription { + Name: "UserDefinedIndex" + KeyColumnNames: ["indexed"] + Type: EIndexTypeGlobalAsync + } + )"); + env.TestWaitNotification(runtime, txId); + } + + Y_UNIT_TEST(OnlineBuild) { + TTestBasicRuntime runtime; + TTestEnv env(runtime); + ui64 txId = 100; + + TestCreateTable(runtime, ++txId, "/MyRoot", R"( + Name: "Table" + Columns { Name: "key" Type: "Uint64" } + Columns { Name: "indexed" Type: "Uint64" } + KeyColumnNames: ["key"] + )"); + env.TestWaitNotification(runtime, txId); + + TestBuildIndex(runtime, ++txId, TTestTxConfig::SchemeShard, "/MyRoot", "/MyRoot/Table", TBuildIndexConfig{ + "UserDefinedIndex", NKikimrSchemeOp::EIndexTypeGlobalAsync, {"indexed"}, {} + }); + env.TestWaitNotification(runtime, txId); + } + + THolder<TEvDataShard::TEvUploadRowsRequest> MakeUploadRows(ui64 tableId, + const TVector<ui32>& keyTags, const TVector<ui32>& valueTags, + TVector<std::pair<TString, TString>>&& serializedRows) + { + auto ev = MakeHolder<TEvDataShard::TEvUploadRowsRequest>(); + ev->Record.SetTableId(tableId); + + auto& scheme = *ev->Record.MutableRowScheme(); + for (ui32 tag : keyTags) { + scheme.AddKeyColumnIds(tag); + } + for (ui32 tag : valueTags) { + scheme.AddValueColumnIds(tag); + } + + for (const auto& [k, v] : serializedRows) { + auto& row = *ev->Record.AddRows(); + row.SetKeyColumns(k); + row.SetValueColumns(v); + } + + return ev; + } + + TVector<ui64> Prepare(TTestActorRuntime& runtime, const TString& mainTablePath) { + ui64 mainTableId = 0; + TVector<ui64> mainTabletIds; + TVector<std::pair<TString, TString>> rows; + + { + auto tableDesc = DescribePath(runtime, mainTablePath, true, true); + const auto& tablePartitions = tableDesc.GetPathDescription().GetTablePartitions(); + + mainTableId = tableDesc.GetPathId(); + for (const auto& partition : tablePartitions) { + mainTabletIds.push_back(partition.GetDatashardId()); + } + } + + for (ui32 i = 0; i < 3; ++i) { + auto key = TVector<TCell>{TCell::Make(1 << i)}; + auto value = TVector<TCell>{TCell::Make(i)}; + rows.emplace_back(TSerializedCellVec::Serialize(key), TSerializedCellVec::Serialize(value)); + } + + auto ev = MakeUploadRows(mainTableId, {1}, {2}, std::move(rows)); + ForwardToTablet(runtime, mainTabletIds[0], runtime.AllocateEdgeActor(), ev.Release()); + + return mainTabletIds; + } + + NKikimrMiniKQL::TResult ReadTable(TTestActorRuntime& runtime, ui64 tabletId, + const TString& table, const TVector<TString>& pk, const TVector<TString>& columns) + { + TStringBuilder keyFmt; + for (const auto& k : pk) { + keyFmt << "'('" << k << " (Null) (Void)) "; + } + const auto columnsFmt = "'" + JoinSeq(" '", columns); + + NKikimrMiniKQL::TResult result; + TString error; + NKikimrProto::EReplyStatus status = LocalMiniKQL(runtime, tabletId, Sprintf(R"(( + (let range '(%s)) + (let columns '(%s)) + (let result (SelectRange '__user__%s range columns '())) + (return (AsList (SetResult 'Result result) )) + ))", keyFmt.data(), columnsFmt.data(), table.data()), result, error); + UNIT_ASSERT_VALUES_EQUAL_C(status, NKikimrProto::EReplyStatus::OK, error); + + return result; + } + + struct TTableTraits { + TString Path; + TVector<TString> Key; + TVector<TString> Columns; + }; + + void CheckWrittenToIndex(TTestActorRuntime& runtime, const TTableTraits& mainTable, const TTableTraits& indexTable) { + bool writtenToMainTable = false; + { + auto tableDesc = DescribePath(runtime, mainTable.Path, true, true); + const auto& tablePartitions = tableDesc.GetPathDescription().GetTablePartitions(); + UNIT_ASSERT(!tablePartitions.empty()); + + auto result = ReadTable(runtime, tablePartitions[0].GetDatashardId(), SplitPath(mainTable.Path).back(), + mainTable.Key, mainTable.Columns); + auto value = NClient::TValue::Create(result); + writtenToMainTable = value["Result"]["List"].Size() == 3; + } + + if (writtenToMainTable) { + auto tableDesc = DescribePrivatePath(runtime, indexTable.Path, true, true); + const auto& tablePartitions = tableDesc.GetPathDescription().GetTablePartitions(); + UNIT_ASSERT(!tablePartitions.empty()); + + int i = 0; + while (++i < 10) { + runtime.SimulateSleep(TDuration::Seconds(1)); + + auto result = ReadTable(runtime, tablePartitions[0].GetDatashardId(), SplitPath(indexTable.Path).back(), + indexTable.Key, indexTable.Columns); + auto value = NClient::TValue::Create(result); + if (value["Result"]["List"].Size() == 3) { + break; + } + } + + UNIT_ASSERT(i < 10); + } + } + + Y_UNIT_TEST(SplitWithReboots) { + TTestWithReboots t; + t.Run([&](TTestActorRuntime& runtime, bool& activeZone) { + TVector<ui64> mainTabletIds; + + { + TInactiveZone inactive(activeZone); + + TestCreateIndexedTable(runtime, ++t.TxId, "/MyRoot", R"( + TableDescription { + Name: "Table" + Columns { Name: "key" Type: "Uint32" } + Columns { Name: "indexed" Type: "Uint32" } + KeyColumnNames: ["key"] + } + IndexDescription { + Name: "UserDefinedIndex" + KeyColumnNames: ["indexed"] + Type: EIndexTypeGlobalAsync + } + )"); + t.TestEnv->TestWaitNotification(runtime, t.TxId); + + mainTabletIds = Prepare(runtime, "/MyRoot/Table"); + UNIT_ASSERT_VALUES_EQUAL(mainTabletIds.size(), 1); + } + + TestSplitTable(runtime, ++t.TxId, "/MyRoot/Table", Sprintf(R"( + SourceTabletId: %lu + SplitBoundary { + KeyPrefix { + Tuple { Optional { Uint32: 100 } } + } + } + )", mainTabletIds[0])); + t.TestEnv->TestWaitNotification(runtime, t.TxId); + + { + TInactiveZone inactive(activeZone); + CheckWrittenToIndex(runtime, + {"/MyRoot/Table", {"key"}, {"key", "indexed"}}, + {"/MyRoot/Table/UserDefinedIndex/indexImplTable", {"indexed", "key"}, {"key", "indexed"}}); + } + }); + } + + Y_UNIT_TEST(MergeWithReboots) { + TTestWithReboots t; + t.Run([&](TTestActorRuntime& runtime, bool& activeZone) { + TVector<ui64> mainTabletIds; + + { + TInactiveZone inactive(activeZone); + + TestCreateIndexedTable(runtime, ++t.TxId, "/MyRoot", R"( + TableDescription { + Name: "Table" + Columns { Name: "key" Type: "Uint32" } + Columns { Name: "indexed" Type: "Uint32" } + KeyColumnNames: ["key"] + UniformPartitionsCount: 2 + PartitionConfig { + PartitioningPolicy { + MinPartitionsCount: 1 + } + } + } + IndexDescription { + Name: "UserDefinedIndex" + KeyColumnNames: ["indexed"] + Type: EIndexTypeGlobalAsync + } + )"); + t.TestEnv->TestWaitNotification(runtime, t.TxId); + + mainTabletIds = Prepare(runtime, "/MyRoot/Table"); + UNIT_ASSERT_VALUES_EQUAL(mainTabletIds.size(), 2); + } + + TestSplitTable(runtime, ++t.TxId, "/MyRoot/Table", Sprintf(R"( + SourceTabletId: %lu + SourceTabletId: %lu + )", mainTabletIds[0], mainTabletIds[1])); + t.TestEnv->TestWaitNotification(runtime, t.TxId); + + { + TInactiveZone inactive(activeZone); + CheckWrittenToIndex(runtime, + {"/MyRoot/Table", {"key"}, {"key", "indexed"}}, + {"/MyRoot/Table/UserDefinedIndex/indexImplTable", {"indexed", "key"}, {"key", "indexed"}}); + } + }); + } +} diff --git a/ydb/core/tx/schemeshard/ut_async_index/ya.make b/ydb/core/tx/schemeshard/ut_async_index/ya.make index c257972575..6101103d96 100644 --- a/ydb/core/tx/schemeshard/ut_async_index/ya.make +++ b/ydb/core/tx/schemeshard/ut_async_index/ya.make @@ -14,8 +14,11 @@ ELSE() ENDIF() PEERDIR( + ydb/core/base + ydb/core/scheme ydb/core/testlib/default ydb/core/tx/schemeshard/ut_helpers + ydb/public/lib/deprecated/kicli ) SRCS( diff --git a/ydb/core/tx/schemeshard/ut_pq/CMakeLists.windows-x86_64.txt b/ydb/core/tx/schemeshard/ut_auditsettings/CMakeLists.darwin-x86_64.txt index d7e5c141b5..d6cb0d8415 100644 --- a/ydb/core/tx/schemeshard/ut_pq/CMakeLists.windows-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_auditsettings/CMakeLists.darwin-x86_64.txt @@ -7,11 +7,14 @@ -add_executable(ydb-core-tx-schemeshard-ut_pq) -target_include_directories(ydb-core-tx-schemeshard-ut_pq PRIVATE +add_executable(ydb-core-tx-schemeshard-ut_auditsettings) +target_compile_options(ydb-core-tx-schemeshard-ut_auditsettings PRIVATE + -DUSE_CURRENT_UDF_ABI_VERSION +) +target_include_directories(ydb-core-tx-schemeshard-ut_auditsettings PRIVATE ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard ) -target_link_libraries(ydb-core-tx-schemeshard-ut_pq PUBLIC +target_link_libraries(ydb-core-tx-schemeshard-ut_auditsettings PUBLIC contrib-libs-cxxsupp yutil library-cpp-cpuid_check @@ -23,23 +26,29 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_pq PUBLIC core-testlib-default ydb-core-tx tx-schemeshard-ut_helpers - udf-service-exception_policy ) -target_sources(ydb-core-tx-schemeshard-ut_pq PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_pq.cpp +target_link_options(ydb-core-tx-schemeshard-ut_auditsettings PRIVATE + -Wl,-platform_version,macos,11.0,11.0 + -fPIC + -fPIC + -framework + CoreFoundation +) +target_sources(ydb-core-tx-schemeshard-ut_auditsettings PRIVATE + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_auditsettings/ut_auditsettings.cpp ) set_property( TARGET - ydb-core-tx-schemeshard-ut_pq + ydb-core-tx-schemeshard-ut_auditsettings PROPERTY SPLIT_FACTOR 10 ) add_yunittest( NAME - ydb-core-tx-schemeshard-ut_pq + ydb-core-tx-schemeshard-ut_auditsettings TEST_TARGET - ydb-core-tx-schemeshard-ut_pq + ydb-core-tx-schemeshard-ut_auditsettings TEST_ARG --print-before-suite --print-before-test @@ -49,26 +58,26 @@ add_yunittest( ) set_yunittest_property( TEST - ydb-core-tx-schemeshard-ut_pq + ydb-core-tx-schemeshard-ut_auditsettings PROPERTY LABELS MEDIUM ) set_yunittest_property( TEST - ydb-core-tx-schemeshard-ut_pq + ydb-core-tx-schemeshard-ut_auditsettings PROPERTY PROCESSORS 1 ) set_yunittest_property( TEST - ydb-core-tx-schemeshard-ut_pq + ydb-core-tx-schemeshard-ut_auditsettings PROPERTY TIMEOUT - 600 + 60 ) -target_allocator(ydb-core-tx-schemeshard-ut_pq +target_allocator(ydb-core-tx-schemeshard-ut_auditsettings system_allocator ) -vcs_info(ydb-core-tx-schemeshard-ut_pq) +vcs_info(ydb-core-tx-schemeshard-ut_auditsettings) diff --git a/ydb/core/tx/schemeshard/ut_pq/CMakeLists.linux-aarch64.txt b/ydb/core/tx/schemeshard/ut_auditsettings/CMakeLists.linux-aarch64.txt index 0f0ffd5ae4..d89d672282 100644 --- a/ydb/core/tx/schemeshard/ut_pq/CMakeLists.linux-aarch64.txt +++ b/ydb/core/tx/schemeshard/ut_auditsettings/CMakeLists.linux-aarch64.txt @@ -7,11 +7,14 @@ -add_executable(ydb-core-tx-schemeshard-ut_pq) -target_include_directories(ydb-core-tx-schemeshard-ut_pq PRIVATE +add_executable(ydb-core-tx-schemeshard-ut_auditsettings) +target_compile_options(ydb-core-tx-schemeshard-ut_auditsettings PRIVATE + -DUSE_CURRENT_UDF_ABI_VERSION +) +target_include_directories(ydb-core-tx-schemeshard-ut_auditsettings PRIVATE ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard ) -target_link_libraries(ydb-core-tx-schemeshard-ut_pq PUBLIC +target_link_libraries(ydb-core-tx-schemeshard-ut_auditsettings PUBLIC contrib-libs-linux-headers contrib-libs-cxxsupp yutil @@ -23,9 +26,8 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_pq PUBLIC core-testlib-default ydb-core-tx tx-schemeshard-ut_helpers - udf-service-exception_policy ) -target_link_options(ydb-core-tx-schemeshard-ut_pq PRIVATE +target_link_options(ydb-core-tx-schemeshard-ut_auditsettings PRIVATE -ldl -lrt -Wl,--no-as-needed @@ -35,21 +37,21 @@ target_link_options(ydb-core-tx-schemeshard-ut_pq PRIVATE -lrt -ldl ) -target_sources(ydb-core-tx-schemeshard-ut_pq PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_pq.cpp +target_sources(ydb-core-tx-schemeshard-ut_auditsettings PRIVATE + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_auditsettings/ut_auditsettings.cpp ) set_property( TARGET - ydb-core-tx-schemeshard-ut_pq + ydb-core-tx-schemeshard-ut_auditsettings PROPERTY SPLIT_FACTOR 10 ) add_yunittest( NAME - ydb-core-tx-schemeshard-ut_pq + ydb-core-tx-schemeshard-ut_auditsettings TEST_TARGET - ydb-core-tx-schemeshard-ut_pq + ydb-core-tx-schemeshard-ut_auditsettings TEST_ARG --print-before-suite --print-before-test @@ -59,26 +61,26 @@ add_yunittest( ) set_yunittest_property( TEST - ydb-core-tx-schemeshard-ut_pq + ydb-core-tx-schemeshard-ut_auditsettings PROPERTY LABELS MEDIUM ) set_yunittest_property( TEST - ydb-core-tx-schemeshard-ut_pq + ydb-core-tx-schemeshard-ut_auditsettings PROPERTY PROCESSORS 1 ) set_yunittest_property( TEST - ydb-core-tx-schemeshard-ut_pq + ydb-core-tx-schemeshard-ut_auditsettings PROPERTY TIMEOUT - 600 + 60 ) -target_allocator(ydb-core-tx-schemeshard-ut_pq +target_allocator(ydb-core-tx-schemeshard-ut_auditsettings cpp-malloc-jemalloc ) -vcs_info(ydb-core-tx-schemeshard-ut_pq) +vcs_info(ydb-core-tx-schemeshard-ut_auditsettings) diff --git a/ydb/core/tx/schemeshard/ut_pq/CMakeLists.linux-x86_64.txt b/ydb/core/tx/schemeshard/ut_auditsettings/CMakeLists.linux-x86_64.txt index 484e55fe5d..b152b4143d 100644 --- a/ydb/core/tx/schemeshard/ut_pq/CMakeLists.linux-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_auditsettings/CMakeLists.linux-x86_64.txt @@ -7,11 +7,14 @@ -add_executable(ydb-core-tx-schemeshard-ut_pq) -target_include_directories(ydb-core-tx-schemeshard-ut_pq PRIVATE +add_executable(ydb-core-tx-schemeshard-ut_auditsettings) +target_compile_options(ydb-core-tx-schemeshard-ut_auditsettings PRIVATE + -DUSE_CURRENT_UDF_ABI_VERSION +) +target_include_directories(ydb-core-tx-schemeshard-ut_auditsettings PRIVATE ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard ) -target_link_libraries(ydb-core-tx-schemeshard-ut_pq PUBLIC +target_link_libraries(ydb-core-tx-schemeshard-ut_auditsettings PUBLIC contrib-libs-linux-headers contrib-libs-cxxsupp yutil @@ -24,9 +27,8 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_pq PUBLIC core-testlib-default ydb-core-tx tx-schemeshard-ut_helpers - udf-service-exception_policy ) -target_link_options(ydb-core-tx-schemeshard-ut_pq PRIVATE +target_link_options(ydb-core-tx-schemeshard-ut_auditsettings PRIVATE -ldl -lrt -Wl,--no-as-needed @@ -36,21 +38,21 @@ target_link_options(ydb-core-tx-schemeshard-ut_pq PRIVATE -lrt -ldl ) -target_sources(ydb-core-tx-schemeshard-ut_pq PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_pq.cpp +target_sources(ydb-core-tx-schemeshard-ut_auditsettings PRIVATE + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_auditsettings/ut_auditsettings.cpp ) set_property( TARGET - ydb-core-tx-schemeshard-ut_pq + ydb-core-tx-schemeshard-ut_auditsettings PROPERTY SPLIT_FACTOR 10 ) add_yunittest( NAME - ydb-core-tx-schemeshard-ut_pq + ydb-core-tx-schemeshard-ut_auditsettings TEST_TARGET - ydb-core-tx-schemeshard-ut_pq + ydb-core-tx-schemeshard-ut_auditsettings TEST_ARG --print-before-suite --print-before-test @@ -60,27 +62,27 @@ add_yunittest( ) set_yunittest_property( TEST - ydb-core-tx-schemeshard-ut_pq + ydb-core-tx-schemeshard-ut_auditsettings PROPERTY LABELS MEDIUM ) set_yunittest_property( TEST - ydb-core-tx-schemeshard-ut_pq + ydb-core-tx-schemeshard-ut_auditsettings PROPERTY PROCESSORS 1 ) set_yunittest_property( TEST - ydb-core-tx-schemeshard-ut_pq + ydb-core-tx-schemeshard-ut_auditsettings PROPERTY TIMEOUT - 600 + 60 ) -target_allocator(ydb-core-tx-schemeshard-ut_pq +target_allocator(ydb-core-tx-schemeshard-ut_auditsettings cpp-malloc-tcmalloc libs-tcmalloc-no_percpu_cache ) -vcs_info(ydb-core-tx-schemeshard-ut_pq) +vcs_info(ydb-core-tx-schemeshard-ut_auditsettings) diff --git a/ydb/core/tx/schemeshard/ut_pq/CMakeLists.txt b/ydb/core/tx/schemeshard/ut_auditsettings/CMakeLists.txt index f8b31df0c1..f8b31df0c1 100644 --- a/ydb/core/tx/schemeshard/ut_pq/CMakeLists.txt +++ b/ydb/core/tx/schemeshard/ut_auditsettings/CMakeLists.txt diff --git a/ydb/core/tx/schemeshard/ut_pq/CMakeLists.darwin-x86_64.txt b/ydb/core/tx/schemeshard/ut_auditsettings/CMakeLists.windows-x86_64.txt index 5795aa46b1..deae92b8dd 100644 --- a/ydb/core/tx/schemeshard/ut_pq/CMakeLists.darwin-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_auditsettings/CMakeLists.windows-x86_64.txt @@ -7,11 +7,14 @@ -add_executable(ydb-core-tx-schemeshard-ut_pq) -target_include_directories(ydb-core-tx-schemeshard-ut_pq PRIVATE +add_executable(ydb-core-tx-schemeshard-ut_auditsettings) +target_compile_options(ydb-core-tx-schemeshard-ut_auditsettings PRIVATE + -DUSE_CURRENT_UDF_ABI_VERSION +) +target_include_directories(ydb-core-tx-schemeshard-ut_auditsettings PRIVATE ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard ) -target_link_libraries(ydb-core-tx-schemeshard-ut_pq PUBLIC +target_link_libraries(ydb-core-tx-schemeshard-ut_auditsettings PUBLIC contrib-libs-cxxsupp yutil library-cpp-cpuid_check @@ -23,30 +26,22 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_pq PUBLIC core-testlib-default ydb-core-tx tx-schemeshard-ut_helpers - udf-service-exception_policy -) -target_link_options(ydb-core-tx-schemeshard-ut_pq PRIVATE - -Wl,-platform_version,macos,11.0,11.0 - -fPIC - -fPIC - -framework - CoreFoundation ) -target_sources(ydb-core-tx-schemeshard-ut_pq PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_pq.cpp +target_sources(ydb-core-tx-schemeshard-ut_auditsettings PRIVATE + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_auditsettings/ut_auditsettings.cpp ) set_property( TARGET - ydb-core-tx-schemeshard-ut_pq + ydb-core-tx-schemeshard-ut_auditsettings PROPERTY SPLIT_FACTOR 10 ) add_yunittest( NAME - ydb-core-tx-schemeshard-ut_pq + ydb-core-tx-schemeshard-ut_auditsettings TEST_TARGET - ydb-core-tx-schemeshard-ut_pq + ydb-core-tx-schemeshard-ut_auditsettings TEST_ARG --print-before-suite --print-before-test @@ -56,26 +51,26 @@ add_yunittest( ) set_yunittest_property( TEST - ydb-core-tx-schemeshard-ut_pq + ydb-core-tx-schemeshard-ut_auditsettings PROPERTY LABELS MEDIUM ) set_yunittest_property( TEST - ydb-core-tx-schemeshard-ut_pq + ydb-core-tx-schemeshard-ut_auditsettings PROPERTY PROCESSORS 1 ) set_yunittest_property( TEST - ydb-core-tx-schemeshard-ut_pq + ydb-core-tx-schemeshard-ut_auditsettings PROPERTY TIMEOUT - 600 + 60 ) -target_allocator(ydb-core-tx-schemeshard-ut_pq +target_allocator(ydb-core-tx-schemeshard-ut_auditsettings system_allocator ) -vcs_info(ydb-core-tx-schemeshard-ut_pq) +vcs_info(ydb-core-tx-schemeshard-ut_auditsettings) diff --git a/ydb/core/tx/schemeshard/ut_auditsettings/ut_auditsettings.cpp b/ydb/core/tx/schemeshard/ut_auditsettings/ut_auditsettings.cpp new file mode 100644 index 0000000000..ec1ac722a5 --- /dev/null +++ b/ydb/core/tx/schemeshard/ut_auditsettings/ut_auditsettings.cpp @@ -0,0 +1,344 @@ +#include <ydb/core/tx/schemeshard/ut_helpers/helpers.h> + +using namespace NKikimr; +using namespace NSchemeShard; +using namespace NSchemeShardUT_Private; + +namespace { + +template <class T> +T MessageFromText(const TString& text) { + T msg; + UNIT_ASSERT_C(google::protobuf::TextFormat::ParseFromString(text, &msg), "Invalid protobuf message text"); + return msg; +} + +bool AuditSettingsCompare(TString* diff, const NKikimrSubDomains::TAuditSettings& a, const NKikimrSubDomains::TAuditSettings& b) { + google::protobuf::util::MessageDifferencer d; + d.ReportDifferencesToString(diff); + d.TreatAsSet(NKikimrSubDomains::TAuditSettings::GetDescriptor()->FindFieldByName("ExpectedSubjects")); + return d.Compare(a, b); +} + +} // anonymous namespace + +Y_UNIT_TEST_SUITE(TSchemeShardAuditSettings) { + + const std::vector<TString> CreateTestParams = { + R"()", + R"(AuditSettings { EnableDmlAudit: false })", + R"(AuditSettings { EnableDmlAudit: true })", + R"(AuditSettings { EnableDmlAudit: false ExpectedSubjects: ["A", "B"] })", + R"(AuditSettings { EnableDmlAudit: true ExpectedSubjects: ["A", "B"] })", + R"(AuditSettings { EnableDmlAudit: true ExpectedSubjects: ["A", "A"] })", + }; + + Y_UNIT_TEST(CreateExtSubdomain) { + TTestBasicRuntime runtime; + TTestEnv env(runtime); + ui64 txId = 100; + + auto test = [&](const TStringBuf& auditSettingsFragment, const NKikimrSubDomains::TAuditSettings& expected) { + TestCreateExtSubDomain(runtime, ++txId, "/MyRoot", TString::Join( + R"( + Name: "USER_0" + )", + auditSettingsFragment + )); + env.TestWaitNotification(runtime, txId); + + auto actual = DescribePath(runtime, "/MyRoot/USER_0") + .GetPathDescription() + .GetDomainDescription() + .GetAuditSettings() + ; + + TString diff; + UNIT_ASSERT_C(AuditSettingsCompare(&diff, expected, actual), "FAILED for '" << auditSettingsFragment << "': " << diff); + + TestForceDropExtSubDomain(runtime, ++txId, "/MyRoot", "USER_0"); + env.TestWaitNotification(runtime, txId); + }; + + // for all variations expect returned TAuditSettings equal (or equivalent) to the original input + for (const auto& i : CreateTestParams) { + Cerr << "TEST CreateExtSubdomain, '" << i << "'" << Endl; + test(i, MessageFromText<NKikimrSubDomains::TDomainDescription>(i).GetAuditSettings()); + } + } + + Y_UNIT_TEST(CreateSubdomain) { + TTestBasicRuntime runtime; + TTestEnv env(runtime); + ui64 txId = 100; + + auto test = [&](const TStringBuf& auditSettingsFragment, const NKikimrSubDomains::TAuditSettings& expected) { + TestCreateSubDomain(runtime, ++txId, "/MyRoot", TString::Join( + R"( + Name: "USER_0" + )", + auditSettingsFragment + )); + env.TestWaitNotification(runtime, txId); + + auto actual = DescribePath(runtime, "/MyRoot/USER_0") + .GetPathDescription() + .GetDomainDescription() + .GetAuditSettings() + ; + + TString diff; + UNIT_ASSERT_C(AuditSettingsCompare(&diff, expected, actual), "FAILED for '" << auditSettingsFragment << "': " << diff); + + TestForceDropSubDomain(runtime, ++txId, "/MyRoot", "USER_0"); + env.TestWaitNotification(runtime, txId); + }; + + // for all variations expect returned TAuditSettings equal (or equivalent) to the original input + for (const auto& i : CreateTestParams) { + Cerr << "TEST CreateSubdomain, '" << i << "'" << Endl; + test(i, MessageFromText<NKikimrSubDomains::TDomainDescription>(i).GetAuditSettings()); + } + } + + struct TAlterTestParam { + TString AtCreate; + TString AtAlter; + TString Expected; + }; + std::vector<TAlterTestParam> AlterTestParams = { + // Alter can set AuditSettings + { + .AtCreate = R"()", + .AtAlter = R"()", + .Expected = R"()", + }, + { + .AtCreate = R"()", + .AtAlter = R"(AuditSettings { EnableDmlAudit: false })", + .Expected = R"(AuditSettings { EnableDmlAudit: false })", + }, + { + .AtCreate = R"()", + .AtAlter = R"(AuditSettings { EnableDmlAudit: true })", + .Expected = R"(AuditSettings { EnableDmlAudit: true })", + }, + { + .AtCreate = R"()", + .AtAlter = R"(AuditSettings { EnableDmlAudit: false ExpectedSubjects: ["A", "B"] })", + .Expected = R"(AuditSettings { EnableDmlAudit: false ExpectedSubjects: ["A", "B"] })", + }, + { + .AtCreate = R"()", + .AtAlter = R"(AuditSettings { EnableDmlAudit: true ExpectedSubjects: ["A", "B"] })", + .Expected = R"(AuditSettings { EnableDmlAudit: true ExpectedSubjects: ["A", "B"] })", + }, + { + .AtCreate = R"()", + .AtAlter = R"(AuditSettings { EnableDmlAudit: true ExpectedSubjects: ["A", "A"] })", + .Expected = R"(AuditSettings { EnableDmlAudit: true ExpectedSubjects: ["A", "A"] })", + }, + // Alter doesn't drop existing AuditSettings + { + .AtCreate = R"(AuditSettings { EnableDmlAudit: false })", + .AtAlter = R"()", + .Expected = R"(AuditSettings { EnableDmlAudit: false })", + }, + { + .AtCreate = R"(AuditSettings { EnableDmlAudit: true })", + .AtAlter = R"()", + .Expected = R"(AuditSettings { EnableDmlAudit: true })", + }, + { + .AtCreate = R"(AuditSettings { EnableDmlAudit: false ExpectedSubjects: ["A", "B"] })", + .AtAlter = R"()", + .Expected = R"(AuditSettings { EnableDmlAudit: false ExpectedSubjects: ["A", "B"] })", + }, + { + .AtCreate = R"(AuditSettings { EnableDmlAudit: true ExpectedSubjects: ["A", "B"] })", + .AtAlter = R"()", + .Expected = R"(AuditSettings { EnableDmlAudit: true ExpectedSubjects: ["A", "B"] })", + }, + // EnableDmlAudit changes independently of ExpectedSubjects + { + .AtCreate = R"(AuditSettings { EnableDmlAudit: false })", + .AtAlter = R"(AuditSettings { EnableDmlAudit: true })", + .Expected = R"(AuditSettings { EnableDmlAudit: true })", + }, + { + .AtCreate = R"(AuditSettings { EnableDmlAudit: true })", + .AtAlter = R"(AuditSettings { EnableDmlAudit: false })", + .Expected = R"(AuditSettings { EnableDmlAudit: false })", + }, + { + .AtCreate = R"(AuditSettings { EnableDmlAudit: false ExpectedSubjects: ["A", "B"] })", + .AtAlter = R"(AuditSettings { EnableDmlAudit: true })", + .Expected = R"(AuditSettings { EnableDmlAudit: true ExpectedSubjects: ["A", "B"] })", + }, + { + .AtCreate = R"(AuditSettings { EnableDmlAudit: true ExpectedSubjects: ["A", "B"] })", + .AtAlter = R"(AuditSettings { EnableDmlAudit: false })", + .Expected = R"(AuditSettings { EnableDmlAudit: false ExpectedSubjects: ["A", "B"] })", + }, + // ExpectedSubjects can be added independently of EnableDmlAudit + { + .AtCreate = R"(AuditSettings { EnableDmlAudit: false })", + .AtAlter = R"(AuditSettings { ExpectedSubjects: ["A", "B"] })", + .Expected = R"(AuditSettings { EnableDmlAudit: false ExpectedSubjects: ["A", "B"] })", + }, + { + .AtCreate = R"(AuditSettings { EnableDmlAudit: true })", + .AtAlter = R"(AuditSettings { ExpectedSubjects: ["A", "B"] })", + .Expected = R"(AuditSettings { EnableDmlAudit: true ExpectedSubjects: ["A", "B"] })", + }, + // ExpectedSubjects can be removed independently of EnableDmlAudit + { + .AtCreate = R"(AuditSettings { EnableDmlAudit: false ExpectedSubjects: ["A", "B"] })", + .AtAlter = R"(AuditSettings { ExpectedSubjects: [""] })", + .Expected = R"(AuditSettings { EnableDmlAudit: false })", + }, + { + .AtCreate = R"(AuditSettings { EnableDmlAudit: true ExpectedSubjects: ["A", "B"] })", + .AtAlter = R"(AuditSettings { ExpectedSubjects: [""] })", + .Expected = R"(AuditSettings { EnableDmlAudit: true })", + }, + // ExpectedSubjects can be changed independently of EnableDmlAudit + { + .AtCreate = R"(AuditSettings { EnableDmlAudit: false ExpectedSubjects: ["A", "B"] })", + .AtAlter = R"(AuditSettings { ExpectedSubjects: ["A"] })", + .Expected = R"(AuditSettings { EnableDmlAudit: false ExpectedSubjects: ["A"] })", + }, + { + .AtCreate = R"(AuditSettings { EnableDmlAudit: true ExpectedSubjects: ["A", "B"] })", + .AtAlter = R"(AuditSettings { ExpectedSubjects: ["A"] })", + .Expected = R"(AuditSettings { EnableDmlAudit: true ExpectedSubjects: ["A"] })", + }, + { + .AtCreate = R"(AuditSettings { EnableDmlAudit: false ExpectedSubjects: ["A"] })", + .AtAlter = R"(AuditSettings { ExpectedSubjects: ["A", "B"] })", + .Expected = R"(AuditSettings { EnableDmlAudit: false ExpectedSubjects: ["A", "B"] })", + }, + { + .AtCreate = R"(AuditSettings { EnableDmlAudit: true ExpectedSubjects: ["A"] })", + .AtAlter = R"(AuditSettings { ExpectedSubjects: ["A", "B"] })", + .Expected = R"(AuditSettings { EnableDmlAudit: true ExpectedSubjects: ["A", "B"] })", + }, + // Empty subjects are removed + { + .AtCreate = R"(AuditSettings { ExpectedSubjects: ["A"] })", + .AtAlter = R"(AuditSettings { ExpectedSubjects: ["", "B"] })", + .Expected = R"(AuditSettings { ExpectedSubjects: ["B"] })", + }, + { + .AtCreate = R"(AuditSettings { ExpectedSubjects: ["A", "B"] })", + .AtAlter = R"(AuditSettings { ExpectedSubjects: ["", "", "C", ""] })", + .Expected = R"(AuditSettings { ExpectedSubjects: ["C"] })", + }, + // EnableDmlAudit and ExpectedSubjects could be changed both + { + .AtCreate = R"(AuditSettings { EnableDmlAudit: false ExpectedSubjects: ["A", "B"] })", + .AtAlter = R"(AuditSettings { EnableDmlAudit: true ExpectedSubjects: ["C", "D"] })", + .Expected = R"(AuditSettings { EnableDmlAudit: true ExpectedSubjects: ["C", "D"] })", + }, + }; + + Y_UNIT_TEST_FLAG(AlterExtSubdomain, ExternalSchemeShard) { + TTestBasicRuntime runtime; + TTestEnv env(runtime); + ui64 txId = 100; + + TString externalSchemeshard; + if (ExternalSchemeShard) { + externalSchemeshard = R"( + ExternalSchemeShard: true + PlanResolution: 50 + Coordinators: 1 + Mediators: 1 + TimeCastBucketsPerMediator: 2 + StoragePools { + Name: "pool-1" + Kind: "hdd" + } + )"; + } + + auto test = [&](const TStringBuf& atCreate, const TStringBuf& atAlter, const NKikimrSubDomains::TAuditSettings& expected) { + TestCreateExtSubDomain(runtime, ++txId, "/MyRoot", TString::Join( + R"( + Name: "USER_0" + )", + atCreate + )); + TestAlterExtSubDomain(runtime, ++txId, "/MyRoot", TString::Join( + R"( + Name: "USER_0" + )", + externalSchemeshard, + atAlter + )); + env.TestWaitNotification(runtime, {txId, txId - 1}); + + const auto& describe = DescribePath(runtime, "/MyRoot/USER_0"); + + auto actual = describe.GetPathDescription().GetDomainDescription().GetAuditSettings(); + TString diff; + UNIT_ASSERT_C(AuditSettingsCompare(&diff, expected, actual), "(at root) FAILED for '" << atCreate << "' + '" << atAlter << "': " << diff); + + if (ExternalSchemeShard) { + // check auditSettings at tenant schemeshard also + ui64 tenantSchemeShard = describe.GetPathDescription().GetDomainDescription().GetProcessingParams().GetSchemeShard(); + const auto& describe = DescribePath(runtime, tenantSchemeShard, "/MyRoot/USER_0"); + + auto actual = describe.GetPathDescription().GetDomainDescription().GetAuditSettings(); + TString diff; + UNIT_ASSERT_C(AuditSettingsCompare(&diff, expected, actual), "(at tenant) FAILED for '" << atCreate << "' + '" << atAlter << "': " << diff); + } + + TestForceDropExtSubDomain(runtime, ++txId, "/MyRoot", "USER_0"); + env.TestWaitNotification(runtime, txId); + }; + + // for all variations match actual returned TAuditSettings to expected + for (const auto& [atCreate, atAlter, expected] : AlterTestParams) { + Cerr << "TEST AlterExtSubdomain, '" << atCreate << "' + '" << atAlter << "'" << Endl; + test(atCreate, atAlter, MessageFromText<NKikimrSubDomains::TDomainDescription>(expected).GetAuditSettings()); + } + } + + Y_UNIT_TEST(AlterSubdomain) { + TTestBasicRuntime runtime; + TTestEnv env(runtime); + ui64 txId = 100; + + auto test = [&](const TStringBuf& atCreate, const TStringBuf& atAlter, const NKikimrSubDomains::TAuditSettings& expected) { + TestCreateSubDomain(runtime, ++txId, "/MyRoot", TString::Join( + R"( + Name: "USER_0" + )", + atCreate + )); + TestAlterSubDomain(runtime, ++txId, "/MyRoot", TString::Join( + R"( + Name: "USER_0" + )", + atAlter + )); + env.TestWaitNotification(runtime, {txId, txId - 1}); + + const auto& describe = DescribePath(runtime, "/MyRoot/USER_0"); + + auto actual = describe.GetPathDescription().GetDomainDescription().GetAuditSettings(); + TString diff; + UNIT_ASSERT_C(AuditSettingsCompare(&diff, expected, actual), "(at root) FAILED for '" << atCreate << "' + '" << atAlter << "': " << diff); + + TestForceDropSubDomain(runtime, ++txId, "/MyRoot", "USER_0"); + env.TestWaitNotification(runtime, txId); + }; + + // for all variations match actual returned TAuditSettings to expected + for (const auto& [atCreate, atAlter, expected] : AlterTestParams) { + Cerr << "TEST AlterSubdomain, '" << atCreate << "' + '" << atAlter << "'" << Endl; + test(atCreate, atAlter, MessageFromText<NKikimrSubDomains::TDomainDescription>(expected).GetAuditSettings()); + } + } +} diff --git a/ydb/core/tx/schemeshard/ut_pq/ya.make b/ydb/core/tx/schemeshard/ut_auditsettings/ya.make index f10ecb9fd7..3136e829b4 100644 --- a/ydb/core/tx/schemeshard/ut_pq/ya.make +++ b/ydb/core/tx/schemeshard/ut_auditsettings/ya.make @@ -2,14 +2,12 @@ UNITTEST_FOR(ydb/core/tx/schemeshard) FORK_SUBTESTS() -SPLIT_FACTOR(10) - IF (SANITIZER_TYPE OR WITH_VALGRIND) TIMEOUT(3600) SIZE(LARGE) TAG(ya:fat) ELSE() - TIMEOUT(600) + TIMEOUT(60) SIZE(MEDIUM) ENDIF() @@ -20,11 +18,13 @@ PEERDIR( ydb/core/testlib/default ydb/core/tx ydb/core/tx/schemeshard/ut_helpers - ydb/library/yql/public/udf/service/exception_policy + # ydb/library/yql/public/udf/service/exception_policy ) +YQL_LAST_ABI_VERSION() + SRCS( - ut_pq.cpp + ut_auditsettings.cpp ) END() diff --git a/ydb/core/tx/schemeshard/ut_backup/CMakeLists.darwin-x86_64.txt b/ydb/core/tx/schemeshard/ut_backup/CMakeLists.darwin-x86_64.txt index 4c4e447fb4..c0e416f9e2 100644 --- a/ydb/core/tx/schemeshard/ut_backup/CMakeLists.darwin-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_backup/CMakeLists.darwin-x86_64.txt @@ -37,7 +37,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_backup PRIVATE CoreFoundation ) target_sources(ydb-core-tx-schemeshard-ut_backup PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_backup.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_backup/ut_backup.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_backup/CMakeLists.linux-aarch64.txt b/ydb/core/tx/schemeshard/ut_backup/CMakeLists.linux-aarch64.txt index f9d5a21199..cfd13a84a1 100644 --- a/ydb/core/tx/schemeshard/ut_backup/CMakeLists.linux-aarch64.txt +++ b/ydb/core/tx/schemeshard/ut_backup/CMakeLists.linux-aarch64.txt @@ -40,7 +40,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_backup PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_backup PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_backup.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_backup/ut_backup.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_backup/CMakeLists.linux-x86_64.txt b/ydb/core/tx/schemeshard/ut_backup/CMakeLists.linux-x86_64.txt index 9a56f2e112..cb86ed4385 100644 --- a/ydb/core/tx/schemeshard/ut_backup/CMakeLists.linux-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_backup/CMakeLists.linux-x86_64.txt @@ -41,7 +41,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_backup PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_backup PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_backup.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_backup/ut_backup.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_backup.cpp b/ydb/core/tx/schemeshard/ut_backup/ut_backup.cpp index e59b0e1592..e59b0e1592 100644 --- a/ydb/core/tx/schemeshard/ut_backup.cpp +++ b/ydb/core/tx/schemeshard/ut_backup/ut_backup.cpp diff --git a/ydb/core/tx/schemeshard/ut_base/CMakeLists.darwin-x86_64.txt b/ydb/core/tx/schemeshard/ut_base/CMakeLists.darwin-x86_64.txt index cd0ddb6b49..a6e1cbfa68 100644 --- a/ydb/core/tx/schemeshard/ut_base/CMakeLists.darwin-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_base/CMakeLists.darwin-x86_64.txt @@ -37,9 +37,9 @@ target_link_options(ydb-core-tx-schemeshard-ut_base PRIVATE CoreFoundation ) target_sources(ydb-core-tx-schemeshard-ut_base PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_base.cpp - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_info_types.cpp - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_allocate_pq.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_base/ut_base.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_base/ut_info_types.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_base/ut_allocate_pq.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_base/CMakeLists.linux-aarch64.txt b/ydb/core/tx/schemeshard/ut_base/CMakeLists.linux-aarch64.txt index 752cc4383c..b07c721714 100644 --- a/ydb/core/tx/schemeshard/ut_base/CMakeLists.linux-aarch64.txt +++ b/ydb/core/tx/schemeshard/ut_base/CMakeLists.linux-aarch64.txt @@ -40,9 +40,9 @@ target_link_options(ydb-core-tx-schemeshard-ut_base PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_base PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_base.cpp - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_info_types.cpp - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_allocate_pq.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_base/ut_base.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_base/ut_info_types.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_base/ut_allocate_pq.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_base/CMakeLists.linux-x86_64.txt b/ydb/core/tx/schemeshard/ut_base/CMakeLists.linux-x86_64.txt index f6c97cabb3..c7720356f2 100644 --- a/ydb/core/tx/schemeshard/ut_base/CMakeLists.linux-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_base/CMakeLists.linux-x86_64.txt @@ -41,9 +41,9 @@ target_link_options(ydb-core-tx-schemeshard-ut_base PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_base PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_base.cpp - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_info_types.cpp - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_allocate_pq.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_base/ut_base.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_base/ut_info_types.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_base/ut_allocate_pq.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_base/CMakeLists.windows-x86_64.txt b/ydb/core/tx/schemeshard/ut_base/CMakeLists.windows-x86_64.txt index 0377a93dbe..69cb46db0d 100644 --- a/ydb/core/tx/schemeshard/ut_base/CMakeLists.windows-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_base/CMakeLists.windows-x86_64.txt @@ -30,9 +30,9 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_base PUBLIC udf-service-exception_policy ) target_sources(ydb-core-tx-schemeshard-ut_base PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_base.cpp - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_info_types.cpp - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_allocate_pq.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_base/ut_base.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_base/ut_info_types.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_base/ut_allocate_pq.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_allocate_pq.cpp b/ydb/core/tx/schemeshard/ut_base/ut_allocate_pq.cpp index 2e63c43d5c..2e63c43d5c 100644 --- a/ydb/core/tx/schemeshard/ut_allocate_pq.cpp +++ b/ydb/core/tx/schemeshard/ut_base/ut_allocate_pq.cpp diff --git a/ydb/core/tx/schemeshard/ut_base.cpp b/ydb/core/tx/schemeshard/ut_base/ut_base.cpp index cce8f5bc2e..cce8f5bc2e 100644 --- a/ydb/core/tx/schemeshard/ut_base.cpp +++ b/ydb/core/tx/schemeshard/ut_base/ut_base.cpp diff --git a/ydb/core/tx/schemeshard/ut_info_types.cpp b/ydb/core/tx/schemeshard/ut_base/ut_info_types.cpp index 9eaf3a7796..9eaf3a7796 100644 --- a/ydb/core/tx/schemeshard/ut_info_types.cpp +++ b/ydb/core/tx/schemeshard/ut_base/ut_info_types.cpp diff --git a/ydb/core/tx/schemeshard/ut_base_reboots/CMakeLists.darwin-x86_64.txt b/ydb/core/tx/schemeshard/ut_base_reboots/CMakeLists.darwin-x86_64.txt index 0971cf1ca7..4f8f78098b 100644 --- a/ydb/core/tx/schemeshard/ut_base_reboots/CMakeLists.darwin-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_base_reboots/CMakeLists.darwin-x86_64.txt @@ -36,8 +36,8 @@ target_link_options(ydb-core-tx-schemeshard-ut_base_reboots PRIVATE CoreFoundation ) target_sources(ydb-core-tx-schemeshard-ut_base_reboots PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_base_reboots.cpp - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_allocate_reboot_pq.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_base_reboots/ut_base_reboots.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_base_reboots/ut_allocate_reboot_pq.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_base_reboots/CMakeLists.linux-aarch64.txt b/ydb/core/tx/schemeshard/ut_base_reboots/CMakeLists.linux-aarch64.txt index 8ffd20e775..8df7cf47ae 100644 --- a/ydb/core/tx/schemeshard/ut_base_reboots/CMakeLists.linux-aarch64.txt +++ b/ydb/core/tx/schemeshard/ut_base_reboots/CMakeLists.linux-aarch64.txt @@ -39,8 +39,8 @@ target_link_options(ydb-core-tx-schemeshard-ut_base_reboots PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_base_reboots PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_base_reboots.cpp - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_allocate_reboot_pq.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_base_reboots/ut_base_reboots.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_base_reboots/ut_allocate_reboot_pq.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_base_reboots/CMakeLists.linux-x86_64.txt b/ydb/core/tx/schemeshard/ut_base_reboots/CMakeLists.linux-x86_64.txt index cedcb65269..7fcc4fee52 100644 --- a/ydb/core/tx/schemeshard/ut_base_reboots/CMakeLists.linux-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_base_reboots/CMakeLists.linux-x86_64.txt @@ -40,8 +40,8 @@ target_link_options(ydb-core-tx-schemeshard-ut_base_reboots PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_base_reboots PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_base_reboots.cpp - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_allocate_reboot_pq.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_base_reboots/ut_base_reboots.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_base_reboots/ut_allocate_reboot_pq.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_base_reboots/CMakeLists.windows-x86_64.txt b/ydb/core/tx/schemeshard/ut_base_reboots/CMakeLists.windows-x86_64.txt index 7317f31f15..8d0162ea8a 100644 --- a/ydb/core/tx/schemeshard/ut_base_reboots/CMakeLists.windows-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_base_reboots/CMakeLists.windows-x86_64.txt @@ -29,8 +29,8 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_base_reboots PUBLIC udf-service-exception_policy ) target_sources(ydb-core-tx-schemeshard-ut_base_reboots PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_base_reboots.cpp - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_allocate_reboot_pq.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_base_reboots/ut_base_reboots.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_base_reboots/ut_allocate_reboot_pq.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_allocate_reboot_pq.cpp b/ydb/core/tx/schemeshard/ut_base_reboots/ut_allocate_reboot_pq.cpp index ea52dca369..ea52dca369 100644 --- a/ydb/core/tx/schemeshard/ut_allocate_reboot_pq.cpp +++ b/ydb/core/tx/schemeshard/ut_base_reboots/ut_allocate_reboot_pq.cpp diff --git a/ydb/core/tx/schemeshard/ut_base_reboots.cpp b/ydb/core/tx/schemeshard/ut_base_reboots/ut_base_reboots.cpp index 89d0fe9b8d..89d0fe9b8d 100644 --- a/ydb/core/tx/schemeshard/ut_base_reboots.cpp +++ b/ydb/core/tx/schemeshard/ut_base_reboots/ut_base_reboots.cpp diff --git a/ydb/core/tx/schemeshard/ut_bsvolume/CMakeLists.darwin-x86_64.txt b/ydb/core/tx/schemeshard/ut_bsvolume/CMakeLists.darwin-x86_64.txt index 51a59eb48b..e977234dea 100644 --- a/ydb/core/tx/schemeshard/ut_bsvolume/CMakeLists.darwin-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_bsvolume/CMakeLists.darwin-x86_64.txt @@ -36,7 +36,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_bsvolume PRIVATE CoreFoundation ) target_sources(ydb-core-tx-schemeshard-ut_bsvolume PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_bsvolume.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_bsvolume/ut_bsvolume.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_bsvolume/CMakeLists.linux-aarch64.txt b/ydb/core/tx/schemeshard/ut_bsvolume/CMakeLists.linux-aarch64.txt index 0c277b41a4..03f4a2753e 100644 --- a/ydb/core/tx/schemeshard/ut_bsvolume/CMakeLists.linux-aarch64.txt +++ b/ydb/core/tx/schemeshard/ut_bsvolume/CMakeLists.linux-aarch64.txt @@ -39,7 +39,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_bsvolume PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_bsvolume PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_bsvolume.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_bsvolume/ut_bsvolume.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_bsvolume/CMakeLists.linux-x86_64.txt b/ydb/core/tx/schemeshard/ut_bsvolume/CMakeLists.linux-x86_64.txt index 2572002a60..8fa4eaba59 100644 --- a/ydb/core/tx/schemeshard/ut_bsvolume/CMakeLists.linux-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_bsvolume/CMakeLists.linux-x86_64.txt @@ -40,7 +40,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_bsvolume PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_bsvolume PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_bsvolume.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_bsvolume/ut_bsvolume.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_bsvolume/CMakeLists.windows-x86_64.txt b/ydb/core/tx/schemeshard/ut_bsvolume/CMakeLists.windows-x86_64.txt index 408aba55cf..3e057cdb91 100644 --- a/ydb/core/tx/schemeshard/ut_bsvolume/CMakeLists.windows-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_bsvolume/CMakeLists.windows-x86_64.txt @@ -29,7 +29,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_bsvolume PUBLIC udf-service-exception_policy ) target_sources(ydb-core-tx-schemeshard-ut_bsvolume PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_bsvolume.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_bsvolume/ut_bsvolume.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_bsvolume.cpp b/ydb/core/tx/schemeshard/ut_bsvolume/ut_bsvolume.cpp index 4bcc51a200..4bcc51a200 100644 --- a/ydb/core/tx/schemeshard/ut_bsvolume.cpp +++ b/ydb/core/tx/schemeshard/ut_bsvolume/ut_bsvolume.cpp diff --git a/ydb/core/tx/schemeshard/ut_bsvolume_reboots/CMakeLists.darwin-x86_64.txt b/ydb/core/tx/schemeshard/ut_bsvolume_reboots/CMakeLists.darwin-x86_64.txt index 4a5c8a24d5..0e2f73a046 100644 --- a/ydb/core/tx/schemeshard/ut_bsvolume_reboots/CMakeLists.darwin-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_bsvolume_reboots/CMakeLists.darwin-x86_64.txt @@ -36,7 +36,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_bsvolume_reboots PRIVATE CoreFoundation ) target_sources(ydb-core-tx-schemeshard-ut_bsvolume_reboots PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_bsvolume_reboots.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_bsvolume_reboots/ut_bsvolume_reboots.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_bsvolume_reboots/CMakeLists.linux-aarch64.txt b/ydb/core/tx/schemeshard/ut_bsvolume_reboots/CMakeLists.linux-aarch64.txt index 00c605e781..e9af993901 100644 --- a/ydb/core/tx/schemeshard/ut_bsvolume_reboots/CMakeLists.linux-aarch64.txt +++ b/ydb/core/tx/schemeshard/ut_bsvolume_reboots/CMakeLists.linux-aarch64.txt @@ -39,7 +39,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_bsvolume_reboots PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_bsvolume_reboots PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_bsvolume_reboots.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_bsvolume_reboots/ut_bsvolume_reboots.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_bsvolume_reboots/CMakeLists.linux-x86_64.txt b/ydb/core/tx/schemeshard/ut_bsvolume_reboots/CMakeLists.linux-x86_64.txt index 86729c528f..3c6eb50071 100644 --- a/ydb/core/tx/schemeshard/ut_bsvolume_reboots/CMakeLists.linux-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_bsvolume_reboots/CMakeLists.linux-x86_64.txt @@ -40,7 +40,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_bsvolume_reboots PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_bsvolume_reboots PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_bsvolume_reboots.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_bsvolume_reboots/ut_bsvolume_reboots.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_bsvolume_reboots/CMakeLists.windows-x86_64.txt b/ydb/core/tx/schemeshard/ut_bsvolume_reboots/CMakeLists.windows-x86_64.txt index 598c79bf81..72b6ce4e08 100644 --- a/ydb/core/tx/schemeshard/ut_bsvolume_reboots/CMakeLists.windows-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_bsvolume_reboots/CMakeLists.windows-x86_64.txt @@ -29,7 +29,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_bsvolume_reboots PUBLIC udf-service-exception_policy ) target_sources(ydb-core-tx-schemeshard-ut_bsvolume_reboots PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_bsvolume_reboots.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_bsvolume_reboots/ut_bsvolume_reboots.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_bsvolume_reboots.cpp b/ydb/core/tx/schemeshard/ut_bsvolume_reboots/ut_bsvolume_reboots.cpp index 22ac155469..22ac155469 100644 --- a/ydb/core/tx/schemeshard/ut_bsvolume_reboots.cpp +++ b/ydb/core/tx/schemeshard/ut_bsvolume_reboots/ut_bsvolume_reboots.cpp diff --git a/ydb/core/tx/schemeshard/ut_cdc_stream/CMakeLists.darwin-x86_64.txt b/ydb/core/tx/schemeshard/ut_cdc_stream/CMakeLists.darwin-x86_64.txt index c6e516760b..5dda4e327e 100644 --- a/ydb/core/tx/schemeshard/ut_cdc_stream/CMakeLists.darwin-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_cdc_stream/CMakeLists.darwin-x86_64.txt @@ -32,7 +32,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_cdc_stream PRIVATE CoreFoundation ) target_sources(ydb-core-tx-schemeshard-ut_cdc_stream PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_cdc_stream.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_cdc_stream/ut_cdc_stream.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_cdc_stream/CMakeLists.linux-aarch64.txt b/ydb/core/tx/schemeshard/ut_cdc_stream/CMakeLists.linux-aarch64.txt index 0c38ac2d15..d5b175938a 100644 --- a/ydb/core/tx/schemeshard/ut_cdc_stream/CMakeLists.linux-aarch64.txt +++ b/ydb/core/tx/schemeshard/ut_cdc_stream/CMakeLists.linux-aarch64.txt @@ -35,7 +35,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_cdc_stream PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_cdc_stream PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_cdc_stream.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_cdc_stream/ut_cdc_stream.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_cdc_stream/CMakeLists.linux-x86_64.txt b/ydb/core/tx/schemeshard/ut_cdc_stream/CMakeLists.linux-x86_64.txt index 1e4a34af98..02d285d757 100644 --- a/ydb/core/tx/schemeshard/ut_cdc_stream/CMakeLists.linux-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_cdc_stream/CMakeLists.linux-x86_64.txt @@ -36,7 +36,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_cdc_stream PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_cdc_stream PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_cdc_stream.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_cdc_stream/ut_cdc_stream.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_cdc_stream/CMakeLists.windows-x86_64.txt b/ydb/core/tx/schemeshard/ut_cdc_stream/CMakeLists.windows-x86_64.txt index 21a6fb6efc..6d5148f446 100644 --- a/ydb/core/tx/schemeshard/ut_cdc_stream/CMakeLists.windows-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_cdc_stream/CMakeLists.windows-x86_64.txt @@ -25,7 +25,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_cdc_stream PUBLIC library-cpp-json ) target_sources(ydb-core-tx-schemeshard-ut_cdc_stream PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_cdc_stream.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_cdc_stream/ut_cdc_stream.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_cdc_stream.cpp b/ydb/core/tx/schemeshard/ut_cdc_stream/ut_cdc_stream.cpp index 3cd979308e..97385b36f8 100644 --- a/ydb/core/tx/schemeshard/ut_cdc_stream.cpp +++ b/ydb/core/tx/schemeshard/ut_cdc_stream/ut_cdc_stream.cpp @@ -172,6 +172,64 @@ Y_UNIT_TEST_SUITE(TCdcStreamTests) { } } + Y_UNIT_TEST(TopicPartitions) { + TTestBasicRuntime runtime; + TTestEnv env(runtime, TTestEnvOptions().EnableProtoSourceIdInfo(true)); + ui64 txId = 100; + + for (const auto& keyType : TVector<TString>{"Uint64", "Uint32", "Utf8"}) { + const auto status = keyType != "Utf8" + ? NKikimrScheme::StatusAccepted + : NKikimrScheme::StatusInvalidParameter; + + TestCreateTable(runtime, ++txId, "/MyRoot", Sprintf(R"( + Name: "Table%s" + Columns { Name: "key" Type: "%s" } + Columns { Name: "value" Type: "Utf8" } + KeyColumnNames: ["key"] + )", keyType.c_str(), keyType.c_str())); + env.TestWaitNotification(runtime, txId); + + TestCreateCdcStream(runtime, ++txId, "/MyRoot", Sprintf(R"( + TableName: "Table%s" + StreamDescription { + Name: "Stream" + Mode: ECdcStreamModeKeysOnly + Format: ECdcStreamFormatProto + } + TopicPartitions: 10 + )", keyType.c_str()), {status}); + + if (status != NKikimrScheme::StatusAccepted) { + continue; + } + + env.TestWaitNotification(runtime, txId); + TestDescribeResult(DescribePrivatePath(runtime, Sprintf("/MyRoot/Table%s/Stream/streamImpl", keyType.c_str())), { + NLs::PathExist, + NLs::CheckPartCount("streamImpl", 10, 2, 5, 10), + }); + } + + TestCreateTable(runtime, ++txId, "/MyRoot", R"( + Name: "Table" + Columns { Name: "key" Type: "Uint64" } + Columns { Name: "value" Type: "Utf8" } + KeyColumnNames: ["key"] + )"); + env.TestWaitNotification(runtime, txId); + + TestCreateCdcStream(runtime, ++txId, "/MyRoot", R"( + TableName: "Table" + StreamDescription { + Name: "Stream" + Mode: ECdcStreamModeKeysOnly + Format: ECdcStreamFormatProto + } + TopicPartitions: 0 + )", {NKikimrScheme::StatusInvalidParameter}); + } + Y_UNIT_TEST(Attributes) { TTestBasicRuntime runtime; TTestEnv env(runtime, TTestEnvOptions().EnableProtoSourceIdInfo(true)); diff --git a/ydb/core/tx/schemeshard/ut_cdc_stream_reboots/CMakeLists.darwin-x86_64.txt b/ydb/core/tx/schemeshard/ut_cdc_stream_reboots/CMakeLists.darwin-x86_64.txt index d3ea640afd..cce08c1a57 100644 --- a/ydb/core/tx/schemeshard/ut_cdc_stream_reboots/CMakeLists.darwin-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_cdc_stream_reboots/CMakeLists.darwin-x86_64.txt @@ -21,6 +21,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_cdc_stream_reboots PUBLIC cpp-testing-unittest_main core-tx-schemeshard tx-schemeshard-ut_helpers + core-persqueue-writer yql-sql-pg_dummy ) target_link_options(ydb-core-tx-schemeshard-ut_cdc_stream_reboots PRIVATE @@ -31,7 +32,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_cdc_stream_reboots PRIVATE CoreFoundation ) target_sources(ydb-core-tx-schemeshard-ut_cdc_stream_reboots PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_cdc_stream_reboots.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_cdc_stream_reboots/ut_cdc_stream_reboots.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_cdc_stream_reboots/CMakeLists.linux-aarch64.txt b/ydb/core/tx/schemeshard/ut_cdc_stream_reboots/CMakeLists.linux-aarch64.txt index 88b4c92a00..200ad6c627 100644 --- a/ydb/core/tx/schemeshard/ut_cdc_stream_reboots/CMakeLists.linux-aarch64.txt +++ b/ydb/core/tx/schemeshard/ut_cdc_stream_reboots/CMakeLists.linux-aarch64.txt @@ -21,6 +21,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_cdc_stream_reboots PUBLIC cpp-testing-unittest_main core-tx-schemeshard tx-schemeshard-ut_helpers + core-persqueue-writer yql-sql-pg_dummy ) target_link_options(ydb-core-tx-schemeshard-ut_cdc_stream_reboots PRIVATE @@ -34,7 +35,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_cdc_stream_reboots PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_cdc_stream_reboots PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_cdc_stream_reboots.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_cdc_stream_reboots/ut_cdc_stream_reboots.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_cdc_stream_reboots/CMakeLists.linux-x86_64.txt b/ydb/core/tx/schemeshard/ut_cdc_stream_reboots/CMakeLists.linux-x86_64.txt index 62a46708b1..d7131eba60 100644 --- a/ydb/core/tx/schemeshard/ut_cdc_stream_reboots/CMakeLists.linux-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_cdc_stream_reboots/CMakeLists.linux-x86_64.txt @@ -22,6 +22,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_cdc_stream_reboots PUBLIC cpp-testing-unittest_main core-tx-schemeshard tx-schemeshard-ut_helpers + core-persqueue-writer yql-sql-pg_dummy ) target_link_options(ydb-core-tx-schemeshard-ut_cdc_stream_reboots PRIVATE @@ -35,7 +36,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_cdc_stream_reboots PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_cdc_stream_reboots PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_cdc_stream_reboots.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_cdc_stream_reboots/ut_cdc_stream_reboots.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_cdc_stream_reboots/CMakeLists.windows-x86_64.txt b/ydb/core/tx/schemeshard/ut_cdc_stream_reboots/CMakeLists.windows-x86_64.txt index fcc2fa0fdc..6ea88bea7e 100644 --- a/ydb/core/tx/schemeshard/ut_cdc_stream_reboots/CMakeLists.windows-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_cdc_stream_reboots/CMakeLists.windows-x86_64.txt @@ -21,10 +21,11 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_cdc_stream_reboots PUBLIC cpp-testing-unittest_main core-tx-schemeshard tx-schemeshard-ut_helpers + core-persqueue-writer yql-sql-pg_dummy ) target_sources(ydb-core-tx-schemeshard-ut_cdc_stream_reboots PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_cdc_stream_reboots.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_cdc_stream_reboots/ut_cdc_stream_reboots.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_cdc_stream_reboots.cpp b/ydb/core/tx/schemeshard/ut_cdc_stream_reboots/ut_cdc_stream_reboots.cpp index 8f6dcd2266..38a28eb3db 100644 --- a/ydb/core/tx/schemeshard/ut_cdc_stream_reboots.cpp +++ b/ydb/core/tx/schemeshard/ut_cdc_stream_reboots/ut_cdc_stream_reboots.cpp @@ -1,3 +1,4 @@ +#include <ydb/core/persqueue/writer/source_id_encoding.h> #include <ydb/core/tx/schemeshard/ut_helpers/helpers.h> #include <contrib/libs/protobuf/src/google/protobuf/text_format.h> @@ -512,4 +513,221 @@ Y_UNIT_TEST_SUITE(TCdcStreamWithRebootsTests) { }); } + struct TItem { + TString Path; + ui32 nPartitions; + }; + + void CheckRegistrations(TTestActorRuntime& runtime, const TItem& table, const TItem& topic) { + auto tableDesc = DescribePath(runtime, table.Path, true, true); + const auto& tablePartitions = tableDesc.GetPathDescription().GetTablePartitions(); + UNIT_ASSERT_VALUES_EQUAL(tablePartitions.size(), table.nPartitions); + + auto topicDesc = DescribePrivatePath(runtime, topic.Path); + const auto& topicPartitions = topicDesc.GetPathDescription().GetPersQueueGroup().GetPartitions(); + UNIT_ASSERT_VALUES_EQUAL(topicPartitions.size(), topic.nPartitions); + + while (true) { + runtime.SimulateSleep(TDuration::Seconds(1)); + bool done = true; + + for (ui32 i = 0; i < topic.nPartitions; ++i) { + auto request = MakeHolder<TEvPersQueue::TEvRequest>(); + { + auto& record = *request->Record.MutablePartitionRequest(); + record.SetPartition(topicPartitions[i].GetPartitionId()); + auto& cmd = *record.MutableCmdGetMaxSeqNo(); + for (const auto& tablePartition : tablePartitions) { + cmd.AddSourceId(NPQ::NSourceIdEncoding::EncodeSimple(ToString(tablePartition.GetDatashardId()))); + } + } + + const auto& sender = runtime.AllocateEdgeActor(); + ForwardToTablet(runtime, topicPartitions[i].GetTabletId(), sender, request.Release()); + + auto response = runtime.GrabEdgeEvent<TEvPersQueue::TEvResponse>(sender); + { + const auto& record = response->Get()->Record.GetPartitionResponse(); + const auto& result = record.GetCmdGetMaxSeqNoResult().GetSourceIdInfo(); + + UNIT_ASSERT_VALUES_EQUAL(result.size(), table.nPartitions); + for (const auto& item: result) { + done &= item.GetState() == NKikimrPQ::TMessageGroupInfo::STATE_REGISTERED; + if (!done) { + break; + } + } + } + + if (!done) { + break; + } + } + + if (done) { + break; + } + } + } + + void UploadRows(TTestActorRuntime& runtime, const TString& tablePath, int partitionIdx, + const TVector<ui32>& keyTags, const TVector<ui32>& valueTags, const TVector<ui32>& recordIds) + { + auto tableDesc = DescribePath(runtime, tablePath, true, true); + const auto& tablePartitions = tableDesc.GetPathDescription().GetTablePartitions(); + UNIT_ASSERT(partitionIdx < tablePartitions.size()); + + auto ev = MakeHolder<TEvDataShard::TEvUploadRowsRequest>(); + ev->Record.SetTableId(tableDesc.GetPathId()); + + auto& scheme = *ev->Record.MutableRowScheme(); + for (ui32 tag : keyTags) { + scheme.AddKeyColumnIds(tag); + } + for (ui32 tag : valueTags) { + scheme.AddValueColumnIds(tag); + } + + for (ui32 i : recordIds) { + auto key = TVector<TCell>{TCell::Make(i)}; + auto value = TVector<TCell>{TCell::Make(i)}; + + auto& row = *ev->Record.AddRows(); + row.SetKeyColumns(TSerializedCellVec::Serialize(key)); + row.SetValueColumns(TSerializedCellVec::Serialize(value)); + } + + const auto& sender = runtime.AllocateEdgeActor(); + ForwardToTablet(runtime, tablePartitions[partitionIdx].GetDatashardId(), sender, ev.Release()); + runtime.GrabEdgeEvent<TEvDataShard::TEvUploadRowsResponse>(sender); + } + + Y_UNIT_TEST(SplitTable) { + TTestWithReboots t; + t.Run([&](TTestActorRuntime& runtime, bool& activeZone) { + { + TInactiveZone inactive(activeZone); + TestCreateTable(runtime, ++t.TxId, "/MyRoot", R"( + Name: "Table" + Columns { Name: "key" Type: "Uint32" } + Columns { Name: "value" Type: "Uint32" } + KeyColumnNames: ["key"] + )"); + t.TestEnv->TestWaitNotification(runtime, t.TxId); + + TestCreateCdcStream(runtime, ++t.TxId, "/MyRoot", R"( + TableName: "Table" + StreamDescription { + Name: "Stream" + Mode: ECdcStreamModeKeysOnly + Format: ECdcStreamFormatProto + } + )"); + t.TestEnv->TestWaitNotification(runtime, t.TxId); + } + + TestSplitTable(runtime, ++t.TxId, "/MyRoot/Table", Sprintf(R"( + SourceTabletId: %lu + SplitBoundary { + KeyPrefix { + Tuple { Optional { Uint32: 2 } } + } + } + )", TTestTxConfig::FakeHiveTablets)); + t.TestEnv->TestWaitNotification(runtime, t.TxId); + + { + TInactiveZone inactive(activeZone); + UploadRows(runtime, "/MyRoot/Table", 0, {1}, {2}, {1}); + UploadRows(runtime, "/MyRoot/Table", 1, {1}, {2}, {Max<ui32>()}); + CheckRegistrations(runtime, {"/MyRoot/Table", 2}, {"/MyRoot/Table/Stream/streamImpl", 1}); + } + }); + } + + Y_UNIT_TEST(MergeTable) { + TTestWithReboots t; + t.Run([&](TTestActorRuntime& runtime, bool& activeZone) { + { + TInactiveZone inactive(activeZone); + TestCreateTable(runtime, ++t.TxId, "/MyRoot", R"( + Name: "Table" + Columns { Name: "key" Type: "Uint32" } + Columns { Name: "value" Type: "Uint32" } + KeyColumnNames: ["key"] + UniformPartitionsCount: 2 + PartitionConfig { + PartitioningPolicy { + MinPartitionsCount: 1 + } + } + )"); + t.TestEnv->TestWaitNotification(runtime, t.TxId); + + TestCreateCdcStream(runtime, ++t.TxId, "/MyRoot", R"( + TableName: "Table" + StreamDescription { + Name: "Stream" + Mode: ECdcStreamModeKeysOnly + Format: ECdcStreamFormatProto + } + )"); + t.TestEnv->TestWaitNotification(runtime, t.TxId); + } + + TestSplitTable(runtime, ++t.TxId, "/MyRoot/Table", Sprintf(R"( + SourceTabletId: %lu + SourceTabletId: %lu + )", TTestTxConfig::FakeHiveTablets + 0, TTestTxConfig::FakeHiveTablets + 1)); + t.TestEnv->TestWaitNotification(runtime, t.TxId); + + { + TInactiveZone inactive(activeZone); + UploadRows(runtime, "/MyRoot/Table", 0, {1}, {2}, {1, Max<ui32>()}); + CheckRegistrations(runtime, {"/MyRoot/Table", 1}, {"/MyRoot/Table/Stream/streamImpl", 2}); + } + }); + } + + Y_UNIT_TEST(RacySplitTableAndCreateStream) { + TTestWithReboots t; + t.Run([&](TTestActorRuntime& runtime, bool& activeZone) { + { + TInactiveZone inactive(activeZone); + TestCreateTable(runtime, ++t.TxId, "/MyRoot", R"( + Name: "Table" + Columns { Name: "key" Type: "Uint64" } + Columns { Name: "value" Type: "Uint64" } + KeyColumnNames: ["key"] + )"); + t.TestEnv->TestWaitNotification(runtime, t.TxId); + } + + AsyncSplitTable(runtime, ++t.TxId, "/MyRoot/Table", Sprintf(R"( + SourceTabletId: %lu + SplitBoundary { + KeyPrefix { + Tuple { Optional { Uint64: 2 } } + } + } + )", TTestTxConfig::FakeHiveTablets)); + + AsyncCreateCdcStream(runtime, ++t.TxId, "/MyRoot", R"( + TableName: "Table" + StreamDescription { + Name: "Stream" + Mode: ECdcStreamModeKeysOnly + Format: ECdcStreamFormatProto + } + )"); + + t.TestEnv->TestWaitNotification(runtime, {t.TxId - 1, t.TxId}); + + { + TInactiveZone inactive(activeZone); + CheckRegistrations(runtime, {"/MyRoot/Table", 2}, {"/MyRoot/Table/Stream/streamImpl", 1}); + } + }); + } + } // TCdcStreamWithRebootsTests diff --git a/ydb/core/tx/schemeshard/ut_cdc_stream_reboots/ya.make b/ydb/core/tx/schemeshard/ut_cdc_stream_reboots/ya.make index 40d1d54204..c9c5b955f5 100644 --- a/ydb/core/tx/schemeshard/ut_cdc_stream_reboots/ya.make +++ b/ydb/core/tx/schemeshard/ut_cdc_stream_reboots/ya.make @@ -15,6 +15,7 @@ ENDIF() PEERDIR( ydb/core/tx/schemeshard/ut_helpers + ydb/core/persqueue/writer ydb/library/yql/sql/pg_dummy ) diff --git a/ydb/core/tx/schemeshard/ut_compaction/CMakeLists.darwin-x86_64.txt b/ydb/core/tx/schemeshard/ut_compaction/CMakeLists.darwin-x86_64.txt index 074e3b1daf..3311baf5b0 100644 --- a/ydb/core/tx/schemeshard/ut_compaction/CMakeLists.darwin-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_compaction/CMakeLists.darwin-x86_64.txt @@ -36,7 +36,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_compaction PRIVATE CoreFoundation ) target_sources(ydb-core-tx-schemeshard-ut_compaction PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_compaction.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_compaction/ut_compaction.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_compaction/CMakeLists.linux-aarch64.txt b/ydb/core/tx/schemeshard/ut_compaction/CMakeLists.linux-aarch64.txt index 02791bd47b..1465ace9df 100644 --- a/ydb/core/tx/schemeshard/ut_compaction/CMakeLists.linux-aarch64.txt +++ b/ydb/core/tx/schemeshard/ut_compaction/CMakeLists.linux-aarch64.txt @@ -39,7 +39,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_compaction PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_compaction PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_compaction.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_compaction/ut_compaction.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_compaction/CMakeLists.linux-x86_64.txt b/ydb/core/tx/schemeshard/ut_compaction/CMakeLists.linux-x86_64.txt index b1a0df3984..27806492c1 100644 --- a/ydb/core/tx/schemeshard/ut_compaction/CMakeLists.linux-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_compaction/CMakeLists.linux-x86_64.txt @@ -40,7 +40,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_compaction PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_compaction PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_compaction.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_compaction/ut_compaction.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_compaction/CMakeLists.windows-x86_64.txt b/ydb/core/tx/schemeshard/ut_compaction/CMakeLists.windows-x86_64.txt index adce0ce008..ccdea76494 100644 --- a/ydb/core/tx/schemeshard/ut_compaction/CMakeLists.windows-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_compaction/CMakeLists.windows-x86_64.txt @@ -29,7 +29,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_compaction PUBLIC core-wrappers-ut_helpers ) target_sources(ydb-core-tx-schemeshard-ut_compaction PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_compaction.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_compaction/ut_compaction.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_compaction.cpp b/ydb/core/tx/schemeshard/ut_compaction/ut_compaction.cpp index c64e07fdad..c64e07fdad 100644 --- a/ydb/core/tx/schemeshard/ut_compaction.cpp +++ b/ydb/core/tx/schemeshard/ut_compaction/ut_compaction.cpp diff --git a/ydb/core/tx/schemeshard/ut_export/CMakeLists.darwin-x86_64.txt b/ydb/core/tx/schemeshard/ut_export/CMakeLists.darwin-x86_64.txt index 16b17d7203..de70c7f29e 100644 --- a/ydb/core/tx/schemeshard/ut_export/CMakeLists.darwin-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_export/CMakeLists.darwin-x86_64.txt @@ -37,7 +37,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_export PRIVATE CoreFoundation ) target_sources(ydb-core-tx-schemeshard-ut_export PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_export.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_export/ut_export.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_export/CMakeLists.linux-aarch64.txt b/ydb/core/tx/schemeshard/ut_export/CMakeLists.linux-aarch64.txt index d340969a90..7eb20adaf7 100644 --- a/ydb/core/tx/schemeshard/ut_export/CMakeLists.linux-aarch64.txt +++ b/ydb/core/tx/schemeshard/ut_export/CMakeLists.linux-aarch64.txt @@ -40,7 +40,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_export PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_export PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_export.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_export/ut_export.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_export/CMakeLists.linux-x86_64.txt b/ydb/core/tx/schemeshard/ut_export/CMakeLists.linux-x86_64.txt index d66d5cc87e..6add7105d7 100644 --- a/ydb/core/tx/schemeshard/ut_export/CMakeLists.linux-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_export/CMakeLists.linux-x86_64.txt @@ -41,7 +41,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_export PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_export PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_export.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_export/ut_export.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_export.cpp b/ydb/core/tx/schemeshard/ut_export/ut_export.cpp index 532a4321b9..532a4321b9 100644 --- a/ydb/core/tx/schemeshard/ut_export.cpp +++ b/ydb/core/tx/schemeshard/ut_export/ut_export.cpp diff --git a/ydb/core/tx/schemeshard/ut_export_reboots_s3/CMakeLists.darwin-x86_64.txt b/ydb/core/tx/schemeshard/ut_export_reboots_s3/CMakeLists.darwin-x86_64.txt index 1661ac4b5d..e1bcfec703 100644 --- a/ydb/core/tx/schemeshard/ut_export_reboots_s3/CMakeLists.darwin-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_export_reboots_s3/CMakeLists.darwin-x86_64.txt @@ -37,7 +37,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_export_reboots_s3 PRIVATE CoreFoundation ) target_sources(ydb-core-tx-schemeshard-ut_export_reboots_s3 PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_export_reboots_s3.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_export_reboots_s3/ut_export_reboots_s3.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_export_reboots_s3/CMakeLists.linux-aarch64.txt b/ydb/core/tx/schemeshard/ut_export_reboots_s3/CMakeLists.linux-aarch64.txt index ac152ee2af..0e62fec24d 100644 --- a/ydb/core/tx/schemeshard/ut_export_reboots_s3/CMakeLists.linux-aarch64.txt +++ b/ydb/core/tx/schemeshard/ut_export_reboots_s3/CMakeLists.linux-aarch64.txt @@ -40,7 +40,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_export_reboots_s3 PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_export_reboots_s3 PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_export_reboots_s3.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_export_reboots_s3/ut_export_reboots_s3.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_export_reboots_s3/CMakeLists.linux-x86_64.txt b/ydb/core/tx/schemeshard/ut_export_reboots_s3/CMakeLists.linux-x86_64.txt index a1021b1da2..9c1e584366 100644 --- a/ydb/core/tx/schemeshard/ut_export_reboots_s3/CMakeLists.linux-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_export_reboots_s3/CMakeLists.linux-x86_64.txt @@ -41,7 +41,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_export_reboots_s3 PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_export_reboots_s3 PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_export_reboots_s3.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_export_reboots_s3/ut_export_reboots_s3.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_export_reboots_s3/CMakeLists.windows-x86_64.txt b/ydb/core/tx/schemeshard/ut_export_reboots_s3/CMakeLists.windows-x86_64.txt index 786fbdbcb7..ae2ef497ce 100644 --- a/ydb/core/tx/schemeshard/ut_export_reboots_s3/CMakeLists.windows-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_export_reboots_s3/CMakeLists.windows-x86_64.txt @@ -30,7 +30,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_export_reboots_s3 PUBLIC udf-service-exception_policy ) target_sources(ydb-core-tx-schemeshard-ut_export_reboots_s3 PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_export_reboots_s3.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_export_reboots_s3/ut_export_reboots_s3.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_export_reboots_s3.cpp b/ydb/core/tx/schemeshard/ut_export_reboots_s3/ut_export_reboots_s3.cpp index 5e1e42d17c..5e1e42d17c 100644 --- a/ydb/core/tx/schemeshard/ut_export_reboots_s3.cpp +++ b/ydb/core/tx/schemeshard/ut_export_reboots_s3/ut_export_reboots_s3.cpp diff --git a/ydb/core/tx/schemeshard/ut_external_data_source/CMakeLists.darwin-x86_64.txt b/ydb/core/tx/schemeshard/ut_external_data_source/CMakeLists.darwin-x86_64.txt index 624e8d7cf4..efaffb8039 100644 --- a/ydb/core/tx/schemeshard/ut_external_data_source/CMakeLists.darwin-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_external_data_source/CMakeLists.darwin-x86_64.txt @@ -36,7 +36,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_external_data_source PRIVATE CoreFoundation ) target_sources(ydb-core-tx-schemeshard-ut_external_data_source PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_external_data_source.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_external_data_source/ut_external_data_source.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_external_data_source/CMakeLists.linux-aarch64.txt b/ydb/core/tx/schemeshard/ut_external_data_source/CMakeLists.linux-aarch64.txt index c6ca22ea00..6fc88cf0ac 100644 --- a/ydb/core/tx/schemeshard/ut_external_data_source/CMakeLists.linux-aarch64.txt +++ b/ydb/core/tx/schemeshard/ut_external_data_source/CMakeLists.linux-aarch64.txt @@ -39,7 +39,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_external_data_source PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_external_data_source PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_external_data_source.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_external_data_source/ut_external_data_source.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_external_data_source/CMakeLists.linux-x86_64.txt b/ydb/core/tx/schemeshard/ut_external_data_source/CMakeLists.linux-x86_64.txt index a12ee97eb7..e26cf8c141 100644 --- a/ydb/core/tx/schemeshard/ut_external_data_source/CMakeLists.linux-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_external_data_source/CMakeLists.linux-x86_64.txt @@ -40,7 +40,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_external_data_source PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_external_data_source PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_external_data_source.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_external_data_source/ut_external_data_source.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_external_data_source/CMakeLists.windows-x86_64.txt b/ydb/core/tx/schemeshard/ut_external_data_source/CMakeLists.windows-x86_64.txt index a9c343e8a6..d0d5b60771 100644 --- a/ydb/core/tx/schemeshard/ut_external_data_source/CMakeLists.windows-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_external_data_source/CMakeLists.windows-x86_64.txt @@ -29,7 +29,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_external_data_source PUBLIC udf-service-exception_policy ) target_sources(ydb-core-tx-schemeshard-ut_external_data_source PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_external_data_source.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_external_data_source/ut_external_data_source.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_external_data_source.cpp b/ydb/core/tx/schemeshard/ut_external_data_source/ut_external_data_source.cpp index 34d97d94e8..34d97d94e8 100644 --- a/ydb/core/tx/schemeshard/ut_external_data_source.cpp +++ b/ydb/core/tx/schemeshard/ut_external_data_source/ut_external_data_source.cpp diff --git a/ydb/core/tx/schemeshard/ut_external_data_source_reboots/CMakeLists.darwin-x86_64.txt b/ydb/core/tx/schemeshard/ut_external_data_source_reboots/CMakeLists.darwin-x86_64.txt index ccac9aed08..a5dd89e6b5 100644 --- a/ydb/core/tx/schemeshard/ut_external_data_source_reboots/CMakeLists.darwin-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_external_data_source_reboots/CMakeLists.darwin-x86_64.txt @@ -36,7 +36,7 @@ target_link_options(schemeshard-ut_external_data_source_reboots PRIVATE CoreFoundation ) target_sources(schemeshard-ut_external_data_source_reboots PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_external_data_source_reboots.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_external_data_source_reboots/ut_external_data_source_reboots.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_external_data_source_reboots/CMakeLists.linux-aarch64.txt b/ydb/core/tx/schemeshard/ut_external_data_source_reboots/CMakeLists.linux-aarch64.txt index 9501533bac..4df53a8214 100644 --- a/ydb/core/tx/schemeshard/ut_external_data_source_reboots/CMakeLists.linux-aarch64.txt +++ b/ydb/core/tx/schemeshard/ut_external_data_source_reboots/CMakeLists.linux-aarch64.txt @@ -39,7 +39,7 @@ target_link_options(schemeshard-ut_external_data_source_reboots PRIVATE -ldl ) target_sources(schemeshard-ut_external_data_source_reboots PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_external_data_source_reboots.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_external_data_source_reboots/ut_external_data_source_reboots.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_external_data_source_reboots/CMakeLists.linux-x86_64.txt b/ydb/core/tx/schemeshard/ut_external_data_source_reboots/CMakeLists.linux-x86_64.txt index aa50d25282..2580674124 100644 --- a/ydb/core/tx/schemeshard/ut_external_data_source_reboots/CMakeLists.linux-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_external_data_source_reboots/CMakeLists.linux-x86_64.txt @@ -40,7 +40,7 @@ target_link_options(schemeshard-ut_external_data_source_reboots PRIVATE -ldl ) target_sources(schemeshard-ut_external_data_source_reboots PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_external_data_source_reboots.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_external_data_source_reboots/ut_external_data_source_reboots.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_external_data_source_reboots/CMakeLists.windows-x86_64.txt b/ydb/core/tx/schemeshard/ut_external_data_source_reboots/CMakeLists.windows-x86_64.txt index c277cd81c6..828c7c0bd1 100644 --- a/ydb/core/tx/schemeshard/ut_external_data_source_reboots/CMakeLists.windows-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_external_data_source_reboots/CMakeLists.windows-x86_64.txt @@ -29,7 +29,7 @@ target_link_libraries(schemeshard-ut_external_data_source_reboots PUBLIC udf-service-exception_policy ) target_sources(schemeshard-ut_external_data_source_reboots PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_external_data_source_reboots.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_external_data_source_reboots/ut_external_data_source_reboots.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_external_data_source_reboots.cpp b/ydb/core/tx/schemeshard/ut_external_data_source_reboots/ut_external_data_source_reboots.cpp index 88c15ac601..88c15ac601 100644 --- a/ydb/core/tx/schemeshard/ut_external_data_source_reboots.cpp +++ b/ydb/core/tx/schemeshard/ut_external_data_source_reboots/ut_external_data_source_reboots.cpp diff --git a/ydb/core/tx/schemeshard/ut_external_table/CMakeLists.darwin-x86_64.txt b/ydb/core/tx/schemeshard/ut_external_table/CMakeLists.darwin-x86_64.txt index 588f965707..87394ae850 100644 --- a/ydb/core/tx/schemeshard/ut_external_table/CMakeLists.darwin-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_external_table/CMakeLists.darwin-x86_64.txt @@ -36,7 +36,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_external_table PRIVATE CoreFoundation ) target_sources(ydb-core-tx-schemeshard-ut_external_table PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_external_table.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_external_table/ut_external_table.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_external_table/CMakeLists.linux-aarch64.txt b/ydb/core/tx/schemeshard/ut_external_table/CMakeLists.linux-aarch64.txt index 6553562283..a45d238f54 100644 --- a/ydb/core/tx/schemeshard/ut_external_table/CMakeLists.linux-aarch64.txt +++ b/ydb/core/tx/schemeshard/ut_external_table/CMakeLists.linux-aarch64.txt @@ -39,7 +39,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_external_table PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_external_table PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_external_table.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_external_table/ut_external_table.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_external_table/CMakeLists.linux-x86_64.txt b/ydb/core/tx/schemeshard/ut_external_table/CMakeLists.linux-x86_64.txt index 2457737d31..5e2acf0f5a 100644 --- a/ydb/core/tx/schemeshard/ut_external_table/CMakeLists.linux-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_external_table/CMakeLists.linux-x86_64.txt @@ -40,7 +40,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_external_table PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_external_table PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_external_table.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_external_table/ut_external_table.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_external_table/CMakeLists.windows-x86_64.txt b/ydb/core/tx/schemeshard/ut_external_table/CMakeLists.windows-x86_64.txt index df2dda718e..586578d76b 100644 --- a/ydb/core/tx/schemeshard/ut_external_table/CMakeLists.windows-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_external_table/CMakeLists.windows-x86_64.txt @@ -29,7 +29,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_external_table PUBLIC udf-service-exception_policy ) target_sources(ydb-core-tx-schemeshard-ut_external_table PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_external_table.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_external_table/ut_external_table.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_external_table.cpp b/ydb/core/tx/schemeshard/ut_external_table/ut_external_table.cpp index 7c8921a281..7c8921a281 100644 --- a/ydb/core/tx/schemeshard/ut_external_table.cpp +++ b/ydb/core/tx/schemeshard/ut_external_table/ut_external_table.cpp diff --git a/ydb/core/tx/schemeshard/ut_external_table_reboots/CMakeLists.darwin-x86_64.txt b/ydb/core/tx/schemeshard/ut_external_table_reboots/CMakeLists.darwin-x86_64.txt index e0a6ae6d6e..0087164444 100644 --- a/ydb/core/tx/schemeshard/ut_external_table_reboots/CMakeLists.darwin-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_external_table_reboots/CMakeLists.darwin-x86_64.txt @@ -36,7 +36,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_external_table_reboots PRIVATE CoreFoundation ) target_sources(ydb-core-tx-schemeshard-ut_external_table_reboots PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_external_table_reboots.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_external_table_reboots/ut_external_table_reboots.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_external_table_reboots/CMakeLists.linux-aarch64.txt b/ydb/core/tx/schemeshard/ut_external_table_reboots/CMakeLists.linux-aarch64.txt index bfbd30758f..a02e1c0fee 100644 --- a/ydb/core/tx/schemeshard/ut_external_table_reboots/CMakeLists.linux-aarch64.txt +++ b/ydb/core/tx/schemeshard/ut_external_table_reboots/CMakeLists.linux-aarch64.txt @@ -39,7 +39,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_external_table_reboots PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_external_table_reboots PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_external_table_reboots.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_external_table_reboots/ut_external_table_reboots.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_external_table_reboots/CMakeLists.linux-x86_64.txt b/ydb/core/tx/schemeshard/ut_external_table_reboots/CMakeLists.linux-x86_64.txt index 5a07217adb..073cdcddb3 100644 --- a/ydb/core/tx/schemeshard/ut_external_table_reboots/CMakeLists.linux-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_external_table_reboots/CMakeLists.linux-x86_64.txt @@ -40,7 +40,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_external_table_reboots PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_external_table_reboots PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_external_table_reboots.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_external_table_reboots/ut_external_table_reboots.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_external_table_reboots/CMakeLists.windows-x86_64.txt b/ydb/core/tx/schemeshard/ut_external_table_reboots/CMakeLists.windows-x86_64.txt index d35b68d626..494349edca 100644 --- a/ydb/core/tx/schemeshard/ut_external_table_reboots/CMakeLists.windows-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_external_table_reboots/CMakeLists.windows-x86_64.txt @@ -29,7 +29,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_external_table_reboots PUBLIC udf-service-exception_policy ) target_sources(ydb-core-tx-schemeshard-ut_external_table_reboots PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_external_table_reboots.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_external_table_reboots/ut_external_table_reboots.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_external_table_reboots.cpp b/ydb/core/tx/schemeshard/ut_external_table_reboots/ut_external_table_reboots.cpp index 10e5d12faf..10e5d12faf 100644 --- a/ydb/core/tx/schemeshard/ut_external_table_reboots.cpp +++ b/ydb/core/tx/schemeshard/ut_external_table_reboots/ut_external_table_reboots.cpp diff --git a/ydb/core/tx/schemeshard/ut_extsubdomain/CMakeLists.darwin-x86_64.txt b/ydb/core/tx/schemeshard/ut_extsubdomain/CMakeLists.darwin-x86_64.txt index 9b9bede15f..e6f9907b62 100644 --- a/ydb/core/tx/schemeshard/ut_extsubdomain/CMakeLists.darwin-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_extsubdomain/CMakeLists.darwin-x86_64.txt @@ -36,7 +36,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_extsubdomain PRIVATE CoreFoundation ) target_sources(ydb-core-tx-schemeshard-ut_extsubdomain PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_extsubdomain.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_extsubdomain/ut_extsubdomain.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_extsubdomain/CMakeLists.linux-aarch64.txt b/ydb/core/tx/schemeshard/ut_extsubdomain/CMakeLists.linux-aarch64.txt index 6b858517b5..c16d168c92 100644 --- a/ydb/core/tx/schemeshard/ut_extsubdomain/CMakeLists.linux-aarch64.txt +++ b/ydb/core/tx/schemeshard/ut_extsubdomain/CMakeLists.linux-aarch64.txt @@ -39,7 +39,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_extsubdomain PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_extsubdomain PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_extsubdomain.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_extsubdomain/ut_extsubdomain.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_extsubdomain/CMakeLists.linux-x86_64.txt b/ydb/core/tx/schemeshard/ut_extsubdomain/CMakeLists.linux-x86_64.txt index 18f14abcd9..d418989d99 100644 --- a/ydb/core/tx/schemeshard/ut_extsubdomain/CMakeLists.linux-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_extsubdomain/CMakeLists.linux-x86_64.txt @@ -40,7 +40,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_extsubdomain PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_extsubdomain PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_extsubdomain.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_extsubdomain/ut_extsubdomain.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_extsubdomain/CMakeLists.windows-x86_64.txt b/ydb/core/tx/schemeshard/ut_extsubdomain/CMakeLists.windows-x86_64.txt index 6c1ff69acc..2bb0a7846e 100644 --- a/ydb/core/tx/schemeshard/ut_extsubdomain/CMakeLists.windows-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_extsubdomain/CMakeLists.windows-x86_64.txt @@ -29,7 +29,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_extsubdomain PUBLIC udf-service-exception_policy ) target_sources(ydb-core-tx-schemeshard-ut_extsubdomain PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_extsubdomain.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_extsubdomain/ut_extsubdomain.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_extsubdomain.cpp b/ydb/core/tx/schemeshard/ut_extsubdomain/ut_extsubdomain.cpp index 2fe6db2a71..2fe6db2a71 100644 --- a/ydb/core/tx/schemeshard/ut_extsubdomain.cpp +++ b/ydb/core/tx/schemeshard/ut_extsubdomain/ut_extsubdomain.cpp diff --git a/ydb/core/tx/schemeshard/ut_extsubdomain_reboots/CMakeLists.darwin-x86_64.txt b/ydb/core/tx/schemeshard/ut_extsubdomain_reboots/CMakeLists.darwin-x86_64.txt index 251eb4ff6d..3473d8c045 100644 --- a/ydb/core/tx/schemeshard/ut_extsubdomain_reboots/CMakeLists.darwin-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_extsubdomain_reboots/CMakeLists.darwin-x86_64.txt @@ -36,7 +36,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_extsubdomain_reboots PRIVATE CoreFoundation ) target_sources(ydb-core-tx-schemeshard-ut_extsubdomain_reboots PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_extsubdomain_reboots.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_extsubdomain_reboots/ut_extsubdomain_reboots.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_extsubdomain_reboots/CMakeLists.linux-aarch64.txt b/ydb/core/tx/schemeshard/ut_extsubdomain_reboots/CMakeLists.linux-aarch64.txt index cdcd7757b8..2b0286251e 100644 --- a/ydb/core/tx/schemeshard/ut_extsubdomain_reboots/CMakeLists.linux-aarch64.txt +++ b/ydb/core/tx/schemeshard/ut_extsubdomain_reboots/CMakeLists.linux-aarch64.txt @@ -39,7 +39,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_extsubdomain_reboots PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_extsubdomain_reboots PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_extsubdomain_reboots.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_extsubdomain_reboots/ut_extsubdomain_reboots.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_extsubdomain_reboots/CMakeLists.linux-x86_64.txt b/ydb/core/tx/schemeshard/ut_extsubdomain_reboots/CMakeLists.linux-x86_64.txt index 26f5084661..804834ccc0 100644 --- a/ydb/core/tx/schemeshard/ut_extsubdomain_reboots/CMakeLists.linux-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_extsubdomain_reboots/CMakeLists.linux-x86_64.txt @@ -40,7 +40,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_extsubdomain_reboots PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_extsubdomain_reboots PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_extsubdomain_reboots.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_extsubdomain_reboots/ut_extsubdomain_reboots.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_extsubdomain_reboots/CMakeLists.windows-x86_64.txt b/ydb/core/tx/schemeshard/ut_extsubdomain_reboots/CMakeLists.windows-x86_64.txt index acd14eb6dc..e00734e21b 100644 --- a/ydb/core/tx/schemeshard/ut_extsubdomain_reboots/CMakeLists.windows-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_extsubdomain_reboots/CMakeLists.windows-x86_64.txt @@ -29,7 +29,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_extsubdomain_reboots PUBLIC udf-service-exception_policy ) target_sources(ydb-core-tx-schemeshard-ut_extsubdomain_reboots PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_extsubdomain_reboots.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_extsubdomain_reboots/ut_extsubdomain_reboots.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_extsubdomain_reboots.cpp b/ydb/core/tx/schemeshard/ut_extsubdomain_reboots/ut_extsubdomain_reboots.cpp index e780c7d714..e780c7d714 100644 --- a/ydb/core/tx/schemeshard/ut_extsubdomain_reboots.cpp +++ b/ydb/core/tx/schemeshard/ut_extsubdomain_reboots/ut_extsubdomain_reboots.cpp diff --git a/ydb/core/tx/schemeshard/ut_filestore_reboots/CMakeLists.darwin-x86_64.txt b/ydb/core/tx/schemeshard/ut_filestore_reboots/CMakeLists.darwin-x86_64.txt index b3a3048543..60f76fb012 100644 --- a/ydb/core/tx/schemeshard/ut_filestore_reboots/CMakeLists.darwin-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_filestore_reboots/CMakeLists.darwin-x86_64.txt @@ -36,7 +36,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_filestore_reboots PRIVATE CoreFoundation ) target_sources(ydb-core-tx-schemeshard-ut_filestore_reboots PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_filestore_reboots.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_filestore_reboots/ut_filestore_reboots.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_filestore_reboots/CMakeLists.linux-aarch64.txt b/ydb/core/tx/schemeshard/ut_filestore_reboots/CMakeLists.linux-aarch64.txt index dc93ae25d6..e1ae38fab8 100644 --- a/ydb/core/tx/schemeshard/ut_filestore_reboots/CMakeLists.linux-aarch64.txt +++ b/ydb/core/tx/schemeshard/ut_filestore_reboots/CMakeLists.linux-aarch64.txt @@ -39,7 +39,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_filestore_reboots PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_filestore_reboots PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_filestore_reboots.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_filestore_reboots/ut_filestore_reboots.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_filestore_reboots/CMakeLists.linux-x86_64.txt b/ydb/core/tx/schemeshard/ut_filestore_reboots/CMakeLists.linux-x86_64.txt index 2999a39ffe..1b9e374975 100644 --- a/ydb/core/tx/schemeshard/ut_filestore_reboots/CMakeLists.linux-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_filestore_reboots/CMakeLists.linux-x86_64.txt @@ -40,7 +40,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_filestore_reboots PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_filestore_reboots PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_filestore_reboots.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_filestore_reboots/ut_filestore_reboots.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_filestore_reboots/CMakeLists.windows-x86_64.txt b/ydb/core/tx/schemeshard/ut_filestore_reboots/CMakeLists.windows-x86_64.txt index 168025bafa..a3aeefb475 100644 --- a/ydb/core/tx/schemeshard/ut_filestore_reboots/CMakeLists.windows-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_filestore_reboots/CMakeLists.windows-x86_64.txt @@ -29,7 +29,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_filestore_reboots PUBLIC udf-service-exception_policy ) target_sources(ydb-core-tx-schemeshard-ut_filestore_reboots PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_filestore_reboots.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_filestore_reboots/ut_filestore_reboots.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_filestore_reboots.cpp b/ydb/core/tx/schemeshard/ut_filestore_reboots/ut_filestore_reboots.cpp index 6f35d60108..6f35d60108 100644 --- a/ydb/core/tx/schemeshard/ut_filestore_reboots.cpp +++ b/ydb/core/tx/schemeshard/ut_filestore_reboots/ut_filestore_reboots.cpp diff --git a/ydb/core/tx/schemeshard/ut_index_build/CMakeLists.darwin-x86_64.txt b/ydb/core/tx/schemeshard/ut_index_build/CMakeLists.darwin-x86_64.txt index 20c4692b71..6d6687904c 100644 --- a/ydb/core/tx/schemeshard/ut_index_build/CMakeLists.darwin-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_index_build/CMakeLists.darwin-x86_64.txt @@ -36,7 +36,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_index_build PRIVATE CoreFoundation ) target_sources(ydb-core-tx-schemeshard-ut_index_build PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_index_build.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_index_build/ut_index_build.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_index_build/CMakeLists.linux-aarch64.txt b/ydb/core/tx/schemeshard/ut_index_build/CMakeLists.linux-aarch64.txt index 7b5df5e977..264dd7455b 100644 --- a/ydb/core/tx/schemeshard/ut_index_build/CMakeLists.linux-aarch64.txt +++ b/ydb/core/tx/schemeshard/ut_index_build/CMakeLists.linux-aarch64.txt @@ -39,7 +39,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_index_build PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_index_build PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_index_build.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_index_build/ut_index_build.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_index_build/CMakeLists.linux-x86_64.txt b/ydb/core/tx/schemeshard/ut_index_build/CMakeLists.linux-x86_64.txt index aa728f9acc..3ff2eba8f5 100644 --- a/ydb/core/tx/schemeshard/ut_index_build/CMakeLists.linux-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_index_build/CMakeLists.linux-x86_64.txt @@ -40,7 +40,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_index_build PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_index_build PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_index_build.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_index_build/ut_index_build.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_index_build/CMakeLists.windows-x86_64.txt b/ydb/core/tx/schemeshard/ut_index_build/CMakeLists.windows-x86_64.txt index 287e55a848..39683caa71 100644 --- a/ydb/core/tx/schemeshard/ut_index_build/CMakeLists.windows-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_index_build/CMakeLists.windows-x86_64.txt @@ -29,7 +29,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_index_build PUBLIC tx-schemeshard-ut_helpers ) target_sources(ydb-core-tx-schemeshard-ut_index_build PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_index_build.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_index_build/ut_index_build.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_index_build.cpp b/ydb/core/tx/schemeshard/ut_index_build/ut_index_build.cpp index 540ecba880..540ecba880 100644 --- a/ydb/core/tx/schemeshard/ut_index_build.cpp +++ b/ydb/core/tx/schemeshard/ut_index_build/ut_index_build.cpp diff --git a/ydb/core/tx/schemeshard/ut_index_build_reboots/CMakeLists.darwin-x86_64.txt b/ydb/core/tx/schemeshard/ut_index_build_reboots/CMakeLists.darwin-x86_64.txt index eb4ad3c2b8..bea3017b3e 100644 --- a/ydb/core/tx/schemeshard/ut_index_build_reboots/CMakeLists.darwin-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_index_build_reboots/CMakeLists.darwin-x86_64.txt @@ -37,7 +37,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_index_build_reboots PRIVATE CoreFoundation ) target_sources(ydb-core-tx-schemeshard-ut_index_build_reboots PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_index_build_reboots.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_index_build_reboots/ut_index_build_reboots.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_index_build_reboots/CMakeLists.linux-aarch64.txt b/ydb/core/tx/schemeshard/ut_index_build_reboots/CMakeLists.linux-aarch64.txt index 0c345149e9..c646af9971 100644 --- a/ydb/core/tx/schemeshard/ut_index_build_reboots/CMakeLists.linux-aarch64.txt +++ b/ydb/core/tx/schemeshard/ut_index_build_reboots/CMakeLists.linux-aarch64.txt @@ -40,7 +40,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_index_build_reboots PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_index_build_reboots PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_index_build_reboots.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_index_build_reboots/ut_index_build_reboots.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_index_build_reboots/CMakeLists.linux-x86_64.txt b/ydb/core/tx/schemeshard/ut_index_build_reboots/CMakeLists.linux-x86_64.txt index 6820c16481..51c9a44570 100644 --- a/ydb/core/tx/schemeshard/ut_index_build_reboots/CMakeLists.linux-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_index_build_reboots/CMakeLists.linux-x86_64.txt @@ -41,7 +41,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_index_build_reboots PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_index_build_reboots PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_index_build_reboots.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_index_build_reboots/ut_index_build_reboots.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_index_build_reboots/CMakeLists.windows-x86_64.txt b/ydb/core/tx/schemeshard/ut_index_build_reboots/CMakeLists.windows-x86_64.txt index 8ffb6c33f0..456e269e4f 100644 --- a/ydb/core/tx/schemeshard/ut_index_build_reboots/CMakeLists.windows-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_index_build_reboots/CMakeLists.windows-x86_64.txt @@ -30,7 +30,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_index_build_reboots PUBLIC udf-service-exception_policy ) target_sources(ydb-core-tx-schemeshard-ut_index_build_reboots PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_index_build_reboots.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_index_build_reboots/ut_index_build_reboots.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_index_build_reboots.cpp b/ydb/core/tx/schemeshard/ut_index_build_reboots/ut_index_build_reboots.cpp index 8f61351059..8f61351059 100644 --- a/ydb/core/tx/schemeshard/ut_index_build_reboots.cpp +++ b/ydb/core/tx/schemeshard/ut_index_build_reboots/ut_index_build_reboots.cpp diff --git a/ydb/core/tx/schemeshard/ut_login/CMakeLists.darwin-x86_64.txt b/ydb/core/tx/schemeshard/ut_login/CMakeLists.darwin-x86_64.txt index 14aaac1c23..c8c7106917 100644 --- a/ydb/core/tx/schemeshard/ut_login/CMakeLists.darwin-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_login/CMakeLists.darwin-x86_64.txt @@ -37,7 +37,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_login PRIVATE CoreFoundation ) target_sources(ydb-core-tx-schemeshard-ut_login PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_login.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_login/ut_login.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_login/CMakeLists.linux-aarch64.txt b/ydb/core/tx/schemeshard/ut_login/CMakeLists.linux-aarch64.txt index 33a2b3a8d6..6356a99516 100644 --- a/ydb/core/tx/schemeshard/ut_login/CMakeLists.linux-aarch64.txt +++ b/ydb/core/tx/schemeshard/ut_login/CMakeLists.linux-aarch64.txt @@ -40,7 +40,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_login PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_login PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_login.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_login/ut_login.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_login/CMakeLists.linux-x86_64.txt b/ydb/core/tx/schemeshard/ut_login/CMakeLists.linux-x86_64.txt index 614a7c7c8c..d4796fdb4e 100644 --- a/ydb/core/tx/schemeshard/ut_login/CMakeLists.linux-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_login/CMakeLists.linux-x86_64.txt @@ -41,7 +41,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_login PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_login PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_login.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_login/ut_login.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_login/CMakeLists.windows-x86_64.txt b/ydb/core/tx/schemeshard/ut_login/CMakeLists.windows-x86_64.txt index 3de96f762e..ff885b8fb7 100644 --- a/ydb/core/tx/schemeshard/ut_login/CMakeLists.windows-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_login/CMakeLists.windows-x86_64.txt @@ -30,7 +30,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_login PUBLIC udf-service-exception_policy ) target_sources(ydb-core-tx-schemeshard-ut_login PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_login.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_login/ut_login.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_login.cpp b/ydb/core/tx/schemeshard/ut_login/ut_login.cpp index 1a46fafeb1..1a46fafeb1 100644 --- a/ydb/core/tx/schemeshard/ut_login.cpp +++ b/ydb/core/tx/schemeshard/ut_login/ut_login.cpp diff --git a/ydb/core/tx/schemeshard/ut_move/CMakeLists.darwin-x86_64.txt b/ydb/core/tx/schemeshard/ut_move/CMakeLists.darwin-x86_64.txt index bf04b9d56a..b4da03e27a 100644 --- a/ydb/core/tx/schemeshard/ut_move/CMakeLists.darwin-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_move/CMakeLists.darwin-x86_64.txt @@ -37,7 +37,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_move PRIVATE CoreFoundation ) target_sources(ydb-core-tx-schemeshard-ut_move PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_move.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_move/ut_move.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_move/CMakeLists.linux-aarch64.txt b/ydb/core/tx/schemeshard/ut_move/CMakeLists.linux-aarch64.txt index be29b72d2c..825a07b2d3 100644 --- a/ydb/core/tx/schemeshard/ut_move/CMakeLists.linux-aarch64.txt +++ b/ydb/core/tx/schemeshard/ut_move/CMakeLists.linux-aarch64.txt @@ -40,7 +40,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_move PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_move PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_move.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_move/ut_move.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_move/CMakeLists.linux-x86_64.txt b/ydb/core/tx/schemeshard/ut_move/CMakeLists.linux-x86_64.txt index 0b3d948d5a..c21e173287 100644 --- a/ydb/core/tx/schemeshard/ut_move/CMakeLists.linux-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_move/CMakeLists.linux-x86_64.txt @@ -41,7 +41,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_move PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_move PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_move.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_move/ut_move.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_move/CMakeLists.windows-x86_64.txt b/ydb/core/tx/schemeshard/ut_move/CMakeLists.windows-x86_64.txt index 6cac2f67bc..62a6648ddb 100644 --- a/ydb/core/tx/schemeshard/ut_move/CMakeLists.windows-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_move/CMakeLists.windows-x86_64.txt @@ -30,7 +30,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_move PUBLIC udf-service-exception_policy ) target_sources(ydb-core-tx-schemeshard-ut_move PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_move.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_move/ut_move.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_move.cpp b/ydb/core/tx/schemeshard/ut_move/ut_move.cpp index 70c976fe01..70c976fe01 100644 --- a/ydb/core/tx/schemeshard/ut_move.cpp +++ b/ydb/core/tx/schemeshard/ut_move/ut_move.cpp diff --git a/ydb/core/tx/schemeshard/ut_move_reboots/CMakeLists.darwin-x86_64.txt b/ydb/core/tx/schemeshard/ut_move_reboots/CMakeLists.darwin-x86_64.txt index 7d8146437f..25b954f36f 100644 --- a/ydb/core/tx/schemeshard/ut_move_reboots/CMakeLists.darwin-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_move_reboots/CMakeLists.darwin-x86_64.txt @@ -36,7 +36,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_move_reboots PRIVATE CoreFoundation ) target_sources(ydb-core-tx-schemeshard-ut_move_reboots PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_move_reboots.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_move_reboots/ut_move_reboots.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_move_reboots/CMakeLists.linux-aarch64.txt b/ydb/core/tx/schemeshard/ut_move_reboots/CMakeLists.linux-aarch64.txt index e1c308c3d1..1c678b692c 100644 --- a/ydb/core/tx/schemeshard/ut_move_reboots/CMakeLists.linux-aarch64.txt +++ b/ydb/core/tx/schemeshard/ut_move_reboots/CMakeLists.linux-aarch64.txt @@ -39,7 +39,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_move_reboots PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_move_reboots PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_move_reboots.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_move_reboots/ut_move_reboots.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_move_reboots/CMakeLists.linux-x86_64.txt b/ydb/core/tx/schemeshard/ut_move_reboots/CMakeLists.linux-x86_64.txt index f530e9ef33..ec4f146e2a 100644 --- a/ydb/core/tx/schemeshard/ut_move_reboots/CMakeLists.linux-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_move_reboots/CMakeLists.linux-x86_64.txt @@ -40,7 +40,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_move_reboots PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_move_reboots PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_move_reboots.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_move_reboots/ut_move_reboots.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_move_reboots/CMakeLists.windows-x86_64.txt b/ydb/core/tx/schemeshard/ut_move_reboots/CMakeLists.windows-x86_64.txt index e5ca7cc947..e40377a5a6 100644 --- a/ydb/core/tx/schemeshard/ut_move_reboots/CMakeLists.windows-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_move_reboots/CMakeLists.windows-x86_64.txt @@ -29,7 +29,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_move_reboots PUBLIC udf-service-exception_policy ) target_sources(ydb-core-tx-schemeshard-ut_move_reboots PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_move_reboots.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_move_reboots/ut_move_reboots.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_move_reboots.cpp b/ydb/core/tx/schemeshard/ut_move_reboots/ut_move_reboots.cpp index 69554f4feb..69554f4feb 100644 --- a/ydb/core/tx/schemeshard/ut_move_reboots.cpp +++ b/ydb/core/tx/schemeshard/ut_move_reboots/ut_move_reboots.cpp diff --git a/ydb/core/tx/schemeshard/ut_olap/CMakeLists.darwin-x86_64.txt b/ydb/core/tx/schemeshard/ut_olap/CMakeLists.darwin-x86_64.txt index a899ec6c6c..794d46adbc 100644 --- a/ydb/core/tx/schemeshard/ut_olap/CMakeLists.darwin-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_olap/CMakeLists.darwin-x86_64.txt @@ -38,7 +38,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_olap PRIVATE CoreFoundation ) target_sources(ydb-core-tx-schemeshard-ut_olap PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_olap.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_olap/ut_olap.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_olap/CMakeLists.linux-aarch64.txt b/ydb/core/tx/schemeshard/ut_olap/CMakeLists.linux-aarch64.txt index 792c5ec3d2..0cf27dad18 100644 --- a/ydb/core/tx/schemeshard/ut_olap/CMakeLists.linux-aarch64.txt +++ b/ydb/core/tx/schemeshard/ut_olap/CMakeLists.linux-aarch64.txt @@ -41,7 +41,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_olap PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_olap PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_olap.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_olap/ut_olap.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_olap/CMakeLists.linux-x86_64.txt b/ydb/core/tx/schemeshard/ut_olap/CMakeLists.linux-x86_64.txt index 4ae2f06628..994cc4ee94 100644 --- a/ydb/core/tx/schemeshard/ut_olap/CMakeLists.linux-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_olap/CMakeLists.linux-x86_64.txt @@ -42,7 +42,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_olap PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_olap PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_olap.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_olap/ut_olap.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_olap/CMakeLists.windows-x86_64.txt b/ydb/core/tx/schemeshard/ut_olap/CMakeLists.windows-x86_64.txt index 3bb760793a..2e2bd9f507 100644 --- a/ydb/core/tx/schemeshard/ut_olap/CMakeLists.windows-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_olap/CMakeLists.windows-x86_64.txt @@ -31,7 +31,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_olap PUBLIC udf-service-exception_policy ) target_sources(ydb-core-tx-schemeshard-ut_olap PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_olap.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_olap/ut_olap.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_olap.cpp b/ydb/core/tx/schemeshard/ut_olap/ut_olap.cpp index 0a5ca55d2b..0a5ca55d2b 100644 --- a/ydb/core/tx/schemeshard/ut_olap.cpp +++ b/ydb/core/tx/schemeshard/ut_olap/ut_olap.cpp diff --git a/ydb/core/tx/schemeshard/ut_olap_reboots/CMakeLists.darwin-x86_64.txt b/ydb/core/tx/schemeshard/ut_olap_reboots/CMakeLists.darwin-x86_64.txt index 16770be68c..5aec8a43a8 100644 --- a/ydb/core/tx/schemeshard/ut_olap_reboots/CMakeLists.darwin-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_olap_reboots/CMakeLists.darwin-x86_64.txt @@ -37,7 +37,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_olap_reboots PRIVATE CoreFoundation ) target_sources(ydb-core-tx-schemeshard-ut_olap_reboots PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_olap_reboots.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_olap_reboots/ut_olap_reboots.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_olap_reboots/CMakeLists.linux-aarch64.txt b/ydb/core/tx/schemeshard/ut_olap_reboots/CMakeLists.linux-aarch64.txt index 92c2afa79c..bb5fd4d6b5 100644 --- a/ydb/core/tx/schemeshard/ut_olap_reboots/CMakeLists.linux-aarch64.txt +++ b/ydb/core/tx/schemeshard/ut_olap_reboots/CMakeLists.linux-aarch64.txt @@ -40,7 +40,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_olap_reboots PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_olap_reboots PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_olap_reboots.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_olap_reboots/ut_olap_reboots.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_olap_reboots/CMakeLists.linux-x86_64.txt b/ydb/core/tx/schemeshard/ut_olap_reboots/CMakeLists.linux-x86_64.txt index 8be9dbf4ca..3d20c735c6 100644 --- a/ydb/core/tx/schemeshard/ut_olap_reboots/CMakeLists.linux-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_olap_reboots/CMakeLists.linux-x86_64.txt @@ -41,7 +41,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_olap_reboots PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_olap_reboots PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_olap_reboots.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_olap_reboots/ut_olap_reboots.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_olap_reboots/CMakeLists.windows-x86_64.txt b/ydb/core/tx/schemeshard/ut_olap_reboots/CMakeLists.windows-x86_64.txt index d6cbf0b79a..10032ad387 100644 --- a/ydb/core/tx/schemeshard/ut_olap_reboots/CMakeLists.windows-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_olap_reboots/CMakeLists.windows-x86_64.txt @@ -30,7 +30,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_olap_reboots PUBLIC udf-service-exception_policy ) target_sources(ydb-core-tx-schemeshard-ut_olap_reboots PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_olap_reboots.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_olap_reboots/ut_olap_reboots.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_olap_reboots.cpp b/ydb/core/tx/schemeshard/ut_olap_reboots/ut_olap_reboots.cpp index 47ee8880c5..47ee8880c5 100644 --- a/ydb/core/tx/schemeshard/ut_olap_reboots.cpp +++ b/ydb/core/tx/schemeshard/ut_olap_reboots/ut_olap_reboots.cpp diff --git a/ydb/core/tx/schemeshard/ut_pq.cpp b/ydb/core/tx/schemeshard/ut_pq.cpp deleted file mode 100644 index e69de29bb2..0000000000 --- a/ydb/core/tx/schemeshard/ut_pq.cpp +++ /dev/null diff --git a/ydb/core/tx/schemeshard/ut_pq_reboots/CMakeLists.darwin-x86_64.txt b/ydb/core/tx/schemeshard/ut_pq_reboots/CMakeLists.darwin-x86_64.txt index 0f2b888348..e31b79f06e 100644 --- a/ydb/core/tx/schemeshard/ut_pq_reboots/CMakeLists.darwin-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_pq_reboots/CMakeLists.darwin-x86_64.txt @@ -36,7 +36,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_pq_reboots PRIVATE CoreFoundation ) target_sources(ydb-core-tx-schemeshard-ut_pq_reboots PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_pq_reboots.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_pq_reboots/ut_pq_reboots.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_pq_reboots/CMakeLists.linux-aarch64.txt b/ydb/core/tx/schemeshard/ut_pq_reboots/CMakeLists.linux-aarch64.txt index c8d2047d4a..809b286497 100644 --- a/ydb/core/tx/schemeshard/ut_pq_reboots/CMakeLists.linux-aarch64.txt +++ b/ydb/core/tx/schemeshard/ut_pq_reboots/CMakeLists.linux-aarch64.txt @@ -39,7 +39,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_pq_reboots PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_pq_reboots PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_pq_reboots.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_pq_reboots/ut_pq_reboots.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_pq_reboots/CMakeLists.linux-x86_64.txt b/ydb/core/tx/schemeshard/ut_pq_reboots/CMakeLists.linux-x86_64.txt index 6e5e4d00f5..e55199b0dc 100644 --- a/ydb/core/tx/schemeshard/ut_pq_reboots/CMakeLists.linux-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_pq_reboots/CMakeLists.linux-x86_64.txt @@ -40,7 +40,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_pq_reboots PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_pq_reboots PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_pq_reboots.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_pq_reboots/ut_pq_reboots.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_pq_reboots/CMakeLists.windows-x86_64.txt b/ydb/core/tx/schemeshard/ut_pq_reboots/CMakeLists.windows-x86_64.txt index 79648efe2c..b2e0f72125 100644 --- a/ydb/core/tx/schemeshard/ut_pq_reboots/CMakeLists.windows-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_pq_reboots/CMakeLists.windows-x86_64.txt @@ -29,7 +29,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_pq_reboots PUBLIC udf-service-exception_policy ) target_sources(ydb-core-tx-schemeshard-ut_pq_reboots PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_pq_reboots.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_pq_reboots/ut_pq_reboots.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_pq_reboots.cpp b/ydb/core/tx/schemeshard/ut_pq_reboots/ut_pq_reboots.cpp index 35dc9cad0b..35dc9cad0b 100644 --- a/ydb/core/tx/schemeshard/ut_pq_reboots.cpp +++ b/ydb/core/tx/schemeshard/ut_pq_reboots/ut_pq_reboots.cpp diff --git a/ydb/core/tx/schemeshard/ut_reboots/CMakeLists.darwin-x86_64.txt b/ydb/core/tx/schemeshard/ut_reboots/CMakeLists.darwin-x86_64.txt index b0beef1487..95f7bf12ea 100644 --- a/ydb/core/tx/schemeshard/ut_reboots/CMakeLists.darwin-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_reboots/CMakeLists.darwin-x86_64.txt @@ -36,7 +36,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_reboots PRIVATE CoreFoundation ) target_sources(ydb-core-tx-schemeshard-ut_reboots PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_reboots.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_reboots/ut_reboots.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_reboots/CMakeLists.linux-aarch64.txt b/ydb/core/tx/schemeshard/ut_reboots/CMakeLists.linux-aarch64.txt index 33fbe69d38..cc3c8e6d90 100644 --- a/ydb/core/tx/schemeshard/ut_reboots/CMakeLists.linux-aarch64.txt +++ b/ydb/core/tx/schemeshard/ut_reboots/CMakeLists.linux-aarch64.txt @@ -39,7 +39,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_reboots PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_reboots PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_reboots.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_reboots/ut_reboots.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_reboots/CMakeLists.linux-x86_64.txt b/ydb/core/tx/schemeshard/ut_reboots/CMakeLists.linux-x86_64.txt index 3ac879822d..0188447f94 100644 --- a/ydb/core/tx/schemeshard/ut_reboots/CMakeLists.linux-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_reboots/CMakeLists.linux-x86_64.txt @@ -40,7 +40,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_reboots PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_reboots PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_reboots.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_reboots/ut_reboots.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_reboots/CMakeLists.windows-x86_64.txt b/ydb/core/tx/schemeshard/ut_reboots/CMakeLists.windows-x86_64.txt index ec143cf543..c5f7c6c289 100644 --- a/ydb/core/tx/schemeshard/ut_reboots/CMakeLists.windows-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_reboots/CMakeLists.windows-x86_64.txt @@ -29,7 +29,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_reboots PUBLIC udf-service-exception_policy ) target_sources(ydb-core-tx-schemeshard-ut_reboots PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_reboots.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_reboots/ut_reboots.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_reboots.cpp b/ydb/core/tx/schemeshard/ut_reboots/ut_reboots.cpp index fffa33bf10..fffa33bf10 100644 --- a/ydb/core/tx/schemeshard/ut_reboots.cpp +++ b/ydb/core/tx/schemeshard/ut_reboots/ut_reboots.cpp diff --git a/ydb/core/tx/schemeshard/ut_replication/CMakeLists.darwin-x86_64.txt b/ydb/core/tx/schemeshard/ut_replication/CMakeLists.darwin-x86_64.txt index bc6d5472e1..4573bcfc8a 100644 --- a/ydb/core/tx/schemeshard/ut_replication/CMakeLists.darwin-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_replication/CMakeLists.darwin-x86_64.txt @@ -31,7 +31,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_replication PRIVATE CoreFoundation ) target_sources(ydb-core-tx-schemeshard-ut_replication PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_replication.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_replication/ut_replication.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_replication/CMakeLists.linux-aarch64.txt b/ydb/core/tx/schemeshard/ut_replication/CMakeLists.linux-aarch64.txt index d36fb621e1..379bf52b23 100644 --- a/ydb/core/tx/schemeshard/ut_replication/CMakeLists.linux-aarch64.txt +++ b/ydb/core/tx/schemeshard/ut_replication/CMakeLists.linux-aarch64.txt @@ -34,7 +34,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_replication PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_replication PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_replication.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_replication/ut_replication.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_replication/CMakeLists.linux-x86_64.txt b/ydb/core/tx/schemeshard/ut_replication/CMakeLists.linux-x86_64.txt index 8c2afe8be1..12396fd1b6 100644 --- a/ydb/core/tx/schemeshard/ut_replication/CMakeLists.linux-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_replication/CMakeLists.linux-x86_64.txt @@ -35,7 +35,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_replication PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_replication PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_replication.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_replication/ut_replication.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_replication/CMakeLists.windows-x86_64.txt b/ydb/core/tx/schemeshard/ut_replication/CMakeLists.windows-x86_64.txt index 4fcdc5a6f3..a4d35444a6 100644 --- a/ydb/core/tx/schemeshard/ut_replication/CMakeLists.windows-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_replication/CMakeLists.windows-x86_64.txt @@ -24,7 +24,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_replication PUBLIC yql-sql-pg_dummy ) target_sources(ydb-core-tx-schemeshard-ut_replication PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_replication.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_replication/ut_replication.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_replication.cpp b/ydb/core/tx/schemeshard/ut_replication/ut_replication.cpp index 9d9d6ee1cd..9d9d6ee1cd 100644 --- a/ydb/core/tx/schemeshard/ut_replication.cpp +++ b/ydb/core/tx/schemeshard/ut_replication/ut_replication.cpp diff --git a/ydb/core/tx/schemeshard/ut_replication_reboots/CMakeLists.darwin-x86_64.txt b/ydb/core/tx/schemeshard/ut_replication_reboots/CMakeLists.darwin-x86_64.txt index 1ec988765a..4e9d7fbdae 100644 --- a/ydb/core/tx/schemeshard/ut_replication_reboots/CMakeLists.darwin-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_replication_reboots/CMakeLists.darwin-x86_64.txt @@ -31,7 +31,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_replication_reboots PRIVATE CoreFoundation ) target_sources(ydb-core-tx-schemeshard-ut_replication_reboots PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_replication_reboots.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_replication_reboots/ut_replication_reboots.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_replication_reboots/CMakeLists.linux-aarch64.txt b/ydb/core/tx/schemeshard/ut_replication_reboots/CMakeLists.linux-aarch64.txt index 25d0ae0fa0..84472792eb 100644 --- a/ydb/core/tx/schemeshard/ut_replication_reboots/CMakeLists.linux-aarch64.txt +++ b/ydb/core/tx/schemeshard/ut_replication_reboots/CMakeLists.linux-aarch64.txt @@ -34,7 +34,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_replication_reboots PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_replication_reboots PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_replication_reboots.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_replication_reboots/ut_replication_reboots.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_replication_reboots/CMakeLists.linux-x86_64.txt b/ydb/core/tx/schemeshard/ut_replication_reboots/CMakeLists.linux-x86_64.txt index d9d9d303db..026aecfec9 100644 --- a/ydb/core/tx/schemeshard/ut_replication_reboots/CMakeLists.linux-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_replication_reboots/CMakeLists.linux-x86_64.txt @@ -35,7 +35,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_replication_reboots PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_replication_reboots PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_replication_reboots.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_replication_reboots/ut_replication_reboots.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_replication_reboots/CMakeLists.windows-x86_64.txt b/ydb/core/tx/schemeshard/ut_replication_reboots/CMakeLists.windows-x86_64.txt index 7b70e85b45..ff93b106f2 100644 --- a/ydb/core/tx/schemeshard/ut_replication_reboots/CMakeLists.windows-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_replication_reboots/CMakeLists.windows-x86_64.txt @@ -24,7 +24,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_replication_reboots PUBLIC yql-sql-pg_dummy ) target_sources(ydb-core-tx-schemeshard-ut_replication_reboots PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_replication_reboots.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_replication_reboots/ut_replication_reboots.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_replication_reboots.cpp b/ydb/core/tx/schemeshard/ut_replication_reboots/ut_replication_reboots.cpp index 72043e1db2..72043e1db2 100644 --- a/ydb/core/tx/schemeshard/ut_replication_reboots.cpp +++ b/ydb/core/tx/schemeshard/ut_replication_reboots/ut_replication_reboots.cpp diff --git a/ydb/core/tx/schemeshard/ut_restore/CMakeLists.darwin-x86_64.txt b/ydb/core/tx/schemeshard/ut_restore/CMakeLists.darwin-x86_64.txt index cec6307dd5..c96ccfecf7 100644 --- a/ydb/core/tx/schemeshard/ut_restore/CMakeLists.darwin-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_restore/CMakeLists.darwin-x86_64.txt @@ -36,7 +36,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_restore PRIVATE CoreFoundation ) target_sources(ydb-core-tx-schemeshard-ut_restore PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_restore.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_restore/ut_restore.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_restore/CMakeLists.linux-aarch64.txt b/ydb/core/tx/schemeshard/ut_restore/CMakeLists.linux-aarch64.txt index 4f64ee2e6c..321fa77340 100644 --- a/ydb/core/tx/schemeshard/ut_restore/CMakeLists.linux-aarch64.txt +++ b/ydb/core/tx/schemeshard/ut_restore/CMakeLists.linux-aarch64.txt @@ -39,7 +39,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_restore PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_restore PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_restore.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_restore/ut_restore.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_restore/CMakeLists.linux-x86_64.txt b/ydb/core/tx/schemeshard/ut_restore/CMakeLists.linux-x86_64.txt index b0e1873160..184618adc5 100644 --- a/ydb/core/tx/schemeshard/ut_restore/CMakeLists.linux-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_restore/CMakeLists.linux-x86_64.txt @@ -40,7 +40,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_restore PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_restore PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_restore.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_restore/ut_restore.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_restore/CMakeLists.windows-x86_64.txt b/ydb/core/tx/schemeshard/ut_restore/CMakeLists.windows-x86_64.txt index ae691f4d6a..ff0f4ff92c 100644 --- a/ydb/core/tx/schemeshard/ut_restore/CMakeLists.windows-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_restore/CMakeLists.windows-x86_64.txt @@ -29,7 +29,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_restore PUBLIC yql-sql-pg_dummy ) target_sources(ydb-core-tx-schemeshard-ut_restore PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_restore.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_restore/ut_restore.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_restore.cpp b/ydb/core/tx/schemeshard/ut_restore/ut_restore.cpp index 4963b7eeed..4963b7eeed 100644 --- a/ydb/core/tx/schemeshard/ut_restore.cpp +++ b/ydb/core/tx/schemeshard/ut_restore/ut_restore.cpp diff --git a/ydb/core/tx/schemeshard/ut_rtmr/CMakeLists.darwin-x86_64.txt b/ydb/core/tx/schemeshard/ut_rtmr/CMakeLists.darwin-x86_64.txt index d74258ed4a..48c9fa3fb2 100644 --- a/ydb/core/tx/schemeshard/ut_rtmr/CMakeLists.darwin-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_rtmr/CMakeLists.darwin-x86_64.txt @@ -36,7 +36,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_rtmr PRIVATE CoreFoundation ) target_sources(ydb-core-tx-schemeshard-ut_rtmr PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_rtmr.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_rtmr/ut_rtmr.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_rtmr/CMakeLists.linux-aarch64.txt b/ydb/core/tx/schemeshard/ut_rtmr/CMakeLists.linux-aarch64.txt index dac2780b08..ec81872344 100644 --- a/ydb/core/tx/schemeshard/ut_rtmr/CMakeLists.linux-aarch64.txt +++ b/ydb/core/tx/schemeshard/ut_rtmr/CMakeLists.linux-aarch64.txt @@ -39,7 +39,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_rtmr PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_rtmr PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_rtmr.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_rtmr/ut_rtmr.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_rtmr/CMakeLists.linux-x86_64.txt b/ydb/core/tx/schemeshard/ut_rtmr/CMakeLists.linux-x86_64.txt index 2acd55e7cf..8a6237c2aa 100644 --- a/ydb/core/tx/schemeshard/ut_rtmr/CMakeLists.linux-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_rtmr/CMakeLists.linux-x86_64.txt @@ -40,7 +40,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_rtmr PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_rtmr PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_rtmr.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_rtmr/ut_rtmr.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_rtmr/CMakeLists.windows-x86_64.txt b/ydb/core/tx/schemeshard/ut_rtmr/CMakeLists.windows-x86_64.txt index 3d3d1e6567..37cc2af750 100644 --- a/ydb/core/tx/schemeshard/ut_rtmr/CMakeLists.windows-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_rtmr/CMakeLists.windows-x86_64.txt @@ -29,7 +29,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_rtmr PUBLIC udf-service-exception_policy ) target_sources(ydb-core-tx-schemeshard-ut_rtmr PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_rtmr.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_rtmr/ut_rtmr.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_rtmr.cpp b/ydb/core/tx/schemeshard/ut_rtmr/ut_rtmr.cpp index 8f101cab54..8f101cab54 100644 --- a/ydb/core/tx/schemeshard/ut_rtmr.cpp +++ b/ydb/core/tx/schemeshard/ut_rtmr/ut_rtmr.cpp diff --git a/ydb/core/tx/schemeshard/ut_rtmr_reboots/CMakeLists.darwin-x86_64.txt b/ydb/core/tx/schemeshard/ut_rtmr_reboots/CMakeLists.darwin-x86_64.txt index c3537859a3..2f1c7933bf 100644 --- a/ydb/core/tx/schemeshard/ut_rtmr_reboots/CMakeLists.darwin-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_rtmr_reboots/CMakeLists.darwin-x86_64.txt @@ -36,7 +36,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_rtmr_reboots PRIVATE CoreFoundation ) target_sources(ydb-core-tx-schemeshard-ut_rtmr_reboots PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_rtmr_reboots.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_rtmr_reboots/ut_rtmr_reboots.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_rtmr_reboots/CMakeLists.linux-aarch64.txt b/ydb/core/tx/schemeshard/ut_rtmr_reboots/CMakeLists.linux-aarch64.txt index 0d8315ba7e..0257901019 100644 --- a/ydb/core/tx/schemeshard/ut_rtmr_reboots/CMakeLists.linux-aarch64.txt +++ b/ydb/core/tx/schemeshard/ut_rtmr_reboots/CMakeLists.linux-aarch64.txt @@ -39,7 +39,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_rtmr_reboots PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_rtmr_reboots PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_rtmr_reboots.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_rtmr_reboots/ut_rtmr_reboots.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_rtmr_reboots/CMakeLists.linux-x86_64.txt b/ydb/core/tx/schemeshard/ut_rtmr_reboots/CMakeLists.linux-x86_64.txt index 6cc194764e..12373ee416 100644 --- a/ydb/core/tx/schemeshard/ut_rtmr_reboots/CMakeLists.linux-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_rtmr_reboots/CMakeLists.linux-x86_64.txt @@ -40,7 +40,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_rtmr_reboots PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_rtmr_reboots PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_rtmr_reboots.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_rtmr_reboots/ut_rtmr_reboots.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_rtmr_reboots/CMakeLists.windows-x86_64.txt b/ydb/core/tx/schemeshard/ut_rtmr_reboots/CMakeLists.windows-x86_64.txt index 6e3e8bfe30..49112db674 100644 --- a/ydb/core/tx/schemeshard/ut_rtmr_reboots/CMakeLists.windows-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_rtmr_reboots/CMakeLists.windows-x86_64.txt @@ -29,7 +29,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_rtmr_reboots PUBLIC udf-service-exception_policy ) target_sources(ydb-core-tx-schemeshard-ut_rtmr_reboots PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_rtmr_reboots.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_rtmr_reboots/ut_rtmr_reboots.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_rtmr_reboots.cpp b/ydb/core/tx/schemeshard/ut_rtmr_reboots/ut_rtmr_reboots.cpp index ae094c8d8b..ae094c8d8b 100644 --- a/ydb/core/tx/schemeshard/ut_rtmr_reboots.cpp +++ b/ydb/core/tx/schemeshard/ut_rtmr_reboots/ut_rtmr_reboots.cpp diff --git a/ydb/core/tx/schemeshard/ut_ru_calculator/CMakeLists.darwin-x86_64.txt b/ydb/core/tx/schemeshard/ut_ru_calculator/CMakeLists.darwin-x86_64.txt index b0b76bef0b..962a30d4cb 100644 --- a/ydb/core/tx/schemeshard/ut_ru_calculator/CMakeLists.darwin-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_ru_calculator/CMakeLists.darwin-x86_64.txt @@ -34,7 +34,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_ru_calculator PRIVATE CoreFoundation ) target_sources(ydb-core-tx-schemeshard-ut_ru_calculator PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_ru_calculator.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_ru_calculator/ut_ru_calculator.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_ru_calculator/CMakeLists.linux-aarch64.txt b/ydb/core/tx/schemeshard/ut_ru_calculator/CMakeLists.linux-aarch64.txt index 1d0d46f825..468c66ff4b 100644 --- a/ydb/core/tx/schemeshard/ut_ru_calculator/CMakeLists.linux-aarch64.txt +++ b/ydb/core/tx/schemeshard/ut_ru_calculator/CMakeLists.linux-aarch64.txt @@ -37,7 +37,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_ru_calculator PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_ru_calculator PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_ru_calculator.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_ru_calculator/ut_ru_calculator.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_ru_calculator/CMakeLists.linux-x86_64.txt b/ydb/core/tx/schemeshard/ut_ru_calculator/CMakeLists.linux-x86_64.txt index 3693e09968..02e0aa735b 100644 --- a/ydb/core/tx/schemeshard/ut_ru_calculator/CMakeLists.linux-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_ru_calculator/CMakeLists.linux-x86_64.txt @@ -38,7 +38,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_ru_calculator PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_ru_calculator PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_ru_calculator.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_ru_calculator/ut_ru_calculator.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_ru_calculator/CMakeLists.windows-x86_64.txt b/ydb/core/tx/schemeshard/ut_ru_calculator/CMakeLists.windows-x86_64.txt index 8714853417..0df1b1a956 100644 --- a/ydb/core/tx/schemeshard/ut_ru_calculator/CMakeLists.windows-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_ru_calculator/CMakeLists.windows-x86_64.txt @@ -27,7 +27,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_ru_calculator PUBLIC ydb-services-ydb ) target_sources(ydb-core-tx-schemeshard-ut_ru_calculator PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_ru_calculator.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_ru_calculator/ut_ru_calculator.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_ru_calculator.cpp b/ydb/core/tx/schemeshard/ut_ru_calculator/ut_ru_calculator.cpp index bb0e37459a..bb0e37459a 100644 --- a/ydb/core/tx/schemeshard/ut_ru_calculator.cpp +++ b/ydb/core/tx/schemeshard/ut_ru_calculator/ut_ru_calculator.cpp diff --git a/ydb/core/tx/schemeshard/ut_sequence/CMakeLists.darwin-x86_64.txt b/ydb/core/tx/schemeshard/ut_sequence/CMakeLists.darwin-x86_64.txt index 6c2d84533a..bdaab8f069 100644 --- a/ydb/core/tx/schemeshard/ut_sequence/CMakeLists.darwin-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_sequence/CMakeLists.darwin-x86_64.txt @@ -37,7 +37,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_sequence PRIVATE CoreFoundation ) target_sources(ydb-core-tx-schemeshard-ut_sequence PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_sequence.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_sequence/ut_sequence.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_sequence/CMakeLists.linux-aarch64.txt b/ydb/core/tx/schemeshard/ut_sequence/CMakeLists.linux-aarch64.txt index 4f3641863e..4aef4b3568 100644 --- a/ydb/core/tx/schemeshard/ut_sequence/CMakeLists.linux-aarch64.txt +++ b/ydb/core/tx/schemeshard/ut_sequence/CMakeLists.linux-aarch64.txt @@ -40,7 +40,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_sequence PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_sequence PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_sequence.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_sequence/ut_sequence.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_sequence/CMakeLists.linux-x86_64.txt b/ydb/core/tx/schemeshard/ut_sequence/CMakeLists.linux-x86_64.txt index 6c9d2dfad9..5d0c03b6da 100644 --- a/ydb/core/tx/schemeshard/ut_sequence/CMakeLists.linux-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_sequence/CMakeLists.linux-x86_64.txt @@ -41,7 +41,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_sequence PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_sequence PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_sequence.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_sequence/ut_sequence.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_sequence/CMakeLists.windows-x86_64.txt b/ydb/core/tx/schemeshard/ut_sequence/CMakeLists.windows-x86_64.txt index 19c3b2019e..d0e31d6a0d 100644 --- a/ydb/core/tx/schemeshard/ut_sequence/CMakeLists.windows-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_sequence/CMakeLists.windows-x86_64.txt @@ -30,7 +30,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_sequence PUBLIC udf-service-exception_policy ) target_sources(ydb-core-tx-schemeshard-ut_sequence PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_sequence.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_sequence/ut_sequence.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_sequence.cpp b/ydb/core/tx/schemeshard/ut_sequence/ut_sequence.cpp index 2056b24ff8..2056b24ff8 100644 --- a/ydb/core/tx/schemeshard/ut_sequence.cpp +++ b/ydb/core/tx/schemeshard/ut_sequence/ut_sequence.cpp diff --git a/ydb/core/tx/schemeshard/ut_sequence_reboots/CMakeLists.darwin-x86_64.txt b/ydb/core/tx/schemeshard/ut_sequence_reboots/CMakeLists.darwin-x86_64.txt index ef2eafc997..dbe3e93e31 100644 --- a/ydb/core/tx/schemeshard/ut_sequence_reboots/CMakeLists.darwin-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_sequence_reboots/CMakeLists.darwin-x86_64.txt @@ -37,7 +37,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_sequence_reboots PRIVATE CoreFoundation ) target_sources(ydb-core-tx-schemeshard-ut_sequence_reboots PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_sequence_reboots.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_sequence_reboots/ut_sequence_reboots.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_sequence_reboots/CMakeLists.linux-aarch64.txt b/ydb/core/tx/schemeshard/ut_sequence_reboots/CMakeLists.linux-aarch64.txt index 7adaf2e427..59bd5e3162 100644 --- a/ydb/core/tx/schemeshard/ut_sequence_reboots/CMakeLists.linux-aarch64.txt +++ b/ydb/core/tx/schemeshard/ut_sequence_reboots/CMakeLists.linux-aarch64.txt @@ -40,7 +40,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_sequence_reboots PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_sequence_reboots PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_sequence_reboots.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_sequence_reboots/ut_sequence_reboots.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_sequence_reboots/CMakeLists.linux-x86_64.txt b/ydb/core/tx/schemeshard/ut_sequence_reboots/CMakeLists.linux-x86_64.txt index bb7aa601c6..9546d23b22 100644 --- a/ydb/core/tx/schemeshard/ut_sequence_reboots/CMakeLists.linux-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_sequence_reboots/CMakeLists.linux-x86_64.txt @@ -41,7 +41,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_sequence_reboots PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_sequence_reboots PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_sequence_reboots.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_sequence_reboots/ut_sequence_reboots.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_sequence_reboots/CMakeLists.windows-x86_64.txt b/ydb/core/tx/schemeshard/ut_sequence_reboots/CMakeLists.windows-x86_64.txt index 98fe31819e..16638ec57c 100644 --- a/ydb/core/tx/schemeshard/ut_sequence_reboots/CMakeLists.windows-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_sequence_reboots/CMakeLists.windows-x86_64.txt @@ -30,7 +30,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_sequence_reboots PUBLIC udf-service-exception_policy ) target_sources(ydb-core-tx-schemeshard-ut_sequence_reboots PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_sequence_reboots.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_sequence_reboots/ut_sequence_reboots.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_sequence_reboots.cpp b/ydb/core/tx/schemeshard/ut_sequence_reboots/ut_sequence_reboots.cpp index d0553d6ad4..d0553d6ad4 100644 --- a/ydb/core/tx/schemeshard/ut_sequence_reboots.cpp +++ b/ydb/core/tx/schemeshard/ut_sequence_reboots/ut_sequence_reboots.cpp diff --git a/ydb/core/tx/schemeshard/ut_serverless/CMakeLists.darwin-x86_64.txt b/ydb/core/tx/schemeshard/ut_serverless/CMakeLists.darwin-x86_64.txt index 8fbc9517c4..ad19c0800c 100644 --- a/ydb/core/tx/schemeshard/ut_serverless/CMakeLists.darwin-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_serverless/CMakeLists.darwin-x86_64.txt @@ -36,7 +36,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_serverless PRIVATE CoreFoundation ) target_sources(ydb-core-tx-schemeshard-ut_serverless PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_serverless.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_serverless/ut_serverless.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_serverless/CMakeLists.linux-aarch64.txt b/ydb/core/tx/schemeshard/ut_serverless/CMakeLists.linux-aarch64.txt index 305406a3d1..8b8631e4f3 100644 --- a/ydb/core/tx/schemeshard/ut_serverless/CMakeLists.linux-aarch64.txt +++ b/ydb/core/tx/schemeshard/ut_serverless/CMakeLists.linux-aarch64.txt @@ -39,7 +39,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_serverless PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_serverless PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_serverless.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_serverless/ut_serverless.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_serverless/CMakeLists.linux-x86_64.txt b/ydb/core/tx/schemeshard/ut_serverless/CMakeLists.linux-x86_64.txt index ca9fb0e185..86a42c0d8c 100644 --- a/ydb/core/tx/schemeshard/ut_serverless/CMakeLists.linux-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_serverless/CMakeLists.linux-x86_64.txt @@ -40,7 +40,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_serverless PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_serverless PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_serverless.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_serverless/ut_serverless.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_serverless/CMakeLists.windows-x86_64.txt b/ydb/core/tx/schemeshard/ut_serverless/CMakeLists.windows-x86_64.txt index 8d0eb85b38..1bef091afb 100644 --- a/ydb/core/tx/schemeshard/ut_serverless/CMakeLists.windows-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_serverless/CMakeLists.windows-x86_64.txt @@ -29,7 +29,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_serverless PUBLIC ydb-core-yql_testlib ) target_sources(ydb-core-tx-schemeshard-ut_serverless PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_serverless.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_serverless/ut_serverless.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_serverless.cpp b/ydb/core/tx/schemeshard/ut_serverless/ut_serverless.cpp index 25d36229ea..25d36229ea 100644 --- a/ydb/core/tx/schemeshard/ut_serverless.cpp +++ b/ydb/core/tx/schemeshard/ut_serverless/ut_serverless.cpp diff --git a/ydb/core/tx/schemeshard/ut_split_merge/CMakeLists.darwin-x86_64.txt b/ydb/core/tx/schemeshard/ut_split_merge/CMakeLists.darwin-x86_64.txt index 1e06329af7..3da13e83de 100644 --- a/ydb/core/tx/schemeshard/ut_split_merge/CMakeLists.darwin-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_split_merge/CMakeLists.darwin-x86_64.txt @@ -36,7 +36,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_split_merge PRIVATE CoreFoundation ) target_sources(ydb-core-tx-schemeshard-ut_split_merge PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_split_merge.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_split_merge/ut_split_merge.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_split_merge/CMakeLists.linux-aarch64.txt b/ydb/core/tx/schemeshard/ut_split_merge/CMakeLists.linux-aarch64.txt index f7fdc392de..fdd8b41a6a 100644 --- a/ydb/core/tx/schemeshard/ut_split_merge/CMakeLists.linux-aarch64.txt +++ b/ydb/core/tx/schemeshard/ut_split_merge/CMakeLists.linux-aarch64.txt @@ -39,7 +39,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_split_merge PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_split_merge PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_split_merge.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_split_merge/ut_split_merge.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_split_merge/CMakeLists.linux-x86_64.txt b/ydb/core/tx/schemeshard/ut_split_merge/CMakeLists.linux-x86_64.txt index f7eb133d6d..0239c347c6 100644 --- a/ydb/core/tx/schemeshard/ut_split_merge/CMakeLists.linux-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_split_merge/CMakeLists.linux-x86_64.txt @@ -40,7 +40,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_split_merge PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_split_merge PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_split_merge.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_split_merge/ut_split_merge.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_split_merge/CMakeLists.windows-x86_64.txt b/ydb/core/tx/schemeshard/ut_split_merge/CMakeLists.windows-x86_64.txt index fd960b9152..e8f8600bb9 100644 --- a/ydb/core/tx/schemeshard/ut_split_merge/CMakeLists.windows-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_split_merge/CMakeLists.windows-x86_64.txt @@ -29,7 +29,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_split_merge PUBLIC udf-service-exception_policy ) target_sources(ydb-core-tx-schemeshard-ut_split_merge PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_split_merge.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_split_merge/ut_split_merge.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_split_merge.cpp b/ydb/core/tx/schemeshard/ut_split_merge/ut_split_merge.cpp index 8c6b60fedd..8c6b60fedd 100644 --- a/ydb/core/tx/schemeshard/ut_split_merge.cpp +++ b/ydb/core/tx/schemeshard/ut_split_merge/ut_split_merge.cpp diff --git a/ydb/core/tx/schemeshard/ut_split_merge_reboots/CMakeLists.darwin-x86_64.txt b/ydb/core/tx/schemeshard/ut_split_merge_reboots/CMakeLists.darwin-x86_64.txt index 00d6cc9e93..919b33e94a 100644 --- a/ydb/core/tx/schemeshard/ut_split_merge_reboots/CMakeLists.darwin-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_split_merge_reboots/CMakeLists.darwin-x86_64.txt @@ -36,7 +36,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_split_merge_reboots PRIVATE CoreFoundation ) target_sources(ydb-core-tx-schemeshard-ut_split_merge_reboots PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_split_merge_reboots.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_split_merge_reboots/ut_split_merge_reboots.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_split_merge_reboots/CMakeLists.linux-aarch64.txt b/ydb/core/tx/schemeshard/ut_split_merge_reboots/CMakeLists.linux-aarch64.txt index 2c3eb8d229..677a817d31 100644 --- a/ydb/core/tx/schemeshard/ut_split_merge_reboots/CMakeLists.linux-aarch64.txt +++ b/ydb/core/tx/schemeshard/ut_split_merge_reboots/CMakeLists.linux-aarch64.txt @@ -39,7 +39,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_split_merge_reboots PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_split_merge_reboots PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_split_merge_reboots.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_split_merge_reboots/ut_split_merge_reboots.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_split_merge_reboots/CMakeLists.linux-x86_64.txt b/ydb/core/tx/schemeshard/ut_split_merge_reboots/CMakeLists.linux-x86_64.txt index 0f066b191e..b882f857f8 100644 --- a/ydb/core/tx/schemeshard/ut_split_merge_reboots/CMakeLists.linux-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_split_merge_reboots/CMakeLists.linux-x86_64.txt @@ -40,7 +40,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_split_merge_reboots PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_split_merge_reboots PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_split_merge_reboots.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_split_merge_reboots/ut_split_merge_reboots.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_split_merge_reboots/CMakeLists.windows-x86_64.txt b/ydb/core/tx/schemeshard/ut_split_merge_reboots/CMakeLists.windows-x86_64.txt index 0317603249..ccc2b39258 100644 --- a/ydb/core/tx/schemeshard/ut_split_merge_reboots/CMakeLists.windows-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_split_merge_reboots/CMakeLists.windows-x86_64.txt @@ -29,7 +29,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_split_merge_reboots PUBLIC udf-service-exception_policy ) target_sources(ydb-core-tx-schemeshard-ut_split_merge_reboots PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_split_merge_reboots.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_split_merge_reboots/ut_split_merge_reboots.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_split_merge_reboots.cpp b/ydb/core/tx/schemeshard/ut_split_merge_reboots/ut_split_merge_reboots.cpp index 140236fa6b..140236fa6b 100644 --- a/ydb/core/tx/schemeshard/ut_split_merge_reboots.cpp +++ b/ydb/core/tx/schemeshard/ut_split_merge_reboots/ut_split_merge_reboots.cpp diff --git a/ydb/core/tx/schemeshard/ut_stats/CMakeLists.darwin-x86_64.txt b/ydb/core/tx/schemeshard/ut_stats/CMakeLists.darwin-x86_64.txt index dde2fbc754..c9884411dd 100644 --- a/ydb/core/tx/schemeshard/ut_stats/CMakeLists.darwin-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_stats/CMakeLists.darwin-x86_64.txt @@ -36,7 +36,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_stats PRIVATE CoreFoundation ) target_sources(ydb-core-tx-schemeshard-ut_stats PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_stats.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_stats/ut_stats.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_stats/CMakeLists.linux-aarch64.txt b/ydb/core/tx/schemeshard/ut_stats/CMakeLists.linux-aarch64.txt index 7443f5be2d..d6bbf763a3 100644 --- a/ydb/core/tx/schemeshard/ut_stats/CMakeLists.linux-aarch64.txt +++ b/ydb/core/tx/schemeshard/ut_stats/CMakeLists.linux-aarch64.txt @@ -39,7 +39,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_stats PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_stats PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_stats.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_stats/ut_stats.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_stats/CMakeLists.linux-x86_64.txt b/ydb/core/tx/schemeshard/ut_stats/CMakeLists.linux-x86_64.txt index 9b7d6d8f02..65fe40cc98 100644 --- a/ydb/core/tx/schemeshard/ut_stats/CMakeLists.linux-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_stats/CMakeLists.linux-x86_64.txt @@ -40,7 +40,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_stats PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_stats PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_stats.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_stats/ut_stats.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_stats/CMakeLists.windows-x86_64.txt b/ydb/core/tx/schemeshard/ut_stats/CMakeLists.windows-x86_64.txt index 01c1db0f06..faa6d3e7d4 100644 --- a/ydb/core/tx/schemeshard/ut_stats/CMakeLists.windows-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_stats/CMakeLists.windows-x86_64.txt @@ -29,7 +29,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_stats PUBLIC core-wrappers-ut_helpers ) target_sources(ydb-core-tx-schemeshard-ut_stats PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_stats.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_stats/ut_stats.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_stats.cpp b/ydb/core/tx/schemeshard/ut_stats/ut_stats.cpp index 7967f72c54..7967f72c54 100644 --- a/ydb/core/tx/schemeshard/ut_stats.cpp +++ b/ydb/core/tx/schemeshard/ut_stats/ut_stats.cpp diff --git a/ydb/core/tx/schemeshard/ut_subdomain/CMakeLists.darwin-x86_64.txt b/ydb/core/tx/schemeshard/ut_subdomain/CMakeLists.darwin-x86_64.txt index 0699f6a267..49cf2eba94 100644 --- a/ydb/core/tx/schemeshard/ut_subdomain/CMakeLists.darwin-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_subdomain/CMakeLists.darwin-x86_64.txt @@ -36,7 +36,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_subdomain PRIVATE CoreFoundation ) target_sources(ydb-core-tx-schemeshard-ut_subdomain PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_subdomain.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_subdomain/ut_subdomain.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_subdomain/CMakeLists.linux-aarch64.txt b/ydb/core/tx/schemeshard/ut_subdomain/CMakeLists.linux-aarch64.txt index 73c4894d87..5b24ec33e7 100644 --- a/ydb/core/tx/schemeshard/ut_subdomain/CMakeLists.linux-aarch64.txt +++ b/ydb/core/tx/schemeshard/ut_subdomain/CMakeLists.linux-aarch64.txt @@ -39,7 +39,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_subdomain PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_subdomain PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_subdomain.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_subdomain/ut_subdomain.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_subdomain/CMakeLists.linux-x86_64.txt b/ydb/core/tx/schemeshard/ut_subdomain/CMakeLists.linux-x86_64.txt index 70f3a4c2ff..db0f79f48b 100644 --- a/ydb/core/tx/schemeshard/ut_subdomain/CMakeLists.linux-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_subdomain/CMakeLists.linux-x86_64.txt @@ -40,7 +40,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_subdomain PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_subdomain PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_subdomain.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_subdomain/ut_subdomain.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_subdomain/CMakeLists.windows-x86_64.txt b/ydb/core/tx/schemeshard/ut_subdomain/CMakeLists.windows-x86_64.txt index 2d60b6450b..944e7a94c5 100644 --- a/ydb/core/tx/schemeshard/ut_subdomain/CMakeLists.windows-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_subdomain/CMakeLists.windows-x86_64.txt @@ -29,7 +29,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_subdomain PUBLIC udf-service-exception_policy ) target_sources(ydb-core-tx-schemeshard-ut_subdomain PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_subdomain.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_subdomain/ut_subdomain.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_subdomain.cpp b/ydb/core/tx/schemeshard/ut_subdomain/ut_subdomain.cpp index 2fd2050a03..2fd2050a03 100644 --- a/ydb/core/tx/schemeshard/ut_subdomain.cpp +++ b/ydb/core/tx/schemeshard/ut_subdomain/ut_subdomain.cpp diff --git a/ydb/core/tx/schemeshard/ut_subdomain_reboots/CMakeLists.darwin-x86_64.txt b/ydb/core/tx/schemeshard/ut_subdomain_reboots/CMakeLists.darwin-x86_64.txt index 897d3660fd..1b55bd6d4e 100644 --- a/ydb/core/tx/schemeshard/ut_subdomain_reboots/CMakeLists.darwin-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_subdomain_reboots/CMakeLists.darwin-x86_64.txt @@ -36,7 +36,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_subdomain_reboots PRIVATE CoreFoundation ) target_sources(ydb-core-tx-schemeshard-ut_subdomain_reboots PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_subdomain_reboots.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_subdomain_reboots/ut_subdomain_reboots.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_subdomain_reboots/CMakeLists.linux-aarch64.txt b/ydb/core/tx/schemeshard/ut_subdomain_reboots/CMakeLists.linux-aarch64.txt index 0c185c2a88..92edcc81bb 100644 --- a/ydb/core/tx/schemeshard/ut_subdomain_reboots/CMakeLists.linux-aarch64.txt +++ b/ydb/core/tx/schemeshard/ut_subdomain_reboots/CMakeLists.linux-aarch64.txt @@ -39,7 +39,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_subdomain_reboots PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_subdomain_reboots PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_subdomain_reboots.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_subdomain_reboots/ut_subdomain_reboots.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_subdomain_reboots/CMakeLists.linux-x86_64.txt b/ydb/core/tx/schemeshard/ut_subdomain_reboots/CMakeLists.linux-x86_64.txt index cbecc79f2c..c434e14797 100644 --- a/ydb/core/tx/schemeshard/ut_subdomain_reboots/CMakeLists.linux-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_subdomain_reboots/CMakeLists.linux-x86_64.txt @@ -40,7 +40,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_subdomain_reboots PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_subdomain_reboots PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_subdomain_reboots.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_subdomain_reboots/ut_subdomain_reboots.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_subdomain_reboots/CMakeLists.windows-x86_64.txt b/ydb/core/tx/schemeshard/ut_subdomain_reboots/CMakeLists.windows-x86_64.txt index d1fa11cda9..b35a20cff7 100644 --- a/ydb/core/tx/schemeshard/ut_subdomain_reboots/CMakeLists.windows-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_subdomain_reboots/CMakeLists.windows-x86_64.txt @@ -29,7 +29,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_subdomain_reboots PUBLIC udf-service-exception_policy ) target_sources(ydb-core-tx-schemeshard-ut_subdomain_reboots PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_subdomain_reboots.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_subdomain_reboots/ut_subdomain_reboots.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_subdomain_reboots.cpp b/ydb/core/tx/schemeshard/ut_subdomain_reboots/ut_subdomain_reboots.cpp index 890a48d908..890a48d908 100644 --- a/ydb/core/tx/schemeshard/ut_subdomain_reboots.cpp +++ b/ydb/core/tx/schemeshard/ut_subdomain_reboots/ut_subdomain_reboots.cpp diff --git a/ydb/core/tx/schemeshard/ut_topic_splitmerge/CMakeLists.darwin-x86_64.txt b/ydb/core/tx/schemeshard/ut_topic_splitmerge/CMakeLists.darwin-x86_64.txt index bbccee1d1e..a73fe9a8a5 100644 --- a/ydb/core/tx/schemeshard/ut_topic_splitmerge/CMakeLists.darwin-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_topic_splitmerge/CMakeLists.darwin-x86_64.txt @@ -37,7 +37,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_topic_splitmerge PRIVATE CoreFoundation ) target_sources(ydb-core-tx-schemeshard-ut_topic_splitmerge PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_topic_splitmerge.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_topic_splitmerge/ut_topic_splitmerge.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_topic_splitmerge/CMakeLists.linux-aarch64.txt b/ydb/core/tx/schemeshard/ut_topic_splitmerge/CMakeLists.linux-aarch64.txt index 9edc1030c3..24cc09d92f 100644 --- a/ydb/core/tx/schemeshard/ut_topic_splitmerge/CMakeLists.linux-aarch64.txt +++ b/ydb/core/tx/schemeshard/ut_topic_splitmerge/CMakeLists.linux-aarch64.txt @@ -40,7 +40,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_topic_splitmerge PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_topic_splitmerge PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_topic_splitmerge.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_topic_splitmerge/ut_topic_splitmerge.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_topic_splitmerge/CMakeLists.linux-x86_64.txt b/ydb/core/tx/schemeshard/ut_topic_splitmerge/CMakeLists.linux-x86_64.txt index 733b2dbe23..d546519bea 100644 --- a/ydb/core/tx/schemeshard/ut_topic_splitmerge/CMakeLists.linux-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_topic_splitmerge/CMakeLists.linux-x86_64.txt @@ -41,7 +41,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_topic_splitmerge PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_topic_splitmerge PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_topic_splitmerge.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_topic_splitmerge/ut_topic_splitmerge.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_topic_splitmerge/CMakeLists.windows-x86_64.txt b/ydb/core/tx/schemeshard/ut_topic_splitmerge/CMakeLists.windows-x86_64.txt index b876d90ea8..c0d3bd8cdc 100644 --- a/ydb/core/tx/schemeshard/ut_topic_splitmerge/CMakeLists.windows-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_topic_splitmerge/CMakeLists.windows-x86_64.txt @@ -30,7 +30,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_topic_splitmerge PUBLIC udf-service-exception_policy ) target_sources(ydb-core-tx-schemeshard-ut_topic_splitmerge PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_topic_splitmerge.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_topic_splitmerge/ut_topic_splitmerge.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_topic_splitmerge.cpp b/ydb/core/tx/schemeshard/ut_topic_splitmerge/ut_topic_splitmerge.cpp index c5e00ec440..c5e00ec440 100644 --- a/ydb/core/tx/schemeshard/ut_topic_splitmerge.cpp +++ b/ydb/core/tx/schemeshard/ut_topic_splitmerge/ut_topic_splitmerge.cpp diff --git a/ydb/core/tx/schemeshard/ut_ttl/CMakeLists.darwin-x86_64.txt b/ydb/core/tx/schemeshard/ut_ttl/CMakeLists.darwin-x86_64.txt index 9affe7d6f1..e9e69878f2 100644 --- a/ydb/core/tx/schemeshard/ut_ttl/CMakeLists.darwin-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_ttl/CMakeLists.darwin-x86_64.txt @@ -32,7 +32,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_ttl PRIVATE CoreFoundation ) target_sources(ydb-core-tx-schemeshard-ut_ttl PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_ttl.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_ttl/ut_ttl.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_ttl/CMakeLists.linux-aarch64.txt b/ydb/core/tx/schemeshard/ut_ttl/CMakeLists.linux-aarch64.txt index f499d1e3d4..c7e7c5a263 100644 --- a/ydb/core/tx/schemeshard/ut_ttl/CMakeLists.linux-aarch64.txt +++ b/ydb/core/tx/schemeshard/ut_ttl/CMakeLists.linux-aarch64.txt @@ -35,7 +35,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_ttl PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_ttl PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_ttl.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_ttl/ut_ttl.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_ttl/CMakeLists.linux-x86_64.txt b/ydb/core/tx/schemeshard/ut_ttl/CMakeLists.linux-x86_64.txt index a66f17706e..0de2d74b9a 100644 --- a/ydb/core/tx/schemeshard/ut_ttl/CMakeLists.linux-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_ttl/CMakeLists.linux-x86_64.txt @@ -36,7 +36,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_ttl PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_ttl PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_ttl.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_ttl/ut_ttl.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_ttl/CMakeLists.windows-x86_64.txt b/ydb/core/tx/schemeshard/ut_ttl/CMakeLists.windows-x86_64.txt index 0da3f4319b..72e26c488a 100644 --- a/ydb/core/tx/schemeshard/ut_ttl/CMakeLists.windows-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_ttl/CMakeLists.windows-x86_64.txt @@ -25,7 +25,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_ttl PUBLIC yql-sql-pg_dummy ) target_sources(ydb-core-tx-schemeshard-ut_ttl PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_ttl.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_ttl/ut_ttl.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_ttl.cpp b/ydb/core/tx/schemeshard/ut_ttl/ut_ttl.cpp index 49d3478446..49d3478446 100644 --- a/ydb/core/tx/schemeshard/ut_ttl.cpp +++ b/ydb/core/tx/schemeshard/ut_ttl/ut_ttl.cpp diff --git a/ydb/core/tx/schemeshard/ut_user_attributes/CMakeLists.darwin-x86_64.txt b/ydb/core/tx/schemeshard/ut_user_attributes/CMakeLists.darwin-x86_64.txt index 4cdc3c2cf0..97ac58c112 100644 --- a/ydb/core/tx/schemeshard/ut_user_attributes/CMakeLists.darwin-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_user_attributes/CMakeLists.darwin-x86_64.txt @@ -46,7 +46,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_user_attributes PRIVATE CoreFoundation ) target_sources(ydb-core-tx-schemeshard-ut_user_attributes PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_user_attributes.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_user_attributes/ut_user_attributes.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_user_attributes/CMakeLists.linux-aarch64.txt b/ydb/core/tx/schemeshard/ut_user_attributes/CMakeLists.linux-aarch64.txt index 9da580251c..78ea6fce04 100644 --- a/ydb/core/tx/schemeshard/ut_user_attributes/CMakeLists.linux-aarch64.txt +++ b/ydb/core/tx/schemeshard/ut_user_attributes/CMakeLists.linux-aarch64.txt @@ -49,7 +49,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_user_attributes PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_user_attributes PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_user_attributes.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_user_attributes/ut_user_attributes.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_user_attributes/CMakeLists.linux-x86_64.txt b/ydb/core/tx/schemeshard/ut_user_attributes/CMakeLists.linux-x86_64.txt index 81fc6c4151..293b90ebdb 100644 --- a/ydb/core/tx/schemeshard/ut_user_attributes/CMakeLists.linux-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_user_attributes/CMakeLists.linux-x86_64.txt @@ -50,7 +50,7 @@ target_link_options(ydb-core-tx-schemeshard-ut_user_attributes PRIVATE -ldl ) target_sources(ydb-core-tx-schemeshard-ut_user_attributes PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_user_attributes.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_user_attributes/ut_user_attributes.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_user_attributes/CMakeLists.windows-x86_64.txt b/ydb/core/tx/schemeshard/ut_user_attributes/CMakeLists.windows-x86_64.txt index 6a5e249028..5277810f94 100644 --- a/ydb/core/tx/schemeshard/ut_user_attributes/CMakeLists.windows-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_user_attributes/CMakeLists.windows-x86_64.txt @@ -39,7 +39,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_user_attributes PUBLIC yql-public-issue ) target_sources(ydb-core-tx-schemeshard-ut_user_attributes PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_user_attributes.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_user_attributes/ut_user_attributes.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_user_attributes.cpp b/ydb/core/tx/schemeshard/ut_user_attributes/ut_user_attributes.cpp index 48a63f877e..48a63f877e 100644 --- a/ydb/core/tx/schemeshard/ut_user_attributes.cpp +++ b/ydb/core/tx/schemeshard/ut_user_attributes/ut_user_attributes.cpp diff --git a/ydb/core/tx/schemeshard/ut_user_attributes_reboots/CMakeLists.darwin-x86_64.txt b/ydb/core/tx/schemeshard/ut_user_attributes_reboots/CMakeLists.darwin-x86_64.txt index b354d1a247..b8c626c2cf 100644 --- a/ydb/core/tx/schemeshard/ut_user_attributes_reboots/CMakeLists.darwin-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_user_attributes_reboots/CMakeLists.darwin-x86_64.txt @@ -36,7 +36,7 @@ target_link_options(core-tx-schemeshard-ut_user_attributes_reboots PRIVATE CoreFoundation ) target_sources(core-tx-schemeshard-ut_user_attributes_reboots PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_user_attributes_reboots.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_user_attributes_reboots/ut_user_attributes_reboots.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_user_attributes_reboots/CMakeLists.linux-aarch64.txt b/ydb/core/tx/schemeshard/ut_user_attributes_reboots/CMakeLists.linux-aarch64.txt index c530c60204..4cd905e56c 100644 --- a/ydb/core/tx/schemeshard/ut_user_attributes_reboots/CMakeLists.linux-aarch64.txt +++ b/ydb/core/tx/schemeshard/ut_user_attributes_reboots/CMakeLists.linux-aarch64.txt @@ -39,7 +39,7 @@ target_link_options(core-tx-schemeshard-ut_user_attributes_reboots PRIVATE -ldl ) target_sources(core-tx-schemeshard-ut_user_attributes_reboots PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_user_attributes_reboots.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_user_attributes_reboots/ut_user_attributes_reboots.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_user_attributes_reboots/CMakeLists.linux-x86_64.txt b/ydb/core/tx/schemeshard/ut_user_attributes_reboots/CMakeLists.linux-x86_64.txt index 8f7923cd9f..84ac775ea0 100644 --- a/ydb/core/tx/schemeshard/ut_user_attributes_reboots/CMakeLists.linux-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_user_attributes_reboots/CMakeLists.linux-x86_64.txt @@ -40,7 +40,7 @@ target_link_options(core-tx-schemeshard-ut_user_attributes_reboots PRIVATE -ldl ) target_sources(core-tx-schemeshard-ut_user_attributes_reboots PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_user_attributes_reboots.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_user_attributes_reboots/ut_user_attributes_reboots.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_user_attributes_reboots/CMakeLists.windows-x86_64.txt b/ydb/core/tx/schemeshard/ut_user_attributes_reboots/CMakeLists.windows-x86_64.txt index 5afb454121..d9ff9652ae 100644 --- a/ydb/core/tx/schemeshard/ut_user_attributes_reboots/CMakeLists.windows-x86_64.txt +++ b/ydb/core/tx/schemeshard/ut_user_attributes_reboots/CMakeLists.windows-x86_64.txt @@ -29,7 +29,7 @@ target_link_libraries(core-tx-schemeshard-ut_user_attributes_reboots PUBLIC udf-service-exception_policy ) target_sources(core-tx-schemeshard-ut_user_attributes_reboots PRIVATE - ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_user_attributes_reboots.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/ut_user_attributes_reboots/ut_user_attributes_reboots.cpp ) set_property( TARGET diff --git a/ydb/core/tx/schemeshard/ut_user_attributes_reboots.cpp b/ydb/core/tx/schemeshard/ut_user_attributes_reboots/ut_user_attributes_reboots.cpp index 8b58b94b0d..8b58b94b0d 100644 --- a/ydb/core/tx/schemeshard/ut_user_attributes_reboots.cpp +++ b/ydb/core/tx/schemeshard/ut_user_attributes_reboots/ut_user_attributes_reboots.cpp diff --git a/ydb/core/tx/schemeshard/ya.make b/ydb/core/tx/schemeshard/ya.make index 54a72e930c..643ad6851c 100644 --- a/ydb/core/tx/schemeshard/ya.make +++ b/ydb/core/tx/schemeshard/ya.make @@ -1,5 +1,6 @@ RECURSE_FOR_TESTS( ut_async_index + ut_auditsettings ut_backup ut_base ut_base_reboots @@ -24,7 +25,6 @@ RECURSE_FOR_TESTS( ut_move_reboots ut_olap ut_olap_reboots - ut_pq ut_pq_reboots ut_reboots ut_replication diff --git a/ydb/core/tx/sequenceproxy/sequenceproxy_allocate.cpp b/ydb/core/tx/sequenceproxy/sequenceproxy_allocate.cpp index 4f3a8f645a..791e4c2e86 100644 --- a/ydb/core/tx/sequenceproxy/sequenceproxy_allocate.cpp +++ b/ydb/core/tx/sequenceproxy/sequenceproxy_allocate.cpp @@ -9,7 +9,7 @@ #include <util/string/builder.h> #define TXLOG_LOG(priority, stream) \ - LOG_LOG_S(*TlsActivationContext, priority, NKikimrServices::LONG_TX_SERVICE, LogPrefix << stream) + LOG_LOG_S(*TlsActivationContext, priority, NKikimrServices::SEQUENCEPROXY, LogPrefix << stream) #define TXLOG_DEBUG(stream) TXLOG_LOG(NActors::NLog::PRI_DEBUG, stream) #define TXLOG_NOTICE(stream) TXLOG_LOG(NActors::NLog::PRI_NOTICE, stream) #define TXLOG_ERROR(stream) TXLOG_LOG(NActors::NLog::PRI_ERROR, stream) diff --git a/ydb/core/tx/sequenceproxy/sequenceproxy_impl.cpp b/ydb/core/tx/sequenceproxy/sequenceproxy_impl.cpp index f421ecf8dd..d3a7de3514 100644 --- a/ydb/core/tx/sequenceproxy/sequenceproxy_impl.cpp +++ b/ydb/core/tx/sequenceproxy/sequenceproxy_impl.cpp @@ -7,7 +7,7 @@ #include <util/string/builder.h> #define TXLOG_LOG(priority, stream) \ - LOG_LOG_S(*TlsActivationContext, priority, NKikimrServices::LONG_TX_SERVICE, LogPrefix << stream) + LOG_LOG_S(*TlsActivationContext, priority, NKikimrServices::SEQUENCEPROXY, LogPrefix << stream) #define TXLOG_DEBUG(stream) TXLOG_LOG(NActors::NLog::PRI_DEBUG, stream) #define TXLOG_NOTICE(stream) TXLOG_LOG(NActors::NLog::PRI_NOTICE, stream) #define TXLOG_ERROR(stream) TXLOG_LOG(NActors::NLog::PRI_ERROR, stream) @@ -37,18 +37,18 @@ namespace NSequenceProxy { msg->Path); } - void TSequenceProxy::DoNextVal(TNextValRequestInfo&& request, const TString& database, const TString& path) { - auto& info = Databases[database].SequenceByName[path]; - if (!info.ResolveInProgress) { + void TSequenceProxy::MaybeStartResolve(const TString& database, const TString& path, TSequenceByName& info) { + if (!info.ResolveInProgress && !info.NewNextValResolve.empty()) { + info.PendingNextValResolve = std::move(info.NewNextValResolve); StartResolve(database, path, !info.PathId); info.ResolveInProgress = true; } - if (!info.PathId) { - info.PendingNextValResolve.emplace_back(std::move(request)); - return; - } + } - DoNextVal(std::move(request), database, info.PathId, /* needRefresh */ false); + void TSequenceProxy::DoNextVal(TNextValRequestInfo&& request, const TString& database, const TString& path) { + auto& info = Databases[database].SequenceByName[path]; + info.NewNextValResolve.emplace_back(std::move(request)); + MaybeStartResolve(database, path, info); } void TSequenceProxy::DoNextVal(TNextValRequestInfo&& request, const TString& database, const TPathId& pathId, bool needRefresh) { @@ -77,80 +77,74 @@ namespace NSequenceProxy { OnChanged(database, pathId, info); } - void TSequenceProxy::Handle(TEvPrivate::TEvResolveResult::TPtr& ev) { - auto* msg = ev->Get(); - auto it = ResolveInFlight.find(ev->Cookie); - Y_VERIFY(it != ResolveInFlight.end()); - auto database = it->second.Database; - auto path = it->second.Path; - ResolveInFlight.erase(it); + void TSequenceProxy::OnResolveError(const TString& database, const TString& path, Ydb::StatusIds::StatusCode status, NYql::TIssues&& issues) { + auto& info = Databases[database].SequenceByName[path]; + Y_VERIFY(info.ResolveInProgress); + info.ResolveInProgress = false; - std::visit( - [&](const auto& path) { - OnResolveResult(database, path, msg); - }, - path); + while (!info.PendingNextValResolve.empty()) { + const auto& request = info.PendingNextValResolve.front(); + Send(request.Sender, new TEvSequenceProxy::TEvNextValResult(status, issues), 0, request.Cookie); + info.PendingNextValResolve.pop_front(); + } + + MaybeStartResolve(database, path, info); } - void TSequenceProxy::OnResolveResult(const TString& database, const TString& path, TEvPrivate::TEvResolveResult* msg) { + void TSequenceProxy::OnResolveResult(const TString& database, const TString& path, TResolveResult&& result) { auto& info = Databases[database].SequenceByName[path]; Y_VERIFY(info.ResolveInProgress); info.ResolveInProgress = false; - if (msg->Status != Ydb::StatusIds::SUCCESS) { - while (!info.PendingNextValResolve.empty()) { - const auto& request = info.PendingNextValResolve.front(); - Send(request.Sender, new TEvSequenceProxy::TEvNextValResult(msg->Status, msg->Issues), 0, request.Cookie); - info.PendingNextValResolve.pop_front(); - } - return; - } - - auto pathId = msg->PathId; + auto pathId = result.PathId; Y_VERIFY(pathId); info.PathId = pathId; - Y_VERIFY(msg->SequenceInfo); + Y_VERIFY(result.SequenceInfo); auto& infoById = Databases[database].SequenceByPathId[pathId]; - infoById.SequenceInfo = msg->SequenceInfo; - infoById.SecurityObject = msg->SecurityObject; - infoById.PendingNextValResolve.splice(infoById.PendingNextValResolve.end(), info.PendingNextValResolve); - OnResolved(database, pathId, infoById); + infoById.SequenceInfo = result.SequenceInfo; + infoById.SecurityObject = result.SecurityObject; + OnResolved(database, pathId, infoById, info.PendingNextValResolve); + + MaybeStartResolve(database, path, info); } - void TSequenceProxy::OnResolveResult(const TString& database, const TPathId& pathId, TEvPrivate::TEvResolveResult* msg) { + void TSequenceProxy::OnResolveError(const TString& database, const TPathId& pathId, Ydb::StatusIds::StatusCode status, NYql::TIssues&& issues) { auto& info = Databases[database].SequenceByPathId[pathId]; Y_VERIFY(info.ResolveInProgress); info.ResolveInProgress = false; - if (msg->Status != Ydb::StatusIds::SUCCESS) { - while (!info.PendingNextValResolve.empty()) { - const auto& request = info.PendingNextValResolve.front(); - Send(request.Sender, new TEvSequenceProxy::TEvNextValResult(msg->Status, msg->Issues), 0, request.Cookie); - info.PendingNextValResolve.pop_front(); - } - return; + while (!info.PendingNextValResolve.empty()) { + const auto& request = info.PendingNextValResolve.front(); + Send(request.Sender, new TEvSequenceProxy::TEvNextValResult(status, issues), 0, request.Cookie); + info.PendingNextValResolve.pop_front(); } + } + + void TSequenceProxy::OnResolveResult(const TString& database, const TPathId& pathId, TResolveResult&& result) { + auto& info = Databases[database].SequenceByPathId[pathId]; + Y_VERIFY(info.ResolveInProgress); + info.ResolveInProgress = false; - Y_VERIFY(msg->SequenceInfo); - info.SequenceInfo = msg->SequenceInfo; - info.SecurityObject = msg->SecurityObject; - OnResolved(database, pathId, info); + Y_VERIFY(result.SequenceInfo); + info.SequenceInfo = result.SequenceInfo; + info.SecurityObject = result.SecurityObject; + OnResolved(database, pathId, info, info.PendingNextValResolve); } - void TSequenceProxy::OnResolved(const TString& database, const TPathId& pathId, TSequenceByPathId& info) { + void TSequenceProxy::OnResolved(const TString& database, const TPathId& pathId, TSequenceByPathId& info, TList<TNextValRequestInfo>& resolved) { info.LastKnownTabletId = info.SequenceInfo->Description.GetSequenceShard(); info.DefaultCacheSize = Max(info.SequenceInfo->Description.GetCache(), ui64(1)); - while (!info.PendingNextValResolve.empty()) { - auto& request = info.PendingNextValResolve.front(); + while (!resolved.empty()) { + auto& request = resolved.front(); if (!DoMaybeReplyUnauthorized(request, pathId, info)) { info.PendingNextVal.emplace_back(std::move(request)); ++info.TotalRequested; } - info.PendingNextValResolve.pop_back(); + resolved.pop_back(); } OnChanged(database, pathId, info); diff --git a/ydb/core/tx/sequenceproxy/sequenceproxy_impl.h b/ydb/core/tx/sequenceproxy/sequenceproxy_impl.h index 9d06646026..afa5b81495 100644 --- a/ydb/core/tx/sequenceproxy/sequenceproxy_impl.h +++ b/ydb/core/tx/sequenceproxy/sequenceproxy_impl.h @@ -26,25 +26,16 @@ namespace NSequenceProxy { void Bootstrap(); private: - class TResolveActor; class TAllocateActor; using TSequenceInfo = NSchemeCache::TSchemeCacheNavigate::TSequenceInfo; struct TEvPrivate { enum EEv { - EvResolveResult = EventSpaceBegin(TKikimrEvents::ES_PRIVATE), + EvBegin = EventSpaceBegin(TKikimrEvents::ES_PRIVATE), EvAllocateResult, }; - struct TEvResolveResult : public TEventLocal<TEvResolveResult, EvResolveResult> { - Ydb::StatusIds::StatusCode Status; - NYql::TIssues Issues; - TPathId PathId; - TIntrusiveConstPtr<TSequenceInfo> SequenceInfo; - TIntrusivePtr<TSecurityObject> SecurityObject; - }; - struct TEvAllocateResult : public TEventLocal<TEvAllocateResult, EvAllocateResult> { Ydb::StatusIds::StatusCode Status; NYql::TIssues Issues; @@ -56,6 +47,13 @@ namespace NSequenceProxy { }; private: + struct TResolveResult { + TPathId PathId; + TIntrusiveConstPtr<TSequenceInfo> SequenceInfo; + TIntrusivePtr<TSecurityObject> SecurityObject; + }; + + private: struct TNextValRequestInfo { TActorId Sender; ui64 Cookie; @@ -93,6 +91,7 @@ namespace NSequenceProxy { // When requests come using sequence name they end up here first struct TSequenceByName { TPathId PathId; + TList<TNextValRequestInfo> NewNextValResolve; TList<TNextValRequestInfo> PendingNextValResolve; bool ResolveInProgress = false; }; @@ -118,23 +117,26 @@ namespace NSequenceProxy { switch (ev->GetTypeRewrite()) { sFunc(TEvents::TEvPoison, HandlePoison); hFunc(TEvSequenceProxy::TEvNextVal, Handle); - hFunc(TEvPrivate::TEvResolveResult, Handle); hFunc(TEvPrivate::TEvAllocateResult, Handle); + hFunc(TEvTxProxySchemeCache::TEvNavigateKeySetResult, Handle); } } void HandlePoison(); void Handle(TEvSequenceProxy::TEvNextVal::TPtr& ev); - void Handle(TEvPrivate::TEvResolveResult::TPtr& ev); void Handle(TEvPrivate::TEvAllocateResult::TPtr& ev); + void Handle(TEvTxProxySchemeCache::TEvNavigateKeySetResult::TPtr& ev); ui64 StartResolve(const TString& database, const std::variant<TString, TPathId>& path, bool syncVersion); ui64 StartAllocate(ui64 tabletId, const TString& database, const TPathId& pathId, ui64 cache); + void MaybeStartResolve(const TString& database, const TString& path, TSequenceByName& info); void DoNextVal(TNextValRequestInfo&& request, const TString& database, const TString& path); void DoNextVal(TNextValRequestInfo&& request, const TString& database, const TPathId& pathId, bool needRefresh = true); - void OnResolveResult(const TString& database, const TString& path, TEvPrivate::TEvResolveResult* msg); - void OnResolveResult(const TString& database, const TPathId& pathId, TEvPrivate::TEvResolveResult* msg); - void OnResolved(const TString& database, const TPathId& pathId, TSequenceByPathId& info); + void OnResolveError(const TString& database, const TString& path, Ydb::StatusIds::StatusCode status, NYql::TIssues&& issues); + void OnResolveError(const TString& database, const TPathId& pathId, Ydb::StatusIds::StatusCode status, NYql::TIssues&& issues); + void OnResolveResult(const TString& database, const TString& path, TResolveResult&& result); + void OnResolveResult(const TString& database, const TPathId& pathId, TResolveResult&& result); + void OnResolved(const TString& database, const TPathId& pathId, TSequenceByPathId& info, TList<TNextValRequestInfo>& resolved); void OnChanged(const TString& database, const TPathId& pathId, TSequenceByPathId& info); bool DoMaybeReplyUnauthorized(const TNextValRequestInfo& request, const TPathId& pathId, TSequenceByPathId& info); bool DoReplyFromCache(const TNextValRequestInfo& request, const TPathId& pathId, TSequenceByPathId& info); diff --git a/ydb/core/tx/sequenceproxy/sequenceproxy_resolve.cpp b/ydb/core/tx/sequenceproxy/sequenceproxy_resolve.cpp index 3f18cc0806..8ffe66e554 100644 --- a/ydb/core/tx/sequenceproxy/sequenceproxy_resolve.cpp +++ b/ydb/core/tx/sequenceproxy/sequenceproxy_resolve.cpp @@ -9,7 +9,7 @@ #include <util/string/builder.h> #define TXLOG_LOG(priority, stream) \ - LOG_LOG_S(*TlsActivationContext, priority, NKikimrServices::LONG_TX_SERVICE, LogPrefix << stream) + LOG_LOG_S(*TlsActivationContext, priority, NKikimrServices::SEQUENCEPROXY, LogPrefix << stream) #define TXLOG_DEBUG(stream) TXLOG_LOG(NActors::NLog::PRI_DEBUG, stream) #define TXLOG_NOTICE(stream) TXLOG_LOG(NActors::NLog::PRI_NOTICE, stream) #define TXLOG_ERROR(stream) TXLOG_LOG(NActors::NLog::PRI_ERROR, stream) @@ -17,122 +17,97 @@ namespace NKikimr { namespace NSequenceProxy { - class TSequenceProxy::TResolveActor : public TActorBootstrapped<TResolveActor> { + namespace { + using TSchemeCacheNavigate = NSchemeCache::TSchemeCacheNavigate; using TEntry = TSchemeCacheNavigate::TEntry; using ERequestType = TEntry::ERequestType; - private: - struct TOutputHelper { - const std::variant<TString, TPathId>& value; - - friend inline IOutputStream& operator<<(IOutputStream& out, const TOutputHelper& helper) { - std::visit( - [&out](const auto& value) { - out << value; - }, - helper.value); - return out; - } - }; - - public: - TResolveActor( - TActorId owner, ui64 cookie, - const TString& database, - const std::variant<TString, TPathId>& path, - bool syncVersion) - : Owner(owner) - , Cookie(cookie) - , Database(database) - , Path(path) - , SyncVersion(syncVersion) - { } - - void Bootstrap() { - auto schemeCache = MakeSchemeCacheID(); - auto req = MakeHolder<NSchemeCache::TSchemeCacheNavigate>(); - req->DatabaseName = Database; - auto& entry = req->ResultSet.emplace_back(); - std::visit( - [&entry](const auto& path) { - InitPath(entry, path); - }, - Path); - entry.ShowPrivatePath = true; - entry.SyncVersion = SyncVersion; - Send(schemeCache, new TEvTxProxySchemeCache::TEvNavigateKeySet(req.Release())); - Become(&TThis::StateWork); - } - - static void InitPath(TEntry& entry, const TString& path) { + void InitPath(TEntry& entry, const TString& path) { entry.Path = SplitPath(path); entry.RequestType = ERequestType::ByPath; } - static void InitPath(TEntry& entry, const TPathId& pathId) { + void InitPath(TEntry& entry, const TPathId& pathId) { entry.TableId.PathId = pathId; entry.RequestType = ERequestType::ByTableId; } - private: - void ReplyAndDie(Ydb::StatusIds::StatusCode status, const TString& error) { - IssueManager.RaiseIssue(MakeIssue(NKikimrIssues::TIssuesIds::GENERIC_RESOLVE_ERROR, error)); - auto res = MakeHolder<TEvPrivate::TEvResolveResult>(); - res->Status = status; - res->Issues = IssueManager.GetIssues(); - Send(Owner, res.Release(), 0, Cookie); - PassAway(); - } - - private: - STFUNC(StateWork) { - switch (ev->GetTypeRewrite()) { - hFunc(TEvTxProxySchemeCache::TEvNavigateKeySetResult, Handle); - } + void InitPath(TEntry& entry, const std::variant<TString, TPathId>& path) { + std::visit( + [&entry](const auto& path) { + InitPath(entry, path); + }, + path); } - void Handle(TEvTxProxySchemeCache::TEvNavigateKeySetResult::TPtr& ev) { - auto req = std::move(ev->Get()->Request); - if (req->ErrorCount > 0) { - ReplyAndDie(Ydb::StatusIds::SCHEME_ERROR, TStringBuilder() - << "Failed to resolve sequence " << TOutputHelper{ Path }); - return; - } - - auto& res = req->ResultSet.at(0); - if (!res.SequenceInfo || res.SequenceInfo->Description.GetSequenceShard() == 0) { - ReplyAndDie(Ydb::StatusIds::SCHEME_ERROR, TStringBuilder() - << "Failed to resolve sequence " << TOutputHelper{ Path }); - return; - } - - auto reply = MakeHolder<TEvPrivate::TEvResolveResult>(); - reply->Status = Ydb::StatusIds::SUCCESS; - reply->PathId = res.TableId.PathId; - reply->SequenceInfo = res.SequenceInfo; - reply->SecurityObject = res.SecurityObject; - Send(Owner, reply.Release(), 0, Cookie); - PassAway(); + NYql::TIssues MakeResolveIssues(const TString& message) { + NYql::TIssueManager issueManager; + issueManager.RaiseIssue(MakeIssue(NKikimrIssues::TIssuesIds::GENERIC_RESOLVE_ERROR, message)); + return issueManager.GetIssues(); } - private: - const TActorId Owner; - const ui64 Cookie; - const TString Database; - const std::variant<TString, TPathId> Path; - const bool SyncVersion; - NYql::TIssueManager IssueManager; - }; + } // namespace ui64 TSequenceProxy::StartResolve(const TString& database, const std::variant<TString, TPathId>& path, bool syncVersion) { ui64 cookie = ++LastCookie; auto& info = ResolveInFlight[cookie]; info.Database = database; info.Path = path; - Register(new TResolveActor(SelfId(), cookie, database, path, syncVersion)); + + auto schemeCache = MakeSchemeCacheID(); + auto req = std::make_unique<NSchemeCache::TSchemeCacheNavigate>(); + req->DatabaseName = database; + auto& entry = req->ResultSet.emplace_back(); + InitPath(entry, path); + entry.ShowPrivatePath = true; + entry.SyncVersion = syncVersion; + Send(schemeCache, new TEvTxProxySchemeCache::TEvNavigateKeySet(req.release()), 0, cookie); + return cookie; } + void TSequenceProxy::Handle(TEvTxProxySchemeCache::TEvNavigateKeySetResult::TPtr& ev) { + ui64 cookie = ev->Cookie; + auto it = ResolveInFlight.find(cookie); + Y_VERIFY(it != ResolveInFlight.end(), "TEvNavigateKeySetResult with cookie %" PRIu64 " does not match a previous request", cookie); + auto database = std::move(it->second.Database); + auto path = std::move(it->second.Path); + ResolveInFlight.erase(it); + + auto req = std::move(ev->Get()->Request); + if (req->ErrorCount > 0) { + std::visit( + [this, &database](auto& path) { + OnResolveError(database, path, Ydb::StatusIds::SCHEME_ERROR, MakeResolveIssues(TStringBuilder() + << "Failed to resolve sequence " << path)); + }, + path); + return; + } + + auto& entry = req->ResultSet.at(0); + if (!entry.SequenceInfo || entry.SequenceInfo->Description.GetSequenceShard() == 0) { + std::visit( + [this, &database](auto& path) { + OnResolveError(database, path, Ydb::StatusIds::SCHEME_ERROR, MakeResolveIssues(TStringBuilder() + << "Failed to resolve sequence " << path)); + }, + path); + return; + } + + TResolveResult result{ + entry.TableId.PathId, + std::move(entry.SequenceInfo), + std::move(entry.SecurityObject), + }; + std::visit( + [this, &database, &result](auto& path) { + OnResolveResult(database, path, std::move(result)); + }, + path); + } + } // namespace NSequenceProxy } // namespace NKikimr diff --git a/ydb/core/tx/sequenceproxy/sequenceproxy_ut.cpp b/ydb/core/tx/sequenceproxy/sequenceproxy_ut.cpp index d331fdef4a..a7292ab30b 100644 --- a/ydb/core/tx/sequenceproxy/sequenceproxy_ut.cpp +++ b/ydb/core/tx/sequenceproxy/sequenceproxy_ut.cpp @@ -103,6 +103,28 @@ Y_UNIT_TEST_SUITE(SequenceProxy) { runtime.GrabEdgeEventRethrow<NSchemeShard::TEvSchemeShard::TEvNotifyTxCompletionResult>(edge); } + void DropSequence(TTestActorRuntime& runtime, const TString& workingDir, const TString& name) { + auto edge = runtime.AllocateEdgeActor(0); + auto request = MakeHolder<TEvTxUserProxy::TEvProposeTransaction>(); + auto* tx = request->Record.MutableTransaction()->MutableModifyScheme(); + tx->SetOperationType(NKikimrSchemeOp::EOperationType::ESchemeOpDropSequence); + tx->SetWorkingDir(workingDir); + auto* op = tx->MutableDrop(); + op->SetName(name); + runtime.Send(new IEventHandle(MakeTxProxyID(), edge, request.Release())); + + auto ev = runtime.GrabEdgeEventRethrow<TEvTxUserProxy::TEvProposeTransactionStatus>(edge); + auto* msg = ev->Get(); + const auto status = static_cast<TEvTxUserProxy::TEvProposeTransactionStatus::EStatus>(msg->Record.GetStatus()); + Y_VERIFY(status == TEvTxUserProxy::TEvProposeTransactionStatus::EStatus::ExecInProgress); + + ui64 schemeShardTabletId = msg->Record.GetSchemeShardTabletId(); + auto notifyReq = MakeHolder<NSchemeShard::TEvSchemeShard::TEvNotifyTxCompletion>(); + notifyReq->Record.SetTxId(msg->Record.GetTxId()); + runtime.SendToPipe(schemeShardTabletId, edge, notifyReq.Release()); + runtime.GrabEdgeEventRethrow<NSchemeShard::TEvSchemeShard::TEvNotifyTxCompletionResult>(edge); + } + void SendNextValRequest(TTestActorRuntime& runtime, const TActorId& sender, const TString& path) { auto request = MakeHolder<TEvSequenceProxy::TEvNextVal>(path); runtime.Send(new IEventHandle(MakeSequenceProxyServiceID(), sender, request.Release())); @@ -111,7 +133,7 @@ Y_UNIT_TEST_SUITE(SequenceProxy) { i64 WaitNextValResult(TTestActorRuntime& runtime, const TActorId& sender, Ydb::StatusIds::StatusCode expectedStatus = Ydb::StatusIds::SUCCESS) { auto ev = runtime.GrabEdgeEventRethrow<TEvSequenceProxy::TEvNextValResult>(sender); auto* msg = ev->Get(); - Y_VERIFY(msg->Status == expectedStatus); + UNIT_ASSERT_VALUES_EQUAL(msg->Status, expectedStatus); return msg->Status == Ydb::StatusIds::SUCCESS ? msg->Value : 0; } @@ -163,6 +185,29 @@ Y_UNIT_TEST_SUITE(SequenceProxy) { UNIT_ASSERT_C(allocateEvents < 7, "Too many TEvAllocateSequence events: " << allocateEvents); } + Y_UNIT_TEST(DropRecreate) { + TTenantTestRuntime runtime(MakeTenantTestConfig(false)); + StartSchemeCache(runtime); + + CreateSequence(runtime, "/dc-1", R"( + Name: "seq" + )"); + + i64 value = DoNextVal(runtime, "/dc-1/seq"); + UNIT_ASSERT_VALUES_EQUAL(value, 1); + + DropSequence(runtime, "/dc-1", "seq"); + + DoNextVal(runtime, "/dc-1/seq", Ydb::StatusIds::SCHEME_ERROR); + + CreateSequence(runtime, "/dc-1", R"( + Name: "seq" + )"); + + value = DoNextVal(runtime, "/dc-1/seq"); + UNIT_ASSERT_VALUES_EQUAL(value, 1); + } + } // Y_UNIT_TEST_SUITE(SequenceProxy) } // namespace NSequenceProxy diff --git a/ydb/core/tx/tx_proxy/upload_rows_common_impl.h b/ydb/core/tx/tx_proxy/upload_rows_common_impl.h index 394b87fc2b..c267145c79 100644 --- a/ydb/core/tx/tx_proxy/upload_rows_common_impl.h +++ b/ydb/core/tx/tx_proxy/upload_rows_common_impl.h @@ -150,6 +150,7 @@ protected: // Additional schema info (for OLAP dst or source format) TVector<std::pair<TString, NScheme::TTypeInfo>> SrcColumns; // source columns in CSV could have any order TVector<std::pair<TString, NScheme::TTypeInfo>> YdbSchema; + std::set<std::string> NotNullColumns; THashMap<ui32, size_t> Id2Position; // columnId -> its position in YdbSchema THashMap<TString, NScheme::TTypeInfo> ColumnsToConvert; THashMap<TString, NScheme::TTypeInfo> ColumnsToConvertInplace; @@ -209,7 +210,7 @@ protected: std::shared_ptr<arrow::RecordBatch> RowsToBatch(const TVector<std::pair<TSerializedCellVec, TString>>& rows, TString& errorMessage) { - NArrow::TArrowBatchBuilder batchBuilder; + NArrow::TArrowBatchBuilder batchBuilder(arrow::Compression::UNCOMPRESSED, NotNullColumns); batchBuilder.Reserve(rows.size()); // TODO: ReserveData() if (!batchBuilder.Start(YdbSchema)) { errorMessage = "Cannot make Arrow batch from rows"; @@ -253,6 +254,7 @@ private: virtual bool ExtractBatch(TString& errorMessage) = 0; virtual void RaiseIssue(const NYql::TIssue& issue) = 0; virtual void SendResult(const NActors::TActorContext& ctx, const ::Ydb::StatusIds::StatusCode& status) = 0; + virtual void AuditContextStart() {} virtual EUploadSource GetSourceType() const { return EUploadSource::ProtoValues; @@ -433,6 +435,7 @@ private: bool notNull = entry.NotNullColumns.contains(ci.Name); if (notNull) { notNullColumnsLeft.erase(ci.Name); + NotNullColumns.emplace(ci.Name); } if (ci.KeyOrder != -1) { @@ -486,6 +489,8 @@ private: // TODO: check all params; // Cerr << *Request->GetProtoRequest() << Endl; + AuditContextStart(); + TAutoPtr<NSchemeCache::TSchemeCacheNavigate> request(new NSchemeCache::TSchemeCacheNavigate()); NSchemeCache::TSchemeCacheNavigate::TEntry entry; entry.Path = ::NKikimr::SplitPath(table); diff --git a/ydb/core/viewer/json_query.h b/ydb/core/viewer/json_query.h index bd39eb57e5..552c2739b9 100644 --- a/ydb/core/viewer/json_query.h +++ b/ydb/core/viewer/json_query.h @@ -348,13 +348,17 @@ private: void MakeOkReply(TStringBuilder& out, NJson::TJsonValue& jsonResponse, NKikimrKqp::TEvQueryResponse& record) { const auto& response = record.GetResponse(); - if (response.ResultsSize() > 0) { + if (response.ResultsSize() > 0 || response.YdbResultsSize() > 0) { try { for (const auto& result : response.GetResults()) { Ydb::ResultSet resultSet; NKqp::ConvertKqpQueryResultToDbResult(result, &resultSet); ResultSets.emplace_back(std::move(resultSet)); } + + for (const auto& result : response.GetYdbResults()) { + ResultSets.emplace_back(result); + } } catch (const std::exception& ex) { Ydb::Issue::IssueMessage* issue = record.MutableResponse()->AddQueryIssues(); diff --git a/ydb/core/viewer/json_storage_base.h b/ydb/core/viewer/json_storage_base.h index cc9440746f..d350d8f732 100644 --- a/ydb/core/viewer/json_storage_base.h +++ b/ydb/core/viewer/json_storage_base.h @@ -106,11 +106,11 @@ protected: uint64 Read; uint64 Write; - TGroupRow() + TGroupRow() : Used(0) , Limit(0) , Read(0) - , Write(0) + , Write(0) {} }; THashMap<TString, TGroupRow> GroupRowsByGroupId; @@ -279,7 +279,11 @@ public: if (!FilterTenant.empty()) { FilterStoragePools.emplace(storagePoolName); } - StoragePoolInfo[storagePoolName].Kind = storagePool.GetKind(); + auto& storagePoolInfo(StoragePoolInfo[storagePoolName]); + if (!storagePoolInfo.Kind.empty()) { + continue; + } + storagePoolInfo.Kind = storagePool.GetKind(); THolder<TEvBlobStorage::TEvControllerSelectGroups> request = MakeHolder<TEvBlobStorage::TEvControllerSelectGroups>(); request->Record.SetReturnAllMatchingGroups(true); request->Record.AddGroupParameters()->MutableStoragePoolSpecifier()->SetName(storagePoolName); diff --git a/ydb/core/viewer/viewer_request.cpp b/ydb/core/viewer/viewer_request.cpp index 809ace454c..9dce04f621 100644 --- a/ydb/core/viewer/viewer_request.cpp +++ b/ydb/core/viewer/viewer_request.cpp @@ -65,7 +65,7 @@ public: } }; -IActor* CreateViewerRequestHandler(TEvViewer::TEvViewerRequest::TPtr request) { +IActor* CreateViewerRequestHandler(TEvViewer::TEvViewerRequest::TPtr& request) { switch (request->Get()->Record.GetRequestCase()) { case NKikimrViewer::TEvViewerRequest::kTabletRequest: return new TViewerWhiteboardRequest<TEvWhiteboard::TEvTabletStateRequest, TEvWhiteboard::TEvTabletStateResponse>(request); diff --git a/ydb/core/viewer/viewer_request.h b/ydb/core/viewer/viewer_request.h index 22bc784fdd..b8b9f0f747 100644 --- a/ydb/core/viewer/viewer_request.h +++ b/ydb/core/viewer/viewer_request.h @@ -19,9 +19,9 @@ union ViewerWhiteboardCookie { bits.NodeId = nodeId; } - ViewerWhiteboardCookie(ui64 value) - : cookie(value) - { + ViewerWhiteboardCookie(ui64 value) + : cookie(value) + { } ui64 ToUi64() const { @@ -37,7 +37,7 @@ union ViewerWhiteboardCookie { } }; -IActor* CreateViewerRequestHandler(TEvViewer::TEvViewerRequest::TPtr request); +IActor* CreateViewerRequestHandler(TEvViewer::TEvViewerRequest::TPtr& request); } } diff --git a/ydb/library/yaml_config/yaml_config.cpp b/ydb/library/yaml_config/yaml_config.cpp index a21aeed17e..4ca4607098 100644 --- a/ydb/library/yaml_config/yaml_config.cpp +++ b/ydb/library/yaml_config/yaml_config.cpp @@ -8,7 +8,12 @@ namespace NYamlConfig { -NKikimrConfig::TAppConfig YamlToProto(const NFyaml::TNodeRef& node, bool allowUnknown, bool preTransform) { +NKikimrConfig::TAppConfig YamlToProto( + const NFyaml::TNodeRef& node, + bool allowUnknown, + bool preTransform, + TSimpleSharedPtr<NProtobufJson::IUnknownFieldsCollector> unknownFieldsCollector) { + TStringStream sstr; sstr << NFyaml::TJsonEmitter(node); @@ -31,6 +36,7 @@ NKikimrConfig::TAppConfig YamlToProto(const NFyaml::TNodeRef& node, bool allowUn c.CastRobust = true; c.MapAsObject = true; c.AllowUnknownFields = allowUnknown; + c.UnknownFieldsCollector = std::move(unknownFieldsCollector); NProtobufJson::MergeJson2Proto(json, yamlProtoConfig, c); diff --git a/ydb/library/yaml_config/yaml_config.h b/ydb/library/yaml_config/yaml_config.h index 6a5ddd4ba3..c11ed96873 100644 --- a/ydb/library/yaml_config/yaml_config.h +++ b/ydb/library/yaml_config/yaml_config.h @@ -2,6 +2,7 @@ #include <library/cpp/yaml/fyamlcpp/fyamlcpp.h> #include <library/cpp/actors/core/actor.h> +#include <library/cpp/protobuf/json/json2proto.h> #include <ydb/core/protos/config.pb.h> #include <ydb/core/protos/console_config.pb.h> @@ -21,10 +22,51 @@ namespace NYamlConfig { +struct TBasicUnknownFieldsCollector : public NProtobufJson::IUnknownFieldsCollector { + void OnEnterMapItem(const TString& key) override { + CurrentPath.push_back(key); + } + + void OnEnterArrayItem(ui64 id) override { + CurrentPath.push_back(ToString(id)); + } + + void OnLeaveMapItem() override { + CurrentPath.pop_back(); + } + + void OnLeaveArrayItem() override { + CurrentPath.pop_back(); + } + + void OnUnknownField(const TString& key, const google::protobuf::Descriptor& value) override { + TString path; + for (auto& piece : CurrentPath) { + path.append("/"); + path.append(piece); + } + path.append("/"); + path.append(key); + UnknownKeys[std::move(path)] = {key, value.full_name()}; + } + + const TMap<TString, std::pair<TString, TString>>& GetUnknownKeys() const { + return UnknownKeys; + } + +private: + TVector<TString> CurrentPath; + TMap<TString, std::pair<TString, TString>> UnknownKeys; +}; + /** * Converts YAML representation to ProtoBuf */ -NKikimrConfig::TAppConfig YamlToProto(const NFyaml::TNodeRef& node, bool allowUnknown = false, bool preTransform = true); +NKikimrConfig::TAppConfig YamlToProto( + const NFyaml::TNodeRef& node, + bool allowUnknown = false, + bool preTransform = true, + TSimpleSharedPtr<NProtobufJson::IUnknownFieldsCollector> unknownFieldsCollector = nullptr); /** * Resolves config for given labels and stores result to appConfig diff --git a/ydb/library/yql/core/issue/yql_issue.txt b/ydb/library/yql/core/issue/yql_issue.txt index 3763e342b8..305c8be6a9 100644 --- a/ydb/library/yql/core/issue/yql_issue.txt +++ b/ydb/library/yql/core/issue/yql_issue.txt @@ -165,7 +165,6 @@ ids { ids { code: KIKIMR_MIXED_SCHEME_DATA_TX severity: S_ERROR - format: "Can't mix scheme and data operations in single Kikimr transaction. Use COMMIT statement to indicate end of transaction between scheme and data operations." } ids { code: KIKIMR_MULTIPLE_SCHEME_MODIFICATIONS diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_wide_combine.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_wide_combine.cpp index d0460ccf85..c2deb6cd6b 100644 --- a/ydb/library/yql/minikql/comp_nodes/mkql_wide_combine.cpp +++ b/ydb/library/yql/minikql/comp_nodes/mkql_wide_combine.cpp @@ -211,6 +211,16 @@ public: Tongue = CurrentPage->data(); } + ~TState() { + //Workaround for YQL-16663, consider to rework this class in a safe manner + while (auto row = Extract()) { + for (size_t i = 0; i != RowSize(); ++i) { + row[i].UnRef(); + } + } + IsEmpty(); + } + bool TasteIt() { Y_VERIFY(!ExtractIt); bool isNew = false; diff --git a/ydb/library/yql/sql/v1/format/sql_format_ut.cpp b/ydb/library/yql/sql/v1/format/sql_format_ut.cpp index 8c7daab35f..6d5ee0a3aa 100644 --- a/ydb/library/yql/sql/v1/format/sql_format_ut.cpp +++ b/ydb/library/yql/sql/v1/format/sql_format_ut.cpp @@ -435,6 +435,8 @@ Y_UNIT_TEST_SUITE(CheckSqlFormatter) { "ALTER TABLE user\n\tADD CHANGEFEED user WITH (virtual_timestamps = FALSE);\n\n"}, {"alter table user add changefeed user with (resolved_timestamps = Interval(\"PT1S\"))", "ALTER TABLE user\n\tADD CHANGEFEED user WITH (resolved_timestamps = Interval(\"PT1S\"));\n\n"}, + {"alter table user add changefeed user with (topic_min_active_partitions = 1)", + "ALTER TABLE user\n\tADD CHANGEFEED user WITH (topic_min_active_partitions = 1);\n\n"}, }; TSetup setup; diff --git a/ydb/library/yql/sql/v1/node.h b/ydb/library/yql/sql/v1/node.h index 15d28dc9c7..379ed3ca99 100644 --- a/ydb/library/yql/sql/v1/node.h +++ b/ydb/library/yql/sql/v1/node.h @@ -999,6 +999,7 @@ namespace NSQLTranslationV1 { TNodePtr VirtualTimestamps; TNodePtr ResolvedTimestamps; TNodePtr RetentionPeriod; + TNodePtr TopicPartitions; TNodePtr AwsRegion; std::optional<std::variant<TLocalSinkSettings>> SinkSettings; }; diff --git a/ydb/library/yql/sql/v1/query.cpp b/ydb/library/yql/sql/v1/query.cpp index cb93d8bfe4..a0ea1e9656 100644 --- a/ydb/library/yql/sql/v1/query.cpp +++ b/ydb/library/yql/sql/v1/query.cpp @@ -171,6 +171,9 @@ static INode::TPtr CreateChangefeedDesc(const TChangefeedDescription& desc, cons if (desc.Settings.RetentionPeriod) { settings = node.L(settings, node.Q(node.Y(node.Q("retention_period"), desc.Settings.RetentionPeriod))); } + if (desc.Settings.TopicPartitions) { + settings = node.L(settings, node.Q(node.Y(node.Q("topic_min_active_partitions"), desc.Settings.TopicPartitions))); + } if (desc.Settings.AwsRegion) { settings = node.L(settings, node.Q(node.Y(node.Q("aws_region"), desc.Settings.AwsRegion))); } diff --git a/ydb/library/yql/sql/v1/sql_expression.cpp b/ydb/library/yql/sql/v1/sql_expression.cpp index f2b89b18ee..fc551ecbfe 100644 --- a/ydb/library/yql/sql/v1/sql_expression.cpp +++ b/ydb/library/yql/sql/v1/sql_expression.cpp @@ -169,6 +169,12 @@ bool ChangefeedSettingsEntry(const TRule_changefeed_settings_entry& node, TSqlEx return false; } settings.RetentionPeriod = exprNode; + } else if (to_lower(id.Name) == "topic_min_active_partitions") { + if (!exprNode->IsIntegerLiteral()) { + ctx.Context().Error() << "Literal of integer type is expected for " << id.Name; + return false; + } + settings.TopicPartitions = exprNode; } else if (to_lower(id.Name) == "aws_region") { if (!exprNode->IsLiteral() || exprNode->GetLiteralType() != "String") { ctx.Context().Error() << "Literal of String type is expected for " << id.Name; diff --git a/ydb/library/yql/sql/v1/sql_ut.cpp b/ydb/library/yql/sql/v1/sql_ut.cpp index 0718c3c64c..23dbba5606 100644 --- a/ydb/library/yql/sql/v1/sql_ut.cpp +++ b/ydb/library/yql/sql/v1/sql_ut.cpp @@ -1887,6 +1887,7 @@ Y_UNIT_TEST_SUITE(SqlParsingOnly) { VIRTUAL_TIMESTAMPS = FALSE, RESOLVED_TIMESTAMPS = Interval("PT1S"), RETENTION_PERIOD = Interval("P1D"), + TOPIC_MIN_ACTIVE_PARTITIONS = 10, AWS_REGION = 'aws:region' ) ); @@ -1906,6 +1907,7 @@ Y_UNIT_TEST_SUITE(SqlParsingOnly) { UNIT_ASSERT_VALUES_UNEQUAL(TString::npos, line.find("false")); UNIT_ASSERT_VALUES_UNEQUAL(TString::npos, line.find("resolved_timestamps")); UNIT_ASSERT_VALUES_UNEQUAL(TString::npos, line.find("retention_period")); + UNIT_ASSERT_VALUES_UNEQUAL(TString::npos, line.find("topic_min_active_partitions")); UNIT_ASSERT_VALUES_UNEQUAL(TString::npos, line.find("aws_region")); UNIT_ASSERT_VALUES_UNEQUAL(TString::npos, line.find("aws:region")); } @@ -3715,6 +3717,19 @@ select FormatType($f()); UNIT_ASSERT_NO_DIFF(Err2Str(res), "<main>:5:99: Error: Literal of Interval type is expected for RETENTION_PERIOD\n"); } + Y_UNIT_TEST(InvalidChangefeedTopicPartitions) { + auto req = R"( + USE plato; + CREATE TABLE tableName ( + Key Uint32, PRIMARY KEY (Key), + CHANGEFEED feedName WITH (MODE = "KEYS_ONLY", FORMAT = "json", TOPIC_MIN_ACTIVE_PARTITIONS = "foo") + ); + )"; + auto res = SqlToYql(req); + UNIT_ASSERT(!res.Root); + UNIT_ASSERT_NO_DIFF(Err2Str(res), "<main>:5:110: Error: Literal of integer type is expected for TOPIC_MIN_ACTIVE_PARTITIONS\n"); + } + Y_UNIT_TEST(InvalidChangefeedAwsRegion) { auto req = R"( USE plato; diff --git a/ydb/public/api/protos/draft/ydb_dynamic_config.proto b/ydb/public/api/protos/draft/ydb_dynamic_config.proto index 23f00c68de..9ba65d706d 100644 --- a/ydb/public/api/protos/draft/ydb_dynamic_config.proto +++ b/ydb/public/api/protos/draft/ydb_dynamic_config.proto @@ -18,6 +18,7 @@ message SetConfigRequest { // Config in YAML format. metadata will be ignored string config = 2; bool dry_run = 3; + bool allow_unknown_fields = 4; } message SetConfigResponse { @@ -29,6 +30,7 @@ message ReplaceConfigRequest { // Config in YAML format string config = 2; bool dry_run = 3; + bool allow_unknown_fields = 4; } message ReplaceConfigResponse { diff --git a/ydb/public/api/protos/ydb_table.proto b/ydb/public/api/protos/ydb_table.proto index 82074236f1..57c239b6c7 100644 --- a/ydb/public/api/protos/ydb_table.proto +++ b/ydb/public/api/protos/ydb_table.proto @@ -9,6 +9,7 @@ import "ydb/public/api/protos/ydb_query_stats.proto"; import "ydb/public/api/protos/ydb_value.proto"; import "ydb/public/api/protos/ydb_scheme.proto"; import "ydb/public/api/protos/ydb_status_codes.proto"; +import "ydb/public/api/protos/ydb_topic.proto"; import "ydb/public/api/protos/ydb_formats.proto"; import "google/protobuf/empty.proto"; @@ -163,6 +164,8 @@ message Changefeed { string aws_region = 8 [(length).le = 128]; // Periodically emit resolved timestamps. If unspecified, resolved timestamps are not emitted. google.protobuf.Duration resolved_timestamps_interval = 9; + // Partitioning settings of underlying topic. + Topic.PartitioningSettings topic_partitioning_settings = 10; } message ChangefeedDescription { diff --git a/ydb/public/sdk/cpp/client/draft/ydb_dynamic_config.cpp b/ydb/public/sdk/cpp/client/draft/ydb_dynamic_config.cpp index 76d5cbc9b5..09c07eebbf 100644 --- a/ydb/public/sdk/cpp/client/draft/ydb_dynamic_config.cpp +++ b/ydb/public/sdk/cpp/client/draft/ydb_dynamic_config.cpp @@ -12,10 +12,11 @@ public: { } - TAsyncStatus SetConfig(const TString& config, bool dryRun, const TClusterConfigSettings& settings = {}) { + TAsyncStatus SetConfig(const TString& config, bool dryRun, bool allowUnknownFields, const TClusterConfigSettings& settings = {}) { auto request = MakeOperationRequest<Ydb::DynamicConfig::SetConfigRequest>(settings); request.set_config(config); request.set_dry_run(dryRun); + request.set_allow_unknown_fields(allowUnknownFields); return RunSimple<Ydb::DynamicConfig::V1::DynamicConfigService, Ydb::DynamicConfig::SetConfigRequest, Ydb::DynamicConfig::SetConfigResponse>( std::move(request), @@ -23,10 +24,11 @@ public: TRpcRequestSettings::Make(settings)); } - TAsyncStatus ReplaceConfig(const TString& config, bool dryRun, const TClusterConfigSettings& settings = {}) { + TAsyncStatus ReplaceConfig(const TString& config, bool dryRun, bool allowUnknownFields, const TClusterConfigSettings& settings = {}) { auto request = MakeOperationRequest<Ydb::DynamicConfig::ReplaceConfigRequest>(settings); request.set_config(config); request.set_dry_run(dryRun); + request.set_allow_unknown_fields(allowUnknownFields); return RunSimple<Ydb::DynamicConfig::V1::DynamicConfigService, Ydb::DynamicConfig::ReplaceConfigRequest, Ydb::DynamicConfig::ReplaceConfigResponse>( std::move(request), @@ -342,15 +344,17 @@ TDynamicConfigClient::TDynamicConfigClient(const TDriver& driver) TAsyncStatus TDynamicConfigClient::SetConfig( const TString& config, bool dryRun, + bool allowUnknownFields, const TClusterConfigSettings& settings) { - return Impl_->SetConfig(config, dryRun, settings); + return Impl_->SetConfig(config, dryRun, allowUnknownFields, settings); } TAsyncStatus TDynamicConfigClient::ReplaceConfig( const TString& config, bool dryRun, + bool allowUnknownFields, const TClusterConfigSettings& settings) { - return Impl_->ReplaceConfig(config, dryRun, settings); + return Impl_->ReplaceConfig(config, dryRun, allowUnknownFields, settings); } TAsyncStatus TDynamicConfigClient::DropConfig( diff --git a/ydb/public/sdk/cpp/client/draft/ydb_dynamic_config.h b/ydb/public/sdk/cpp/client/draft/ydb_dynamic_config.h index 1925ae2f5d..1c02d54274 100644 --- a/ydb/public/sdk/cpp/client/draft/ydb_dynamic_config.h +++ b/ydb/public/sdk/cpp/client/draft/ydb_dynamic_config.h @@ -180,10 +180,10 @@ public: explicit TDynamicConfigClient(const TDriver& driver); // Set config - TAsyncStatus SetConfig(const TString& config, bool dryRun = false, const TClusterConfigSettings& settings = {}); + TAsyncStatus SetConfig(const TString& config, bool dryRun = false, bool allowUnknownFields = false, const TClusterConfigSettings& settings = {}); // Replace config - TAsyncStatus ReplaceConfig(const TString& config, bool dryRun = false, const TClusterConfigSettings& settings = {}); + TAsyncStatus ReplaceConfig(const TString& config, bool dryRun = false, bool allowUnknownFields = false, const TClusterConfigSettings& settings = {}); // Drop config TAsyncStatus DropConfig( diff --git a/ydb/public/sdk/cpp/client/impl/ydb_internal/plain_status/status.cpp b/ydb/public/sdk/cpp/client/impl/ydb_internal/plain_status/status.cpp index 0449c78552..1620cc8e18 100644 --- a/ydb/public/sdk/cpp/client/impl/ydb_internal/plain_status/status.cpp +++ b/ydb/public/sdk/cpp/client/impl/ydb_internal/plain_status/status.cpp @@ -54,6 +54,12 @@ TPlainStatus::TPlainStatus( if (msg) { Issues.AddIssue(NYql::TIssue(msg)); } + for (const auto& [name, value] : grpcStatus.ServerTrailingMetadata) { + Metadata.emplace( + TStringType(name.begin(), name.end()), + TStringType(value.begin(), value.end()) + ); + } } TPlainStatus TPlainStatus::Internal(const TStringType& message) { diff --git a/ydb/public/sdk/cpp/client/ydb_datastreams/datastreams.cpp b/ydb/public/sdk/cpp/client/ydb_datastreams/datastreams.cpp index dd152b871f..8ddeb3e07a 100644 --- a/ydb/public/sdk/cpp/client/ydb_datastreams/datastreams.cpp +++ b/ydb/public/sdk/cpp/client/ydb_datastreams/datastreams.cpp @@ -607,6 +607,18 @@ namespace NYdb::NDataStreams::V1 { TProtoRequestSettings settings ); + template NThreading::TFuture<TProtoResultWrapper<Ydb::DataStreams::V1::UpdateStreamResult>> TDataStreamsClient::DoProtoRequest + < + Ydb::DataStreams::V1::UpdateStreamRequest, + Ydb::DataStreams::V1::UpdateStreamResponse, + Ydb::DataStreams::V1::UpdateStreamResult, + decltype(&Ydb::DataStreams::V1::DataStreamsService::Stub::AsyncUpdateStream) + >( + const Ydb::DataStreams::V1::UpdateStreamRequest& request, + decltype(&Ydb::DataStreams::V1::DataStreamsService::Stub::AsyncUpdateStream) method, + TProtoRequestSettings settings + ); + template NThreading::TFuture<TProtoResultWrapper<Ydb::DataStreams::V1::DeleteStreamResult>> TDataStreamsClient::DoProtoRequest < Ydb::DataStreams::V1::DeleteStreamRequest, diff --git a/ydb/public/sdk/cpp/client/ydb_query/impl/exec_query.cpp b/ydb/public/sdk/cpp/client/ydb_query/impl/exec_query.cpp index 6cf6344618..21bd9e2125 100644 --- a/ydb/public/sdk/cpp/client/ydb_query/impl/exec_query.cpp +++ b/ydb/public/sdk/cpp/client/ydb_query/impl/exec_query.cpp @@ -153,6 +153,8 @@ struct TExecuteQueryBuffer : public TThrRefBase, TNonCopyable { return; } + self->Issues_.insert(self->Issues_.end(), part.GetIssues().begin(), part.GetIssues().end()); + if (part.HasResultSet()) { auto inRs = part.ExtractResultSet(); auto& inRsProto = TProtoAccessor::GetProto(inRs); diff --git a/ydb/public/sdk/cpp/client/ydb_topic/impl/topic.cpp b/ydb/public/sdk/cpp/client/ydb_topic/impl/topic.cpp index 35869b47aa..6f01178f4e 100644 --- a/ydb/public/sdk/cpp/client/ydb_topic/impl/topic.cpp +++ b/ydb/public/sdk/cpp/client/ydb_topic/impl/topic.cpp @@ -48,6 +48,7 @@ TTopicDescription::TTopicDescription(Ydb::Topic::DescribeTopicResult&& result) , TopicStats_(Proto_.topic_stats()) { Owner_ = Proto_.self().owner(); + CreationTimestamp_ = NScheme::TVirtualTimestamp(Proto_.self().created_at()); PermissionToSchemeEntry(Proto_.self().permissions(), &Permissions_); PermissionToSchemeEntry(Proto_.self().effective_permissions(), &EffectivePermissions_); @@ -177,6 +178,10 @@ const TString& TTopicDescription::GetOwner() const { return Owner_; } +const NScheme::TVirtualTimestamp& TTopicDescription::GetCreationTimestamp() const { + return CreationTimestamp_; +} + const TTopicStats& TTopicDescription::GetTopicStats() const { return TopicStats_; } diff --git a/ydb/public/sdk/cpp/client/ydb_topic/topic.h b/ydb/public/sdk/cpp/client/ydb_topic/topic.h index 181f114784..babac4bdb9 100644 --- a/ydb/public/sdk/cpp/client/ydb_topic/topic.h +++ b/ydb/public/sdk/cpp/client/ydb_topic/topic.h @@ -168,6 +168,8 @@ public: const TString& GetOwner() const; + const NScheme::TVirtualTimestamp& GetCreationTimestamp() const; + const TVector<NScheme::TPermissions>& GetPermissions() const; const TVector<NScheme::TPermissions>& GetEffectivePermissions() const; @@ -201,7 +203,6 @@ private: const Ydb::Topic::DescribeTopicResult& GetProto() const; - const Ydb::Topic::DescribeTopicResult Proto_; TVector<TPartitionInfo> Partitions_; TVector<ECodec> SupportedCodecs_; @@ -216,6 +217,7 @@ private: TTopicStats TopicStats_; TString Owner_; + NScheme::TVirtualTimestamp CreationTimestamp_; TVector<NScheme::TPermissions> Permissions_; TVector<NScheme::TPermissions> EffectivePermissions_; }; diff --git a/ydb/services/datastreams/datastreams_proxy.cpp b/ydb/services/datastreams/datastreams_proxy.cpp index 4d0dce022d..8f11a0b9ef 100644 --- a/ydb/services/datastreams/datastreams_proxy.cpp +++ b/ydb/services/datastreams/datastreams_proxy.cpp @@ -131,7 +131,7 @@ namespace NKikimr::NDataStreams::V1 { PartitionWriteSpeedInBytesPerSec(GetProtoRequest()->write_quota_kb_per_sec())); if (AppData(ctx)->PQConfig.GetBillingMeteringConfig().GetEnabled()) { - topicRequest.set_metering_mode(Ydb::Topic::METERING_MODE_RESERVED_CAPACITY); + topicRequest.set_metering_mode(Ydb::Topic::METERING_MODE_REQUEST_UNITS); if (GetProtoRequest()->has_stream_mode_details()) { switch(GetProtoRequest()->stream_mode_details().stream_mode()) { @@ -698,7 +698,7 @@ namespace NKikimr::NDataStreams::V1 { description.set_has_more_shards(false); description.set_owner(SelfInfo.GetOwner()); - description.set_stream_creation_timestamp(TInstant::MilliSeconds(SelfInfo.GetCreateStep()).Seconds()); + description.set_stream_creation_timestamp(SelfInfo.GetCreateStep()); int limit = GetProtoRequest()->limit() == 0 ? 100 : GetProtoRequest()->limit(); @@ -761,7 +761,7 @@ namespace NKikimr::NDataStreams::V1 { } private: - static constexpr ui32 MAX_IN_FLIGHT = 5; + static constexpr ui32 MAX_IN_FLIGHT = 100; ui32 RequestsInFlight = 0; std::vector<std::unique_ptr<TEvTxProxySchemeCache::TEvNavigateKeySet>> WaitingList; diff --git a/ydb/services/datastreams/datastreams_ut.cpp b/ydb/services/datastreams/datastreams_ut.cpp index c939a1572a..8ce6690826 100644 --- a/ydb/services/datastreams/datastreams_ut.cpp +++ b/ydb/services/datastreams/datastreams_ut.cpp @@ -440,8 +440,11 @@ Y_UNIT_TEST_SUITE(DataStreams) { const ui32 shardCount = 2; { auto result = testServer.DataStreamsClient->CreateStream(streamName, - NYDS_V1::TCreateStreamSettings().ShardCount(shardCount) - .RetentionStorageMegabytes(storageMb)).ExtractValueSync(); + NYDS_V1::TCreateStreamSettings() + .ShardCount(shardCount) + .RetentionStorageMegabytes(storageMb) + .StreamMode(NYdb::NDataStreams::V1::ESM_PROVISIONED) + ).ExtractValueSync(); UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false); UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString()); } @@ -580,7 +583,9 @@ Y_UNIT_TEST_SUITE(DataStreams) { { auto result = testServer.DataStreamsClient->CreateStream(streamName, NYDS_V1::TCreateStreamSettings().ShardCount(shardCount) - .RetentionStorageMegabytes(storageMb)).ExtractValueSync(); + .RetentionStorageMegabytes(storageMb) + .StreamMode(NYdb::NDataStreams::V1::ESM_PROVISIONED) + ).ExtractValueSync(); UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false); UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString()); } @@ -723,7 +728,9 @@ Y_UNIT_TEST_SUITE(DataStreams) { const TString streamPath = "/Root/" + streamName; { auto result = testServer.DataStreamsClient->CreateStream(streamPath, - NYDS_V1::TCreateStreamSettings().ShardCount(1)).ExtractValueSync(); + NYDS_V1::TCreateStreamSettings().ShardCount(1) + .StreamMode(NYdb::NDataStreams::V1::ESM_PROVISIONED) + ).ExtractValueSync(); UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false); UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString()); } @@ -891,7 +898,7 @@ Y_UNIT_TEST_SUITE(DataStreams) { TDuration::Days(7).Hours()); UNIT_ASSERT_VALUES_EQUAL(result.GetResult().stream_description().storage_limit_mb(), 50_GB / 1_MB); UNIT_ASSERT_VALUES_EQUAL(result.GetResult().stream_description().stream_mode_details().stream_mode(), - Ydb::DataStreams::V1::StreamMode::PROVISIONED); + Ydb::DataStreams::V1::StreamMode::ON_DEMAND); } diff --git a/ydb/services/keyvalue/ut/ya.make b/ydb/services/keyvalue/ut/ya.make index 22227dc72a..dbed2dd190 100644 --- a/ydb/services/keyvalue/ut/ya.make +++ b/ydb/services/keyvalue/ut/ya.make @@ -12,6 +12,7 @@ PEERDIR( library/cpp/logger ydb/core/protos ydb/core/testlib/default + ydb/services/keyvalue ) YQL_LAST_ABI_VERSION() diff --git a/ydb/services/persqueue_v1/actors/write_session_actor.ipp b/ydb/services/persqueue_v1/actors/write_session_actor.ipp index 0b06d0be56..6949699354 100644 --- a/ydb/services/persqueue_v1/actors/write_session_actor.ipp +++ b/ydb/services/persqueue_v1/actors/write_session_actor.ipp @@ -217,8 +217,8 @@ void TWriteSessionActor<UseMigrationProtocol>::Bootstrap(const TActorContext& ct const auto& pqConfig = AppData(ctx)->PQConfig; SrcIdTableGeneration = pqConfig.GetTopicsAreFirstClassCitizen() ? ESourceIdTableGeneration::PartitionMapping : ESourceIdTableGeneration::SrcIdMeta2; - SelectSourceIdQuery = GetSourceIdSelectQueryFromPath(pqConfig.GetSourceIdTablePath(),SrcIdTableGeneration); - UpdateSourceIdQuery = GetUpdateIdSelectQueryFromPath(pqConfig.GetSourceIdTablePath(), SrcIdTableGeneration); + SelectSourceIdQuery = GetSelectSourceIdQueryFromPath(pqConfig.GetSourceIdTablePath(),SrcIdTableGeneration); + UpdateSourceIdQuery = GetUpdateSourceIdQueryFromPath(pqConfig.GetSourceIdTablePath(), SrcIdTableGeneration); LOG_INFO_S(ctx, NKikimrServices::PQ_WRITE_PROXY, "Select srcid query: " << SelectSourceIdQuery); Request->GetStreamCtx()->Attach(ctx.SelfID); diff --git a/ydb/services/ydb/ydb_bulk_upsert_olap_ut.cpp b/ydb/services/ydb/ydb_bulk_upsert_olap_ut.cpp index 251c347269..f607424925 100644 --- a/ydb/services/ydb/ydb_bulk_upsert_olap_ut.cpp +++ b/ydb/services/ydb/ydb_bulk_upsert_olap_ut.cpp @@ -50,7 +50,11 @@ std::vector<TString> ScanQuerySelectSimple( for (auto& [colName, colType] : ydbSchema) { switch (colType) { case NYdb::EPrimitiveType::Timestamp: - ss << parser.ColumnParser(colName).GetOptionalTimestamp() << ","; + if (colName == "timestamp") { + ss << parser.ColumnParser(colName).GetTimestamp() << ","; + } else { + ss << parser.ColumnParser(colName).GetOptionalTimestamp() << ","; + } break; case NYdb::EPrimitiveType::Datetime: ss << parser.ColumnParser(colName).GetOptionalDatetime() << ","; @@ -65,7 +69,11 @@ std::vector<TString> ScanQuerySelectSimple( break; } case NYdb::EPrimitiveType::Utf8: - ss << parser.ColumnParser(colName).GetOptionalUtf8() << ","; + if (colName == "uid") { + ss << parser.ColumnParser(colName).GetUtf8() << ","; + } else { + ss << parser.ColumnParser(colName).GetOptionalUtf8() << ","; + } break; case NYdb::EPrimitiveType::Int32: ss << parser.ColumnParser(colName).GetOptionalInt32() << ","; @@ -220,13 +228,13 @@ Y_UNIT_TEST_SUITE(YdbTableBulkUpsertOlap) { auto tableBuilder = client.GetTableBuilder(); for (auto& [name, type] : schema) { - if (name == "id") { + if (name == "id" || name == "timestamp") { tableBuilder.AddNonNullableColumn(name, type); } else { tableBuilder.AddNullableColumn(name, type); } } - tableBuilder.SetPrimaryKeyColumns({"id"}); + tableBuilder.SetPrimaryKeyColumns({"id", "timestamp"}); auto result = session.CreateTable(tablePath, tableBuilder.Build(), {}).ExtractValueSync(); UNIT_ASSERT_EQUAL(result.IsTransportError(), false); @@ -234,8 +242,8 @@ Y_UNIT_TEST_SUITE(YdbTableBulkUpsertOlap) { auto batchSchema = std::make_shared<arrow::Schema>( std::vector<std::shared_ptr<arrow::Field>>{ - arrow::field("id", arrow::uint32()), - arrow::field("timestamp", arrow::int64()), + arrow::field("id", arrow::uint32(), false), + arrow::field("timestamp", arrow::int64(), false), arrow::field("dateTimeS", arrow::int32()), arrow::field("dateTimeU", arrow::uint32()), arrow::field("date", arrow::uint16()), @@ -567,9 +575,13 @@ Y_UNIT_TEST_SUITE(YdbTableBulkUpsertOlap) { { // CREATE TABLE /Root/Logs (timestamp Timestamp, ... PK timestamp) auto tableBuilder = client.GetTableBuilder(); for (auto& [name, type] : TTestOlap::PublicSchema()) { - tableBuilder.AddNullableColumn(name, type); + if (name == "uid" || name == "timestamp") { + tableBuilder.AddNonNullableColumn(name, type); + } else { + tableBuilder.AddNullableColumn(name, type); + } } - tableBuilder.SetPrimaryKeyColumns({"timestamp"}); + tableBuilder.SetPrimaryKeyColumns({"uid", "timestamp"}); NYdb::NTable::TCreateTableSettings tableSettings; //tableSettings.PartitioningPolicy(NYdb::NTable::TPartitioningPolicy().UniformPartitions(2)); auto result = session.CreateTable(tablePath, tableBuilder.Build(), tableSettings).ExtractValueSync(); @@ -676,9 +688,13 @@ Y_UNIT_TEST_SUITE(YdbTableBulkUpsertOlap) { { // CREATE TABLE /Root/Logs (timestamp Timestamp, ... PK timestamp) auto tableBuilder = client.GetTableBuilder(); for (auto& [name, type] : TTestOlap::PublicSchema()) { - tableBuilder.AddNullableColumn(name, type); + if (name == "uid" || name == "timestamp") { + tableBuilder.AddNonNullableColumn(name, type); + } else { + tableBuilder.AddNullableColumn(name, type); + } } - tableBuilder.SetPrimaryKeyColumns({"timestamp"}); + tableBuilder.SetPrimaryKeyColumns({"uid", "timestamp"}); NYdb::NTable::TCreateTableSettings tableSettings; //tableSettings.PartitioningPolicy(NYdb::NTable::TPartitioningPolicy().UniformPartitions(2)); auto result = session.CreateTable(tablePath, tableBuilder.Build(), tableSettings).ExtractValueSync(); diff --git a/ydb/services/ydb/ydb_common_ut.h b/ydb/services/ydb/ydb_common_ut.h index d969b5ed51..65d78758b4 100644 --- a/ydb/services/ydb/ydb_common_ut.h +++ b/ydb/services/ydb/ydb_common_ut.h @@ -178,10 +178,10 @@ struct TTestOlap { { return std::make_shared<arrow::Schema>( std::vector<std::shared_ptr<arrow::Field>>{ - arrow::field("timestamp", tsType), + arrow::field("timestamp", tsType, false), arrow::field("resource_type", arrow::utf8()), arrow::field("resource_id", arrow::utf8()), - arrow::field("uid", arrow::utf8()), + arrow::field("uid", arrow::utf8(), false), arrow::field("level", arrow::int32()), arrow::field("message", arrow::utf8()), arrow::field("json_payload", arrow::binary()), @@ -223,10 +223,10 @@ struct TTestOlap { SchemaPresets { Name: "default" Schema { - Columns { Name: "timestamp" Type: "Timestamp" } + Columns { Name: "timestamp" Type: "Timestamp" NotNull : true } Columns { Name: "resource_type" Type: "Utf8" } Columns { Name: "resource_id" Type: "Utf8" } - Columns { Name: "uid" Type: "Utf8" } + Columns { Name: "uid" Type: "Utf8" NotNull : true } Columns { Name: "level" Type: "Int32" } Columns { Name: "message" Type: "Utf8" } Columns { Name: "json_payload" Type: "JsonDocument" } diff --git a/ydb/services/ydb/ydb_long_tx_ut.cpp b/ydb/services/ydb/ydb_long_tx_ut.cpp index e594136868..d8dc15ee04 100644 --- a/ydb/services/ydb/ydb_long_tx_ut.cpp +++ b/ydb/services/ydb/ydb_long_tx_ut.cpp @@ -6,6 +6,8 @@ #include <ydb/core/tx/sharding/sharding.h> #include <ydb/core/formats/arrow/arrow_helpers.h> #include <ydb/library/aclib/aclib.h> +#include <ydb/core/formats/arrow/serializer/full.h> +#include <ydb/core/formats/arrow/serializer/batch_only.h> using namespace NYdb; @@ -16,30 +18,18 @@ static const constexpr char* TestTablePath = TTestOlap::TablePath; TString TestBlob() { auto batch = TTestOlap::SampleBatch(); - int64_t size; - auto status = arrow::ipc::GetRecordBatchSize(*batch, &size); - Y_VERIFY(status.ok()); - - TString buf; - buf.resize(size); - auto writer = arrow::Buffer::GetWriter(arrow::MutableBuffer::Wrap(&buf[0], size)); - Y_VERIFY(writer.ok()); - - // UNCOMPRESSED - status = SerializeRecordBatch(*batch, arrow::ipc::IpcWriteOptions::Defaults(), (*writer).get()); - Y_VERIFY(status.ok()); - return buf; + return NArrow::NSerialization::TFullDataSerializer(arrow::ipc::IpcWriteOptions::Defaults()).Serialize(batch); } TVector<std::shared_ptr<arrow::RecordBatch>> SplitData(const TString& data, ui32 numBatches) { - std::shared_ptr<arrow::RecordBatch> batch = NArrow::DeserializeBatch(data, TTestOlap::ArrowSchema()); - Y_VERIFY(batch); + auto batch = NArrow::NSerialization::TFullDataDeserializer().Deserialize(data); + UNIT_ASSERT(batch.ok()); NSharding::TLogsSharding sharding(numBatches, { "timestamp", "uid" }, numBatches); - std::vector<ui32> rowSharding = sharding.MakeSharding(batch); - Y_VERIFY(rowSharding.size() == (size_t)batch->num_rows()); + std::vector<ui32> rowSharding = sharding.MakeSharding(*batch); + Y_VERIFY(rowSharding.size() == (size_t)batch->get()->num_rows()); - std::vector<std::shared_ptr<arrow::RecordBatch>> sharded = NArrow::ShardingSplit(batch, rowSharding, numBatches); + std::vector<std::shared_ptr<arrow::RecordBatch>> sharded = NArrow::ShardingSplit(*batch, rowSharding, numBatches); Y_VERIFY(sharded.size() == numBatches); TVector<std::shared_ptr<arrow::RecordBatch>> out; @@ -324,7 +314,12 @@ Y_UNIT_TEST_SUITE(YdbLongTx) { { NLongTx::TLongTxReadResult resRead = futureRead.GetValueSync(); UNIT_ASSERT_VALUES_EQUAL(resRead.Status().GetStatus(), EStatus::SUCCESS); - UNIT_ASSERT_VALUES_EQUAL(resRead.GetResult().data().data(), data); + + auto inputBatch = NArrow::NSerialization::TFullDataDeserializer().Deserialize(data); + UNIT_ASSERT(inputBatch.ok()); + auto readBatch = NArrow::NSerialization::TBatchPayloadDeserializer(inputBatch->get()->schema()).Deserialize(resRead.GetResult().data().data()); + UNIT_ASSERT(readBatch.ok()); + UNIT_ASSERT_VALUES_EQUAL(readBatch->get()->ToString(), inputBatch->get()->ToString()); } } diff --git a/ydb/services/ydb/ydb_query.cpp b/ydb/services/ydb/ydb_query.cpp index 69a39d69fb..e6e5c9cf13 100644 --- a/ydb/services/ydb/ydb_query.cpp +++ b/ydb/services/ydb/ydb_query.cpp @@ -27,13 +27,13 @@ void TGRpcYdbQueryService::SetupIncomingRequests(NGrpc::TLoggerPtr logger) { ADD_REQUEST(ExecuteQuery, ExecuteQueryRequest, ExecuteQueryResponsePart, { ActorSystem_->Send(GRpcRequestProxyId_, new TGrpcRequestNoOperationCall<ExecuteQueryRequest, ExecuteQueryResponsePart> - (ctx, &DoExecuteQuery, TRequestAuxSettings{RLSWITCH(TRateLimiterMode::Rps), nullptr})); + (ctx, &DoExecuteQuery, TRequestAuxSettings{RLSWITCH(TRateLimiterMode::Rps), nullptr, TAuditMode::Auditable})); }) ADD_REQUEST(ExecuteScript, ExecuteScriptRequest, Ydb::Operations::Operation, { ActorSystem_->Send(GRpcRequestProxyId_, new TGrpcRequestNoOperationCall<ExecuteScriptRequest, Ydb::Operations::Operation> - (ctx, &DoExecuteScript, TRequestAuxSettings{RLSWITCH(TRateLimiterMode::Rps), nullptr})); + (ctx, &DoExecuteScript, TRequestAuxSettings{RLSWITCH(TRateLimiterMode::Rps), nullptr, TAuditMode::Auditable})); }) ADD_REQUEST(FetchScriptResults, FetchScriptResultsRequest, FetchScriptResultsResponse, { diff --git a/ydb/services/ydb/ydb_scripting.cpp b/ydb/services/ydb/ydb_scripting.cpp index 7562d31cc1..f155976892 100644 --- a/ydb/services/ydb/ydb_scripting.cpp +++ b/ydb/services/ydb/ydb_scripting.cpp @@ -31,13 +31,13 @@ void TGRpcYdbScriptingService::SetupIncomingRequests(NGrpc::TLoggerPtr logger) { ADD_REQUEST(ExecuteYql, ExecuteYqlRequest, ExecuteYqlResponse, { ActorSystem_->Send(GRpcRequestProxyId_, new TGrpcRequestOperationCall<ExecuteYqlRequest, ExecuteYqlResponse> - (ctx, &DoExecuteYqlScript, TRequestAuxSettings{RLSWITCH(TRateLimiterMode::Ru), nullptr})); + (ctx, &DoExecuteYqlScript, TRequestAuxSettings{RLSWITCH(TRateLimiterMode::Ru), nullptr, TAuditMode::Auditable})); }) ADD_REQUEST(StreamExecuteYql, ExecuteYqlRequest, ExecuteYqlPartialResponse, { ActorSystem_->Send(GRpcRequestProxyId_, new TGrpcRequestNoOperationCall<ExecuteYqlRequest, ExecuteYqlPartialResponse> - (ctx, &DoStreamExecuteYqlScript, TRequestAuxSettings{RLSWITCH(TRateLimiterMode::Rps), nullptr})); + (ctx, &DoStreamExecuteYqlScript, TRequestAuxSettings{RLSWITCH(TRateLimiterMode::Rps), nullptr, TAuditMode::Auditable})); }) ADD_REQUEST(ExplainYql, ExplainYqlRequest, ExplainYqlResponse, { diff --git a/ydb/services/ydb/ydb_table.cpp b/ydb/services/ydb/ydb_table.cpp index 2a24c43146..400405520d 100644 --- a/ydb/services/ydb/ydb_table.cpp +++ b/ydb/services/ydb/ydb_table.cpp @@ -40,16 +40,16 @@ void TGRpcYdbTableService::SetupIncomingRequests(NGrpc::TLoggerPtr logger) { #error ADD_STREAM_REQUEST_LIMIT macro already defined #endif -#define ADD_REQUEST_LIMIT(NAME, CB, LIMIT_TYPE) \ +#define ADD_REQUEST_LIMIT(NAME, CB, LIMIT_TYPE, ...) \ for (size_t i = 0; i < HandlersPerCompletionQueue; ++i) { \ for (auto* cq: CQS) { \ MakeIntrusive<TGRpcRequest<Ydb::Table::NAME##Request, Ydb::Table::NAME##Response, TGRpcYdbTableService>> \ (this, &Service_, cq, \ [this, proxyCounter](NGrpc::IRequestContextBase *ctx) { \ NGRpcService::ReportGrpcReqToMon(*ActorSystem_, ctx->GetPeer()); \ - ActorSystem_->Send(GRpcProxies_[proxyCounter % GRpcProxies_.size()], \ + ActorSystem_->Send(GRpcProxies_[proxyCounter % GRpcProxies_.size()], \ new TGrpcRequestOperationCall<Ydb::Table::NAME##Request, Ydb::Table::NAME##Response> \ - (ctx, &CB, TRequestAuxSettings{RLSWITCH(TRateLimiterMode::LIMIT_TYPE), nullptr})); \ + (ctx, &CB, TRequestAuxSettings{RLSWITCH(TRateLimiterMode::LIMIT_TYPE), nullptr __VA_OPT__(, TAuditMode::__VA_ARGS__)})); \ }, &Ydb::Table::V1::TableService::AsyncService::Request ## NAME, \ #NAME, logger, getCounterBlock("table", #NAME))->Run(); \ ++proxyCounter; \ @@ -63,7 +63,7 @@ void TGRpcYdbTableService::SetupIncomingRequests(NGrpc::TLoggerPtr logger) { (this, &Service_, cq, \ [this, proxyCounter](NGrpc::IRequestContextBase *ctx) { \ NGRpcService::ReportGrpcReqToMon(*ActorSystem_, ctx->GetPeer()); \ - ActorSystem_->Send(GRpcProxies_[proxyCounter % GRpcProxies_.size()], \ + ActorSystem_->Send(GRpcProxies_[proxyCounter % GRpcProxies_.size()], \ new TGrpcRequestNoOperationCall<Ydb::Table::IN, Ydb::Table::OUT> \ (ctx, &CB, TRequestAuxSettings{RLSWITCH(TRateLimiterMode::LIMIT_TYPE), nullptr})); \ }, &Ydb::Table::V1::TableService::AsyncService::Request ## NAME, \ @@ -83,16 +83,16 @@ void TGRpcYdbTableService::SetupIncomingRequests(NGrpc::TLoggerPtr logger) { ADD_REQUEST_LIMIT(RenameTables, DoRenameTablesRequest, Rps) ADD_REQUEST_LIMIT(ExplainDataQuery, DoExplainDataQueryRequest, Rps) ADD_REQUEST_LIMIT(ExecuteSchemeQuery, DoExecuteSchemeQueryRequest, Rps) - ADD_REQUEST_LIMIT(BeginTransaction, DoBeginTransactionRequest, Rps) + ADD_REQUEST_LIMIT(BeginTransaction, DoBeginTransactionRequest, Rps, Auditable) ADD_REQUEST_LIMIT(DescribeTableOptions, DoDescribeTableOptionsRequest, Rps) ADD_REQUEST_LIMIT(DeleteSession, DoDeleteSessionRequest, Off) - ADD_REQUEST_LIMIT(CommitTransaction, DoCommitTransactionRequest, Off) - ADD_REQUEST_LIMIT(RollbackTransaction, DoRollbackTransactionRequest, Off) + ADD_REQUEST_LIMIT(CommitTransaction, DoCommitTransactionRequest, Off, Auditable) + ADD_REQUEST_LIMIT(RollbackTransaction, DoRollbackTransactionRequest, Off, Auditable) - ADD_REQUEST_LIMIT(PrepareDataQuery, DoPrepareDataQueryRequest, Ru) - ADD_REQUEST_LIMIT(ExecuteDataQuery, DoExecuteDataQueryRequest, Ru) - ADD_REQUEST_LIMIT(BulkUpsert, DoBulkUpsertRequest, Ru) + ADD_REQUEST_LIMIT(PrepareDataQuery, DoPrepareDataQueryRequest, Ru, Auditable) + ADD_REQUEST_LIMIT(ExecuteDataQuery, DoExecuteDataQueryRequest, Ru, Auditable) + ADD_REQUEST_LIMIT(BulkUpsert, DoBulkUpsertRequest, Ru, Auditable) ADD_STREAM_REQUEST_LIMIT(StreamExecuteScanQuery, ExecuteScanQueryRequest, ExecuteScanQueryPartialResponse, DoExecuteScanQueryRequest, RuOnProgress) ADD_STREAM_REQUEST_LIMIT(StreamReadTable, ReadTableRequest, ReadTableResponse, DoReadTableRequest, RuOnProgress) diff --git a/ydb/tests/functional/audit/conftest.py b/ydb/tests/functional/audit/conftest.py new file mode 100644 index 0000000000..b6c9a98e3f --- /dev/null +++ b/ydb/tests/functional/audit/conftest.py @@ -0,0 +1,5 @@ +# XXX: setting of pytest_plugins should work if specified directly in test modules +# but somehow it does not +# +# for ydb_{cluster, database, ...} fixture family +pytest_plugins = 'ydb.tests.library.harness.ydb_fixtures' diff --git a/ydb/tests/functional/audit/test_auditlog.py b/ydb/tests/functional/audit/test_auditlog.py new file mode 100644 index 0000000000..e4541ea593 --- /dev/null +++ b/ydb/tests/functional/audit/test_auditlog.py @@ -0,0 +1,246 @@ +# -*- coding: utf-8 -*- +import logging +import os +import subprocess +import sys + +import pytest + +from ydb import Driver, DriverConfig, SessionPool +from ydb.tests.library.harness.util import LogLevels +from ydb.tests.library.harness.ydb_fixtures import ydb_database_ctx +from ydb.tests.oss.ydb_sdk_import import ydb + +logger = logging.getLogger(__name__) + + +# local configuration for the ydb cluster (fetched by ydb_cluster_configuration fixture) +CLUSTER_CONFIG = dict( + additional_log_configs={ + # more logs + 'GRPC_PROXY': LogLevels.DEBUG, + 'GRPC_SERVER': LogLevels.DEBUG, + 'FLAT_TX_SCHEMESHARD': LogLevels.TRACE, + # less logs + 'KQP_PROXY': LogLevels.DEBUG, + 'KQP_GATEWAY': LogLevels.DEBUG, + 'KQP_WORKER': LogLevels.ERROR, + 'KQP_YQL': LogLevels.ERROR, + 'KQP_SESSION': LogLevels.ERROR, + 'KQP_COMPILE_ACTOR': LogLevels.ERROR, + 'TX_DATASHARD': LogLevels.ERROR, + 'HIVE': LogLevels.ERROR, + 'CMS_TENANTS': LogLevels.ERROR, + 'PERSQUEUE_CLUSTER_TRACKER': LogLevels.CRIT, + 'TX_PROXY_SCHEME_CACHE': LogLevels.CRIT, + 'TX_PROXY': LogLevels.CRIT, + }, + enable_audit_log=True, + # extra_feature_flags=['enable_grpc_audit'], +) + + +def cluster_endpoint(cluster): + return f'{cluster.nodes[1].host}:{cluster.nodes[1].port}' + + +def ydbcli_db_schema_exec(cluster, operation_proto): + endpoint = cluster_endpoint(cluster) + args = [ + # cluster.binary_path, + cluster.nodes[1].binary_path, + f'--server=grpc://{endpoint}', + 'db', + 'schema', + 'exec', + operation_proto, + ] + r = subprocess.run(args, capture_output=True) + assert r.returncode == 0, r + + +def alter_database_audit_settings(cluster, database_path, enable_dml_audit, expected_subjects=None): + alter_proto = r'''ModifyScheme { + OperationType: ESchemeOpAlterExtSubDomain + WorkingDir: "%s" + SubDomain { + Name: "%s" + AuditSettings { + EnableDmlAudit: %s + } + } + }''' % ( + os.path.dirname(database_path), + os.path.basename(database_path), + enable_dml_audit, + ) + ydbcli_db_schema_exec(cluster, alter_proto) + + +class CaptureFileOutput: + def __init__(self, filename): + self.filename = filename + + def __enter__(self): + self.saved_pos = os.path.getsize(self.filename) + return self + + def __exit__(self, *exc): + with open(self.filename, 'r') as f: + f.seek(self.saved_pos) + self.captured = f.read() + + +@pytest.fixture(scope='module') +def _database(ydb_cluster, ydb_root, request): + database_path = os.path.join(ydb_root, request.node.name) + with ydb_database_ctx(ydb_cluster, database_path): + yield database_path + + +@pytest.fixture(scope='module') +def _client_session_pool_with_auth(ydb_cluster, _database): + with Driver(DriverConfig(cluster_endpoint(ydb_cluster), _database, auth_token='root@builtin')) as driver: + with SessionPool(driver) as pool: + yield pool + + +@pytest.fixture(scope='module') +def _client_session_pool_no_auth(ydb_cluster, _database): + with Driver(DriverConfig(cluster_endpoint(ydb_cluster), _database, auth_token=None)) as driver: + with SessionPool(driver) as pool: + yield pool + + +@pytest.fixture(scope='module') +def _client_session_pool_bad_auth(ydb_cluster, _database): + with Driver(DriverConfig(cluster_endpoint(ydb_cluster), _database, auth_token='__bad__@builtin')) as driver: + with SessionPool(driver) as pool: + yield pool + + +def create_table(pool, table_path): + def f(s, table_path): + s.execute_scheme(fr''' + create table `{table_path}` ( + id int64, + value int64, + primary key (id) + ); + ''') + pool.retry_operation_sync(f, table_path=table_path, retry_settings=None) + + +def fill_table(pool, table_path): + def f(s, table_path): + s.transaction().execute(fr''' + insert into `{table_path}` (id, value) values (1, 1), (2, 2) + ''') + pool.retry_operation_sync(f, table_path=table_path, retry_settings=None) + + +@pytest.fixture(scope='module') +def prepared_test_env(ydb_cluster, _database, _client_session_pool_no_auth): + database_path = _database + table_path = os.path.join(database_path, 'test-table') + pool = _client_session_pool_no_auth + + create_table(pool, table_path) + fill_table(pool, table_path) + + capture_audit = CaptureFileOutput(ydb_cluster.config.audit_file_path) + print('AAA', capture_audit.filename, file=sys.stderr) + # print('AAA', ydb_cluster.config.binary_path, file=sys.stderr) + + alter_database_audit_settings(ydb_cluster, database_path, enable_dml_audit=True) + + return table_path, capture_audit + + +def execute_data_query(pool, text): + pool.retry_operation_sync(lambda s: s.transaction().execute(text, commit_tx=True)) + + +QUERIES = [ + r'''insert into `{table_path}` (id, value) values (100, 100), (101, 101)''', + r'''select id from `{table_path}`''', + r'''update `{table_path}` set value = 0 where id = 1''', + r'''delete from `{table_path}` where id = 2''', + r'''replace into `{table_path}` (id, value) values (2, 3), (3, 3)''', + r'''upsert into `{table_path}` (id, value) values (4, 4), (5, 5)''', +] + + +@pytest.mark.parametrize("query_template", QUERIES, ids=lambda x: x.split(maxsplit=1)[0]) +def test_single_dml_query_logged(query_template, prepared_test_env, _client_session_pool_with_auth): + table_path, capture_audit = prepared_test_env + + pool = _client_session_pool_with_auth + query_text = query_template.format(table_path=table_path) + + with capture_audit: + execute_data_query(pool, query_text) + + print(capture_audit.captured, file=sys.stderr) + assert query_text in capture_audit.captured + + +def test_dml_begin_commit_logged(prepared_test_env, _client_session_pool_with_auth): + table_path, capture_audit = prepared_test_env + + pool = _client_session_pool_with_auth + + with pool.checkout() as session: + with capture_audit: + tx = session.transaction().begin() + tx.execute(fr'''update `{table_path}` set value = 0 where id = 1''') + tx.commit() + + print(capture_audit.captured, file=sys.stderr) + assert 'BeginTransaction' in capture_audit.captured + assert 'CommitTransaction' in capture_audit.captured + + +# TODO: fix ydbd crash on exit +# def test_dml_begin_rollback_logged(prepared_test_env, _client_session_pool_with_auth): +# table_path, capture_audit = prepared_test_env +# +# pool = _client_session_pool_with_auth +# +# with pool.checkout() as session: +# with capture_audit: +# tx = session.transaction().begin() +# tx.execute(fr'''update `{table_path}` set value = 0 where id = 1''') +# tx.rollback() +# +# print(capture_audit.captured, file=sys.stderr) +# assert 'BeginTransaction' in capture_audit.captured +# assert 'RollbackTransaction' in capture_audit.captured + + +def test_dml_requests_arent_logged_when_anonymous(prepared_test_env, _client_session_pool_no_auth): + table_path, capture_audit = prepared_test_env + pool = _client_session_pool_no_auth + + with capture_audit: + for i in QUERIES: + query_text = i.format(table_path=table_path) + execute_data_query(pool, query_text) + + print(capture_audit.captured, file=sys.stderr) + assert len(capture_audit.captured) == 0, capture_audit.captured + + +def test_dml_requests_logged_when_unauthorized(prepared_test_env, _client_session_pool_bad_auth): + table_path, capture_audit = prepared_test_env + pool = _client_session_pool_bad_auth + + for i in QUERIES: + query_text = i.format(table_path=table_path) + with pool.checkout() as session: + tx = session.transaction() + with capture_audit: + with pytest.raises(ydb.issues.SchemeError): + tx.execute(query_text, commit_tx=True) + print(capture_audit.captured, file=sys.stderr) + assert query_text in capture_audit.captured diff --git a/ydb/tests/functional/audit/ya.make b/ydb/tests/functional/audit/ya.make new file mode 100644 index 0000000000..30a62b1dd3 --- /dev/null +++ b/ydb/tests/functional/audit/ya.make @@ -0,0 +1,28 @@ +PY3TEST() + +SPLIT_FACTOR(30) +FORK_SUBTESTS() +FORK_TEST_FILES() +TIMEOUT(600) +SIZE(MEDIUM) + +ENV(YDB_DRIVER_BINARY="ydb/apps/ydbd/ydbd") + +TEST_SRCS( + conftest.py + test_auditlog.py +) + +DEPENDS( + ydb/apps/ydbd +) + +PEERDIR( + ydb/tests/library + ydb/tests/oss/ydb_sdk_import + ydb/public/sdk/python +) + +REQUIREMENTS(ram:10) + +END() diff --git a/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_explain.script-script_/explain.script.plan b/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_explain.script-script_/explain.script.plan index aa9259e3f4..f03a87d73f 100644 --- a/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_explain.script-script_/explain.script.plan +++ b/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_explain.script-script_/explain.script.plan @@ -95,12 +95,9 @@ { "Name": "Limit", "Limit": "1" - }, - { - "Name": "Aggregate" } ], - "Node Type": "Aggregate-Limit-Aggregate" + "Node Type": "Aggregate-Limit" } ], "Node Type": "ResultSet", @@ -187,12 +184,9 @@ { "Name": "Limit", "Limit": "1" - }, - { - "Name": "Aggregate" } ], - "Node Type": "Aggregate-Limit-Aggregate" + "Node Type": "Aggregate-Limit" } ], "Node Type": "Precompute_0", @@ -261,12 +255,9 @@ { "Name": "Limit", "Limit": "1" - }, - { - "Name": "Aggregate" } ], - "Node Type": "Aggregate-Limit-Aggregate" + "Node Type": "Aggregate-Limit" } ], "Node Type": "ResultSet", @@ -353,12 +344,9 @@ { "Name": "Limit", "Limit": "1" - }, - { - "Name": "Aggregate" } ], - "Node Type": "Aggregate-Limit-Aggregate" + "Node Type": "Aggregate-Limit" } ], "Node Type": "Precompute_0", diff --git a/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_join_group_by_lookup.script-script_/join_group_by_lookup.script.plan b/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_join_group_by_lookup.script-script_/join_group_by_lookup.script.plan index db6133f8d4..5b85c13774 100644 --- a/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_join_group_by_lookup.script-script_/join_group_by_lookup.script.plan +++ b/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_join_group_by_lookup.script-script_/join_group_by_lookup.script.plan @@ -219,12 +219,7 @@ "PlanNodeType": "Connection" } ], - "Operators": [ - { - "Name": "Aggregate" - } - ], - "Node Type": "Aggregate" + "Node Type": "Stage" } ], "Node Type": "UnionAll", diff --git a/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_write_write_group_by.script-script_/write_write_group_by.script.plan b/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_write_write_group_by.script-script_/write_write_group_by.script.plan index 1325937562..db12a96c56 100644 --- a/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_write_write_group_by.script-script_/write_write_group_by.script.plan +++ b/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_write_write_group_by.script-script_/write_write_group_by.script.plan @@ -192,12 +192,7 @@ "PlanNodeType": "Connection" } ], - "Operators": [ - { - "Name": "Aggregate" - } - ], - "Node Type": "Aggregate" + "Node Type": "Stage" } ], "Node Type": "UnionAll", diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-0 b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-0 index 59c69351ee..bbf549b7be 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-0 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-0 @@ -34,7 +34,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -42,9 +42,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-1 b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-1 index c6458a30fb..67eb811119 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-1 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-1 @@ -34,7 +34,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -42,9 +42,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-10 b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-10 index dd27458744..3137cbc82d 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-10 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-10 @@ -30,15 +30,12 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "TopSort-Aggregate", + "Node Type": "TopSort", "Operators": [ { "Limit": "10", "Name": "TopSort", "TopSortBy": "argument.Count0" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 5, @@ -52,15 +49,12 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "Aggregate-Aggregate", + "Node Type": "Aggregate", "Operators": [ { "Aggregation": "{_yql_agg_0: Inc(state._yql_agg_0)}", "GroupBy": "item.MobilePhoneModel", "Name": "Aggregate" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-11 b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-11 index a51c5c0e78..b1186192a1 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-11 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-11 @@ -30,15 +30,12 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "TopSort-Aggregate", + "Node Type": "TopSort", "Operators": [ { "Limit": "10", "Name": "TopSort", "TopSortBy": "argument.Count0" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 5, @@ -53,15 +50,12 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "Aggregate-Aggregate", + "Node Type": "Aggregate", "Operators": [ { "Aggregation": "{_yql_agg_0: Inc(state._yql_agg_0)}", "GroupBy": "", "Name": "Aggregate" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-12 b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-12 index 9227332778..01eba91e59 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-12 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-12 @@ -30,15 +30,12 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "TopSort-Aggregate", + "Node Type": "TopSort", "Operators": [ { "Limit": "10", "Name": "TopSort", "TopSortBy": "argument.Count0" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-13 b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-13 index 6542861466..3c60b70a25 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-13 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-13 @@ -30,15 +30,12 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "TopSort-Aggregate", + "Node Type": "TopSort", "Operators": [ { "Limit": "10", "Name": "TopSort", "TopSortBy": "argument.Count0" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 5, @@ -52,15 +49,12 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "Aggregate-Aggregate", + "Node Type": "Aggregate", "Operators": [ { "Aggregation": "{_yql_agg_0: Inc(state._yql_agg_0)}", "GroupBy": "item.SearchPhrase", "Name": "Aggregate" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-14 b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-14 index b09c5dc8d6..a5e4026cfd 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-14 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-14 @@ -30,15 +30,12 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "TopSort-Aggregate", + "Node Type": "TopSort", "Operators": [ { "Limit": "10", "Name": "TopSort", "TopSortBy": "argument.Count0" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-15 b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-15 index 0f40e064f9..17bd678218 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-15 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-15 @@ -30,15 +30,12 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "TopSort-Aggregate", + "Node Type": "TopSort", "Operators": [ { "Limit": "10", "Name": "TopSort", "TopSortBy": "argument.Count0" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-16 b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-16 index 2f39820188..a76b490787 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-16 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-16 @@ -30,15 +30,12 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "TopSort-Aggregate", + "Node Type": "TopSort", "Operators": [ { "Limit": "10", "Name": "TopSort", "TopSortBy": "argument.Count0" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-17 b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-17 index 2fd62e12ac..894af01444 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-17 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-17 @@ -30,14 +30,11 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "Limit-Aggregate", + "Node Type": "Limit", "Operators": [ { "Limit": "10", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-18 b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-18 index 63be5045f7..bedc0199bd 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-18 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-18 @@ -30,15 +30,12 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "TopSort-Aggregate", + "Node Type": "TopSort", "Operators": [ { "Limit": "10", "Name": "TopSort", "TopSortBy": "argument.Count0" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-2 b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-2 index 35f7003a77..48596af147 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-2 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-2 @@ -34,7 +34,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -42,9 +42,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-20 b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-20 index 304f120829..0ba876d55e 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-20 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-20 @@ -34,7 +34,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -42,9 +42,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-21 b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-21 index 9b934290a8..9c5fc389ae 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-21 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-21 @@ -30,15 +30,12 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "TopSort-Aggregate", + "Node Type": "TopSort", "Operators": [ { "Limit": "10", "Name": "TopSort", "TopSortBy": "argument.Count0" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-22 b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-22 index 2ba42a8115..b2538e0d97 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-22 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-22 @@ -30,15 +30,12 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "TopSort-Aggregate", + "Node Type": "TopSort", "Operators": [ { "Limit": "10", "Name": "TopSort", "TopSortBy": "argument.Count0" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 9, @@ -264,15 +261,12 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "Aggregate-Aggregate", + "Node Type": "Aggregate", "Operators": [ { "Aggregation": "{_yql_agg_3: Inc(state._yql_agg_3)}", "GroupBy": "item.SearchPhrase", "Name": "Aggregate" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-27 b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-27 index a58e2a9d48..37931eb55c 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-27 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-27 @@ -30,7 +30,7 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "TopSort-Filter-Aggregate", + "Node Type": "TopSort-Filter", "Operators": [ { "Limit": "25", @@ -40,9 +40,6 @@ { "Name": "Filter", "Predicate": "item.Count0 > 100000" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-28 b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-28 index 1fe8861189..60b6401b44 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-28 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-28 @@ -30,7 +30,7 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "TopSort-Filter-Aggregate", + "Node Type": "TopSort-Filter", "Operators": [ { "Limit": "25", @@ -40,9 +40,6 @@ { "Name": "Filter", "Predicate": "item.Count0 > 100000" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-29 b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-29 index adf49d4bfb..d99cfab4b1 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-29 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-29 @@ -34,7 +34,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -42,9 +42,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-3 b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-3 index c894d4a6bb..8046bd4f2b 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-3 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-3 @@ -34,7 +34,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -42,9 +42,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-30 b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-30 index 7b72c71c21..60d8ab5f14 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-30 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-30 @@ -30,15 +30,12 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "TopSort-Aggregate", + "Node Type": "TopSort", "Operators": [ { "Limit": "10", "Name": "TopSort", "TopSortBy": "argument.Count0" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-31 b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-31 index 3d4262792d..d3eeac171d 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-31 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-31 @@ -30,15 +30,12 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "TopSort-Aggregate", + "Node Type": "TopSort", "Operators": [ { "Limit": "10", "Name": "TopSort", "TopSortBy": "argument.Count0" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-32 b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-32 index 520eabb5b1..1bb0f25cf7 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-32 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-32 @@ -30,15 +30,12 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "TopSort-Aggregate", + "Node Type": "TopSort", "Operators": [ { "Limit": "10", "Name": "TopSort", "TopSortBy": "argument.Count0" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-33 b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-33 index 4db494ec25..59bd6b2cf2 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-33 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-33 @@ -30,15 +30,12 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "TopSort-Aggregate", + "Node Type": "TopSort", "Operators": [ { "Limit": "10", "Name": "TopSort", "TopSortBy": "argument.Count0" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-34 b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-34 index c21a2a454f..234db55ac4 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-34 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-34 @@ -30,15 +30,12 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "TopSort-Aggregate", + "Node Type": "TopSort", "Operators": [ { "Limit": "10", "Name": "TopSort", "TopSortBy": "argument.Count0" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-35 b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-35 index d84f8cdb0c..e22c4b6659 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-35 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-35 @@ -30,15 +30,12 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "TopSort-Aggregate", + "Node Type": "TopSort", "Operators": [ { "Limit": "10", "Name": "TopSort", "TopSortBy": "$15.c" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-36 b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-36 index ea5933c675..b15cd6bf9d 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-36 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-36 @@ -30,15 +30,12 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "TopSort-Aggregate", + "Node Type": "TopSort", "Operators": [ { "Limit": "10", "Name": "TopSort", "TopSortBy": "argument.Count0" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-37 b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-37 index afb9ecd3be..d6ff3b473f 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-37 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-37 @@ -30,15 +30,12 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "TopSort-Aggregate", + "Node Type": "TopSort", "Operators": [ { "Limit": "10", "Name": "TopSort", "TopSortBy": "argument.Count0" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-38 b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-38 index 87545be91b..b82127e414 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-38 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-38 @@ -49,15 +49,12 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "TopSort-Aggregate", + "Node Type": "TopSort", "Operators": [ { "Limit": "10 + 1000", "Name": "TopSort", "TopSortBy": "argument.Count0" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-39 b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-39 index 1f507267e3..7954241967 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-39 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-39 @@ -49,15 +49,12 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "TopSort-Aggregate", + "Node Type": "TopSort", "Operators": [ { "Limit": "10 + 1000", "Name": "TopSort", "TopSortBy": "argument.Count0" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-4 b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-4 index 6a9cfa4c03..0a5b876a37 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-4 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-4 @@ -34,7 +34,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -42,9 +42,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 5, @@ -55,13 +52,10 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "Aggregate-Aggregate", + "Node Type": "Aggregate", "Operators": [ { "Name": "Aggregate" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-40 b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-40 index fcdbccc0aa..4c35697f84 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-40 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-40 @@ -49,15 +49,12 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "TopSort-Aggregate", + "Node Type": "TopSort", "Operators": [ { "Limit": "10 + 100", "Name": "TopSort", "TopSortBy": "argument.Count0" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-41 b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-41 index 558dd6e195..adf2a3a947 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-41 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-41 @@ -49,15 +49,12 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "TopSort-Aggregate", + "Node Type": "TopSort", "Operators": [ { "Limit": "10 + 10000", "Name": "TopSort", "TopSortBy": "argument.Count0" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-42 b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-42 index 3d1e30b74f..11cadd7b9d 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-42 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-42 @@ -49,15 +49,12 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "TopSort-Aggregate", + "Node Type": "TopSort", "Operators": [ { "Limit": "10 + 1000", "Name": "TopSort", "TopSortBy": "argument.Minute" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-5 b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-5 index 07f49db4af..68951969d2 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-5 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-5 @@ -34,7 +34,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -42,9 +42,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 5, @@ -55,13 +52,10 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "Aggregate-Aggregate", + "Node Type": "Aggregate", "Operators": [ { "Name": "Aggregate" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-6 b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-6 index a400a1246b..a6cb25f356 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-6 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-6 @@ -34,7 +34,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -42,9 +42,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-7 b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-7 index 5887f4e6da..0e8fa355d1 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-7 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-7 @@ -30,15 +30,12 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "TopSort-Aggregate", + "Node Type": "TopSort", "Operators": [ { "Limit": "1001", "Name": "TopSort", "TopSortBy": "argument.Count0" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-8 b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-8 index 782894dfc9..e308958047 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-8 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-8 @@ -30,15 +30,12 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "TopSort-Aggregate", + "Node Type": "TopSort", "Operators": [ { "Limit": "10", "Name": "TopSort", "TopSortBy": "argument.Count0" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 5, @@ -52,15 +49,12 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "Aggregate-Aggregate", + "Node Type": "Aggregate", "Operators": [ { "Aggregation": "{_yql_agg_0: Inc(state._yql_agg_0)}", "GroupBy": "item.RegionID", "Name": "Aggregate" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-9 b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-9 index fb04907372..071b9b3e92 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-9 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-9 @@ -30,15 +30,12 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "TopSort-Aggregate", + "Node Type": "TopSort", "Operators": [ { "Limit": "10", "Name": "TopSort", "TopSortBy": "argument.Count0" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 9, @@ -130,15 +127,12 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "Aggregate-Aggregate", + "Node Type": "Aggregate", "Operators": [ { "Aggregation": "{_yql_agg_3: Inc(state._yql_agg_3)}", "GroupBy": "item.RegionID", "Name": "Aggregate" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-0 b/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-0 index dd1874964c..c36971a2d9 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-0 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-0 @@ -34,7 +34,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -42,9 +42,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-1 b/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-1 index 24d9104792..c04082f6aa 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-1 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-1 @@ -34,7 +34,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -42,9 +42,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-10 b/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-10 index 76d5182566..1f15d92597 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-10 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-10 @@ -30,15 +30,12 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "TopSort-Aggregate", + "Node Type": "TopSort", "Operators": [ { "Limit": "10", "Name": "TopSort", "TopSortBy": "argument.Count0" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 5, @@ -52,15 +49,12 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "Aggregate-Aggregate", + "Node Type": "Aggregate", "Operators": [ { "Aggregation": "{_yql_agg_0: COUNT(item.UserID)}", "GroupBy": "item.MobilePhoneModel", "Name": "Aggregate" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-11 b/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-11 index 8cb662f105..71c2eb90dc 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-11 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-11 @@ -30,15 +30,12 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "TopSort-Aggregate", + "Node Type": "TopSort", "Operators": [ { "Limit": "10", "Name": "TopSort", "TopSortBy": "argument.Count0" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 5, @@ -53,15 +50,12 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "Aggregate-Aggregate", + "Node Type": "Aggregate", "Operators": [ { "Aggregation": "{_yql_agg_0: COUNT(item.UserID)}", "GroupBy": "", "Name": "Aggregate" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-12 b/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-12 index f2ca450ac4..d571540607 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-12 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-12 @@ -30,15 +30,12 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "TopSort-Aggregate", + "Node Type": "TopSort", "Operators": [ { "Limit": "10", "Name": "TopSort", "TopSortBy": "argument.Count0" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-13 b/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-13 index 1df724b461..f0208cf9cb 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-13 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-13 @@ -30,15 +30,12 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "TopSort-Aggregate", + "Node Type": "TopSort", "Operators": [ { "Limit": "10", "Name": "TopSort", "TopSortBy": "argument.Count0" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 5, @@ -52,15 +49,12 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "Aggregate-Aggregate", + "Node Type": "Aggregate", "Operators": [ { "Aggregation": "{_yql_agg_0: COUNT(item.UserID)}", "GroupBy": "item.SearchPhrase", "Name": "Aggregate" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-14 b/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-14 index 865b37dde7..fed855e763 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-14 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-14 @@ -30,15 +30,12 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "TopSort-Aggregate", + "Node Type": "TopSort", "Operators": [ { "Limit": "10", "Name": "TopSort", "TopSortBy": "argument.Count0" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-15 b/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-15 index 838bc92145..d726255c57 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-15 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-15 @@ -30,15 +30,12 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "TopSort-Aggregate", + "Node Type": "TopSort", "Operators": [ { "Limit": "10", "Name": "TopSort", "TopSortBy": "argument.Count0" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-16 b/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-16 index 00b9500980..4e5d2da1e7 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-16 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-16 @@ -30,15 +30,12 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "TopSort-Aggregate", + "Node Type": "TopSort", "Operators": [ { "Limit": "10", "Name": "TopSort", "TopSortBy": "argument.Count0" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-17 b/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-17 index f1c1834a43..65ff17b232 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-17 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-17 @@ -30,14 +30,11 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "Limit-Aggregate", + "Node Type": "Limit", "Operators": [ { "Limit": "10", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-18 b/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-18 index aee84b4289..b0645a1004 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-18 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-18 @@ -30,15 +30,12 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "TopSort-Aggregate", + "Node Type": "TopSort", "Operators": [ { "Limit": "10", "Name": "TopSort", "TopSortBy": "argument.Count0" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-2 b/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-2 index a3d9caa3bd..f9c943deb1 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-2 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-2 @@ -34,7 +34,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -42,9 +42,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-20 b/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-20 index 7f2ceceb64..dd3ace9446 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-20 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-20 @@ -34,7 +34,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -42,9 +42,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-21 b/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-21 index d961a9ded1..015b7c4501 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-21 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-21 @@ -30,15 +30,12 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "TopSort-Aggregate", + "Node Type": "TopSort", "Operators": [ { "Limit": "10", "Name": "TopSort", "TopSortBy": "argument.Count0" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-22 b/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-22 index 95ec0d5a41..716cb81a6c 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-22 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-22 @@ -30,15 +30,12 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "TopSort-Aggregate", + "Node Type": "TopSort", "Operators": [ { "Limit": "10", "Name": "TopSort", "TopSortBy": "argument.Count0" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 9, @@ -111,15 +108,12 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "Aggregate-Aggregate", + "Node Type": "Aggregate", "Operators": [ { "Aggregation": "{_yql_agg_3: COUNT(item.UserID)}", "GroupBy": "item.SearchPhrase", "Name": "Aggregate" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-27 b/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-27 index 93c971825f..b02c82508a 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-27 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-27 @@ -30,7 +30,7 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "TopSort-Filter-Aggregate", + "Node Type": "TopSort-Filter", "Operators": [ { "Limit": "25", @@ -40,9 +40,6 @@ { "Name": "Filter", "Predicate": "item.Count0 > 100000" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-28 b/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-28 index 735cf96a30..ce9a179b28 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-28 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-28 @@ -30,7 +30,7 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "TopSort-Filter-Aggregate", + "Node Type": "TopSort-Filter", "Operators": [ { "Limit": "25", @@ -40,9 +40,6 @@ { "Name": "Filter", "Predicate": "item.Count0 > 100000" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-29 b/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-29 index 08fd7ef159..dfa53742be 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-29 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-29 @@ -34,7 +34,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -42,9 +42,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-3 b/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-3 index 87d2fbc2df..412732250d 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-3 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-3 @@ -34,7 +34,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -42,9 +42,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-30 b/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-30 index 2e761d1a84..7fea5b7343 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-30 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-30 @@ -30,15 +30,12 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "TopSort-Aggregate", + "Node Type": "TopSort", "Operators": [ { "Limit": "10", "Name": "TopSort", "TopSortBy": "argument.Count0" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-31 b/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-31 index 966e85a983..8fa7d88ba4 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-31 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-31 @@ -30,15 +30,12 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "TopSort-Aggregate", + "Node Type": "TopSort", "Operators": [ { "Limit": "10", "Name": "TopSort", "TopSortBy": "argument.Count0" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-32 b/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-32 index 6c7105bac0..a3a7ed46dc 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-32 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-32 @@ -30,15 +30,12 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "TopSort-Aggregate", + "Node Type": "TopSort", "Operators": [ { "Limit": "10", "Name": "TopSort", "TopSortBy": "argument.Count0" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-33 b/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-33 index be73bea82d..4ac14c7612 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-33 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-33 @@ -30,15 +30,12 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "TopSort-Aggregate", + "Node Type": "TopSort", "Operators": [ { "Limit": "10", "Name": "TopSort", "TopSortBy": "argument.Count0" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-34 b/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-34 index 63c2665694..4159e4dbe2 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-34 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-34 @@ -30,15 +30,12 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "TopSort-Aggregate", + "Node Type": "TopSort", "Operators": [ { "Limit": "10", "Name": "TopSort", "TopSortBy": "argument.Count0" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-35 b/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-35 index d65555f996..82c1a0b7a4 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-35 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-35 @@ -30,15 +30,12 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "TopSort-Aggregate", + "Node Type": "TopSort", "Operators": [ { "Limit": "10", "Name": "TopSort", "TopSortBy": "$15.c" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-36 b/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-36 index 87c50c0e72..a8522f1bc5 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-36 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-36 @@ -30,15 +30,12 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "TopSort-Aggregate", + "Node Type": "TopSort", "Operators": [ { "Limit": "10", "Name": "TopSort", "TopSortBy": "argument.Count0" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-37 b/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-37 index cc2509b280..3cf9925797 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-37 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-37 @@ -30,15 +30,12 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "TopSort-Aggregate", + "Node Type": "TopSort", "Operators": [ { "Limit": "10", "Name": "TopSort", "TopSortBy": "argument.Count0" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-38 b/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-38 index b34dffcd23..1e5fad9efa 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-38 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-38 @@ -49,15 +49,12 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "TopSort-Aggregate", + "Node Type": "TopSort", "Operators": [ { "Limit": "10 + 1000", "Name": "TopSort", "TopSortBy": "argument.Count0" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-39 b/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-39 index a2b2472dd6..b35bf631e3 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-39 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-39 @@ -49,15 +49,12 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "TopSort-Aggregate", + "Node Type": "TopSort", "Operators": [ { "Limit": "10 + 1000", "Name": "TopSort", "TopSortBy": "argument.Count0" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-4 b/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-4 index 7025cc240a..5ec1ef71a8 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-4 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-4 @@ -34,7 +34,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -42,9 +42,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 5, @@ -55,13 +52,10 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "Aggregate-Aggregate", + "Node Type": "Aggregate", "Operators": [ { "Name": "Aggregate" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-40 b/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-40 index f5de3fffec..08e5a56f8f 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-40 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-40 @@ -49,15 +49,12 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "TopSort-Aggregate", + "Node Type": "TopSort", "Operators": [ { "Limit": "10 + 100", "Name": "TopSort", "TopSortBy": "argument.Count0" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-41 b/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-41 index 880930b1bf..90d3101fb9 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-41 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-41 @@ -49,15 +49,12 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "TopSort-Aggregate", + "Node Type": "TopSort", "Operators": [ { "Limit": "10 + 10000", "Name": "TopSort", "TopSortBy": "argument.Count0" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-42 b/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-42 index 3e5d43553b..b2fa714476 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-42 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-42 @@ -49,15 +49,12 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "TopSort-Aggregate", + "Node Type": "TopSort", "Operators": [ { "Limit": "10 + 1000", "Name": "TopSort", "TopSortBy": "argument.Minute" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-5 b/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-5 index 55f387a05e..2735b751f3 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-5 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-5 @@ -34,7 +34,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -42,9 +42,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 5, @@ -55,13 +52,10 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "Aggregate-Aggregate", + "Node Type": "Aggregate", "Operators": [ { "Name": "Aggregate" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-6 b/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-6 index 4976e9eeff..02755d6e70 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-6 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-6 @@ -34,7 +34,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -42,9 +42,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-7 b/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-7 index 960a2cbc60..b26a03d7ca 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-7 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-7 @@ -30,15 +30,12 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "TopSort-Aggregate", + "Node Type": "TopSort", "Operators": [ { "Limit": "1001", "Name": "TopSort", "TopSortBy": "argument.Count0" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-8 b/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-8 index 0ba44a335d..16e37a79a3 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-8 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-8 @@ -30,15 +30,12 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "TopSort-Aggregate", + "Node Type": "TopSort", "Operators": [ { "Limit": "10", "Name": "TopSort", "TopSortBy": "argument.Count0" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 5, @@ -52,15 +49,12 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "Aggregate-Aggregate", + "Node Type": "Aggregate", "Operators": [ { "Aggregation": "{_yql_agg_0: COUNT(item.UserID)}", "GroupBy": "item.RegionID", "Name": "Aggregate" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-9 b/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-9 index 3f4ef67d7c..e72bf729ff 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-9 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-9 @@ -30,15 +30,12 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "TopSort-Aggregate", + "Node Type": "TopSort", "Operators": [ { "Limit": "10", "Name": "TopSort", "TopSortBy": "argument.Count0" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 9, @@ -107,15 +104,12 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "Aggregate-Aggregate", + "Node Type": "Aggregate", "Operators": [ { "Aggregation": "{_yql_agg_3: COUNT(item.UserID)}", "GroupBy": "item.RegionID", "Name": "Aggregate" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/scheme_tests/canondata/tablet_scheme_tests.TestTabletSchemes.test_tablet_schemes_flat_bs_controller_/flat_bs_controller.schema b/ydb/tests/functional/scheme_tests/canondata/tablet_scheme_tests.TestTabletSchemes.test_tablet_schemes_flat_bs_controller_/flat_bs_controller.schema index 39a812e35b..1a12c9bd11 100644 --- a/ydb/tests/functional/scheme_tests/canondata/tablet_scheme_tests.TestTabletSchemes.test_tablet_schemes_flat_bs_controller_/flat_bs_controller.schema +++ b/ydb/tests/functional/scheme_tests/canondata/tablet_scheme_tests.TestTabletSchemes.test_tablet_schemes_flat_bs_controller_/flat_bs_controller.schema @@ -100,6 +100,11 @@ "ColumnId": 20, "ColumnName": "AllowMultipleRealmsOccupation", "ColumnType": "Bool" + }, + { + "ColumnId": 21, + "ColumnName": "CompatibilityInfo", + "ColumnType": "String" } ], "ColumnsDropped": [], @@ -124,7 +129,8 @@ 17, 18, 19, - 20 + 20, + 21 ], "RoomID": 0, "Codec": 0, @@ -1567,6 +1573,53 @@ } }, { + "TableId": 131, + "TableName": "BlobDepotDeleteQueue", + "TableKey": [ + 1 + ], + "ColumnsAdded": [ + { + "ColumnId": 1, + "ColumnName": "GroupId", + "ColumnType": "Uint32" + }, + { + "ColumnId": 2, + "ColumnName": "HiveId", + "ColumnType": "Uint64" + }, + { + "ColumnId": 3, + "ColumnName": "BlobDepotId", + "ColumnType": "Uint64" + } + ], + "ColumnsDropped": [], + "ColumnFamilies": { + "0": { + "Columns": [ + 1, + 2, + 3 + ], + "RoomID": 0, + "Codec": 0, + "InMemory": false, + "Cache": 0, + "Small": 4294967295, + "Large": 4294967295 + } + }, + "Rooms": { + "0": { + "Main": 1, + "Outer": 1, + "Blobs": 1 + } + } + }, + { "TableId": 102, "TableName": "HostConfig", "TableKey": [ diff --git a/ydb/tests/functional/scheme_tests/canondata/tablet_scheme_tests.TestTabletSchemes.test_tablet_schemes_flat_schemeshard_/flat_schemeshard.schema b/ydb/tests/functional/scheme_tests/canondata/tablet_scheme_tests.TestTabletSchemes.test_tablet_schemes_flat_schemeshard_/flat_schemeshard.schema index 8e408d9573..184473b99f 100644 --- a/ydb/tests/functional/scheme_tests/canondata/tablet_scheme_tests.TestTabletSchemes.test_tablet_schemes_flat_schemeshard_/flat_schemeshard.schema +++ b/ydb/tests/functional/scheme_tests/canondata/tablet_scheme_tests.TestTabletSchemes.test_tablet_schemes_flat_schemeshard_/flat_schemeshard.schema @@ -1265,11 +1265,6 @@ ], "ColumnsAdded": [ { - "ColumnId": 29, - "ColumnName": "ImportsLimit", - "ColumnType": "Uint64" - }, - { "ColumnId": 1, "ColumnName": "PathId", "ColumnType": "Uint64" @@ -1408,13 +1403,22 @@ "ColumnId": 28, "ColumnName": "ExportsLimit", "ColumnType": "Uint64" + }, + { + "ColumnId": 29, + "ColumnName": "ImportsLimit", + "ColumnType": "Uint64" + }, + { + "ColumnId": 30, + "ColumnName": "AuditSettings", + "ColumnType": "String" } ], "ColumnsDropped": [], "ColumnFamilies": { "0": { "Columns": [ - 29, 1, 2, 3, @@ -1442,7 +1446,9 @@ 25, 26, 27, - 28 + 28, + 29, + 30 ], "RoomID": 0, "Codec": 0, @@ -2153,6 +2159,11 @@ "ColumnId": 9, "ColumnName": "DatabaseQuotas", "ColumnType": "String" + }, + { + "ColumnId": 10, + "ColumnName": "AuditSettings", + "ColumnType": "String" } ], "ColumnsDropped": [], @@ -2167,7 +2178,8 @@ 6, 7, 8, - 9 + 9, + 10 ], "RoomID": 0, "Codec": 0, diff --git a/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-jointest_join-group-by-with-null.test_/query_2.plan b/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-jointest_join-group-by-with-null.test_/query_2.plan index 352bb9fa78..4ebaab8622 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-jointest_join-group-by-with-null.test_/query_2.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-jointest_join-group-by-with-null.test_/query_2.plan @@ -24,15 +24,12 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "TopSort-Aggregate", + "Node Type": "TopSort", "Operators": [ { "Limit": "1001", "Name": "TopSort", "TopSortBy": "argument.t1.q2" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 17, diff --git a/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-jointest_join-group-by-with-null.test_/query_3.plan b/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-jointest_join-group-by-with-null.test_/query_3.plan index f77aaefadd..ea45581fe9 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-jointest_join-group-by-with-null.test_/query_3.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-jointest_join-group-by-with-null.test_/query_3.plan @@ -24,15 +24,12 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "TopSort-Aggregate", + "Node Type": "TopSort", "Operators": [ { "Limit": "1001", "Name": "TopSort", "TopSortBy": "argument.t1.q2" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 17, diff --git a/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-jointest_join-group-by-with-null.test_/query_4.plan b/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-jointest_join-group-by-with-null.test_/query_4.plan index 83cea80ab7..d5c04b1c55 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-jointest_join-group-by-with-null.test_/query_4.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-jointest_join-group-by-with-null.test_/query_4.plan @@ -24,15 +24,12 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "TopSort-Aggregate", + "Node Type": "TopSort", "Operators": [ { "Limit": "1001", "Name": "TopSort", "TopSortBy": "argument.t1.q2" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 11, diff --git a/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-jointest_join-group-by-with-null.test_/query_5.plan b/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-jointest_join-group-by-with-null.test_/query_5.plan index f3ade24018..ea3a287fa4 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-jointest_join-group-by-with-null.test_/query_5.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-jointest_join-group-by-with-null.test_/query_5.plan @@ -24,15 +24,12 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "TopSort-Aggregate", + "Node Type": "TopSort", "Operators": [ { "Limit": "1001", "Name": "TopSort", "TopSortBy": "argument.t1.q2" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 9, diff --git a/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-jointest_join0.test_/query_16.plan b/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-jointest_join0.test_/query_16.plan index f4f080aad4..c60e30e988 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-jointest_join0.test_/query_16.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-jointest_join0.test_/query_16.plan @@ -9,7 +9,7 @@ "PlanNodeType": "ResultSet", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -17,9 +17,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 11, diff --git a/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-jointest_join0.test_/query_2.plan b/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-jointest_join0.test_/query_2.plan index cc42071cfb..8b38f585aa 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-jointest_join0.test_/query_2.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-jointest_join0.test_/query_2.plan @@ -75,7 +75,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -83,9 +83,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-jointest_join0.test_/query_3.plan b/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-jointest_join0.test_/query_3.plan index 68cd0bd7d7..da9e67391a 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-jointest_join0.test_/query_3.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-jointest_join0.test_/query_3.plan @@ -9,7 +9,7 @@ "PlanNodeType": "ResultSet", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -17,9 +17,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 9, diff --git a/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-jointest_join0.test_/query_7.plan b/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-jointest_join0.test_/query_7.plan index 8d3303823c..fbf9a4ebf3 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-jointest_join0.test_/query_7.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-jointest_join0.test_/query_7.plan @@ -9,7 +9,7 @@ "PlanNodeType": "ResultSet", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -17,9 +17,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 15, diff --git a/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-jointest_join0.test_/query_8.plan b/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-jointest_join0.test_/query_8.plan index e46d5a7931..23a593ff7c 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-jointest_join0.test_/query_8.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-jointest_join0.test_/query_8.plan @@ -9,7 +9,7 @@ "PlanNodeType": "ResultSet", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -17,9 +17,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 15, diff --git a/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-jointest_join4.test_/query_4.plan b/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-jointest_join4.test_/query_4.plan index 29a0c31f99..734a2218ae 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-jointest_join4.test_/query_4.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-jointest_join4.test_/query_4.plan @@ -75,12 +75,7 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "Aggregate", - "Operators": [ - { - "Name": "Aggregate" - } - ], + "Node Type": "Stage", "PlanNodeId": 3, "Plans": [ { diff --git a/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-select_distinct.test_/query_1.plan b/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-select_distinct.test_/query_1.plan index d294faad82..5c8aac51d2 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-select_distinct.test_/query_1.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-select_distinct.test_/query_1.plan @@ -24,15 +24,12 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "TopSort-Aggregate", + "Node Type": "TopSort", "Operators": [ { "Limit": "1001", "Name": "TopSort", "TopSortBy": "row.two" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-select_distinct.test_/query_2.plan b/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-select_distinct.test_/query_2.plan index e022f8be16..0f616c7165 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-select_distinct.test_/query_2.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-select_distinct.test_/query_2.plan @@ -24,15 +24,12 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "TopSort-Aggregate", + "Node Type": "TopSort", "Operators": [ { "Limit": "1001", "Name": "TopSort", "TopSortBy": "row.ten" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-select_distinct.test_/query_3.plan b/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-select_distinct.test_/query_3.plan index db2590470e..0c8ffd0d3b 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-select_distinct.test_/query_3.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-select_distinct.test_/query_3.plan @@ -24,15 +24,12 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "TopSort-Aggregate", + "Node Type": "TopSort", "Operators": [ { "Limit": "1001", "Name": "TopSort", "TopSortBy": "row.string4" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-select_distinct.test_/query_4.plan b/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-select_distinct.test_/query_4.plan index 49225a4b1b..12f51c849f 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-select_distinct.test_/query_4.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-select_distinct.test_/query_4.plan @@ -24,15 +24,12 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "TopSort-Aggregate", + "Node Type": "TopSort", "Operators": [ { "Limit": "1001", "Name": "TopSort", "TopSortBy": "" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-select_distinct.test_/query_5.plan b/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-select_distinct.test_/query_5.plan index 037464b002..9314c7d626 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-select_distinct.test_/query_5.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-select_distinct.test_/query_5.plan @@ -9,7 +9,7 @@ "PlanNodeType": "ResultSet", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -17,9 +17,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 5, @@ -30,13 +27,10 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "Aggregate-Aggregate", + "Node Type": "Aggregate", "Operators": [ { "Name": "Aggregate" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-window.test_/query_5.plan b/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-window.test_/query_5.plan index 432a3b562d..b4012b7cc6 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-window.test_/query_5.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-window.test_/query_5.plan @@ -59,12 +59,7 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "Aggregate", - "Operators": [ - { - "Name": "Aggregate" - } - ], + "Node Type": "Stage", "PlanNodeId": 3, "Plans": [ { diff --git a/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_results-jointest_join-group-by-with-null.test_/query_1 b/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_results-jointest_join-group-by-with-null.test_/query_1 index 8a69ca652f..a01ceaf444 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_results-jointest_join-group-by-with-null.test_/query_1 +++ b/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_results-jointest_join-group-by-with-null.test_/query_1 @@ -1,10 +1,10 @@ [ { - "column1": 1, - "x": 1 - }, - { "column1": 0, "x": 2 + }, + { + "column1": 1, + "x": 1 } ]
\ No newline at end of file diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-insert.test_/query_1.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-insert.test_/query_1.plan index 5ba1020b3d..df06690a43 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-insert.test_/query_1.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-insert.test_/query_1.plan @@ -9,7 +9,7 @@ "PlanNodeType": "ResultSet", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -17,9 +17,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-insert.test_/query_2.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-insert.test_/query_2.plan index 5ba1020b3d..df06690a43 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-insert.test_/query_2.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-insert.test_/query_2.plan @@ -9,7 +9,7 @@ "PlanNodeType": "ResultSet", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -17,9 +17,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_101.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_101.plan index 084401cd74..1715f42561 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_101.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_101.plan @@ -114,7 +114,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -122,9 +122,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_103.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_103.plan index 4b83f1cde4..703182bdfb 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_103.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_103.plan @@ -113,7 +113,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -121,9 +121,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_11.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_11.plan index 0b73cfe822..0de7f07bd2 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_11.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_11.plan @@ -116,7 +116,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -124,9 +124,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_114.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_114.plan index 7d9a2cbd67..85ee51dbc4 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_114.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_114.plan @@ -113,7 +113,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -121,9 +121,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_115.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_115.plan index da60161a56..313a7dffe6 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_115.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_115.plan @@ -111,7 +111,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -119,9 +119,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_121.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_121.plan index 98c1c474ac..1d71246a19 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_121.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_121.plan @@ -107,7 +107,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -115,9 +115,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_13.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_13.plan index 6ae4a46477..5822a3af68 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_13.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_13.plan @@ -112,7 +112,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -120,9 +120,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_16.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_16.plan index aef096540f..95dfb89480 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_16.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_16.plan @@ -111,7 +111,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -119,9 +119,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_17.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_17.plan index 80d1ffc0f1..5898dd68b6 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_17.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_17.plan @@ -115,7 +115,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -123,9 +123,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_18.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_18.plan index c61238c133..864b3a3b25 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_18.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_18.plan @@ -117,7 +117,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -125,9 +125,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_2.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_2.plan index 4d20155520..cc65e35fc4 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_2.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_2.plan @@ -105,7 +105,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -113,9 +113,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_20.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_20.plan index fc9872991e..040bf41db1 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_20.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_20.plan @@ -115,7 +115,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -123,9 +123,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_25.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_25.plan index 0578ef7913..caecf33af0 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_25.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_25.plan @@ -109,7 +109,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -117,9 +117,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_31.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_31.plan index 963114dd73..aef6804fc1 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_31.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_31.plan @@ -114,7 +114,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -122,9 +122,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_49.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_49.plan index 19bcba0e9d..a05a05992f 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_49.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_49.plan @@ -112,7 +112,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -120,9 +120,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_74.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_74.plan index 4d20155520..cc65e35fc4 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_74.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_74.plan @@ -105,7 +105,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -113,9 +113,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_76.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_76.plan index 9d3003af73..156ba507cc 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_76.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_76.plan @@ -113,7 +113,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -121,9 +121,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_8.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_8.plan index 7b4aca65fa..2a6bdd472b 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_8.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_8.plan @@ -111,7 +111,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -119,9 +119,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_82.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_82.plan index 8217402fa8..5844819ed1 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_82.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_82.plan @@ -114,7 +114,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -122,9 +122,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_85.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_85.plan index e10ec1aca6..2a0a271097 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_85.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_85.plan @@ -111,7 +111,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -119,9 +119,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_102.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_102.plan index 1e18408b6f..29807a1f54 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_102.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_102.plan @@ -115,7 +115,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -123,9 +123,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_110.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_110.plan index cb2629c145..3c8e4d998f 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_110.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_110.plan @@ -117,7 +117,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -125,9 +125,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_112.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_112.plan index 62690126a9..f1c6fe5098 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_112.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_112.plan @@ -112,7 +112,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -120,9 +120,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_113.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_113.plan index c93c423625..fb32ac1539 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_113.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_113.plan @@ -111,7 +111,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -119,9 +119,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_130.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_130.plan index 2423c9087a..9ea9ca84d4 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_130.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_130.plan @@ -114,7 +114,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -122,9 +122,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_15.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_15.plan index 1f6b3948fc..df4587f49b 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_15.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_15.plan @@ -108,7 +108,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -116,9 +116,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_2.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_2.plan index 13183dad06..43cf29690c 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_2.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_2.plan @@ -116,7 +116,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -124,9 +124,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_42.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_42.plan index c4c4ec61f6..10de0aaab6 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_42.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_42.plan @@ -112,7 +112,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -120,9 +120,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_44.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_44.plan index 420a1bf48d..6cc7d86b2c 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_44.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_44.plan @@ -115,7 +115,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -123,9 +123,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_54.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_54.plan index b67ec50695..309a858dfa 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_54.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_54.plan @@ -116,7 +116,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -124,9 +124,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_55.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_55.plan index 89582b2dcd..539d0969ff 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_55.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_55.plan @@ -112,7 +112,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -120,9 +120,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_60.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_60.plan index 9c7785c50a..551589cbc3 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_60.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_60.plan @@ -113,7 +113,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -121,9 +121,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_69.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_69.plan index f7eb4e4f26..49efcecfa9 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_69.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_69.plan @@ -110,7 +110,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -118,9 +118,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_7.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_7.plan index 540a9d35e1..9e8bdc3d2f 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_7.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_7.plan @@ -112,7 +112,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -120,9 +120,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_77.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_77.plan index db3361cf00..bb361103ea 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_77.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_77.plan @@ -113,7 +113,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -121,9 +121,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_8.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_8.plan index 25f4f34866..619b99221d 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_8.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_8.plan @@ -112,7 +112,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -120,9 +120,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_83.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_83.plan index fc5f2cf080..97dc4d6874 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_83.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_83.plan @@ -109,7 +109,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -117,9 +117,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_89.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_89.plan index 98fb6ca092..938a466589 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_89.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_89.plan @@ -110,7 +110,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -118,9 +118,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_90.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_90.plan index 60830c8091..d998b78bbd 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_90.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_90.plan @@ -112,7 +112,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -120,9 +120,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_91.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_91.plan index 9a79dd03cf..ebb08d8703 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_91.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_91.plan @@ -112,7 +112,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -120,9 +120,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_92.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_92.plan index 1141e3620f..eefb5727ec 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_92.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_92.plan @@ -113,7 +113,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -121,9 +121,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_97.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_97.plan index 7f95f1a228..96da9cb134 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_97.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_97.plan @@ -107,7 +107,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -115,9 +115,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_99.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_99.plan index c2f94ce0e9..20090c0dc2 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_99.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_99.plan @@ -113,7 +113,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -121,9 +121,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_1.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_1.plan index e6c7326e69..8cda53762e 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_1.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_1.plan @@ -117,7 +117,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -125,9 +125,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_108.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_108.plan index ab7df7678c..a2469b9fbc 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_108.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_108.plan @@ -115,7 +115,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -123,9 +123,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_110.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_110.plan index 721ba40caf..d9a692160d 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_110.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_110.plan @@ -107,7 +107,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -115,9 +115,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_111.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_111.plan index 4f7459dd5f..ba6f227e17 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_111.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_111.plan @@ -115,7 +115,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -123,9 +123,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_112.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_112.plan index 53c776caf6..86de2220a0 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_112.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_112.plan @@ -113,7 +113,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -121,9 +121,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_113.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_113.plan index 74ab07ac06..fe34d43ff5 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_113.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_113.plan @@ -112,7 +112,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -120,9 +120,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_114.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_114.plan index d2db979f6f..09ccd3953f 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_114.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_114.plan @@ -114,7 +114,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -122,9 +122,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_119.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_119.plan index 7d856f0b61..cb563faafb 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_119.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_119.plan @@ -113,7 +113,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -121,9 +121,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_120.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_120.plan index 689e1dfc02..90d6cada19 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_120.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_120.plan @@ -117,7 +117,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -125,9 +125,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_127.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_127.plan index 1a5fed4425..563c2e9ede 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_127.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_127.plan @@ -111,7 +111,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -119,9 +119,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_128.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_128.plan index 01ab66dfc6..479bde7646 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_128.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_128.plan @@ -109,7 +109,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -117,9 +117,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_13.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_13.plan index 1e454d24b5..a07f25a126 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_13.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_13.plan @@ -110,7 +110,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -118,9 +118,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_132.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_132.plan index 87e5d35449..af4ff59c63 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_132.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_132.plan @@ -112,7 +112,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -120,9 +120,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_137.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_137.plan index eb1ebc345e..0df5ba5013 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_137.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_137.plan @@ -114,7 +114,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -122,9 +122,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_141.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_141.plan index 8fd3418485..7bf19b3cab 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_141.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_141.plan @@ -113,7 +113,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -121,9 +121,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_19.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_19.plan index 1b5a40249b..fc6751abac 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_19.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_19.plan @@ -114,7 +114,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -122,9 +122,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_25.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_25.plan index 164b5c3fba..c78a40b9d1 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_25.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_25.plan @@ -116,7 +116,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -124,9 +124,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_3.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_3.plan index 891884829f..407a07db4b 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_3.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_3.plan @@ -114,7 +114,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -122,9 +122,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_33.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_33.plan index 552c088768..69b7aeac90 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_33.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_33.plan @@ -111,7 +111,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -119,9 +119,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_41.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_41.plan index ccbfd6de0b..10ab602474 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_41.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_41.plan @@ -115,7 +115,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -123,9 +123,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_49.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_49.plan index 66f25dcdc0..94bfc2f9e1 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_49.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_49.plan @@ -115,7 +115,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -123,9 +123,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_52.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_52.plan index e51debbf0b..0ce12a1c58 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_52.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_52.plan @@ -113,7 +113,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -121,9 +121,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_59.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_59.plan index be66ef5b85..b306a0b4c7 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_59.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_59.plan @@ -114,7 +114,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -122,9 +122,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_6.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_6.plan index 4bffd0b64c..0461148ff4 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_6.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_6.plan @@ -114,7 +114,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -122,9 +122,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_63.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_63.plan index 102b804560..a6a1ac78d6 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_63.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_63.plan @@ -111,7 +111,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -119,9 +119,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_64.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_64.plan index 4610aa9dba..40cd5302f4 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_64.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_64.plan @@ -116,7 +116,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -124,9 +124,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_7.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_7.plan index 2074507b94..dd7a824528 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_7.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_7.plan @@ -114,7 +114,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -122,9 +122,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_72.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_72.plan index f0bf70b709..eeb725413a 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_72.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_72.plan @@ -111,7 +111,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -119,9 +119,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_8.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_8.plan index e1d8df2ca8..eb0f5894a0 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_8.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_8.plan @@ -115,7 +115,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -123,9 +123,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_87.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_87.plan index 78ba8d551a..7a24d6376a 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_87.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_87.plan @@ -116,7 +116,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -124,9 +124,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_92.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_92.plan index ded1ff53a1..2c83c69d7b 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_92.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_92.plan @@ -113,7 +113,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -121,9 +121,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_107.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_107.plan index 2f9e48e2fb..d6984df3fd 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_107.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_107.plan @@ -114,7 +114,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -122,9 +122,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_110.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_110.plan index 3a197cb491..8766f1efce 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_110.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_110.plan @@ -113,7 +113,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -121,9 +121,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_111.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_111.plan index 1e7c2a5849..3499b1b870 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_111.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_111.plan @@ -112,7 +112,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -120,9 +120,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_114.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_114.plan index 2c8750341a..bf6292fdfa 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_114.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_114.plan @@ -113,7 +113,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -121,9 +121,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_115.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_115.plan index b0fff275e1..9e1be63588 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_115.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_115.plan @@ -115,7 +115,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -123,9 +123,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_116.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_116.plan index 1d813036e5..200faefae8 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_116.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_116.plan @@ -111,7 +111,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -119,9 +119,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_12.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_12.plan index c68fa8515d..d73183e226 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_12.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_12.plan @@ -109,7 +109,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -117,9 +117,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_123.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_123.plan index c0eca2e545..ac74bd4786 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_123.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_123.plan @@ -115,7 +115,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -123,9 +123,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_126.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_126.plan index 3d8a4d2777..a158b256c3 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_126.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_126.plan @@ -116,7 +116,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -124,9 +124,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_133.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_133.plan index c992cdbe26..63a3786e65 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_133.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_133.plan @@ -115,7 +115,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -123,9 +123,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_134.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_134.plan index b0709d0135..ca341a0ad7 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_134.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_134.plan @@ -114,7 +114,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -122,9 +122,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_2.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_2.plan index 1f06dd239d..d2abbebb5e 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_2.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_2.plan @@ -113,7 +113,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -121,9 +121,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_21.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_21.plan index 46b3499f81..a501a44184 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_21.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_21.plan @@ -116,7 +116,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -124,9 +124,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_24.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_24.plan index 442542aab1..a75863d4f3 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_24.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_24.plan @@ -108,7 +108,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -116,9 +116,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_3.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_3.plan index 410b895acd..e0c4e82813 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_3.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_3.plan @@ -113,7 +113,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -121,9 +121,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_31.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_31.plan index 4f2420baee..5eefc31366 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_31.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_31.plan @@ -114,7 +114,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -122,9 +122,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_40.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_40.plan index 869429623d..1fbda59ca0 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_40.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_40.plan @@ -112,7 +112,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -120,9 +120,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_44.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_44.plan index 0670acc5dc..a5aaed1a39 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_44.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_44.plan @@ -115,7 +115,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -123,9 +123,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_5.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_5.plan index f2f6b314c1..03c619aa5b 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_5.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_5.plan @@ -109,7 +109,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -117,9 +117,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_55.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_55.plan index 9abea25d64..b8c65594a4 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_55.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_55.plan @@ -116,7 +116,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -124,9 +124,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_60.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_60.plan index 58ac512b13..bee393649a 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_60.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_60.plan @@ -117,7 +117,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -125,9 +125,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_65.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_65.plan index cc344dcf69..84d7f99942 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_65.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_65.plan @@ -113,7 +113,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -121,9 +121,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_81.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_81.plan index 7fdb014749..9cad5f0a76 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_81.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_81.plan @@ -112,7 +112,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -120,9 +120,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_84.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_84.plan index 2a64f6f0da..2bec6be3a0 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_84.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_84.plan @@ -115,7 +115,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -123,9 +123,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_89.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_89.plan index 36d3504a16..b3268df0a5 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_89.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_89.plan @@ -117,7 +117,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -125,9 +125,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_90.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_90.plan index a6985f5553..f7357544ee 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_90.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_90.plan @@ -112,7 +112,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -120,9 +120,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_91.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_91.plan index e6be206d2d..0fa030952d 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_91.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_91.plan @@ -111,7 +111,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -119,9 +119,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_95.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_95.plan index 9a0360ad24..d112e1984f 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_95.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_95.plan @@ -113,7 +113,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -121,9 +121,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_98.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_98.plan index 3fea357c5c..d434b13c8c 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_98.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_98.plan @@ -113,7 +113,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -121,9 +121,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-5.test_/query_11.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-5.test_/query_11.plan index b844ef9603..6f1056209d 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-5.test_/query_11.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-5.test_/query_11.plan @@ -117,7 +117,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -125,9 +125,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-5.test_/query_24.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-5.test_/query_24.plan index f824aff9b9..a1b740e87f 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-5.test_/query_24.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-5.test_/query_24.plan @@ -114,7 +114,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -122,9 +122,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-5.test_/query_26.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-5.test_/query_26.plan index ea96bb0886..c447d7f745 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-5.test_/query_26.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-5.test_/query_26.plan @@ -115,7 +115,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -123,9 +123,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-5.test_/query_29.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-5.test_/query_29.plan index 30b7b244ec..8db4618cca 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-5.test_/query_29.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-5.test_/query_29.plan @@ -112,7 +112,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -120,9 +120,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-5.test_/query_30.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-5.test_/query_30.plan index f2c865e8fe..1da2c4510a 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-5.test_/query_30.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-5.test_/query_30.plan @@ -116,7 +116,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -124,9 +124,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-5.test_/query_34.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-5.test_/query_34.plan index bd9ca18267..626da6e302 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-5.test_/query_34.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-5.test_/query_34.plan @@ -117,7 +117,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -125,9 +125,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-5.test_/query_8.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-5.test_/query_8.plan index 0160038f50..e30dafb3e9 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-5.test_/query_8.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-5.test_/query_8.plan @@ -115,7 +115,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -123,9 +123,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_1.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_1.plan index 44ffbbdea2..cbc886cb71 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_1.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_1.plan @@ -105,7 +105,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -113,9 +113,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_10.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_10.plan index d2e6555321..874f4a2056 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_10.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_10.plan @@ -115,7 +115,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -123,9 +123,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_107.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_107.plan index 44ffbbdea2..cbc886cb71 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_107.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_107.plan @@ -105,7 +105,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -113,9 +113,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_109.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_109.plan index 9976343aba..e433a76958 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_109.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_109.plan @@ -116,7 +116,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -124,9 +124,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_11.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_11.plan index 11237ac9e7..d6dbfdc61d 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_11.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_11.plan @@ -111,7 +111,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -119,9 +119,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_111.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_111.plan index 8c913e5249..784249f7be 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_111.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_111.plan @@ -116,7 +116,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -124,9 +124,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_116.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_116.plan index 80e92118bd..e09eca88a9 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_116.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_116.plan @@ -116,7 +116,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -124,9 +124,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_122.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_122.plan index 184bf145f1..bd0397c443 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_122.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_122.plan @@ -109,7 +109,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -117,9 +117,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_125.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_125.plan index ac0df63f65..ff52caa0c3 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_125.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_125.plan @@ -95,7 +95,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -103,9 +103,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_137.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_137.plan index 1847db6dde..ee1ab775ff 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_137.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_137.plan @@ -112,7 +112,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -120,9 +120,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_15.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_15.plan index 81c7d49f99..e9566d0c3b 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_15.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_15.plan @@ -97,7 +97,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -105,9 +105,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_20.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_20.plan index 0e7adbe898..d53759d120 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_20.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_20.plan @@ -112,7 +112,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -120,9 +120,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_25.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_25.plan index 3045c0b287..0102b0ca78 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_25.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_25.plan @@ -95,7 +95,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -103,9 +103,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_29.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_29.plan index a12664cc70..8f50e4355c 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_29.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_29.plan @@ -112,7 +112,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -120,9 +120,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_40.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_40.plan index d926a34492..8b9a89899f 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_40.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_40.plan @@ -111,7 +111,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -119,9 +119,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_48.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_48.plan index ee596fa893..67f1fd7020 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_48.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_48.plan @@ -113,7 +113,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -121,9 +121,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_51.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_51.plan index 91ebd99771..3247654c29 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_51.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_51.plan @@ -113,7 +113,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -121,9 +121,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_52.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_52.plan index ff72906f7b..8122e93e37 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_52.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_52.plan @@ -112,7 +112,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -120,9 +120,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_60.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_60.plan index 201c85b46f..34e894c1f7 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_60.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_60.plan @@ -114,7 +114,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -122,9 +122,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_65.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_65.plan index 5f72c300a0..e944f12aaa 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_65.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_65.plan @@ -115,7 +115,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -123,9 +123,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_75.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_75.plan index bf672c947e..388e90acb3 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_75.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_75.plan @@ -95,7 +95,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -103,9 +103,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_8.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_8.plan index 8e24d666b1..f6f4e47cfe 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_8.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_8.plan @@ -113,7 +113,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -121,9 +121,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_89.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_89.plan index 2210e41022..d15202c1a0 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_89.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_89.plan @@ -110,7 +110,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -118,9 +118,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_91.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_91.plan index ecc99ccbda..b45759a767 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_91.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_91.plan @@ -111,7 +111,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -119,9 +119,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_94.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_94.plan index 90beae695b..f4dec4489d 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_94.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_94.plan @@ -116,7 +116,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -124,9 +124,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_1.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_1.plan index f4e7833054..fd5661f005 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_1.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_1.plan @@ -115,7 +115,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -123,9 +123,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_102.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_102.plan index 58e94b8ce3..c2cefa56ae 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_102.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_102.plan @@ -116,7 +116,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -124,9 +124,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_119.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_119.plan index 55738b5084..8299b1b736 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_119.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_119.plan @@ -113,7 +113,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -121,9 +121,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_121.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_121.plan index bbbcbaeef0..a12f0ca8ce 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_121.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_121.plan @@ -110,7 +110,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -118,9 +118,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_127.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_127.plan index 55d6e98c50..4bbda108eb 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_127.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_127.plan @@ -113,7 +113,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -121,9 +121,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_133.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_133.plan index 89a500a3b8..2fbd901084 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_133.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_133.plan @@ -113,7 +113,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -121,9 +121,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_137.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_137.plan index 425cf145a4..81c0280823 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_137.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_137.plan @@ -108,7 +108,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -116,9 +116,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_139.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_139.plan index 898face471..4f0906c710 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_139.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_139.plan @@ -114,7 +114,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -122,9 +122,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_143.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_143.plan index 79afa1abdf..9dec121b83 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_143.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_143.plan @@ -115,7 +115,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -123,9 +123,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_155.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_155.plan index 81af1c056d..494731a78e 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_155.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_155.plan @@ -114,7 +114,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -122,9 +122,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_157.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_157.plan index 41004fcb2d..74cc110d1a 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_157.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_157.plan @@ -111,7 +111,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -119,9 +119,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_2.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_2.plan index 617e599f17..80f5a7d4cc 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_2.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_2.plan @@ -115,7 +115,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -123,9 +123,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_25.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_25.plan index 8a88ebd76a..89353c60c3 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_25.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_25.plan @@ -113,7 +113,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -121,9 +121,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_38.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_38.plan index 194ff7cbe9..7c2f908640 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_38.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_38.plan @@ -113,7 +113,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -121,9 +121,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_4.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_4.plan index 0931385169..fe7f8d6558 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_4.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_4.plan @@ -109,7 +109,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -117,9 +117,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_40.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_40.plan index 9a7071cb37..b9a19f90fa 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_40.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_40.plan @@ -115,7 +115,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -123,9 +123,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_55.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_55.plan index d3efffa2b4..1e1f705397 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_55.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_55.plan @@ -116,7 +116,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -124,9 +124,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_57.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_57.plan index 715f2fd2b3..8008fe0e71 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_57.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_57.plan @@ -112,7 +112,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -120,9 +120,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_61.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_61.plan index 99b6761744..b6e3a83c27 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_61.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_61.plan @@ -114,7 +114,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -122,9 +122,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_67.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_67.plan index 7545b3432d..bda1370304 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_67.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_67.plan @@ -116,7 +116,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -124,9 +124,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_75.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_75.plan index 67b5e20864..92e834fc6b 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_75.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_75.plan @@ -110,7 +110,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -118,9 +118,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_77.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_77.plan index 68aa2e59a8..0bb1a0bf72 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_77.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_77.plan @@ -110,7 +110,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -118,9 +118,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_85.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_85.plan index 82871dc4ee..81064f07e8 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_85.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_85.plan @@ -116,7 +116,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -124,9 +124,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_89.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_89.plan index 8c9b781bd7..3eed5976d5 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_89.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_89.plan @@ -115,7 +115,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -123,9 +123,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_91.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_91.plan index f6a78d8382..19ea9340dd 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_91.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_91.plan @@ -113,7 +113,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -121,9 +121,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_97.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_97.plan index e1c61d2d85..5fb5605f4e 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_97.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_97.plan @@ -115,7 +115,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -123,9 +123,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_98.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_98.plan index 63a6bad0d1..b2e258def4 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_98.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_98.plan @@ -107,7 +107,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -115,9 +115,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_10.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_10.plan index 7367922507..aec6d297d3 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_10.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_10.plan @@ -109,7 +109,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -117,9 +117,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_107.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_107.plan index e13db88b05..b6ed94aaab 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_107.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_107.plan @@ -111,7 +111,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -119,9 +119,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_111.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_111.plan index 7d70d27035..88e4a103c5 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_111.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_111.plan @@ -110,7 +110,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -118,9 +118,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_112.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_112.plan index 1a4f30bfcd..1d1a310296 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_112.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_112.plan @@ -113,7 +113,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -121,9 +121,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_114.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_114.plan index 17f8a4654f..28e169dea5 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_114.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_114.plan @@ -116,7 +116,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -124,9 +124,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_117.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_117.plan index e18795dfc9..2991f40cee 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_117.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_117.plan @@ -112,7 +112,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -120,9 +120,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_13.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_13.plan index 3a32363a39..f013ee0c12 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_13.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_13.plan @@ -113,7 +113,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -121,9 +121,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_135.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_135.plan index b9d545a682..01381bbf3c 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_135.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_135.plan @@ -115,7 +115,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -123,9 +123,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_140.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_140.plan index 08099d7c72..0b227da48c 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_140.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_140.plan @@ -116,7 +116,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -124,9 +124,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_144.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_144.plan index 114ea0f19b..4599ab6431 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_144.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_144.plan @@ -112,7 +112,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -120,9 +120,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_145.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_145.plan index d966ae695b..9857f7a26b 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_145.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_145.plan @@ -112,7 +112,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -120,9 +120,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_147.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_147.plan index cb49ef8bf5..8bdbfa991a 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_147.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_147.plan @@ -115,7 +115,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -123,9 +123,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_17.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_17.plan index 252ab263c2..e92ac0a89d 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_17.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_17.plan @@ -115,7 +115,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -123,9 +123,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_2.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_2.plan index 0dd38f9c98..1015bf95cd 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_2.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_2.plan @@ -117,7 +117,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -125,9 +125,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_24.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_24.plan index 10a720e9dc..6a4318126d 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_24.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_24.plan @@ -95,7 +95,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -103,9 +103,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_27.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_27.plan index f96769de1d..29f4d2ff2d 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_27.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_27.plan @@ -112,7 +112,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -120,9 +120,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_31.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_31.plan index fcd9aa9e94..3da25d8dae 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_31.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_31.plan @@ -109,7 +109,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -117,9 +117,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_44.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_44.plan index 937059a9c0..87bcaf5ade 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_44.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_44.plan @@ -117,7 +117,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -125,9 +125,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_48.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_48.plan index 193b133979..8575991f7e 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_48.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_48.plan @@ -117,7 +117,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -125,9 +125,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_5.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_5.plan index 21042eb4cc..768fe3dbb1 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_5.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_5.plan @@ -114,7 +114,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -122,9 +122,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_51.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_51.plan index 0d94964dd0..1c4c3c51c9 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_51.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_51.plan @@ -90,7 +90,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -98,9 +98,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_54.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_54.plan index 82709fa785..350a310df2 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_54.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_54.plan @@ -112,7 +112,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -120,9 +120,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_59.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_59.plan index 4449670bcd..dfdda25951 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_59.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_59.plan @@ -117,7 +117,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -125,9 +125,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_6.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_6.plan index b58842d5a8..b15d4d1a10 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_6.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_6.plan @@ -116,7 +116,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -124,9 +124,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_69.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_69.plan index 6d04009fd2..6e414b2f88 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_69.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_69.plan @@ -110,7 +110,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -118,9 +118,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_70.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_70.plan index 8464509756..ef4a8d0a34 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_70.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_70.plan @@ -115,7 +115,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -123,9 +123,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_74.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_74.plan index 51df2817ee..56a6f3e536 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_74.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_74.plan @@ -114,7 +114,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -122,9 +122,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_78.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_78.plan index 69eda482f1..c3ccdeaaa9 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_78.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_78.plan @@ -113,7 +113,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -121,9 +121,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_79.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_79.plan index 6c3a9f58a5..998229da2a 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_79.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_79.plan @@ -111,7 +111,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -119,9 +119,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_8.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_8.plan index 577c838954..6075b05e4e 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_8.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_8.plan @@ -116,7 +116,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -124,9 +124,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_82.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_82.plan index d878318c55..fbac0945f2 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_82.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_82.plan @@ -114,7 +114,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -122,9 +122,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_85.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_85.plan index 496854fdd9..0b9db44cfd 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_85.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_85.plan @@ -95,7 +95,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -103,9 +103,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_9.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_9.plan index 1ea8f328e1..76c9268fe9 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_9.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_9.plan @@ -114,7 +114,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -122,9 +122,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_10.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_10.plan index 29eb64fa45..5a21e87e1f 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_10.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_10.plan @@ -109,7 +109,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -117,9 +117,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_102.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_102.plan index 5afa3f25f1..d92491246f 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_102.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_102.plan @@ -117,7 +117,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -125,9 +125,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_107.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_107.plan index 0c7be25df3..3458d54a89 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_107.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_107.plan @@ -115,7 +115,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -123,9 +123,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_111.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_111.plan index 7b4ebb0f4e..7ade85bc75 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_111.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_111.plan @@ -116,7 +116,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -124,9 +124,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_114.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_114.plan index 3f20fd062a..5edc37369c 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_114.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_114.plan @@ -117,7 +117,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -125,9 +125,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_120.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_120.plan index f1500f6962..3d7faa8ad4 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_120.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_120.plan @@ -97,7 +97,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -105,9 +105,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_134.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_134.plan index c3b22459ae..cc256a0576 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_134.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_134.plan @@ -117,7 +117,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -125,9 +125,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_14.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_14.plan index b9ec7195a4..7d7be0513c 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_14.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_14.plan @@ -115,7 +115,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -123,9 +123,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_19.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_19.plan index e1db1ad2a9..7e8ea55123 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_19.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_19.plan @@ -109,7 +109,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -117,9 +117,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_2.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_2.plan index 8840fb74b9..33bc27f2d3 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_2.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_2.plan @@ -116,7 +116,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -124,9 +124,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_20.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_20.plan index 6e053eef52..d538fa6729 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_20.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_20.plan @@ -113,7 +113,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -121,9 +121,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_28.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_28.plan index 27f6d5aba7..2a4ecd6c5b 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_28.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_28.plan @@ -110,7 +110,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -118,9 +118,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_33.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_33.plan index 3f83852a3c..9769f1086c 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_33.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_33.plan @@ -112,7 +112,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -120,9 +120,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_37.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_37.plan index aa479d2946..1b63079d8b 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_37.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_37.plan @@ -114,7 +114,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -122,9 +122,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_39.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_39.plan index 238f4d5d35..746cd055ec 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_39.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_39.plan @@ -114,7 +114,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -122,9 +122,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_45.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_45.plan index 3ba2e3f6d2..44e2ffccea 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_45.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_45.plan @@ -110,7 +110,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -118,9 +118,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_52.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_52.plan index c28bdbf29b..dcf78da982 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_52.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_52.plan @@ -109,7 +109,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -117,9 +117,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_61.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_61.plan index 3835b16de9..b411a63f37 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_61.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_61.plan @@ -111,7 +111,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -119,9 +119,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_63.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_63.plan index 76024d110d..7092e75238 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_63.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_63.plan @@ -113,7 +113,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -121,9 +121,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_67.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_67.plan index 8582c9ca63..e046a4f0f9 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_67.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_67.plan @@ -112,7 +112,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -120,9 +120,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_68.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_68.plan index e7695f2f41..4acad183ad 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_68.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_68.plan @@ -116,7 +116,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -124,9 +124,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_70.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_70.plan index 616fb7d5e0..657ed5dd23 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_70.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_70.plan @@ -116,7 +116,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -124,9 +124,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_71.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_71.plan index 87135a2b28..5e8388f3c7 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_71.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_71.plan @@ -112,7 +112,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -120,9 +120,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_74.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_74.plan index 804d8c9917..bc09c6e736 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_74.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_74.plan @@ -117,7 +117,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -125,9 +125,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_8.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_8.plan index d496733fdd..0db0e40174 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_8.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_8.plan @@ -117,7 +117,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -125,9 +125,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_82.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_82.plan index c28bdbf29b..dcf78da982 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_82.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_82.plan @@ -109,7 +109,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -117,9 +117,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_84.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_84.plan index e7c2058659..0a170e043d 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_84.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_84.plan @@ -114,7 +114,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -122,9 +122,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_86.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_86.plan index b5a9c107b7..619aa67a75 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_86.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_86.plan @@ -111,7 +111,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -119,9 +119,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_89.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_89.plan index d1160eb4ab..0ebccaa355 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_89.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_89.plan @@ -112,7 +112,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -120,9 +120,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_91.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_91.plan index 8752619b01..e3f204ebb4 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_91.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_91.plan @@ -114,7 +114,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -122,9 +122,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_96.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_96.plan index cabf19264f..50cab1a93a 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_96.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_96.plan @@ -94,7 +94,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -102,9 +102,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_98.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_98.plan index ad6ba83c92..7fb6f98645 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_98.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_98.plan @@ -115,7 +115,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -123,9 +123,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-1.test_/query_1.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-1.test_/query_1.plan index d9eed02781..fc84f9c4eb 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-1.test_/query_1.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-1.test_/query_1.plan @@ -105,7 +105,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -113,9 +113,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-1.test_/query_131.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-1.test_/query_131.plan index 4a22782cf4..d7faf3a1c0 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-1.test_/query_131.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-1.test_/query_131.plan @@ -108,7 +108,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -116,9 +116,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-1.test_/query_132.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-1.test_/query_132.plan index 4a22782cf4..d7faf3a1c0 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-1.test_/query_132.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-1.test_/query_132.plan @@ -108,7 +108,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -116,9 +116,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-1.test_/query_17.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-1.test_/query_17.plan index 7ffa06d347..367bb48789 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-1.test_/query_17.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-1.test_/query_17.plan @@ -115,7 +115,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -123,9 +123,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-1.test_/query_18.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-1.test_/query_18.plan index 553a357ffd..16a757e107 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-1.test_/query_18.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-1.test_/query_18.plan @@ -115,7 +115,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -123,9 +123,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-1.test_/query_19.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-1.test_/query_19.plan index 3bc4cea88c..25b64a8e54 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-1.test_/query_19.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-1.test_/query_19.plan @@ -115,7 +115,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -123,9 +123,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-1.test_/query_2.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-1.test_/query_2.plan index d9eed02781..fc84f9c4eb 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-1.test_/query_2.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-1.test_/query_2.plan @@ -105,7 +105,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -113,9 +113,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-1.test_/query_20.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-1.test_/query_20.plan index a948ae45f4..5600c748f9 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-1.test_/query_20.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-1.test_/query_20.plan @@ -115,7 +115,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -123,9 +123,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-1.test_/query_39.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-1.test_/query_39.plan index 3e45fcd056..86170dbbea 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-1.test_/query_39.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-1.test_/query_39.plan @@ -112,7 +112,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -120,9 +120,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-1.test_/query_40.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-1.test_/query_40.plan index 1a4a7151f2..235c13f3f7 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-1.test_/query_40.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-1.test_/query_40.plan @@ -112,7 +112,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -120,9 +120,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-1.test_/query_83.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-1.test_/query_83.plan index baa4f8d124..553d3825d6 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-1.test_/query_83.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-1.test_/query_83.plan @@ -111,7 +111,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -119,9 +119,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-1.test_/query_84.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-1.test_/query_84.plan index 3838ffaeff..73aa03bfbb 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-1.test_/query_84.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-1.test_/query_84.plan @@ -111,7 +111,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -119,9 +119,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-10.test_/query_11.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-10.test_/query_11.plan index 603283e6fe..8f12e31f94 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-10.test_/query_11.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-10.test_/query_11.plan @@ -112,7 +112,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -120,9 +120,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-10.test_/query_12.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-10.test_/query_12.plan index 57a417b059..8b2fc33663 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-10.test_/query_12.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-10.test_/query_12.plan @@ -112,7 +112,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -120,9 +120,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-10.test_/query_23.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-10.test_/query_23.plan index 562bf0e6f5..4602c1dd22 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-10.test_/query_23.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-10.test_/query_23.plan @@ -113,7 +113,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -121,9 +121,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-10.test_/query_24.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-10.test_/query_24.plan index ad51409831..e2460139b1 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-10.test_/query_24.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-10.test_/query_24.plan @@ -113,7 +113,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -121,9 +121,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-10.test_/query_69.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-10.test_/query_69.plan index 87ec5b0fce..30f67c6e88 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-10.test_/query_69.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-10.test_/query_69.plan @@ -117,7 +117,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -125,9 +125,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-10.test_/query_70.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-10.test_/query_70.plan index 2163b56d9d..27009d34b4 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-10.test_/query_70.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-10.test_/query_70.plan @@ -117,7 +117,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -125,9 +125,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-10.test_/query_75.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-10.test_/query_75.plan index 060e538f73..62c36eb6eb 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-10.test_/query_75.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-10.test_/query_75.plan @@ -115,7 +115,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -123,9 +123,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-10.test_/query_76.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-10.test_/query_76.plan index 7bdcb7b914..7876c60b10 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-10.test_/query_76.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-10.test_/query_76.plan @@ -115,7 +115,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -123,9 +123,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-10.test_/query_93.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-10.test_/query_93.plan index ec562c152c..f9fb45947f 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-10.test_/query_93.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-10.test_/query_93.plan @@ -112,7 +112,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -120,9 +120,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-10.test_/query_94.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-10.test_/query_94.plan index fbe247a6d6..89a73cacb1 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-10.test_/query_94.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-10.test_/query_94.plan @@ -112,7 +112,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -120,9 +120,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-10.test_/query_97.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-10.test_/query_97.plan index d5a00b4794..8e081d9049 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-10.test_/query_97.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-10.test_/query_97.plan @@ -110,7 +110,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -118,9 +118,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-10.test_/query_98.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-10.test_/query_98.plan index ef82408a68..7612f8cab0 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-10.test_/query_98.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-10.test_/query_98.plan @@ -110,7 +110,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -118,9 +118,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-11.test_/query_105.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-11.test_/query_105.plan index 59108f07ba..79542bd745 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-11.test_/query_105.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-11.test_/query_105.plan @@ -112,7 +112,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -120,9 +120,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-11.test_/query_106.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-11.test_/query_106.plan index 59108f07ba..79542bd745 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-11.test_/query_106.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-11.test_/query_106.plan @@ -112,7 +112,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -120,9 +120,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-11.test_/query_19.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-11.test_/query_19.plan index 147923f3bc..660db65472 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-11.test_/query_19.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-11.test_/query_19.plan @@ -108,7 +108,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -116,9 +116,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-11.test_/query_20.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-11.test_/query_20.plan index 147923f3bc..660db65472 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-11.test_/query_20.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-11.test_/query_20.plan @@ -108,7 +108,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -116,9 +116,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-11.test_/query_31.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-11.test_/query_31.plan index 9c9d7ac8db..2d1a928156 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-11.test_/query_31.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-11.test_/query_31.plan @@ -110,7 +110,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -118,9 +118,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-11.test_/query_32.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-11.test_/query_32.plan index 9c9d7ac8db..2d1a928156 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-11.test_/query_32.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-11.test_/query_32.plan @@ -110,7 +110,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -118,9 +118,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-11.test_/query_43.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-11.test_/query_43.plan index 3015ae4614..f9e917edae 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-11.test_/query_43.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-11.test_/query_43.plan @@ -113,7 +113,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -121,9 +121,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-11.test_/query_44.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-11.test_/query_44.plan index f5c23baa13..27426c6cbf 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-11.test_/query_44.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-11.test_/query_44.plan @@ -113,7 +113,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -121,9 +121,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-11.test_/query_45.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-11.test_/query_45.plan index 1b95b8acc6..d39cb06d30 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-11.test_/query_45.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-11.test_/query_45.plan @@ -113,7 +113,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -121,9 +121,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-11.test_/query_46.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-11.test_/query_46.plan index 1b95b8acc6..d39cb06d30 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-11.test_/query_46.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-11.test_/query_46.plan @@ -113,7 +113,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -121,9 +121,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-11.test_/query_47.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-11.test_/query_47.plan index 117d79b655..d6acb3412d 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-11.test_/query_47.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-11.test_/query_47.plan @@ -113,7 +113,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -121,9 +121,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-11.test_/query_48.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-11.test_/query_48.plan index fba28b08c9..e5519f38a7 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-11.test_/query_48.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-11.test_/query_48.plan @@ -113,7 +113,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -121,9 +121,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-11.test_/query_5.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-11.test_/query_5.plan index b11470730e..4708293bac 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-11.test_/query_5.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-11.test_/query_5.plan @@ -113,7 +113,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -121,9 +121,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-11.test_/query_6.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-11.test_/query_6.plan index 1722d37d8c..576d0e9964 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-11.test_/query_6.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-11.test_/query_6.plan @@ -113,7 +113,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -121,9 +121,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_105.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_105.plan index 5d26c47a80..5006fe8f9b 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_105.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_105.plan @@ -113,7 +113,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -121,9 +121,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_106.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_106.plan index fa89181c06..1ab1fe15dc 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_106.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_106.plan @@ -113,7 +113,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -121,9 +121,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_107.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_107.plan index 4a9a7484d3..b8130cc7f3 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_107.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_107.plan @@ -111,7 +111,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -119,9 +119,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_108.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_108.plan index 1f2453f128..4c732294fd 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_108.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_108.plan @@ -111,7 +111,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -119,9 +119,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_109.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_109.plan index aba4630682..b9dec640d9 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_109.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_109.plan @@ -114,7 +114,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -122,9 +122,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_110.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_110.plan index e9a1eb17ac..3d3ebe0467 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_110.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_110.plan @@ -114,7 +114,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -122,9 +122,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_111.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_111.plan index 8ce6900acb..9d2e786750 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_111.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_111.plan @@ -114,7 +114,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -122,9 +122,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_112.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_112.plan index 039c8ec8cf..3466c6370c 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_112.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_112.plan @@ -114,7 +114,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -122,9 +122,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_139.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_139.plan index bb83ed376b..302bd62974 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_139.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_139.plan @@ -117,7 +117,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -125,9 +125,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_140.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_140.plan index dec9d18c1a..af6e97b0ff 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_140.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_140.plan @@ -117,7 +117,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -125,9 +125,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_37.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_37.plan index cd8407ea19..0666397d73 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_37.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_37.plan @@ -114,7 +114,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -122,9 +122,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_38.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_38.plan index c7041a8ee6..3b1b765095 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_38.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_38.plan @@ -114,7 +114,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -122,9 +122,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_45.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_45.plan index e9992e035c..36a3571dc1 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_45.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_45.plan @@ -112,7 +112,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -120,9 +120,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_46.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_46.plan index e9992e035c..36a3571dc1 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_46.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_46.plan @@ -112,7 +112,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -120,9 +120,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_47.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_47.plan index 105a5033a8..76f57f1a8c 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_47.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_47.plan @@ -112,7 +112,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -120,9 +120,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_48.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_48.plan index 897f0f78d4..35b01423d7 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_48.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_48.plan @@ -112,7 +112,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -120,9 +120,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_73.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_73.plan index 335280d69b..cdc7e707ef 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_73.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_73.plan @@ -112,7 +112,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -120,9 +120,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_74.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_74.plan index e62e62155a..0b3a81e84d 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_74.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_74.plan @@ -112,7 +112,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -120,9 +120,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_77.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_77.plan index b4cab23535..63ee259dde 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_77.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_77.plan @@ -115,7 +115,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -123,9 +123,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_78.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_78.plan index b4cab23535..63ee259dde 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_78.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_78.plan @@ -115,7 +115,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -123,9 +123,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_79.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_79.plan index 590e8fea59..d0bf7b01c6 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_79.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_79.plan @@ -115,7 +115,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -123,9 +123,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_80.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_80.plan index fa55d74460..fddb0e69de 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_80.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_80.plan @@ -115,7 +115,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -123,9 +123,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_81.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_81.plan index c8732a23b3..5b40af53ee 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_81.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_81.plan @@ -115,7 +115,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -123,9 +123,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_82.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_82.plan index 2e0d3750fa..e1f05d8f15 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_82.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_82.plan @@ -115,7 +115,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -123,9 +123,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_85.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_85.plan index f9d90aebcf..e1404d6c6b 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_85.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_85.plan @@ -114,7 +114,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -122,9 +122,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_86.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_86.plan index 118483fb36..c88937231a 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_86.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_86.plan @@ -114,7 +114,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -122,9 +122,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_10.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_10.plan index 3ad5ba12bd..7c7e80d904 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_10.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_10.plan @@ -115,7 +115,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -123,9 +123,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_11.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_11.plan index a4a71cbe84..9e50e63725 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_11.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_11.plan @@ -115,7 +115,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -123,9 +123,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_12.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_12.plan index b2329569e9..2ea6969a63 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_12.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_12.plan @@ -115,7 +115,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -123,9 +123,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_13.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_13.plan index 2bac0c6b18..1acfe372e3 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_13.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_13.plan @@ -115,7 +115,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -123,9 +123,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_14.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_14.plan index fd3b5ba6d8..5a916b1cad 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_14.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_14.plan @@ -115,7 +115,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -123,9 +123,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_15.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_15.plan index 0d02070753..6a388d4764 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_15.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_15.plan @@ -115,7 +115,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -123,9 +123,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_16.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_16.plan index af39b8af19..92841ed4ba 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_16.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_16.plan @@ -115,7 +115,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -123,9 +123,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_17.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_17.plan index 0e702a9aeb..c3ba26fc07 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_17.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_17.plan @@ -115,7 +115,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -123,9 +123,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_24.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_24.plan index 037159025d..f424a4254e 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_24.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_24.plan @@ -112,7 +112,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -120,9 +120,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_25.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_25.plan index 47a4795f5d..f9d219e95b 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_25.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_25.plan @@ -112,7 +112,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -120,9 +120,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_26.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_26.plan index 2c4e24370b..b5547df6da 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_26.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_26.plan @@ -112,7 +112,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -120,9 +120,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_27.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_27.plan index 2c4e24370b..b5547df6da 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_27.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_27.plan @@ -112,7 +112,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -120,9 +120,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_34.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_34.plan index b64a94fbdc..18aacdabd6 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_34.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_34.plan @@ -117,7 +117,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -125,9 +125,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_35.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_35.plan index b7debde943..55dbaab933 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_35.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_35.plan @@ -117,7 +117,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -125,9 +125,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_36.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_36.plan index cdc0fcbecb..7e6e6a970c 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_36.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_36.plan @@ -117,7 +117,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -125,9 +125,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_37.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_37.plan index 2fc1862811..0c12afbad0 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_37.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_37.plan @@ -117,7 +117,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -125,9 +125,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_38.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_38.plan index 939d6eef05..49421438c7 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_38.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_38.plan @@ -117,7 +117,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -125,9 +125,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_39.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_39.plan index 67c611336b..8229f66d43 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_39.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_39.plan @@ -117,7 +117,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -125,9 +125,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_62.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_62.plan index 119edacc34..2b09c462fc 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_62.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_62.plan @@ -105,7 +105,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -113,9 +113,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_63.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_63.plan index 119edacc34..2b09c462fc 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_63.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_63.plan @@ -105,7 +105,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -113,9 +113,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_8.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_8.plan index c7fe75a0a3..be2f6bf2b3 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_8.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_8.plan @@ -113,7 +113,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -121,9 +121,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_9.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_9.plan index 41faf1911b..ea9ac1202c 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_9.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_9.plan @@ -113,7 +113,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -121,9 +121,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-14.test_/query_22.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-14.test_/query_22.plan index 0473d8d6e3..6309346e6b 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-14.test_/query_22.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-14.test_/query_22.plan @@ -111,7 +111,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -119,9 +119,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-14.test_/query_23.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-14.test_/query_23.plan index 248c499d17..b6d78fddd8 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-14.test_/query_23.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-14.test_/query_23.plan @@ -111,7 +111,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -119,9 +119,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-14.test_/query_28.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-14.test_/query_28.plan index 10499e2bbd..a177307708 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-14.test_/query_28.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-14.test_/query_28.plan @@ -117,7 +117,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -125,9 +125,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-14.test_/query_29.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-14.test_/query_29.plan index 0ce16b64f6..8a7e6aef37 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-14.test_/query_29.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-14.test_/query_29.plan @@ -117,7 +117,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -125,9 +125,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-14.test_/query_30.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-14.test_/query_30.plan index b81b4f0fc6..1e0c9b77f1 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-14.test_/query_30.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-14.test_/query_30.plan @@ -117,7 +117,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -125,9 +125,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-14.test_/query_31.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-14.test_/query_31.plan index 833f115842..c1bba68d32 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-14.test_/query_31.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-14.test_/query_31.plan @@ -117,7 +117,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -125,9 +125,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-14.test_/query_60.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-14.test_/query_60.plan index 6b24e42e93..7549cb17b9 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-14.test_/query_60.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-14.test_/query_60.plan @@ -110,7 +110,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -118,9 +118,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-14.test_/query_61.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-14.test_/query_61.plan index ad1e72699a..311b1f4cc3 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-14.test_/query_61.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-14.test_/query_61.plan @@ -110,7 +110,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -118,9 +118,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-14.test_/query_76.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-14.test_/query_76.plan index 80edee89dc..074c2938aa 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-14.test_/query_76.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-14.test_/query_76.plan @@ -115,7 +115,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -123,9 +123,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-14.test_/query_77.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-14.test_/query_77.plan index c8510fd561..994b4c7da1 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-14.test_/query_77.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-14.test_/query_77.plan @@ -115,7 +115,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -123,9 +123,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-14.test_/query_78.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-14.test_/query_78.plan index e26acac81b..5917ce5356 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-14.test_/query_78.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-14.test_/query_78.plan @@ -115,7 +115,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -123,9 +123,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-14.test_/query_79.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-14.test_/query_79.plan index d12c2b83c0..cf31ddbe0c 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-14.test_/query_79.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-14.test_/query_79.plan @@ -115,7 +115,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -123,9 +123,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-14.test_/query_80.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-14.test_/query_80.plan index 0bd17922aa..70a7e514c9 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-14.test_/query_80.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-14.test_/query_80.plan @@ -115,7 +115,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -123,9 +123,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-14.test_/query_81.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-14.test_/query_81.plan index 9dc8334e59..6fd192981e 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-14.test_/query_81.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-14.test_/query_81.plan @@ -115,7 +115,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -123,9 +123,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-14.test_/query_88.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-14.test_/query_88.plan index 779efb4a61..d893bd825f 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-14.test_/query_88.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-14.test_/query_88.plan @@ -110,7 +110,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -118,9 +118,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-14.test_/query_89.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-14.test_/query_89.plan index cf94eba865..1e6f00389c 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-14.test_/query_89.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-14.test_/query_89.plan @@ -110,7 +110,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -118,9 +118,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-15.test_/query_11.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-15.test_/query_11.plan index 3eccdfea09..8086140085 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-15.test_/query_11.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-15.test_/query_11.plan @@ -110,7 +110,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -118,9 +118,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-15.test_/query_12.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-15.test_/query_12.plan index bd1ed9c969..8ca9ce9dd4 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-15.test_/query_12.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-15.test_/query_12.plan @@ -110,7 +110,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -118,9 +118,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-15.test_/query_17.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-15.test_/query_17.plan index 286de98389..67e20fe826 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-15.test_/query_17.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-15.test_/query_17.plan @@ -110,7 +110,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -118,9 +118,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-15.test_/query_18.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-15.test_/query_18.plan index 286de98389..67e20fe826 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-15.test_/query_18.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-15.test_/query_18.plan @@ -110,7 +110,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -118,9 +118,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-15.test_/query_19.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-15.test_/query_19.plan index 9058345592..c884377853 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-15.test_/query_19.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-15.test_/query_19.plan @@ -110,7 +110,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -118,9 +118,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-15.test_/query_20.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-15.test_/query_20.plan index 9058345592..c884377853 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-15.test_/query_20.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-15.test_/query_20.plan @@ -110,7 +110,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -118,9 +118,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-15.test_/query_3.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-15.test_/query_3.plan index bbe35b12b5..dbce230213 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-15.test_/query_3.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-15.test_/query_3.plan @@ -106,7 +106,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -114,9 +114,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-15.test_/query_4.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-15.test_/query_4.plan index e144d2ea07..7038a8daa5 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-15.test_/query_4.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-15.test_/query_4.plan @@ -106,7 +106,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -114,9 +114,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_100.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_100.plan index 7abe1216a5..37a22b17f0 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_100.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_100.plan @@ -117,7 +117,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -125,9 +125,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_101.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_101.plan index 70da9e1608..30865c99c3 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_101.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_101.plan @@ -117,7 +117,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -125,9 +125,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_12.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_12.plan index 395120009e..fe06c0a167 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_12.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_12.plan @@ -112,7 +112,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -120,9 +120,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_13.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_13.plan index 9a58958af5..9ced2646e6 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_13.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_13.plan @@ -112,7 +112,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -120,9 +120,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_14.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_14.plan index 39ec064fc7..ae165e8ec2 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_14.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_14.plan @@ -114,7 +114,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -122,9 +122,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_140.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_140.plan index b8ccdf9ce1..7c10d10b3c 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_140.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_140.plan @@ -117,7 +117,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -125,9 +125,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_141.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_141.plan index 0c259e8d7c..1cb5eb012b 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_141.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_141.plan @@ -117,7 +117,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -125,9 +125,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_15.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_15.plan index 7551090339..cecab84f5e 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_15.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_15.plan @@ -114,7 +114,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -122,9 +122,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_16.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_16.plan index cece39d032..49f3686bed 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_16.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_16.plan @@ -114,7 +114,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -122,9 +122,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_17.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_17.plan index 5ed4756caa..cf765f4d03 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_17.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_17.plan @@ -114,7 +114,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -122,9 +122,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_22.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_22.plan index 55483403ec..8b2b2138e4 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_22.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_22.plan @@ -115,7 +115,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -123,9 +123,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_23.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_23.plan index 04cd6e9e35..85dc0e9a48 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_23.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_23.plan @@ -115,7 +115,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -123,9 +123,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_24.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_24.plan index a0c2b19b9f..ed40e18274 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_24.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_24.plan @@ -111,7 +111,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -119,9 +119,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_25.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_25.plan index 272bfc9964..eabcc2b0fd 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_25.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_25.plan @@ -111,7 +111,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -119,9 +119,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_40.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_40.plan index a737bf5dbf..4619f0785d 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_40.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_40.plan @@ -113,7 +113,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -121,9 +121,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_41.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_41.plan index ea65c3d563..5b1505d929 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_41.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_41.plan @@ -113,7 +113,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -121,9 +121,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_44.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_44.plan index 84847555d8..728f8a981c 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_44.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_44.plan @@ -114,7 +114,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -122,9 +122,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_45.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_45.plan index e28fafe7af..935fbc820c 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_45.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_45.plan @@ -114,7 +114,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -122,9 +122,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_54.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_54.plan index a8669160bf..be834ba5b0 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_54.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_54.plan @@ -110,7 +110,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -118,9 +118,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_55.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_55.plan index d029086e95..526e32df79 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_55.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_55.plan @@ -110,7 +110,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -118,9 +118,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_64.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_64.plan index ad5559dbb7..8b22fa0117 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_64.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_64.plan @@ -113,7 +113,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -121,9 +121,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_65.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_65.plan index df9163fbbc..220aee3eb0 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_65.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_65.plan @@ -113,7 +113,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -121,9 +121,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_66.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_66.plan index 49233442d7..67e752e508 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_66.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_66.plan @@ -113,7 +113,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -121,9 +121,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_67.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_67.plan index e6f0d95183..c873f34944 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_67.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_67.plan @@ -113,7 +113,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -121,9 +121,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_72.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_72.plan index 6c2cc8b8ba..eb444397c2 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_72.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_72.plan @@ -117,7 +117,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -125,9 +125,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_73.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_73.plan index 229091e3ba..edaa820082 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_73.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_73.plan @@ -117,7 +117,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -125,9 +125,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_94.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_94.plan index 980f9e5bd7..328cad8416 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_94.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_94.plan @@ -107,7 +107,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -115,9 +115,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_95.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_95.plan index 3a0f883e4d..58070cc654 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_95.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_95.plan @@ -107,7 +107,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -115,9 +115,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_98.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_98.plan index 6c2cc8b8ba..eb444397c2 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_98.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_98.plan @@ -117,7 +117,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -125,9 +125,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_99.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_99.plan index eb36547a85..8227b7c68d 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_99.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_99.plan @@ -117,7 +117,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -125,9 +125,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_1.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_1.plan index ba5d62355b..07da5130e2 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_1.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_1.plan @@ -116,7 +116,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -124,9 +124,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_100.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_100.plan index 9a4c82014e..842628fd48 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_100.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_100.plan @@ -117,7 +117,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -125,9 +125,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_101.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_101.plan index 994183c2b5..ed0bf419a2 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_101.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_101.plan @@ -117,7 +117,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -125,9 +125,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_102.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_102.plan index ec99e41b6d..209401260e 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_102.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_102.plan @@ -117,7 +117,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -125,9 +125,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_107.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_107.plan index b6ea60d678..975e479834 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_107.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_107.plan @@ -114,7 +114,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -122,9 +122,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_108.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_108.plan index 802a94ae53..1e35c9b191 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_108.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_108.plan @@ -114,7 +114,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -122,9 +122,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_119.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_119.plan index 85bc4e46f1..63b3d7ad61 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_119.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_119.plan @@ -108,7 +108,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -116,9 +116,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_120.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_120.plan index b1c05b5b0b..4a5ce8b965 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_120.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_120.plan @@ -108,7 +108,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -116,9 +116,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_2.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_2.plan index 68e1444869..865e893262 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_2.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_2.plan @@ -116,7 +116,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -124,9 +124,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_29.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_29.plan index 8b6b7b0eb4..c026734d42 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_29.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_29.plan @@ -112,7 +112,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -120,9 +120,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_3.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_3.plan index ba03e076d3..b3179202f2 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_3.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_3.plan @@ -116,7 +116,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -124,9 +124,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_30.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_30.plan index 9b79f7197e..1b19ba284e 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_30.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_30.plan @@ -112,7 +112,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -120,9 +120,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_4.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_4.plan index 9fe3033581..aed0216db3 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_4.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_4.plan @@ -116,7 +116,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -124,9 +124,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_43.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_43.plan index 8b6b7b0eb4..c026734d42 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_43.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_43.plan @@ -112,7 +112,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -120,9 +120,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_44.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_44.plan index a97ccc5cd4..1bcce33a91 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_44.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_44.plan @@ -112,7 +112,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -120,9 +120,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_45.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_45.plan index 8b6b7b0eb4..c026734d42 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_45.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_45.plan @@ -112,7 +112,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -120,9 +120,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_46.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_46.plan index 7fc47ddf5d..2edf14dbd7 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_46.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_46.plan @@ -112,7 +112,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -120,9 +120,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_97.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_97.plan index 29e3d46c34..171dd8a3cf 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_97.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_97.plan @@ -117,7 +117,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -125,9 +125,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_98.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_98.plan index 2184ee4561..13c045b962 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_98.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_98.plan @@ -117,7 +117,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -125,9 +125,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_99.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_99.plan index a7eee302d5..bc0d2056ca 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_99.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_99.plan @@ -117,7 +117,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -125,9 +125,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-4.test_/query_16.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-4.test_/query_16.plan index a6e5f7c44c..4a8b3e02ca 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-4.test_/query_16.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-4.test_/query_16.plan @@ -113,7 +113,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -121,9 +121,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-4.test_/query_17.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-4.test_/query_17.plan index 8420d3c11a..2624e8fb4f 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-4.test_/query_17.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-4.test_/query_17.plan @@ -113,7 +113,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -121,9 +121,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-4.test_/query_28.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-4.test_/query_28.plan index db986d5f64..e161a674fd 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-4.test_/query_28.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-4.test_/query_28.plan @@ -114,7 +114,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -122,9 +122,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-4.test_/query_29.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-4.test_/query_29.plan index 36947a1475..6d4a42e83b 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-4.test_/query_29.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-4.test_/query_29.plan @@ -114,7 +114,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -122,9 +122,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-4.test_/query_40.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-4.test_/query_40.plan index 17a6c66993..7772ce1bbe 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-4.test_/query_40.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-4.test_/query_40.plan @@ -111,7 +111,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -119,9 +119,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-4.test_/query_41.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-4.test_/query_41.plan index 9ceded721d..fdb0291891 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-4.test_/query_41.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-4.test_/query_41.plan @@ -111,7 +111,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -119,9 +119,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-4.test_/query_42.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-4.test_/query_42.plan index a91a81caaa..7d22a03a54 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-4.test_/query_42.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-4.test_/query_42.plan @@ -111,7 +111,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -119,9 +119,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-4.test_/query_43.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-4.test_/query_43.plan index a91a81caaa..7d22a03a54 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-4.test_/query_43.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-4.test_/query_43.plan @@ -111,7 +111,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -119,9 +119,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-4.test_/query_68.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-4.test_/query_68.plan index 4136e5f6ee..c148fe2c9c 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-4.test_/query_68.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-4.test_/query_68.plan @@ -115,7 +115,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -123,9 +123,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-4.test_/query_69.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-4.test_/query_69.plan index a67ec129be..6e4ee77c5d 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-4.test_/query_69.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-4.test_/query_69.plan @@ -115,7 +115,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -123,9 +123,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-4.test_/query_70.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-4.test_/query_70.plan index f148b1ccda..8216903826 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-4.test_/query_70.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-4.test_/query_70.plan @@ -115,7 +115,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -123,9 +123,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-4.test_/query_71.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-4.test_/query_71.plan index 8b2c964db0..7abb26e2a3 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-4.test_/query_71.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-4.test_/query_71.plan @@ -115,7 +115,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -123,9 +123,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-4.test_/query_76.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-4.test_/query_76.plan index ee376fe2fa..394d3c80dc 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-4.test_/query_76.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-4.test_/query_76.plan @@ -107,7 +107,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -115,9 +115,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-4.test_/query_77.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-4.test_/query_77.plan index ee376fe2fa..394d3c80dc 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-4.test_/query_77.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-4.test_/query_77.plan @@ -107,7 +107,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -115,9 +115,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-5.test_/query_13.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-5.test_/query_13.plan index d19611ab5f..0f9b7b4ebb 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-5.test_/query_13.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-5.test_/query_13.plan @@ -111,7 +111,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -119,9 +119,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-5.test_/query_14.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-5.test_/query_14.plan index d19611ab5f..0f9b7b4ebb 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-5.test_/query_14.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-5.test_/query_14.plan @@ -111,7 +111,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -119,9 +119,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-5.test_/query_21.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-5.test_/query_21.plan index b949932625..db3b2bb73d 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-5.test_/query_21.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-5.test_/query_21.plan @@ -109,7 +109,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -117,9 +117,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-5.test_/query_22.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-5.test_/query_22.plan index b949932625..db3b2bb73d 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-5.test_/query_22.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-5.test_/query_22.plan @@ -109,7 +109,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -117,9 +117,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-5.test_/query_27.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-5.test_/query_27.plan index f3b97c092b..8ed597be80 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-5.test_/query_27.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-5.test_/query_27.plan @@ -112,7 +112,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -120,9 +120,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-5.test_/query_28.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-5.test_/query_28.plan index f5846132f0..2cab6ea998 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-5.test_/query_28.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-5.test_/query_28.plan @@ -112,7 +112,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -120,9 +120,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-5.test_/query_55.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-5.test_/query_55.plan index 49342e479e..16613ff89a 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-5.test_/query_55.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-5.test_/query_55.plan @@ -105,7 +105,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -113,9 +113,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-5.test_/query_56.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-5.test_/query_56.plan index 49342e479e..16613ff89a 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-5.test_/query_56.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-5.test_/query_56.plan @@ -105,7 +105,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -113,9 +113,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-5.test_/query_75.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-5.test_/query_75.plan index 8275941a0f..b5aa4a704e 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-5.test_/query_75.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-5.test_/query_75.plan @@ -116,7 +116,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -124,9 +124,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-5.test_/query_76.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-5.test_/query_76.plan index 64232180d9..f01b028702 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-5.test_/query_76.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-5.test_/query_76.plan @@ -116,7 +116,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -124,9 +124,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-6.test_/query_103.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-6.test_/query_103.plan index a6862edd2d..fd2c411be6 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-6.test_/query_103.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-6.test_/query_103.plan @@ -114,7 +114,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -122,9 +122,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-6.test_/query_104.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-6.test_/query_104.plan index f00aa484e4..5523d4b00e 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-6.test_/query_104.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-6.test_/query_104.plan @@ -114,7 +114,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -122,9 +122,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-6.test_/query_107.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-6.test_/query_107.plan index 118812bd80..934700a7e6 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-6.test_/query_107.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-6.test_/query_107.plan @@ -110,7 +110,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -118,9 +118,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-6.test_/query_108.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-6.test_/query_108.plan index 5cb787776f..5211c1c96a 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-6.test_/query_108.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-6.test_/query_108.plan @@ -110,7 +110,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -118,9 +118,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-6.test_/query_131.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-6.test_/query_131.plan index c5254febfb..b83c0b5cc5 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-6.test_/query_131.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-6.test_/query_131.plan @@ -117,7 +117,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -125,9 +125,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-6.test_/query_132.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-6.test_/query_132.plan index c20e80122b..51962138d0 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-6.test_/query_132.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-6.test_/query_132.plan @@ -117,7 +117,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -125,9 +125,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-6.test_/query_133.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-6.test_/query_133.plan index d10d34eae6..4979453b54 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-6.test_/query_133.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-6.test_/query_133.plan @@ -117,7 +117,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -125,9 +125,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-6.test_/query_134.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-6.test_/query_134.plan index 8f5b4cebfd..883c8983cf 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-6.test_/query_134.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-6.test_/query_134.plan @@ -117,7 +117,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -125,9 +125,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-6.test_/query_33.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-6.test_/query_33.plan index 18d320ca57..00f6c174bf 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-6.test_/query_33.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-6.test_/query_33.plan @@ -110,7 +110,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -118,9 +118,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-6.test_/query_34.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-6.test_/query_34.plan index 18d320ca57..00f6c174bf 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-6.test_/query_34.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-6.test_/query_34.plan @@ -110,7 +110,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -118,9 +118,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-6.test_/query_35.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-6.test_/query_35.plan index 7bec31904b..761188dac0 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-6.test_/query_35.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-6.test_/query_35.plan @@ -110,7 +110,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -118,9 +118,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-6.test_/query_36.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-6.test_/query_36.plan index 7bec31904b..761188dac0 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-6.test_/query_36.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-6.test_/query_36.plan @@ -110,7 +110,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -118,9 +118,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-6.test_/query_49.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-6.test_/query_49.plan index 6c896c47d7..3b22fa14c2 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-6.test_/query_49.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-6.test_/query_49.plan @@ -116,7 +116,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -124,9 +124,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-6.test_/query_50.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-6.test_/query_50.plan index 73ae5a4997..59b5734f4b 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-6.test_/query_50.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-6.test_/query_50.plan @@ -116,7 +116,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -124,9 +124,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-7.test_/query_1.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-7.test_/query_1.plan index 1e6f9e31ca..c873ff7950 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-7.test_/query_1.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-7.test_/query_1.plan @@ -116,7 +116,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -124,9 +124,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-7.test_/query_109.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-7.test_/query_109.plan index a75673f6e5..c7e361cccb 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-7.test_/query_109.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-7.test_/query_109.plan @@ -111,7 +111,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -119,9 +119,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-7.test_/query_110.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-7.test_/query_110.plan index 55f5d4729c..6be29b1c09 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-7.test_/query_110.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-7.test_/query_110.plan @@ -111,7 +111,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -119,9 +119,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-7.test_/query_113.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-7.test_/query_113.plan index 8dda7feeca..7c95499a4f 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-7.test_/query_113.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-7.test_/query_113.plan @@ -117,7 +117,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -125,9 +125,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-7.test_/query_114.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-7.test_/query_114.plan index 5c0c91b9fc..321a54bfb3 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-7.test_/query_114.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-7.test_/query_114.plan @@ -117,7 +117,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -125,9 +125,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-7.test_/query_119.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-7.test_/query_119.plan index 576263c7ea..518dfb68c2 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-7.test_/query_119.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-7.test_/query_119.plan @@ -116,7 +116,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -124,9 +124,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-7.test_/query_120.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-7.test_/query_120.plan index fb6e293849..8eb2530f49 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-7.test_/query_120.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-7.test_/query_120.plan @@ -116,7 +116,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -124,9 +124,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-7.test_/query_121.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-7.test_/query_121.plan index df0cb2dc4e..db3ea57e4f 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-7.test_/query_121.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-7.test_/query_121.plan @@ -116,7 +116,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -124,9 +124,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-7.test_/query_122.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-7.test_/query_122.plan index 929af80a52..c26c833d67 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-7.test_/query_122.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-7.test_/query_122.plan @@ -116,7 +116,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -124,9 +124,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-7.test_/query_123.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-7.test_/query_123.plan index 01ff78ac02..a025aa80c9 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-7.test_/query_123.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-7.test_/query_123.plan @@ -116,7 +116,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -124,9 +124,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-7.test_/query_2.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-7.test_/query_2.plan index c58f6cd5a3..180159d383 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-7.test_/query_2.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-7.test_/query_2.plan @@ -116,7 +116,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -124,9 +124,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_1.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_1.plan index a2a0d9064a..88c0f6b5f3 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_1.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_1.plan @@ -116,7 +116,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -124,9 +124,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_108.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_108.plan index 38e369e79d..ccbfb4d6c9 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_108.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_108.plan @@ -116,7 +116,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -124,9 +124,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_109.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_109.plan index bcf7873440..ae8b60840e 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_109.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_109.plan @@ -116,7 +116,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -124,9 +124,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_110.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_110.plan index d325d8f277..c8cabc43df 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_110.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_110.plan @@ -116,7 +116,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -124,9 +124,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_111.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_111.plan index 7b410554fa..f495b10eb1 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_111.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_111.plan @@ -116,7 +116,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -124,9 +124,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_114.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_114.plan index 14d9f54e55..00445b47a4 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_114.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_114.plan @@ -117,7 +117,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -125,9 +125,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_115.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_115.plan index f8393edb6a..bde3f8cf0b 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_115.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_115.plan @@ -117,7 +117,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -125,9 +125,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_116.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_116.plan index 788bafcdb4..99aaf8a8c1 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_116.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_116.plan @@ -117,7 +117,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -125,9 +125,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_117.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_117.plan index b759072c3f..2e56c0aa9a 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_117.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_117.plan @@ -117,7 +117,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -125,9 +125,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_120.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_120.plan index 7eafa5e0be..adf0e93464 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_120.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_120.plan @@ -112,7 +112,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -120,9 +120,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_121.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_121.plan index 8631f6d805..7bb476e270 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_121.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_121.plan @@ -112,7 +112,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -120,9 +120,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_2.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_2.plan index 2e2d7604ca..90cf5ece90 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_2.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_2.plan @@ -116,7 +116,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -124,9 +124,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_3.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_3.plan index 706f28f9ad..0b70a37f9d 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_3.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_3.plan @@ -116,7 +116,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -124,9 +124,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_58.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_58.plan index 829ec75841..47d77b4206 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_58.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_58.plan @@ -117,7 +117,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -125,9 +125,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_59.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_59.plan index cfd7e41f07..f25027df36 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_59.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_59.plan @@ -117,7 +117,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -125,9 +125,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_60.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_60.plan index e7b14cffec..f9665d4a7d 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_60.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_60.plan @@ -117,7 +117,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -125,9 +125,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_61.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_61.plan index 69ae6bbf65..acf5e7e7eb 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_61.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_61.plan @@ -117,7 +117,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -125,9 +125,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_62.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_62.plan index 5ad9e7608d..1c4b0847c0 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_62.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_62.plan @@ -117,7 +117,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -125,9 +125,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_63.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_63.plan index 7df2fdb8dc..7c83ac4562 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_63.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_63.plan @@ -117,7 +117,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -125,9 +125,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_80.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_80.plan index 0ecfd038b5..a343cf27f7 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_80.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_80.plan @@ -114,7 +114,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -122,9 +122,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_81.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_81.plan index 2ae7b88c11..c26ade7a07 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_81.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_81.plan @@ -114,7 +114,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -122,9 +122,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_82.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_82.plan index d8f041356e..62c378d9c8 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_82.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_82.plan @@ -114,7 +114,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -122,9 +122,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_83.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_83.plan index ca6a90c858..fb5ce2ffae 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_83.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_83.plan @@ -114,7 +114,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -122,9 +122,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_84.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_84.plan index b876038e39..456d01e8d1 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_84.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_84.plan @@ -114,7 +114,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -122,9 +122,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_85.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_85.plan index 6abd2d10d5..3446ccb9ca 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_85.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_85.plan @@ -114,7 +114,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -122,9 +122,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_86.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_86.plan index 80333de3f5..92a0beb114 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_86.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_86.plan @@ -114,7 +114,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -122,9 +122,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_87.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_87.plan index 7baf6e4643..9db7f81c11 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_87.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_87.plan @@ -114,7 +114,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -122,9 +122,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_92.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_92.plan index 18fa70c295..c985ca0b75 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_92.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_92.plan @@ -107,7 +107,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -115,9 +115,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_93.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_93.plan index 4463bb9d92..5541059d32 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_93.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_93.plan @@ -107,7 +107,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -115,9 +115,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_100.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_100.plan index ce61e21fc8..d8970ea9d8 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_100.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_100.plan @@ -116,7 +116,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -124,9 +124,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_101.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_101.plan index a3356c7cc4..52a3b994a8 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_101.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_101.plan @@ -116,7 +116,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -124,9 +124,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_102.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_102.plan index 0d6368a42d..ba5925c6da 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_102.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_102.plan @@ -116,7 +116,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -124,9 +124,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_129.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_129.plan index f110b55577..5892abf6f9 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_129.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_129.plan @@ -115,7 +115,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -123,9 +123,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_130.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_130.plan index 7bc3713e57..971ee437a8 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_130.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_130.plan @@ -115,7 +115,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -123,9 +123,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_133.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_133.plan index f17877c2ab..03a228e950 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_133.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_133.plan @@ -116,7 +116,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -124,9 +124,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_134.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_134.plan index 596eefaed5..eee82ae171 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_134.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_134.plan @@ -116,7 +116,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -124,9 +124,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_21.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_21.plan index fb9c0d1e42..db24cfb70c 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_21.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_21.plan @@ -117,7 +117,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -125,9 +125,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_22.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_22.plan index 9a77462a4b..601d4a8448 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_22.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_22.plan @@ -117,7 +117,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -125,9 +125,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_23.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_23.plan index 45a49bda9f..c7bbbf54df 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_23.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_23.plan @@ -117,7 +117,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -125,9 +125,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_24.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_24.plan index 963c91c46b..d70ef0bee3 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_24.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_24.plan @@ -117,7 +117,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -125,9 +125,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_27.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_27.plan index d774244e34..059a17db2b 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_27.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_27.plan @@ -113,7 +113,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -121,9 +121,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_28.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_28.plan index 2073e2e217..2e4c5787d1 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_28.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_28.plan @@ -113,7 +113,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -121,9 +121,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_29.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_29.plan index f5cdface26..1b14291f4b 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_29.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_29.plan @@ -111,7 +111,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -119,9 +119,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_3.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_3.plan index a9d8a9e9c1..376b380192 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_3.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_3.plan @@ -113,7 +113,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -121,9 +121,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_30.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_30.plan index 58a46ac848..badb8c6e8d 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_30.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_30.plan @@ -111,7 +111,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -119,9 +119,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_31.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_31.plan index c23269ed2a..ebbd6f4660 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_31.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_31.plan @@ -107,7 +107,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -115,9 +115,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_32.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_32.plan index f3f640cfa2..cab4ab885c 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_32.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_32.plan @@ -107,7 +107,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -115,9 +115,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_4.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_4.plan index 355ca0d14b..eff2dd13ee 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_4.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_4.plan @@ -113,7 +113,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -121,9 +121,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_63.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_63.plan index 15619d6557..f74a9ff67e 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_63.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_63.plan @@ -114,7 +114,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -122,9 +122,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_64.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_64.plan index f662e5de9c..659aaed0ed 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_64.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_64.plan @@ -114,7 +114,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -122,9 +122,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_65.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_65.plan index b7087ac3c9..5d7ecb1c18 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_65.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_65.plan @@ -114,7 +114,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -122,9 +122,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_66.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_66.plan index 74da311922..4a186cd776 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_66.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_66.plan @@ -114,7 +114,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -122,9 +122,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_7.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_7.plan index f5cdface26..1b14291f4b 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_7.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_7.plan @@ -111,7 +111,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -119,9 +119,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_73.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_73.plan index 60041d1e9a..1df348d5a7 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_73.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_73.plan @@ -117,7 +117,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -125,9 +125,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_74.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_74.plan index 1354ec0cb6..b70f841a35 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_74.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_74.plan @@ -117,7 +117,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -125,9 +125,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_8.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_8.plan index 7bf225e3a5..7af61622e5 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_8.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_8.plan @@ -111,7 +111,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -119,9 +119,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_91.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_91.plan index 79a85387aa..cbccae6fa6 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_91.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_91.plan @@ -108,7 +108,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -116,9 +116,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_92.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_92.plan index 9c69425c11..6c3e774b79 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_92.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_92.plan @@ -108,7 +108,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -116,9 +116,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_93.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_93.plan index 5097b0264c..56db3b97ad 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_93.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_93.plan @@ -115,7 +115,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -123,9 +123,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_94.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_94.plan index e67f0b977d..c30fface47 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_94.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_94.plan @@ -115,7 +115,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -123,9 +123,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_99.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_99.plan index 0c5e09661d..59d36a7ae8 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_99.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_99.plan @@ -116,7 +116,7 @@ "PlanNodeType": "Materialize", "Plans": [ { - "Node Type": "Aggregate-Limit-Aggregate", + "Node Type": "Aggregate-Limit", "Operators": [ { "Name": "Aggregate" @@ -124,9 +124,6 @@ { "Limit": "1", "Name": "Limit" - }, - { - "Name": "Aggregate" } ], "PlanNodeId": 3, diff --git a/ydb/tests/functional/suite_tests/canondata/test_stream_query.TestStreamQuery.test_sql_suite_results-window.test_/window.test.out b/ydb/tests/functional/suite_tests/canondata/test_stream_query.TestStreamQuery.test_sql_suite_results-window.test_/window.test.out index 9162181285..50924f4f72 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_stream_query.TestStreamQuery.test_sql_suite_results-window.test_/window.test.out +++ b/ydb/tests/functional/suite_tests/canondata/test_stream_query.TestStreamQuery.test_sql_suite_results-window.test_/window.test.out @@ -21,20 +21,20 @@ SELECT depname, empno, salary, sum(salary) OVER w FROM empsalary WINDOW w AS (PA --!syntax_v1 pragma TablePathPrefix = "/Root/stream_query_window.test_results"; pragma SimpleColumns; -SELECT depname, empno, salary, rank() OVER w FROM empsalary WINDOW w AS (PARTITION BY depname ORDER BY salary); +SELECT depname, empno, salary, rank() OVER w FROM empsalary WINDOW w AS (PARTITION BY depname ORDER BY salary) ORDER BY salary, depname; depname | empno | salary | column3 --------------+-------+--------+--------- + b'personnel' | 5 | 3500 | 1 + b'personnel' | 2 | 3900 | 2 b'develop' | 7 | 4200 | 1 b'develop' | 9 | 4500 | 2 + b'sales' | 4 | 4800 | 1 + b'sales' | 3 | 4800 | 1 + b'sales' | 1 | 5000 | 3 b'develop' | 10 | 5200 | 3 b'develop' | 11 | 5200 | 3 b'develop' | 8 | 6000 | 5 - b'personnel' | 5 | 3500 | 1 - b'personnel' | 2 | 3900 | 2 - b'sales' | 3 | 4800 | 1 - b'sales' | 4 | 4800 | 1 - b'sales' | 1 | 5000 | 3 (10 rows) @@ -72,20 +72,20 @@ GROUP BY four, ten WINDOW w AS (PARTITION BY four) ORDER BY four, ten; --!syntax_v1 pragma TablePathPrefix = "/Root/stream_query_window.test_results"; pragma SimpleColumns; -SELECT depname, empno, salary, sum(salary) OVER w FROM empsalary WINDOW w AS (PARTITION BY depname); +SELECT depname, empno, salary, sum(salary) OVER w FROM empsalary WINDOW w AS (PARTITION BY depname) ORDER BY depname, salary, empno; depname | empno | salary | column3 --------------+-------+--------+--------- b'develop' | 7 | 4200 | 25100 - b'develop' | 8 | 6000 | 25100 b'develop' | 9 | 4500 | 25100 b'develop' | 10 | 5200 | 25100 b'develop' | 11 | 5200 | 25100 - b'personnel' | 2 | 3900 | 7400 + b'develop' | 8 | 6000 | 25100 b'personnel' | 5 | 3500 | 7400 - b'sales' | 1 | 5000 | 14600 + b'personnel' | 2 | 3900 | 7400 b'sales' | 3 | 4800 | 14600 b'sales' | 4 | 4800 | 14600 + b'sales' | 1 | 5000 | 14600 (10 rows) @@ -112,27 +112,27 @@ SELECT depname, empno, salary, rank() OVER w AS r FROM empsalary WINDOW w AS (PA --!syntax_v1 pragma TablePathPrefix = "/Root/stream_query_window.test_results"; pragma SimpleColumns; -SELECT COUNT(*) OVER w FROM tenk1 WHERE unique2 < 10 WINDOW w AS (); +SELECT COUNT(*) OVER w AS cnt FROM tenk1 WHERE unique2 < 10 WINDOW w AS () ORDER BY cnt; - column0 ---------- - 10 - 10 - 10 - 10 - 10 - 10 - 10 - 10 - 10 - 10 + cnt +----- + 10 + 10 + 10 + 10 + 10 + 10 + 10 + 10 + 10 + 10 (10 rows) --!syntax_v1 pragma TablePathPrefix = "/Root/stream_query_window.test_results"; pragma SimpleColumns; -SELECT four FROM tenk1 WHERE FALSE WINDOW w AS (PARTITION BY ten); +SELECT four FROM tenk1 WHERE FALSE WINDOW w AS (PARTITION BY ten) ORDER BY four; (0 rows) @@ -140,18 +140,18 @@ SELECT four FROM tenk1 WHERE FALSE WINDOW w AS (PARTITION BY ten); --!syntax_v1 pragma TablePathPrefix = "/Root/stream_query_window.test_results"; pragma SimpleColumns; -SELECT sum(four) OVER w AS sum_1, ten, four FROM tenk1 WHERE unique2 < 10 WINDOW w AS (PARTITION BY ten ORDER BY unique2); +SELECT sum(four) OVER w AS sum_1, ten, four FROM tenk1 WHERE unique2 < 10 WINDOW w AS (PARTITION BY ten ORDER BY unique2) ORDER BY sum_1, ten, four; sum_1 | ten | four -------+-----+------ - 1 | 9 | 1 - 0 | 4 | 0 - 1 | 7 | 1 0 | 0 | 0 0 | 0 | 0 + 0 | 4 | 0 + 1 | 7 | 1 + 1 | 9 | 1 2 | 0 | 2 - 3 | 3 | 3 3 | 1 | 3 + 3 | 3 | 3 4 | 1 | 1 5 | 1 | 1 (10 rows) @@ -160,156 +160,156 @@ SELECT sum(four) OVER w AS sum_1, ten, four FROM tenk1 WHERE unique2 < 10 WINDOW --!syntax_v1 pragma TablePathPrefix = "/Root/stream_query_window.test_results"; pragma SimpleColumns; -SELECT row_number() OVER w FROM tenk1 WHERE unique2 < 10 WINDOW w AS (ORDER BY unique2); +SELECT row_number() OVER w AS rnum_1 FROM tenk1 WHERE unique2 < 10 WINDOW w AS (ORDER BY unique2) ORDER BY rnum_1; - column0 ---------- - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 + rnum_1 +-------- + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 (10 rows) --!syntax_v1 pragma TablePathPrefix = "/Root/stream_query_window.test_results"; pragma SimpleColumns; -SELECT rank() OVER w AS rank_1, ten, four FROM tenk1 WHERE unique2 < 10 WINDOW w AS (PARTITION BY four ORDER BY ten); +SELECT rank() OVER w AS rank_1, ten, four FROM tenk1 WHERE unique2 < 10 WINDOW w AS (PARTITION BY four ORDER BY ten) ORDER BY rank_1, ten, four; rank_1 | ten | four --------+-----+------ + 1 | 0 | 0 + 1 | 0 | 0 1 | 0 | 2 1 | 1 | 1 1 | 1 | 1 - 3 | 7 | 1 - 4 | 9 | 1 - 1 | 0 | 0 - 1 | 0 | 0 - 3 | 4 | 0 1 | 1 | 3 2 | 3 | 3 + 3 | 4 | 0 + 3 | 7 | 1 + 4 | 9 | 1 (10 rows) --!syntax_v1 pragma TablePathPrefix = "/Root/stream_query_window.test_results"; pragma SimpleColumns; -SELECT dense_rank() OVER w, ten, four FROM tenk1 WHERE unique2 < 10 WINDOW w AS (PARTITION BY four ORDER BY ten); +SELECT dense_rank() OVER w, ten, four FROM tenk1 WHERE unique2 < 10 WINDOW w AS (PARTITION BY four ORDER BY ten) ORDER BY ten, four; column0 | ten | four ---------+-----+------ + 1 | 0 | 0 + 1 | 0 | 0 1 | 0 | 2 1 | 1 | 1 1 | 1 | 1 - 2 | 7 | 1 - 3 | 9 | 1 - 1 | 0 | 0 - 1 | 0 | 0 - 2 | 4 | 0 1 | 1 | 3 2 | 3 | 3 + 2 | 4 | 0 + 2 | 7 | 1 + 3 | 9 | 1 (10 rows) --!syntax_v1 pragma TablePathPrefix = "/Root/stream_query_window.test_results"; pragma SimpleColumns; -SELECT lag(ten) OVER w, ten, four FROM tenk1 WHERE unique2 < 10 WINDOW w AS (PARTITION BY four ORDER BY ten); +SELECT lag(ten) OVER w, ten, four FROM tenk1 WHERE unique2 < 10 WINDOW w AS (PARTITION BY four ORDER BY ten) ORDER BY ten, four; column0 | ten | four ---------+-----+------ + None | 0 | 0 + 0 | 0 | 0 None | 0 | 2 None | 1 | 1 1 | 1 | 1 - 1 | 7 | 1 - 7 | 9 | 1 - None | 0 | 0 - 0 | 0 | 0 - 0 | 4 | 0 None | 1 | 3 1 | 3 | 3 + 0 | 4 | 0 + 1 | 7 | 1 + 7 | 9 | 1 (10 rows) --!syntax_v1 pragma TablePathPrefix = "/Root/stream_query_window.test_results"; pragma SimpleColumns; -SELECT lead(ten) OVER w, ten, four FROM tenk1 WHERE unique2 < 10 WINDOW w AS (PARTITION BY four ORDER BY ten); +SELECT lead(ten) OVER w, ten, four FROM tenk1 WHERE unique2 < 10 WINDOW w AS (PARTITION BY four ORDER BY ten) ORDER BY ten, four; column0 | ten | four ---------+-----+------ + 0 | 0 | 0 + 4 | 0 | 0 None | 0 | 2 1 | 1 | 1 7 | 1 | 1 - 9 | 7 | 1 - None | 9 | 1 - 0 | 0 | 0 - 4 | 0 | 0 - None | 4 | 0 3 | 1 | 3 None | 3 | 3 + None | 4 | 0 + 9 | 7 | 1 + None | 9 | 1 (10 rows) --!syntax_v1 pragma TablePathPrefix = "/Root/stream_query_window.test_results"; pragma SimpleColumns; -SELECT lead(ten * 2, 1) OVER w, ten, four FROM tenk1 WHERE unique2 < 10 WINDOW w AS (PARTITION BY four ORDER BY ten); +SELECT lead(ten * 2, 1) OVER w, ten, four FROM tenk1 WHERE unique2 < 10 WINDOW w AS (PARTITION BY four ORDER BY ten) ORDER BY ten, four; column0 | ten | four ---------+-----+------ + 0 | 0 | 0 + 8 | 0 | 0 None | 0 | 2 2 | 1 | 1 14 | 1 | 1 - 18 | 7 | 1 - None | 9 | 1 - 0 | 0 | 0 - 8 | 0 | 0 - None | 4 | 0 6 | 1 | 3 None | 3 | 3 + None | 4 | 0 + 18 | 7 | 1 + None | 9 | 1 (10 rows) --!syntax_v1 pragma TablePathPrefix = "/Root/stream_query_window.test_results"; pragma SimpleColumns; -SELECT first_value(ten) OVER w, ten, four FROM tenk1 WHERE unique2 < 10 WINDOW w AS (PARTITION BY four ORDER BY ten); +SELECT first_value(ten) OVER w, ten, four FROM tenk1 WHERE unique2 < 10 WINDOW w AS (PARTITION BY four ORDER BY ten) ORDER BY ten, four; column0 | ten | four ---------+-----+------ + 0 | 0 | 0 + 0 | 0 | 0 0 | 0 | 2 1 | 1 | 1 1 | 1 | 1 - 1 | 7 | 1 - 1 | 9 | 1 - 0 | 0 | 0 - 0 | 0 | 0 - 0 | 4 | 0 1 | 1 | 3 1 | 3 | 3 + 0 | 4 | 0 + 1 | 7 | 1 + 1 | 9 | 1 (10 rows) --!syntax_v1 pragma TablePathPrefix = "/Root/stream_query_window.test_results"; pragma SimpleColumns; -SELECT last_value(four) OVER w, last_value(four) OVER w, ten, four FROM tenk1 WHERE unique2 < 10 WINDOW w AS (ORDER BY ten); +SELECT last_value(four) OVER w, last_value(four) OVER w, ten, four FROM tenk1 WHERE unique2 < 10 WINDOW w AS (ORDER BY ten) ORDER BY ten, four; column0 | column1 | ten | four ---------+---------+-----+------ - 2 | 2 | 0 | 2 0 | 0 | 0 | 0 0 | 0 | 0 | 0 + 2 | 2 | 0 | 2 1 | 1 | 1 | 1 - 3 | 3 | 1 | 3 1 | 1 | 1 | 1 + 3 | 3 | 1 | 3 3 | 3 | 3 | 3 0 | 0 | 4 | 0 1 | 1 | 7 | 1 @@ -322,20 +322,20 @@ pragma TablePathPrefix = "/Root/stream_query_window.test_results"; pragma SimpleColumns; SELECT last_value(ten) OVER w, ten, four FROM (SELECT * FROM tenk1 WHERE unique2 < 10 ORDER BY four, ten LIMIT 1000) -WINDOW w AS (PARTITION BY four) +WINDOW w AS (PARTITION BY four ORDER BY ten) ORDER BY four, ten; column0 | ten | four ---------+-----+------ - 4 | 0 | 0 - 4 | 0 | 0 + 0 | 0 | 0 + 0 | 0 | 0 4 | 4 | 0 - 9 | 1 | 1 - 9 | 1 | 1 - 9 | 7 | 1 + 1 | 1 | 1 + 1 | 1 | 1 + 7 | 7 | 1 9 | 9 | 1 0 | 0 | 2 - 3 | 1 | 3 + 1 | 1 | 3 3 | 3 | 3 (10 rows) @@ -344,27 +344,28 @@ ORDER BY four, ten; pragma TablePathPrefix = "/Root/stream_query_window.test_results"; pragma SimpleColumns; SELECT ten, two, sum(hundred) AS gsum, sum(sum(hundred)) OVER w AS wsum -FROM tenk1 GROUP BY ten, two WINDOW w AS (PARTITION BY two ORDER BY ten); +FROM tenk1 GROUP BY ten, two WINDOW w AS (PARTITION BY two ORDER BY ten) +ORDER BY ten, two; ten | two | gsum | wsum -----+-----+-------+-------- - 1 | 1 | 46000 | 46000 - 3 | 1 | 48000 | 94000 - 5 | 1 | 50000 | 144000 - 7 | 1 | 52000 | 196000 - 9 | 1 | 54000 | 250000 0 | 0 | 45000 | 45000 + 1 | 1 | 46000 | 46000 2 | 0 | 47000 | 92000 + 3 | 1 | 48000 | 94000 4 | 0 | 49000 | 141000 + 5 | 1 | 50000 | 144000 6 | 0 | 51000 | 192000 + 7 | 1 | 52000 | 196000 8 | 0 | 53000 | 245000 + 9 | 1 | 54000 | 250000 (10 rows) --!syntax_v1 pragma TablePathPrefix = "/Root/stream_query_window.test_results"; pragma SimpleColumns; -SELECT count(*) OVER w, four FROM (SELECT * FROM tenk1 WHERE two = 1) WHERE unique2 < 10 WINDOW w AS (PARTITION BY four); +SELECT count(*) OVER w, four FROM (SELECT * FROM tenk1 WHERE two = 1) WHERE unique2 < 10 WINDOW w AS (PARTITION BY four) ORDER BY four; column0 | four ---------+------ @@ -382,19 +383,20 @@ pragma TablePathPrefix = "/Root/stream_query_window.test_results"; pragma SimpleColumns; SELECT (count(*) OVER w + sum(hundred) OVER w) AS cntsum FROM tenk1 WHERE unique2 < 10 -WINDOW w AS (PARTITION BY four ORDER BY ten); +WINDOW w AS (PARTITION BY four ORDER BY ten) +ORDER BY cntsum; cntsum -------- - 51 + 21 + 22 22 24 + 51 82 - 92 - 21 - 22 87 92 + 92 136 (10 rows) @@ -410,7 +412,8 @@ SELECT * FROM( FROM tenk1 WINDOW w1 AS (PARTITION BY four ORDER BY ten), w2 AS (PARTITION BY two ORDER BY ten) ) -WHERE total <> fourcount + twosum; +WHERE total <> fourcount + twosum +ORDER BY total, fourcount, twosum; (0 rows) @@ -418,20 +421,20 @@ WHERE total <> fourcount + twosum; --!syntax_v1 pragma TablePathPrefix = "/Root/stream_query_window.test_results"; pragma SimpleColumns; -SELECT avg(four) OVER w FROM tenk1 WHERE unique2 < 10 WINDOW w AS (PARTITION BY four ORDER BY thousand / 100); +SELECT avg(four) OVER w AS avg_1 FROM tenk1 WHERE unique2 < 10 WINDOW w AS (PARTITION BY four ORDER BY thousand / 100) ORDER BY avg_1; - column0 ---------- - 2.0 - 1.0 - 1.0 - 1.0 - 1.0 - 0.0 - 0.0 - 0.0 - 3.0 - 3.0 + avg_1 +------- + 0.0 + 0.0 + 0.0 + 1.0 + 1.0 + 1.0 + 1.0 + 2.0 + 3.0 + 3.0 (10 rows) @@ -439,65 +442,68 @@ SELECT avg(four) OVER w FROM tenk1 WHERE unique2 < 10 WINDOW w AS (PARTITION BY pragma TablePathPrefix = "/Root/stream_query_window.test_results"; pragma SimpleColumns; SELECT ten, two, sum(hundred) AS gsum, sum(sum(hundred)) OVER win AS wsum -FROM tenk1 GROUP BY ten, two WINDOW win AS (PARTITION BY two ORDER BY ten); +FROM tenk1 GROUP BY ten, two WINDOW win AS (PARTITION BY two ORDER BY ten) +ORDER BY wsum, ten, two; ten | two | gsum | wsum -----+-----+-------+-------- - 1 | 1 | 46000 | 46000 - 3 | 1 | 48000 | 94000 - 5 | 1 | 50000 | 144000 - 7 | 1 | 52000 | 196000 - 9 | 1 | 54000 | 250000 0 | 0 | 45000 | 45000 + 1 | 1 | 46000 | 46000 2 | 0 | 47000 | 92000 + 3 | 1 | 48000 | 94000 4 | 0 | 49000 | 141000 + 5 | 1 | 50000 | 144000 6 | 0 | 51000 | 192000 + 7 | 1 | 52000 | 196000 8 | 0 | 53000 | 245000 + 9 | 1 | 54000 | 250000 (10 rows) --!syntax_v1 pragma TablePathPrefix = "/Root/stream_query_window.test_results"; pragma SimpleColumns; -SELECT sum(salary), - row_number() OVER w1, - sum(sum(salary)) OVER w2 +SELECT sum(salary) AS sum_salary, + row_number() OVER w1 AS rnum_1, + sum(sum(salary)) OVER w2 AS sum_sum_salary FROM empsalary GROUP BY depname -WINDOW w1 AS (ORDER BY depname), w2 AS (ORDER BY depname DESC); - - column0 | column1 | column2 ----------+---------+--------- - 14600 | 3 | 14600 - 7400 | 2 | 22000 - 25100 | 1 | 47100 +WINDOW w1 AS (ORDER BY depname), w2 AS (ORDER BY depname DESC) +ORDER BY sum_salary, rnum_1, sum_sum_salary; + + sum_salary | rnum_1 | sum_sum_salary +------------+--------+---------------- + 7400 | 2 | 22000 + 14600 | 3 | 14600 + 25100 | 1 | 47100 (3 rows) --!syntax_v1 pragma TablePathPrefix = "/Root/stream_query_window.test_results"; pragma SimpleColumns; -SELECT sum(salary) OVER w1, count(*) OVER w2 -FROM empsalary WINDOW w1 AS (ORDER BY salary), w2 AS (ORDER BY salary); +SELECT sum(salary) OVER w1 AS sum_salary, count(*) OVER w2 AS cnt +FROM empsalary WINDOW w1 AS (ORDER BY salary), w2 AS (ORDER BY salary) +ORDER BY sum_salary, cnt; - column0 | column1 ----------+--------- - 3500 | 1 - 7400 | 2 - 11600 | 3 - 16100 | 4 - 20900 | 5 - 25700 | 6 - 30700 | 7 - 35900 | 8 - 41100 | 9 - 47100 | 10 + sum_salary | cnt +------------+----- + 3500 | 1 + 7400 | 2 + 11600 | 3 + 16100 | 4 + 20900 | 5 + 25700 | 6 + 30700 | 7 + 35900 | 8 + 41100 | 9 + 47100 | 10 (10 rows) --!syntax_v1 pragma TablePathPrefix = "/Root/stream_query_window.test_results"; pragma SimpleColumns; -SELECT count(*) OVER w FROM (SELECT * FROM tenk1 WHERE FALSE) WINDOW w AS (PARTITION BY four); +SELECT count(*) OVER w AS cnt FROM (SELECT * FROM tenk1 WHERE FALSE) WINDOW w AS (PARTITION BY four) ORDER BY cnt; (0 rows) @@ -505,20 +511,21 @@ SELECT count(*) OVER w FROM (SELECT * FROM tenk1 WHERE FALSE) WINDOW w AS (PARTI --!syntax_v1 pragma TablePathPrefix = "/Root/stream_query_window.test_results"; pragma SimpleColumns; -SELECT sum(salary) OVER w, rank() OVER w FROM empsalary WINDOW w AS (PARTITION BY depname ORDER BY salary DESC); +SELECT sum(salary) OVER w AS sum_salary, rank() OVER w as rank_1 FROM empsalary WINDOW w AS (PARTITION BY depname ORDER BY salary DESC) +ORDER BY sum_salary, rank_1; - column0 | column1 ----------+--------- - 6000 | 1 - 11200 | 2 - 16400 | 2 - 20900 | 4 - 25100 | 5 - 3900 | 1 - 7400 | 2 - 5000 | 1 - 9800 | 2 - 14600 | 2 + sum_salary | rank_1 +------------+-------- + 3900 | 1 + 5000 | 1 + 6000 | 1 + 7400 | 2 + 9800 | 2 + 11200 | 2 + 14600 | 2 + 16400 | 2 + 20900 | 4 + 25100 | 5 (10 rows) @@ -536,7 +543,8 @@ SELECT empno, depname, salary, bonus, depadj, MIN(bonus) OVER w, MAX(depadj) OVE FROM empsalary WINDOW wi AS (PARTITION BY depname) ) -WINDOW w AS (ORDER BY empno); +WINDOW w AS (ORDER BY empno) +ORDER BY empno; empno | depname | salary | bonus | depadj | column5 | column6 -------+--------------+--------+-------+--------+---------+--------- @@ -556,9 +564,9 @@ WINDOW w AS (ORDER BY empno); --!syntax_v1 pragma TablePathPrefix = "/Root/stream_query_window.test_results"; pragma SimpleColumns; -SELECT SUM(COUNT(f1)) OVER w FROM int4_tbl WHERE f1=42 WINDOW w AS (); +SELECT SUM(COUNT(f1)) OVER w AS sum_cnt FROM int4_tbl WHERE f1=42 WINDOW w AS () ORDER BY sum_cnt; - column0 + sum_cnt --------- 0 (1 row0) @@ -593,33 +601,12 @@ order by ten; --!syntax_v1 pragma TablePathPrefix = "/Root/stream_query_window.test_results"; pragma SimpleColumns; -select first_value(max(x)) over w, y - from (select unique1 as x, ten+four as y from tenk1) - group by y - window w AS () - order by y desc; - - column0 | y ----------+---- - 9999 | 12 - 9999 | 10 - 9999 | 8 - 9999 | 6 - 9999 | 4 - 9999 | 2 - 9999 | 0 -(7 rows) - - ---!syntax_v1 -pragma TablePathPrefix = "/Root/stream_query_window.test_results"; -pragma SimpleColumns; SELECT four, ten, sum(ten) over w, last_value(ten) over w FROM (select distinct ten, four from tenk1) WINDOW w AS (partition by four order by ten) -ORDER BY four; +ORDER BY four, ten; four | ten | column2 | column3 ------+-----+---------+--------- @@ -654,29 +641,29 @@ SELECT four, ten/4 as two, last_value(ten/4) over w FROM (select distinct ten, four from tenk1) WINDOW w AS (partition by four order by ten/4 rows between unbounded preceding and current row) -ORDER BY four; +ORDER BY four, two; four | two | column2 | column3 ------+-----+---------+--------- 0 | 0 | 0 | 0 0 | 0 | 0 | 0 - 0 | 1 | 1 | 1 0 | 1 | 2 | 1 + 0 | 1 | 1 | 1 0 | 2 | 4 | 2 1 | 0 | 0 | 0 1 | 0 | 0 | 0 - 1 | 1 | 1 | 1 1 | 1 | 2 | 1 + 1 | 1 | 1 | 1 1 | 2 | 4 | 2 2 | 0 | 0 | 0 2 | 0 | 0 | 0 - 2 | 1 | 1 | 1 2 | 1 | 2 | 1 + 2 | 1 | 1 | 1 2 | 2 | 4 | 2 3 | 0 | 0 | 0 3 | 0 | 0 | 0 - 3 | 1 | 1 | 1 3 | 1 | 2 | 1 + 3 | 1 | 1 | 1 3 | 2 | 4 | 2 (20 rows) @@ -687,7 +674,8 @@ pragma SimpleColumns; SELECT sum(unique1) over w, unique1, four FROM tenk1 WHERE unique1 < 10 -WINDOW w AS (rows between current row and unbounded following); +WINDOW w AS (order by unique1 rows between current row and unbounded following) +ORDER BY unique1; column0 | unique1 | four ---------+---------+------ @@ -710,7 +698,8 @@ pragma SimpleColumns; SELECT sum(unique1) over w, unique1, four FROM tenk1 WHERE unique1 < 10 -WINDOW w AS (rows between 2 preceding and 2 following); +WINDOW w AS (order by unique1 rows between 2 preceding and 2 following) +ORDER BY unique1; column0 | unique1 | four ---------+---------+------ @@ -733,7 +722,8 @@ pragma SimpleColumns; SELECT sum(unique1) over w, unique1, four FROM tenk1 WHERE unique1 < 10 -WINDOW w AS (rows between 2 preceding and 2 following exclude no others); +WINDOW w AS (order by unique1 rows between 2 preceding and 2 following exclude no others) +ORDER BY unique1; column0 | unique1 | four ---------+---------+------ diff --git a/ydb/tests/functional/suite_tests/stream_query/window.test b/ydb/tests/functional/suite_tests/stream_query/window.test index f9309f2793..6748aa5fa8 100644 --- a/ydb/tests/functional/suite_tests/stream_query/window.test +++ b/ydb/tests/functional/suite_tests/stream_query/window.test @@ -54,7 +54,7 @@ statement stream query SELECT depname, empno, salary, sum(salary) OVER w FROM empsalary WINDOW w AS (PARTITION BY depname) ORDER BY depname, salary; statement stream query -SELECT depname, empno, salary, rank() OVER w FROM empsalary WINDOW w AS (PARTITION BY depname ORDER BY salary); +SELECT depname, empno, salary, rank() OVER w FROM empsalary WINDOW w AS (PARTITION BY depname ORDER BY salary) ORDER BY salary, depname; -- with GROUP BY statement stream query @@ -62,93 +62,96 @@ SELECT four, ten, SUM(SUM(four)) OVER w, AVG(ten) FROM tenk1 GROUP BY four, ten WINDOW w AS (PARTITION BY four) ORDER BY four, ten; statement stream query -SELECT depname, empno, salary, sum(salary) OVER w FROM empsalary WINDOW w AS (PARTITION BY depname); +SELECT depname, empno, salary, sum(salary) OVER w FROM empsalary WINDOW w AS (PARTITION BY depname) ORDER BY depname, salary, empno; statement stream query SELECT depname, empno, salary, rank() OVER w AS r FROM empsalary WINDOW w AS (PARTITION BY depname ORDER BY salary) ORDER BY r; -- empty window specification statement stream query -SELECT COUNT(*) OVER w FROM tenk1 WHERE unique2 < 10 WINDOW w AS (); +SELECT COUNT(*) OVER w AS cnt FROM tenk1 WHERE unique2 < 10 WINDOW w AS () ORDER BY cnt; -- no window operation statement stream query -SELECT four FROM tenk1 WHERE FALSE WINDOW w AS (PARTITION BY ten); +SELECT four FROM tenk1 WHERE FALSE WINDOW w AS (PARTITION BY ten) ORDER BY four; -- cumulative aggregate statement stream query -SELECT sum(four) OVER w AS sum_1, ten, four FROM tenk1 WHERE unique2 < 10 WINDOW w AS (PARTITION BY ten ORDER BY unique2); +SELECT sum(four) OVER w AS sum_1, ten, four FROM tenk1 WHERE unique2 < 10 WINDOW w AS (PARTITION BY ten ORDER BY unique2) ORDER BY sum_1, ten, four; statement stream query -SELECT row_number() OVER w FROM tenk1 WHERE unique2 < 10 WINDOW w AS (ORDER BY unique2); +SELECT row_number() OVER w AS rnum_1 FROM tenk1 WHERE unique2 < 10 WINDOW w AS (ORDER BY unique2) ORDER BY rnum_1; statement stream query -SELECT rank() OVER w AS rank_1, ten, four FROM tenk1 WHERE unique2 < 10 WINDOW w AS (PARTITION BY four ORDER BY ten); +SELECT rank() OVER w AS rank_1, ten, four FROM tenk1 WHERE unique2 < 10 WINDOW w AS (PARTITION BY four ORDER BY ten) ORDER BY rank_1, ten, four; statement stream query -SELECT dense_rank() OVER w, ten, four FROM tenk1 WHERE unique2 < 10 WINDOW w AS (PARTITION BY four ORDER BY ten); +SELECT dense_rank() OVER w, ten, four FROM tenk1 WHERE unique2 < 10 WINDOW w AS (PARTITION BY four ORDER BY ten) ORDER BY ten, four; statement error -SELECT percent_rank() OVER w, ten, four FROM tenk1 WHERE unique2 < 10 WINDOW w AS (PARTITION BY four ORDER BY ten); +SELECT percent_rank() OVER w, ten, four FROM tenk1 WHERE unique2 < 10 WINDOW w AS (PARTITION BY four ORDER BY ten) ORDER BY ten, four; statement error -SELECT cume_dist() OVER w, ten, four FROM tenk1 WHERE unique2 < 10 WINDOW w AS (PARTITION BY four ORDER BY ten); +SELECT cume_dist() OVER w, ten, four FROM tenk1 WHERE unique2 < 10 WINDOW w AS (PARTITION BY four ORDER BY ten) ORDER BY ten, four; statement error -SELECT ntile(3) OVER w, ten, four FROM tenk1 WHERE unique2 < 10 WINDOW w AS (ORDER BY ten, four); +SELECT ntile(3) OVER w, ten, four FROM tenk1 WHERE unique2 < 10 WINDOW w AS (ORDER BY ten, four) ORDER BY ten, four; statement error -SELECT ntile(NULL) OVER w, ten, four FROM tenk1 WINDOW w AS (ORDER BY ten, four) LIMIT 2; +SELECT ntile(NULL) OVER w, ten, four FROM tenk1 WINDOW w AS (ORDER BY ten, four) ORDER BY ten, four LIMIT 2; statement stream query -SELECT lag(ten) OVER w, ten, four FROM tenk1 WHERE unique2 < 10 WINDOW w AS (PARTITION BY four ORDER BY ten); +SELECT lag(ten) OVER w, ten, four FROM tenk1 WHERE unique2 < 10 WINDOW w AS (PARTITION BY four ORDER BY ten) ORDER BY ten, four; statement error -SELECT lag(ten, four) OVER w, ten, four FROM tenk1 WHERE unique2 < 10 WINDOW w AS (PARTITION BY four ORDER BY ten); +SELECT lag(ten, four) OVER w, ten, four FROM tenk1 WHERE unique2 < 10 WINDOW w AS (PARTITION BY four ORDER BY ten) ORDER BY ten, four; statement error -SELECT lag(ten, four, 0) OVER w, ten, four FROM tenk1 WHERE unique2 < 10 WINDOW w AS (PARTITION BY four ORDER BY ten); +SELECT lag(ten, four, 0) OVER w, ten, four FROM tenk1 WHERE unique2 < 10 WINDOW w AS (PARTITION BY four ORDER BY ten) ORDER BY ten, four; statement stream query -SELECT lead(ten) OVER w, ten, four FROM tenk1 WHERE unique2 < 10 WINDOW w AS (PARTITION BY four ORDER BY ten); +SELECT lead(ten) OVER w, ten, four FROM tenk1 WHERE unique2 < 10 WINDOW w AS (PARTITION BY four ORDER BY ten) ORDER BY ten, four; statement stream query -SELECT lead(ten * 2, 1) OVER w, ten, four FROM tenk1 WHERE unique2 < 10 WINDOW w AS (PARTITION BY four ORDER BY ten); +SELECT lead(ten * 2, 1) OVER w, ten, four FROM tenk1 WHERE unique2 < 10 WINDOW w AS (PARTITION BY four ORDER BY ten) ORDER BY ten, four; statement error -SELECT lead(ten * 2, 1, -1) OVER w, ten, four FROM tenk1 WHERE unique2 < 10 WINDOW w AS (PARTITION BY four ORDER BY ten); +SELECT lead(ten * 2, 1, -1) OVER w, ten, four FROM tenk1 WHERE unique2 < 10 WINDOW w AS (PARTITION BY four ORDER BY ten) ORDER BY ten, four; statement stream query -SELECT first_value(ten) OVER w, ten, four FROM tenk1 WHERE unique2 < 10 WINDOW w AS (PARTITION BY four ORDER BY ten); +SELECT first_value(ten) OVER w, ten, four FROM tenk1 WHERE unique2 < 10 WINDOW w AS (PARTITION BY four ORDER BY ten) ORDER BY ten, four; -- last_value returns the last row of the frame, which is CURRENT ROW in ORDER BY window. -- XXX: different behavior w.r.t postgres statement stream query -SELECT last_value(four) OVER w, last_value(four) OVER w, ten, four FROM tenk1 WHERE unique2 < 10 WINDOW w AS (ORDER BY ten); +SELECT last_value(four) OVER w, last_value(four) OVER w, ten, four FROM tenk1 WHERE unique2 < 10 WINDOW w AS (ORDER BY ten) ORDER BY ten, four; statement stream query SELECT last_value(ten) OVER w, ten, four FROM (SELECT * FROM tenk1 WHERE unique2 < 10 ORDER BY four, ten LIMIT 1000) -WINDOW w AS (PARTITION BY four) +WINDOW w AS (PARTITION BY four ORDER BY ten) ORDER BY four, ten; statement error SELECT nth_value(ten, four + 1) OVER w, ten, four FROM (SELECT * FROM tenk1 WHERE unique2 < 10 ORDER BY four, ten) -WINDOW w AS (PARTITION BY four); +WINDOW w AS (PARTITION BY four ORDER BY ten) +ORDER BY four, ten; statement stream query SELECT ten, two, sum(hundred) AS gsum, sum(sum(hundred)) OVER w AS wsum -FROM tenk1 GROUP BY ten, two WINDOW w AS (PARTITION BY two ORDER BY ten); +FROM tenk1 GROUP BY ten, two WINDOW w AS (PARTITION BY two ORDER BY ten) +ORDER BY ten, two; statement stream query -SELECT count(*) OVER w, four FROM (SELECT * FROM tenk1 WHERE two = 1) WHERE unique2 < 10 WINDOW w AS (PARTITION BY four); +SELECT count(*) OVER w, four FROM (SELECT * FROM tenk1 WHERE two = 1) WHERE unique2 < 10 WINDOW w AS (PARTITION BY four) ORDER BY four; -- WRONG! statement stream query SELECT (count(*) OVER w + sum(hundred) OVER w) AS cntsum FROM tenk1 WHERE unique2 < 10 -WINDOW w AS (PARTITION BY four ORDER BY ten); +WINDOW w AS (PARTITION BY four ORDER BY ten) +ORDER BY cntsum; -- opexpr with different windows evaluation. statement stream query @@ -160,41 +163,47 @@ SELECT * FROM( FROM tenk1 WINDOW w1 AS (PARTITION BY four ORDER BY ten), w2 AS (PARTITION BY two ORDER BY ten) ) -WHERE total <> fourcount + twosum; +WHERE total <> fourcount + twosum +ORDER BY total, fourcount, twosum; statement stream query -SELECT avg(four) OVER w FROM tenk1 WHERE unique2 < 10 WINDOW w AS (PARTITION BY four ORDER BY thousand / 100); +SELECT avg(four) OVER w AS avg_1 FROM tenk1 WHERE unique2 < 10 WINDOW w AS (PARTITION BY four ORDER BY thousand / 100) ORDER BY avg_1; statement stream query SELECT ten, two, sum(hundred) AS gsum, sum(sum(hundred)) OVER win AS wsum -FROM tenk1 GROUP BY ten, two WINDOW win AS (PARTITION BY two ORDER BY ten); +FROM tenk1 GROUP BY ten, two WINDOW win AS (PARTITION BY two ORDER BY ten) +ORDER BY wsum, ten, two; -- more than one window with GROUP BY statement stream query -SELECT sum(salary), - row_number() OVER w1, - sum(sum(salary)) OVER w2 +SELECT sum(salary) AS sum_salary, + row_number() OVER w1 AS rnum_1, + sum(sum(salary)) OVER w2 AS sum_sum_salary FROM empsalary GROUP BY depname -WINDOW w1 AS (ORDER BY depname), w2 AS (ORDER BY depname DESC); +WINDOW w1 AS (ORDER BY depname), w2 AS (ORDER BY depname DESC) +ORDER BY sum_salary, rnum_1, sum_sum_salary; -- identical windows with different names statement stream query -SELECT sum(salary) OVER w1, count(*) OVER w2 -FROM empsalary WINDOW w1 AS (ORDER BY salary), w2 AS (ORDER BY salary); +SELECT sum(salary) OVER w1 AS sum_salary, count(*) OVER w2 AS cnt +FROM empsalary WINDOW w1 AS (ORDER BY salary), w2 AS (ORDER BY salary) +ORDER BY sum_salary, cnt; -- subplan statement error -SELECT lead(ten, (SELECT two FROM tenk1 WHERE s.unique2 = unique2)) OVER w +SELECT lead(ten, (SELECT two FROM tenk1 WHERE s.unique2 = unique2)) OVER w AS lead_1 FROM tenk1 s WHERE unique2 < 10 -WINDOW w AS (PARTITION BY four ORDER BY ten); +WINDOW w AS (PARTITION BY four ORDER BY ten) +ORDER BY lead_1; -- empty table statement stream query -SELECT count(*) OVER w FROM (SELECT * FROM tenk1 WHERE FALSE) WINDOW w AS (PARTITION BY four); +SELECT count(*) OVER w AS cnt FROM (SELECT * FROM tenk1 WHERE FALSE) WINDOW w AS (PARTITION BY four) ORDER BY cnt; -- mixture of agg/wfunc in the same window statement stream query -SELECT sum(salary) OVER w, rank() OVER w FROM empsalary WINDOW w AS (PARTITION BY depname ORDER BY salary DESC); +SELECT sum(salary) OVER w AS sum_salary, rank() OVER w as rank_1 FROM empsalary WINDOW w AS (PARTITION BY depname ORDER BY salary DESC) +ORDER BY sum_salary, rank_1; -- strict aggs statement stream query @@ -209,11 +218,12 @@ SELECT empno, depname, salary, bonus, depadj, MIN(bonus) OVER w, MAX(depadj) OVE FROM empsalary WINDOW wi AS (PARTITION BY depname) ) -WINDOW w AS (ORDER BY empno); +WINDOW w AS (ORDER BY empno) +ORDER BY empno; -- window function over ungrouped agg over empty row set (bug before 9.1) statement stream query -SELECT SUM(COUNT(f1)) OVER w FROM int4_tbl WHERE f1=42 WINDOW w AS (); +SELECT SUM(COUNT(f1)) OVER w AS sum_cnt FROM int4_tbl WHERE f1=42 WINDOW w AS () ORDER BY sum_cnt; -- window function with ORDER BY an expression involving aggregates (9.1 bug) statement stream query @@ -225,14 +235,6 @@ group by ten window w AS (order by sum(unique1) + sum(unique2)) order by ten; --- window and aggregate with GROUP BY expression (9.2 bug) -statement stream query -select first_value(max(x)) over w, y - from (select unique1 as x, ten+four as y from tenk1) - group by y - window w AS () - order by y desc; - -- test non-default frame specifications statement stream query SELECT four, ten, @@ -240,28 +242,31 @@ SELECT four, ten, last_value(ten) over w FROM (select distinct ten, four from tenk1) WINDOW w AS (partition by four order by ten) -ORDER BY four; +ORDER BY four, ten; statement error SELECT four, ten, sum(ten) over w, last_value(ten) over w FROM (select distinct ten, four from tenk1) -WINDOW w AS (partition by four order by ten range between unbounded preceding and current row); +WINDOW w AS (partition by four order by ten range between unbounded preceding and current row) +ORDER BY four, ten; statement error SELECT four, ten, sum(ten) over w, last_value(ten) over w FROM (select distinct ten, four from tenk1) -WINDOW w AS (partition by four order by ten range between unbounded preceding and unbounded following); +WINDOW w AS (partition by four order by ten range between unbounded preceding and unbounded following) +ORDER BY four, ten; statement error SELECT four, ten/4 as two, - sum(ten/4) over w, + sum(ten/4) over w as three, last_value(ten/4) over w FROM (select distinct ten, four from tenk1) -WINDOW w AS (partition by four order by ten/4 range between unbounded preceding and current row); +WINDOW w AS (partition by four order by ten/4 range between unbounded preceding and current row) +ORDER BY four, two, three; statement stream query SELECT four, ten/4 as two, @@ -269,29 +274,33 @@ SELECT four, ten/4 as two, last_value(ten/4) over w FROM (select distinct ten, four from tenk1) WINDOW w AS (partition by four order by ten/4 rows between unbounded preceding and current row) -ORDER BY four; +ORDER BY four, two; statement error SELECT sum(unique1) over w, unique1, four FROM tenk1 WHERE unique1 < 10 -WINDOW w AS (order by four range between current row and unbounded following); +WINDOW w AS (order by four range between current row and unbounded following) +ORDER BY unique1; statement stream query SELECT sum(unique1) over w, unique1, four FROM tenk1 WHERE unique1 < 10 -WINDOW w AS (rows between current row and unbounded following); +WINDOW w AS (order by unique1 rows between current row and unbounded following) +ORDER BY unique1; statement stream query SELECT sum(unique1) over w, unique1, four FROM tenk1 WHERE unique1 < 10 -WINDOW w AS (rows between 2 preceding and 2 following); +WINDOW w AS (order by unique1 rows between 2 preceding and 2 following) +ORDER BY unique1; statement stream query SELECT sum(unique1) over w, unique1, four FROM tenk1 WHERE unique1 < 10 -WINDOW w AS (rows between 2 preceding and 2 following exclude no others); +WINDOW w AS (order by unique1 rows between 2 preceding and 2 following exclude no others) +ORDER BY unique1; diff --git a/ydb/tests/functional/ya.make b/ydb/tests/functional/ya.make index 99ea5059b5..b237842728 100644 --- a/ydb/tests/functional/ya.make +++ b/ydb/tests/functional/ya.make @@ -1,5 +1,6 @@ RECURSE( api + audit autoconfig blobstorage canonical diff --git a/ydb/tests/library/harness/kikimr_config.py b/ydb/tests/library/harness/kikimr_config.py index 35d62941d2..f94456fac5 100644 --- a/ydb/tests/library/harness/kikimr_config.py +++ b/ydb/tests/library/harness/kikimr_config.py @@ -438,7 +438,7 @@ class KikimrConfigGenerator(object): @property def audit_file_path(self): - return self.yaml_config.get('audit_config', {}).get('audit_file_path') + return self.yaml_config.get('audit_config', {}).get('file_backend', {}).get('file_path') @property def nbs_enable(self): diff --git a/ydb/tests/library/harness/ydb_fixtures.py b/ydb/tests/library/harness/ydb_fixtures.py index 766663941b..5a7fcef94d 100644 --- a/ydb/tests/library/harness/ydb_fixtures.py +++ b/ydb/tests/library/harness/ydb_fixtures.py @@ -130,8 +130,8 @@ def ydb_endpoint(ydb_cluster): @pytest.fixture(scope='function') def ydb_client(ydb_endpoint, request): - def _make_driver(database_path): - driver_config = DriverConfig(ydb_endpoint, database_path) + def _make_driver(database_path, **kwargs): + driver_config = DriverConfig(ydb_endpoint, database_path, **kwargs) driver = Driver(driver_config) def stop_driver(): @@ -144,8 +144,8 @@ def ydb_client(ydb_endpoint, request): @pytest.fixture(scope='function') def ydb_client_session(ydb_client, request): - def _make_pool(database_path): - driver = ydb_client(database_path) + def _make_pool(database_path, **kwargs): + driver = ydb_client(database_path, **kwargs) pool = SessionPool(driver) def stop_pool(): diff --git a/ydb/tests/oss/launch/compile_protos.py b/ydb/tests/oss/launch/compile_protos.py index 2c21ad7613..416e2047a8 100644 --- a/ydb/tests/oss/launch/compile_protos.py +++ b/ydb/tests/oss/launch/compile_protos.py @@ -1,10 +1,55 @@ +import os +import sys from argparse import ArgumentParser -from grpc_tools import command +from grpc_tools import protoc + + +def build_ydb_protos(ydb_repo_root, proto_dir='ydb', strict_mode=False): + proto_files = [] + repo_root = os.path.abspath(ydb_repo_root) + files_root = os.path.join(repo_root, proto_dir) + # print("Repo root:", repo_root, file=sys.stderr) + # print("Proto files root:", files_root, file=sys.stderr) + for root, _, files in os.walk(files_root): + for filename in files: + if filename.endswith('.proto'): + proto_files.append(os.path.abspath(os.path.join(root, + filename))) + + include_paths = [ + 'contrib/libs/googleapis-common-protos', + 'contrib/libs/protobuf/src', + ] + + command_fix = [ + 'grpc_tools.protoc', + '--proto_path={}'.format(repo_root), + '--python_out={}'.format(repo_root), + '--pyi_out={}'.format(repo_root), + '--grpc_python_out={}'.format(repo_root), + ] + + for ipath in include_paths: + command_fix = command_fix + [ + '--proto_path={}'.format(os.path.join(repo_root, ipath)), + ] + + for proto_file in proto_files: + # print(proto_file, file=sys.stderr) + command = command_fix + [proto_file] + if protoc.main(command) != 0: + if strict_mode: + raise Exception('error: {} failed'.format(command)) + else: + sys.stderr.write('warning: {} failed'.format(command)) if __name__ == '__main__': parser = ArgumentParser() - parser.add_argument('--source-root', required=True, help='YDB source directory') + parser.add_argument('directory', help='Directory inside YDB repo to scan for .proto files', default='ydb', nargs='+') + parser.add_argument('--source-root', required=True, help='YDB repo source directory') + parser.add_argument('--strict-mode', required=False, default=False, help='Strict mode (fail with result code 1 on errors)') args = parser.parse_args() - - command.build_package_protos(args.source_root) + for dr in args.directory: + # print("Dir:", dr, file=sys.stderr) + build_ydb_protos(args.source_root, dr, args.strict_mode) diff --git a/ydb/tests/oss/launch/compile_protos.sh b/ydb/tests/oss/launch/compile_protos.sh new file mode 100755 index 0000000000..fa972823b9 --- /dev/null +++ b/ydb/tests/oss/launch/compile_protos.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash +set -o pipefail +echo Compiling protospecs for Python... +# Usage: compile_protos.sh root_ydb_repo_dir subdir_to_scan_for_protospecs +SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) +python3 $SCRIPT_DIR/compile_protos.py --source-root $1 --strict-mode 1 "${@:2}" 2>&1 >/dev/null | grep -v "No syntax specified for the proto file" diff --git a/ydb/tests/oss/launch/prepare.sh b/ydb/tests/oss/launch/prepare.sh index 0d6ddfb617..cc61e37070 100755 --- a/ydb/tests/oss/launch/prepare.sh +++ b/ydb/tests/oss/launch/prepare.sh @@ -1,6 +1,6 @@ #!/bin/bash -python ${source_root}/ydb/tests/oss/launch/compile_protos.py --source-root ${source_root} 2>/dev/null +${source_root}/ydb/tests/oss/launch/compile_protos.sh ${source_root} ydb library/cpp/actors testresults=${source_root}/ydb/tests/functional/test-results diff --git a/ydb/tests/oss/launch/ya.make b/ydb/tests/oss/launch/ya.make index 61ba373fb9..20d1a700dd 100644 --- a/ydb/tests/oss/launch/ya.make +++ b/ydb/tests/oss/launch/ya.make @@ -1,4 +1,4 @@ -PY23_LIBRARY() +PY3_LIBRARY() PY_SRCS( __init__.py @@ -7,4 +7,8 @@ PY_SRCS( launch.py ) +FILES( + compile_protos.sh +) + END() |