aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniil Cherednik <dcherednik@ydb.tech>2023-10-23 20:34:16 +0000
committerDaniil Cherednik <dcherednik@ydb.tech>2023-10-23 20:34:16 +0000
commite84c813452e9ed62415b2d17a117008fce909a3d (patch)
tree998632d6f08419de5b644940799f3be9408ab46b
parentdf6e99640a1489cde9b7cc5b58a3747c6ec28921 (diff)
downloadydb-e84c813452e9ed62415b2d17a117008fce909a3d.tar.gz
Intermediate changesstable-23-3
x-stable-origin-commit: 8b96eef194d7fb3b315816b97322e8dd90bf3d94
-rw-r--r--.github/workflows/docs_release.yaml32
-rw-r--r--library/cpp/actors/interconnect/interconnect_handshake.cpp5
-rw-r--r--library/cpp/actors/util/rope.h15
-rw-r--r--library/cpp/grpc/client/grpc_client_low.h11
-rw-r--r--library/cpp/protobuf/json/json2proto.cpp46
-rw-r--r--library/cpp/protobuf/json/json2proto.h10
-rw-r--r--library/cpp/protobuf/json/unknown_fields_collector.h29
-rw-r--r--library/cpp/protobuf/json/ut/unknown_fields_collector_ut.cpp165
-rw-r--r--library/cpp/protobuf/json/ut/ya.make1
-rw-r--r--ydb/CMakeLists.txt9
-rw-r--r--ydb/apps/ydb/ut/CMakeLists.linux-aarch64.txt2
-rw-r--r--ydb/apps/ydb/ut/CMakeLists.linux-x86_64.txt2
-rw-r--r--ydb/apps/ydb/ut/epilogue.cmake1
-rw-r--r--ydb/core/actorlib_impl/test_interconnect_ut.cpp115
-rw-r--r--ydb/core/audit/audit_log.cpp4
-rw-r--r--ydb/core/audit/audit_log.h16
-rw-r--r--ydb/core/blob_depot/agent.cpp13
-rw-r--r--ydb/core/blob_depot/agent/comm.cpp6
-rw-r--r--ydb/core/blob_depot/agent/storage_collect_garbage.cpp7
-rw-r--r--ydb/core/blob_depot/agent/storage_discover.cpp5
-rw-r--r--ydb/core/blob_depot/blob_depot.cpp56
-rw-r--r--ydb/core/blob_depot/blob_depot_tablet.h18
-rw-r--r--ydb/core/blob_depot/data_decommit.cpp39
-rw-r--r--ydb/core/blob_depot/data_trash.cpp2
-rw-r--r--ydb/core/blob_depot/garbage_collection.cpp12
-rw-r--r--ydb/core/blobstorage/dsproxy/dsproxy_assimilate.cpp54
-rw-r--r--ydb/core/blobstorage/dsproxy/dsproxy_indexrestoreget.cpp4
-rw-r--r--ydb/core/blobstorage/dsproxy/dsproxy_multiget.cpp3
-rw-r--r--ydb/core/blobstorage/dsproxy/dsproxy_range.cpp10
-rw-r--r--ydb/core/blobstorage/pdisk/CMakeLists.darwin-x86_64.txt1
-rw-r--r--ydb/core/blobstorage/pdisk/CMakeLists.linux-aarch64.txt1
-rw-r--r--ydb/core/blobstorage/pdisk/CMakeLists.linux-x86_64.txt1
-rw-r--r--ydb/core/blobstorage/pdisk/CMakeLists.windows-x86_64.txt1
-rw-r--r--ydb/core/blobstorage/pdisk/blobstorage_pdisk_data.h3
-rw-r--r--ydb/core/blobstorage/pdisk/blobstorage_pdisk_impl.h6
-rw-r--r--ydb/core/blobstorage/pdisk/blobstorage_pdisk_impl_log.cpp120
-rw-r--r--ydb/core/blobstorage/pdisk/blobstorage_pdisk_ut.cpp94
-rw-r--r--ydb/core/blobstorage/pdisk/blobstorage_pdisk_ut_env.h2
-rw-r--r--ydb/core/blobstorage/pdisk/ya.make1
-rw-r--r--ydb/core/blobstorage/ut_blobstorage/lib/env.h3
-rw-r--r--ydb/core/blobstorage/ut_blobstorage/recovery.cpp147
-rw-r--r--ydb/core/blobstorage/vdisk/hulldb/fresh/fresh_segment_impl.h4
-rw-r--r--ydb/core/blobstorage/vdisk/localrecovery/localrecovery_public.cpp3
-rw-r--r--ydb/core/blobstorage/vdisk/syncer/blobstorage_syncer_data.cpp22
-rw-r--r--ydb/core/blobstorage/vdisk/syncer/blobstorage_syncer_data.h6
-rw-r--r--ydb/core/cms/cms.cpp9
-rw-r--r--ydb/core/cms/cms_impl.h2
-rw-r--r--ydb/core/cms/cms_ut.cpp70
-rw-r--r--ydb/core/cms/cms_ut_common.cpp17
-rw-r--r--ydb/core/cms/cms_ut_common.h1
-rw-r--r--ydb/core/cms/console/console.cpp7
-rw-r--r--ydb/core/cms/console/console__replace_yaml_config.cpp19
-rw-r--r--ydb/core/cms/console/console__set_yaml_config.cpp19
-rw-r--r--ydb/core/cms/console/console_configs_manager.cpp2
-rw-r--r--ydb/core/cms/console/console_impl.h3
-rw-r--r--ydb/core/cms/erasure_checkers.cpp124
-rw-r--r--ydb/core/cms/erasure_checkers.h29
-rw-r--r--ydb/core/driver_lib/run/CMakeLists.darwin-x86_64.txt1
-rw-r--r--ydb/core/driver_lib/run/CMakeLists.linux-aarch64.txt1
-rw-r--r--ydb/core/driver_lib/run/CMakeLists.linux-x86_64.txt1
-rw-r--r--ydb/core/driver_lib/run/CMakeLists.windows-x86_64.txt1
-rw-r--r--ydb/core/driver_lib/run/kikimr_services_initializers.cpp20
-rw-r--r--ydb/core/driver_lib/run/run.cpp9
-rw-r--r--ydb/core/driver_lib/run/ya.make1
-rw-r--r--ydb/core/driver_lib/version/ut/ut_helpers.h2
-rw-r--r--ydb/core/driver_lib/version/ut/version_ut.cpp550
-rw-r--r--ydb/core/driver_lib/version/version.cpp467
-rw-r--r--ydb/core/driver_lib/version/version.h88
-rw-r--r--ydb/core/formats/arrow/arrow_batch_builder.cpp5
-rw-r--r--ydb/core/formats/arrow/arrow_batch_builder.h5
-rw-r--r--ydb/core/formats/arrow/arrow_helpers.cpp16
-rw-r--r--ydb/core/formats/arrow/arrow_helpers.h4
-rw-r--r--ydb/core/formats/arrow/converter.cpp5
-rw-r--r--ydb/core/grpc_services/CMakeLists.darwin-x86_64.txt2
-rw-r--r--ydb/core/grpc_services/CMakeLists.linux-aarch64.txt2
-rw-r--r--ydb/core/grpc_services/CMakeLists.linux-x86_64.txt2
-rw-r--r--ydb/core/grpc_services/CMakeLists.windows-x86_64.txt2
-rw-r--r--ydb/core/grpc_services/audit_dml_operations.cpp168
-rw-r--r--ydb/core/grpc_services/audit_dml_operations.h84
-rw-r--r--ydb/core/grpc_services/audit_log.cpp51
-rw-r--r--ydb/core/grpc_services/audit_log.h11
-rw-r--r--ydb/core/grpc_services/base/base.h104
-rw-r--r--ydb/core/grpc_services/base/iface.h3
-rw-r--r--ydb/core/grpc_services/grpc_request_check_actor.h38
-rw-r--r--ydb/core/grpc_services/local_rpc/local_rpc.h13
-rw-r--r--ydb/core/grpc_services/query/rpc_attach_session.cpp2
-rw-r--r--ydb/core/grpc_services/query/rpc_execute_query.cpp15
-rw-r--r--ydb/core/grpc_services/query/rpc_execute_script.cpp5
-rw-r--r--ydb/core/grpc_services/rpc_alter_table.cpp13
-rw-r--r--ydb/core/grpc_services/rpc_begin_transaction.cpp5
-rw-r--r--ydb/core/grpc_services/rpc_commit_transaction.cpp5
-rw-r--r--ydb/core/grpc_services/rpc_dynamic_config.cpp8
-rw-r--r--ydb/core/grpc_services/rpc_execute_data_query.cpp5
-rw-r--r--ydb/core/grpc_services/rpc_execute_yql_script.cpp5
-rw-r--r--ydb/core/grpc_services/rpc_load_rows.cpp11
-rw-r--r--ydb/core/grpc_services/rpc_long_tx.cpp15
-rw-r--r--ydb/core/grpc_services/rpc_prepare_data_query.cpp6
-rw-r--r--ydb/core/grpc_services/rpc_read_table.cpp2
-rw-r--r--ydb/core/grpc_services/rpc_rollback_transaction.cpp4
-rw-r--r--ydb/core/grpc_services/rpc_stream_execute_scan_query.cpp5
-rw-r--r--ydb/core/grpc_services/rpc_stream_execute_yql_script.cpp9
-rw-r--r--ydb/core/grpc_services/ya.make2
-rw-r--r--ydb/core/http_proxy/http_req.cpp1
-rw-r--r--ydb/core/http_proxy/ut/CMakeLists.darwin-x86_64.txt1
-rw-r--r--ydb/core/http_proxy/ut/CMakeLists.linux-aarch64.txt1
-rw-r--r--ydb/core/http_proxy/ut/CMakeLists.linux-x86_64.txt1
-rw-r--r--ydb/core/http_proxy/ut/CMakeLists.windows-x86_64.txt1
-rw-r--r--ydb/core/http_proxy/ut/ya.make1
-rw-r--r--ydb/core/io_formats/csv.h3
-rw-r--r--ydb/core/io_formats/csv_arrow.cpp8
-rw-r--r--ydb/core/kafka_proxy/actors/actors.h7
-rw-r--r--ydb/core/kafka_proxy/ut/ut_protocol.cpp41
-rw-r--r--ydb/core/kesus/tablet/tablet_impl.cpp17
-rw-r--r--ydb/core/kesus/tablet/tablet_impl.h2
-rw-r--r--ydb/core/kesus/tablet/tx_self_check.cpp3
-rw-r--r--ydb/core/kqp/common/compilation/result.h1
-rw-r--r--ydb/core/kqp/compile_service/kqp_compile_actor.cpp1
-rw-r--r--ydb/core/kqp/compile_service/kqp_compile_service.cpp4
-rw-r--r--ydb/core/kqp/compute_actor/kqp_scan_fetcher_actor.cpp8
-rw-r--r--ydb/core/kqp/counters/kqp_counters.cpp20
-rw-r--r--ydb/core/kqp/counters/kqp_counters.h10
-rw-r--r--ydb/core/kqp/executer_actor/kqp_result_channel.cpp28
-rw-r--r--ydb/core/kqp/host/kqp_host.cpp14
-rw-r--r--ydb/core/kqp/provider/yql_kikimr_exec.cpp24
-rw-r--r--ydb/core/kqp/provider/yql_kikimr_opt_build.cpp5
-rw-r--r--ydb/core/kqp/provider/yql_kikimr_provider.h9
-rw-r--r--ydb/core/kqp/provider/yql_kikimr_settings.cpp2
-rw-r--r--ydb/core/kqp/session_actor/kqp_session_actor.cpp41
-rw-r--r--ydb/core/kqp/session_actor/kqp_worker_common.cpp10
-rw-r--r--ydb/core/kqp/session_actor/kqp_worker_common.h2
-rw-r--r--ydb/core/kqp/ut/common/kqp_ut_common.cpp5
-rw-r--r--ydb/core/kqp/ut/common/kqp_ut_common.h1
-rw-r--r--ydb/core/kqp/ut/cost/kqp_cost_ut.cpp28
-rw-r--r--ydb/core/kqp/ut/olap/kqp_olap_ut.cpp12
-rw-r--r--ydb/core/kqp/ut/scheme/kqp_scheme_ut.cpp226
-rw-r--r--ydb/core/kqp/ut/service/CMakeLists.darwin-x86_64.txt3
-rw-r--r--ydb/core/kqp/ut/service/CMakeLists.linux-aarch64.txt3
-rw-r--r--ydb/core/kqp/ut/service/CMakeLists.linux-x86_64.txt3
-rw-r--r--ydb/core/kqp/ut/service/CMakeLists.windows-x86_64.txt3
-rw-r--r--ydb/core/kqp/ut/service/kqp_qs_queries_ut.cpp610
-rw-r--r--ydb/core/kqp/ut/service/kqp_qs_scripts_ut.cpp (renamed from ydb/core/kqp/ut/service/kqp_query_service_ut.cpp)484
-rw-r--r--ydb/core/kqp/ut/service/ya.make3
-rw-r--r--ydb/core/kqp/ut/yql/kqp_yql_ut.cpp30
-rw-r--r--ydb/core/load_test/service_actor.cpp2
-rw-r--r--ydb/core/mind/bscontroller/bsc.cpp2
-rw-r--r--ydb/core/mind/bscontroller/cmds_storage_pool.cpp14
-rw-r--r--ydb/core/mind/bscontroller/config.cpp55
-rw-r--r--ydb/core/mind/bscontroller/config.h33
-rw-r--r--ydb/core/mind/bscontroller/config_fit_groups.cpp3
-rw-r--r--ydb/core/mind/bscontroller/defs.h1
-rw-r--r--ydb/core/mind/bscontroller/impl.h40
-rw-r--r--ydb/core/mind/bscontroller/load_everything.cpp8
-rw-r--r--ydb/core/mind/bscontroller/migrate.cpp47
-rw-r--r--ydb/core/mind/bscontroller/scheme.h65
-rw-r--r--ydb/core/mind/bscontroller/scrub.cpp6
-rw-r--r--ydb/core/mind/bscontroller/virtual_group.cpp284
-rw-r--r--ydb/core/mind/hive/hive_impl.cpp15
-rw-r--r--ydb/core/mind/hive/hive_impl.h2
-rw-r--r--ydb/core/mind/hive/tx__load_everything.cpp38
-rw-r--r--ydb/core/mind/node_broker.cpp2
-rw-r--r--ydb/core/mind/node_broker_ut.cpp42
-rw-r--r--ydb/core/persqueue/partition.cpp18
-rw-r--r--ydb/core/persqueue/partition.h5
-rw-r--r--ydb/core/persqueue/partition_read.cpp2
-rw-r--r--ydb/core/persqueue/read_balancer.cpp16
-rw-r--r--ydb/core/persqueue/read_balancer.h17
-rw-r--r--ydb/core/persqueue/transaction.cpp20
-rw-r--r--ydb/core/persqueue/transaction.h3
-rw-r--r--ydb/core/persqueue/ut/common/pq_ut_common.cpp16
-rw-r--r--ydb/core/persqueue/ut/common/pq_ut_common.h6
-rw-r--r--ydb/core/persqueue/ut/pq_ut.cpp39
-rw-r--r--ydb/core/persqueue/ut/pqtablet_ut.cpp48
-rw-r--r--ydb/core/persqueue/writer/source_id_encoding.cpp19
-rw-r--r--ydb/core/persqueue/writer/source_id_encoding.h8
-rw-r--r--ydb/core/protos/blob_depot_config.proto1
-rw-r--r--ydb/core/protos/config.proto17
-rw-r--r--ydb/core/protos/console_config.proto2
-rw-r--r--ydb/core/protos/counters_bs_controller.proto1
-rw-r--r--ydb/core/protos/counters_datashard.proto1
-rw-r--r--ydb/core/protos/flat_scheme_op.proto1
-rw-r--r--ydb/core/protos/flat_tx_scheme.proto3
-rw-r--r--ydb/core/protos/subdomains.proto8
-rw-r--r--ydb/core/quoter/kesus_quoter_proxy.cpp9
-rw-r--r--ydb/core/sys_view/processor/processor_impl.cpp5
-rw-r--r--ydb/core/sys_view/processor/processor_impl.h8
-rw-r--r--ydb/core/tablet/private/aggregated_counters.cpp6
-rw-r--r--ydb/core/tablet/tablet_pipe_ut.cpp24
-rw-r--r--ydb/core/testlib/cs_helper.cpp214
-rw-r--r--ydb/core/testlib/tablet_flat_dummy.cpp13
-rw-r--r--ydb/core/tx/columnshard/columnshard_ut_common.cpp4
-rw-r--r--ydb/core/tx/columnshard/columnshard_ut_common.h2
-rw-r--r--ydb/core/tx/columnshard/engines/column_engine_logs.cpp2
-rw-r--r--ydb/core/tx/columnshard/engines/column_features.cpp23
-rw-r--r--ydb/core/tx/columnshard/engines/column_features.h3
-rw-r--r--ydb/core/tx/columnshard/engines/index_info.cpp7
-rw-r--r--ydb/core/tx/columnshard/engines/predicate/container.h2
-rw-r--r--ydb/core/tx/datashard/change_exchange_split.cpp30
-rw-r--r--ydb/core/tx/datashard/change_sender_async_index.cpp29
-rw-r--r--ydb/core/tx/datashard/change_sender_cdc_stream.cpp40
-rw-r--r--ydb/core/tx/datashard/change_sender_common_ops.cpp41
-rw-r--r--ydb/core/tx/datashard/change_sender_common_ops.h3
-rw-r--r--ydb/core/tx/datashard/datashard.cpp25
-rw-r--r--ydb/core/tx/datashard/datashard__init.cpp1
-rw-r--r--ydb/core/tx/datashard/datashard__read_iterator.cpp138
-rw-r--r--ydb/core/tx/datashard/datashard_change_receiving.cpp39
-rw-r--r--ydb/core/tx/datashard/datashard_change_sending.cpp1
-rw-r--r--ydb/core/tx/datashard/datashard_impl.h39
-rw-r--r--ydb/core/tx/datashard/datashard_split_src.cpp1
-rw-r--r--ydb/core/tx/datashard/datashard_ut_change_exchange.cpp48
-rw-r--r--ydb/core/tx/datashard/datashard_ut_read_iterator.cpp7
-rw-r--r--ydb/core/tx/long_tx_service/acquire_snapshot_impl.cpp28
-rw-r--r--ydb/core/tx/long_tx_service/long_tx_service.cpp7
-rw-r--r--ydb/core/tx/long_tx_service/long_tx_service.h15
-rw-r--r--ydb/core/tx/long_tx_service/long_tx_service_impl.cpp14
-rw-r--r--ydb/core/tx/scheme_board/cache.cpp6
-rw-r--r--ydb/core/tx/scheme_cache/scheme_cache.h8
-rw-r--r--ydb/core/tx/schemeshard/CMakeLists.darwin-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/CMakeLists.linux-aarch64.txt2
-rw-r--r--ydb/core/tx/schemeshard/CMakeLists.linux-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/CMakeLists.windows-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/schemeshard__init.cpp6
-rw-r--r--ydb/core/tx/schemeshard/schemeshard__init_root.cpp4
-rw-r--r--ydb/core/tx/schemeshard/schemeshard__operation_alter_extsubdomain.cpp7
-rw-r--r--ydb/core/tx/schemeshard/schemeshard__operation_alter_subdomain.cpp7
-rw-r--r--ydb/core/tx/schemeshard/schemeshard__operation_common.cpp16
-rw-r--r--ydb/core/tx/schemeshard/schemeshard__operation_common.h56
-rw-r--r--ydb/core/tx/schemeshard/schemeshard__operation_common_subdomain.h3
-rw-r--r--ydb/core/tx/schemeshard/schemeshard__operation_create_cdc_stream.cpp82
-rw-r--r--ydb/core/tx/schemeshard/schemeshard__operation_create_extsubdomain.cpp5
-rw-r--r--ydb/core/tx/schemeshard/schemeshard__operation_create_pq.cpp12
-rw-r--r--ydb/core/tx/schemeshard/schemeshard__operation_create_subdomain.cpp4
-rw-r--r--ydb/core/tx/schemeshard/schemeshard__operation_side_effects.cpp3
-rw-r--r--ydb/core/tx/schemeshard/schemeshard__sync_update_tenants.cpp6
-rw-r--r--ydb/core/tx/schemeshard/schemeshard_impl.cpp30
-rw-r--r--ydb/core/tx/schemeshard/schemeshard_impl.h2
-rw-r--r--ydb/core/tx/schemeshard/schemeshard_info_types.cpp25
-rw-r--r--ydb/core/tx/schemeshard/schemeshard_info_types.h15
-rw-r--r--ydb/core/tx/schemeshard/schemeshard_path_describer.cpp4
-rw-r--r--ydb/core/tx/schemeshard/schemeshard_schema.h8
-rw-r--r--ydb/core/tx/schemeshard/ut_async_index.cpp48
-rw-r--r--ydb/core/tx/schemeshard/ut_async_index/CMakeLists.darwin-x86_64.txt5
-rw-r--r--ydb/core/tx/schemeshard/ut_async_index/CMakeLists.linux-aarch64.txt5
-rw-r--r--ydb/core/tx/schemeshard/ut_async_index/CMakeLists.linux-x86_64.txt5
-rw-r--r--ydb/core/tx/schemeshard/ut_async_index/CMakeLists.windows-x86_64.txt5
-rw-r--r--ydb/core/tx/schemeshard/ut_async_index/ut_async_index.cpp258
-rw-r--r--ydb/core/tx/schemeshard/ut_async_index/ya.make3
-rw-r--r--ydb/core/tx/schemeshard/ut_auditsettings/CMakeLists.darwin-x86_64.txt (renamed from ydb/core/tx/schemeshard/ut_pq/CMakeLists.windows-x86_64.txt)39
-rw-r--r--ydb/core/tx/schemeshard/ut_auditsettings/CMakeLists.linux-aarch64.txt (renamed from ydb/core/tx/schemeshard/ut_pq/CMakeLists.linux-aarch64.txt)34
-rw-r--r--ydb/core/tx/schemeshard/ut_auditsettings/CMakeLists.linux-x86_64.txt (renamed from ydb/core/tx/schemeshard/ut_pq/CMakeLists.linux-x86_64.txt)34
-rw-r--r--ydb/core/tx/schemeshard/ut_auditsettings/CMakeLists.txt (renamed from ydb/core/tx/schemeshard/ut_pq/CMakeLists.txt)0
-rw-r--r--ydb/core/tx/schemeshard/ut_auditsettings/CMakeLists.windows-x86_64.txt (renamed from ydb/core/tx/schemeshard/ut_pq/CMakeLists.darwin-x86_64.txt)39
-rw-r--r--ydb/core/tx/schemeshard/ut_auditsettings/ut_auditsettings.cpp344
-rw-r--r--ydb/core/tx/schemeshard/ut_auditsettings/ya.make (renamed from ydb/core/tx/schemeshard/ut_pq/ya.make)10
-rw-r--r--ydb/core/tx/schemeshard/ut_backup/CMakeLists.darwin-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_backup/CMakeLists.linux-aarch64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_backup/CMakeLists.linux-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_backup/ut_backup.cpp (renamed from ydb/core/tx/schemeshard/ut_backup.cpp)0
-rw-r--r--ydb/core/tx/schemeshard/ut_base/CMakeLists.darwin-x86_64.txt6
-rw-r--r--ydb/core/tx/schemeshard/ut_base/CMakeLists.linux-aarch64.txt6
-rw-r--r--ydb/core/tx/schemeshard/ut_base/CMakeLists.linux-x86_64.txt6
-rw-r--r--ydb/core/tx/schemeshard/ut_base/CMakeLists.windows-x86_64.txt6
-rw-r--r--ydb/core/tx/schemeshard/ut_base/ut_allocate_pq.cpp (renamed from ydb/core/tx/schemeshard/ut_allocate_pq.cpp)0
-rw-r--r--ydb/core/tx/schemeshard/ut_base/ut_base.cpp (renamed from ydb/core/tx/schemeshard/ut_base.cpp)0
-rw-r--r--ydb/core/tx/schemeshard/ut_base/ut_info_types.cpp (renamed from ydb/core/tx/schemeshard/ut_info_types.cpp)0
-rw-r--r--ydb/core/tx/schemeshard/ut_base_reboots/CMakeLists.darwin-x86_64.txt4
-rw-r--r--ydb/core/tx/schemeshard/ut_base_reboots/CMakeLists.linux-aarch64.txt4
-rw-r--r--ydb/core/tx/schemeshard/ut_base_reboots/CMakeLists.linux-x86_64.txt4
-rw-r--r--ydb/core/tx/schemeshard/ut_base_reboots/CMakeLists.windows-x86_64.txt4
-rw-r--r--ydb/core/tx/schemeshard/ut_base_reboots/ut_allocate_reboot_pq.cpp (renamed from ydb/core/tx/schemeshard/ut_allocate_reboot_pq.cpp)0
-rw-r--r--ydb/core/tx/schemeshard/ut_base_reboots/ut_base_reboots.cpp (renamed from ydb/core/tx/schemeshard/ut_base_reboots.cpp)0
-rw-r--r--ydb/core/tx/schemeshard/ut_bsvolume/CMakeLists.darwin-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_bsvolume/CMakeLists.linux-aarch64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_bsvolume/CMakeLists.linux-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_bsvolume/CMakeLists.windows-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_bsvolume/ut_bsvolume.cpp (renamed from ydb/core/tx/schemeshard/ut_bsvolume.cpp)0
-rw-r--r--ydb/core/tx/schemeshard/ut_bsvolume_reboots/CMakeLists.darwin-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_bsvolume_reboots/CMakeLists.linux-aarch64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_bsvolume_reboots/CMakeLists.linux-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_bsvolume_reboots/CMakeLists.windows-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_bsvolume_reboots/ut_bsvolume_reboots.cpp (renamed from ydb/core/tx/schemeshard/ut_bsvolume_reboots.cpp)0
-rw-r--r--ydb/core/tx/schemeshard/ut_cdc_stream/CMakeLists.darwin-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_cdc_stream/CMakeLists.linux-aarch64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_cdc_stream/CMakeLists.linux-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_cdc_stream/CMakeLists.windows-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_cdc_stream/ut_cdc_stream.cpp (renamed from ydb/core/tx/schemeshard/ut_cdc_stream.cpp)58
-rw-r--r--ydb/core/tx/schemeshard/ut_cdc_stream_reboots/CMakeLists.darwin-x86_64.txt3
-rw-r--r--ydb/core/tx/schemeshard/ut_cdc_stream_reboots/CMakeLists.linux-aarch64.txt3
-rw-r--r--ydb/core/tx/schemeshard/ut_cdc_stream_reboots/CMakeLists.linux-x86_64.txt3
-rw-r--r--ydb/core/tx/schemeshard/ut_cdc_stream_reboots/CMakeLists.windows-x86_64.txt3
-rw-r--r--ydb/core/tx/schemeshard/ut_cdc_stream_reboots/ut_cdc_stream_reboots.cpp (renamed from ydb/core/tx/schemeshard/ut_cdc_stream_reboots.cpp)218
-rw-r--r--ydb/core/tx/schemeshard/ut_cdc_stream_reboots/ya.make1
-rw-r--r--ydb/core/tx/schemeshard/ut_compaction/CMakeLists.darwin-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_compaction/CMakeLists.linux-aarch64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_compaction/CMakeLists.linux-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_compaction/CMakeLists.windows-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_compaction/ut_compaction.cpp (renamed from ydb/core/tx/schemeshard/ut_compaction.cpp)0
-rw-r--r--ydb/core/tx/schemeshard/ut_export/CMakeLists.darwin-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_export/CMakeLists.linux-aarch64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_export/CMakeLists.linux-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_export/ut_export.cpp (renamed from ydb/core/tx/schemeshard/ut_export.cpp)0
-rw-r--r--ydb/core/tx/schemeshard/ut_export_reboots_s3/CMakeLists.darwin-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_export_reboots_s3/CMakeLists.linux-aarch64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_export_reboots_s3/CMakeLists.linux-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_export_reboots_s3/CMakeLists.windows-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_export_reboots_s3/ut_export_reboots_s3.cpp (renamed from ydb/core/tx/schemeshard/ut_export_reboots_s3.cpp)0
-rw-r--r--ydb/core/tx/schemeshard/ut_external_data_source/CMakeLists.darwin-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_external_data_source/CMakeLists.linux-aarch64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_external_data_source/CMakeLists.linux-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_external_data_source/CMakeLists.windows-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_external_data_source/ut_external_data_source.cpp (renamed from ydb/core/tx/schemeshard/ut_external_data_source.cpp)0
-rw-r--r--ydb/core/tx/schemeshard/ut_external_data_source_reboots/CMakeLists.darwin-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_external_data_source_reboots/CMakeLists.linux-aarch64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_external_data_source_reboots/CMakeLists.linux-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_external_data_source_reboots/CMakeLists.windows-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_external_data_source_reboots/ut_external_data_source_reboots.cpp (renamed from ydb/core/tx/schemeshard/ut_external_data_source_reboots.cpp)0
-rw-r--r--ydb/core/tx/schemeshard/ut_external_table/CMakeLists.darwin-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_external_table/CMakeLists.linux-aarch64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_external_table/CMakeLists.linux-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_external_table/CMakeLists.windows-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_external_table/ut_external_table.cpp (renamed from ydb/core/tx/schemeshard/ut_external_table.cpp)0
-rw-r--r--ydb/core/tx/schemeshard/ut_external_table_reboots/CMakeLists.darwin-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_external_table_reboots/CMakeLists.linux-aarch64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_external_table_reboots/CMakeLists.linux-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_external_table_reboots/CMakeLists.windows-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_external_table_reboots/ut_external_table_reboots.cpp (renamed from ydb/core/tx/schemeshard/ut_external_table_reboots.cpp)0
-rw-r--r--ydb/core/tx/schemeshard/ut_extsubdomain/CMakeLists.darwin-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_extsubdomain/CMakeLists.linux-aarch64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_extsubdomain/CMakeLists.linux-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_extsubdomain/CMakeLists.windows-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_extsubdomain/ut_extsubdomain.cpp (renamed from ydb/core/tx/schemeshard/ut_extsubdomain.cpp)0
-rw-r--r--ydb/core/tx/schemeshard/ut_extsubdomain_reboots/CMakeLists.darwin-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_extsubdomain_reboots/CMakeLists.linux-aarch64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_extsubdomain_reboots/CMakeLists.linux-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_extsubdomain_reboots/CMakeLists.windows-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_extsubdomain_reboots/ut_extsubdomain_reboots.cpp (renamed from ydb/core/tx/schemeshard/ut_extsubdomain_reboots.cpp)0
-rw-r--r--ydb/core/tx/schemeshard/ut_filestore_reboots/CMakeLists.darwin-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_filestore_reboots/CMakeLists.linux-aarch64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_filestore_reboots/CMakeLists.linux-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_filestore_reboots/CMakeLists.windows-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_filestore_reboots/ut_filestore_reboots.cpp (renamed from ydb/core/tx/schemeshard/ut_filestore_reboots.cpp)0
-rw-r--r--ydb/core/tx/schemeshard/ut_index_build/CMakeLists.darwin-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_index_build/CMakeLists.linux-aarch64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_index_build/CMakeLists.linux-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_index_build/CMakeLists.windows-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_index_build/ut_index_build.cpp (renamed from ydb/core/tx/schemeshard/ut_index_build.cpp)0
-rw-r--r--ydb/core/tx/schemeshard/ut_index_build_reboots/CMakeLists.darwin-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_index_build_reboots/CMakeLists.linux-aarch64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_index_build_reboots/CMakeLists.linux-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_index_build_reboots/CMakeLists.windows-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_index_build_reboots/ut_index_build_reboots.cpp (renamed from ydb/core/tx/schemeshard/ut_index_build_reboots.cpp)0
-rw-r--r--ydb/core/tx/schemeshard/ut_login/CMakeLists.darwin-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_login/CMakeLists.linux-aarch64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_login/CMakeLists.linux-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_login/CMakeLists.windows-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_login/ut_login.cpp (renamed from ydb/core/tx/schemeshard/ut_login.cpp)0
-rw-r--r--ydb/core/tx/schemeshard/ut_move/CMakeLists.darwin-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_move/CMakeLists.linux-aarch64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_move/CMakeLists.linux-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_move/CMakeLists.windows-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_move/ut_move.cpp (renamed from ydb/core/tx/schemeshard/ut_move.cpp)0
-rw-r--r--ydb/core/tx/schemeshard/ut_move_reboots/CMakeLists.darwin-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_move_reboots/CMakeLists.linux-aarch64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_move_reboots/CMakeLists.linux-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_move_reboots/CMakeLists.windows-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_move_reboots/ut_move_reboots.cpp (renamed from ydb/core/tx/schemeshard/ut_move_reboots.cpp)0
-rw-r--r--ydb/core/tx/schemeshard/ut_olap/CMakeLists.darwin-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_olap/CMakeLists.linux-aarch64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_olap/CMakeLists.linux-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_olap/CMakeLists.windows-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_olap/ut_olap.cpp (renamed from ydb/core/tx/schemeshard/ut_olap.cpp)0
-rw-r--r--ydb/core/tx/schemeshard/ut_olap_reboots/CMakeLists.darwin-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_olap_reboots/CMakeLists.linux-aarch64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_olap_reboots/CMakeLists.linux-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_olap_reboots/CMakeLists.windows-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_olap_reboots/ut_olap_reboots.cpp (renamed from ydb/core/tx/schemeshard/ut_olap_reboots.cpp)0
-rw-r--r--ydb/core/tx/schemeshard/ut_pq.cpp0
-rw-r--r--ydb/core/tx/schemeshard/ut_pq_reboots/CMakeLists.darwin-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_pq_reboots/CMakeLists.linux-aarch64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_pq_reboots/CMakeLists.linux-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_pq_reboots/CMakeLists.windows-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_pq_reboots/ut_pq_reboots.cpp (renamed from ydb/core/tx/schemeshard/ut_pq_reboots.cpp)0
-rw-r--r--ydb/core/tx/schemeshard/ut_reboots/CMakeLists.darwin-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_reboots/CMakeLists.linux-aarch64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_reboots/CMakeLists.linux-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_reboots/CMakeLists.windows-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_reboots/ut_reboots.cpp (renamed from ydb/core/tx/schemeshard/ut_reboots.cpp)0
-rw-r--r--ydb/core/tx/schemeshard/ut_replication/CMakeLists.darwin-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_replication/CMakeLists.linux-aarch64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_replication/CMakeLists.linux-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_replication/CMakeLists.windows-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_replication/ut_replication.cpp (renamed from ydb/core/tx/schemeshard/ut_replication.cpp)0
-rw-r--r--ydb/core/tx/schemeshard/ut_replication_reboots/CMakeLists.darwin-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_replication_reboots/CMakeLists.linux-aarch64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_replication_reboots/CMakeLists.linux-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_replication_reboots/CMakeLists.windows-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_replication_reboots/ut_replication_reboots.cpp (renamed from ydb/core/tx/schemeshard/ut_replication_reboots.cpp)0
-rw-r--r--ydb/core/tx/schemeshard/ut_restore/CMakeLists.darwin-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_restore/CMakeLists.linux-aarch64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_restore/CMakeLists.linux-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_restore/CMakeLists.windows-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_restore/ut_restore.cpp (renamed from ydb/core/tx/schemeshard/ut_restore.cpp)0
-rw-r--r--ydb/core/tx/schemeshard/ut_rtmr/CMakeLists.darwin-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_rtmr/CMakeLists.linux-aarch64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_rtmr/CMakeLists.linux-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_rtmr/CMakeLists.windows-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_rtmr/ut_rtmr.cpp (renamed from ydb/core/tx/schemeshard/ut_rtmr.cpp)0
-rw-r--r--ydb/core/tx/schemeshard/ut_rtmr_reboots/CMakeLists.darwin-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_rtmr_reboots/CMakeLists.linux-aarch64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_rtmr_reboots/CMakeLists.linux-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_rtmr_reboots/CMakeLists.windows-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_rtmr_reboots/ut_rtmr_reboots.cpp (renamed from ydb/core/tx/schemeshard/ut_rtmr_reboots.cpp)0
-rw-r--r--ydb/core/tx/schemeshard/ut_ru_calculator/CMakeLists.darwin-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_ru_calculator/CMakeLists.linux-aarch64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_ru_calculator/CMakeLists.linux-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_ru_calculator/CMakeLists.windows-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_ru_calculator/ut_ru_calculator.cpp (renamed from ydb/core/tx/schemeshard/ut_ru_calculator.cpp)0
-rw-r--r--ydb/core/tx/schemeshard/ut_sequence/CMakeLists.darwin-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_sequence/CMakeLists.linux-aarch64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_sequence/CMakeLists.linux-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_sequence/CMakeLists.windows-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_sequence/ut_sequence.cpp (renamed from ydb/core/tx/schemeshard/ut_sequence.cpp)0
-rw-r--r--ydb/core/tx/schemeshard/ut_sequence_reboots/CMakeLists.darwin-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_sequence_reboots/CMakeLists.linux-aarch64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_sequence_reboots/CMakeLists.linux-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_sequence_reboots/CMakeLists.windows-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_sequence_reboots/ut_sequence_reboots.cpp (renamed from ydb/core/tx/schemeshard/ut_sequence_reboots.cpp)0
-rw-r--r--ydb/core/tx/schemeshard/ut_serverless/CMakeLists.darwin-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_serverless/CMakeLists.linux-aarch64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_serverless/CMakeLists.linux-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_serverless/CMakeLists.windows-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_serverless/ut_serverless.cpp (renamed from ydb/core/tx/schemeshard/ut_serverless.cpp)0
-rw-r--r--ydb/core/tx/schemeshard/ut_split_merge/CMakeLists.darwin-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_split_merge/CMakeLists.linux-aarch64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_split_merge/CMakeLists.linux-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_split_merge/CMakeLists.windows-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_split_merge/ut_split_merge.cpp (renamed from ydb/core/tx/schemeshard/ut_split_merge.cpp)0
-rw-r--r--ydb/core/tx/schemeshard/ut_split_merge_reboots/CMakeLists.darwin-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_split_merge_reboots/CMakeLists.linux-aarch64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_split_merge_reboots/CMakeLists.linux-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_split_merge_reboots/CMakeLists.windows-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_split_merge_reboots/ut_split_merge_reboots.cpp (renamed from ydb/core/tx/schemeshard/ut_split_merge_reboots.cpp)0
-rw-r--r--ydb/core/tx/schemeshard/ut_stats/CMakeLists.darwin-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_stats/CMakeLists.linux-aarch64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_stats/CMakeLists.linux-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_stats/CMakeLists.windows-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_stats/ut_stats.cpp (renamed from ydb/core/tx/schemeshard/ut_stats.cpp)0
-rw-r--r--ydb/core/tx/schemeshard/ut_subdomain/CMakeLists.darwin-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_subdomain/CMakeLists.linux-aarch64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_subdomain/CMakeLists.linux-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_subdomain/CMakeLists.windows-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_subdomain/ut_subdomain.cpp (renamed from ydb/core/tx/schemeshard/ut_subdomain.cpp)0
-rw-r--r--ydb/core/tx/schemeshard/ut_subdomain_reboots/CMakeLists.darwin-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_subdomain_reboots/CMakeLists.linux-aarch64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_subdomain_reboots/CMakeLists.linux-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_subdomain_reboots/CMakeLists.windows-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_subdomain_reboots/ut_subdomain_reboots.cpp (renamed from ydb/core/tx/schemeshard/ut_subdomain_reboots.cpp)0
-rw-r--r--ydb/core/tx/schemeshard/ut_topic_splitmerge/CMakeLists.darwin-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_topic_splitmerge/CMakeLists.linux-aarch64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_topic_splitmerge/CMakeLists.linux-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_topic_splitmerge/CMakeLists.windows-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_topic_splitmerge/ut_topic_splitmerge.cpp (renamed from ydb/core/tx/schemeshard/ut_topic_splitmerge.cpp)0
-rw-r--r--ydb/core/tx/schemeshard/ut_ttl/CMakeLists.darwin-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_ttl/CMakeLists.linux-aarch64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_ttl/CMakeLists.linux-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_ttl/CMakeLists.windows-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_ttl/ut_ttl.cpp (renamed from ydb/core/tx/schemeshard/ut_ttl.cpp)0
-rw-r--r--ydb/core/tx/schemeshard/ut_user_attributes/CMakeLists.darwin-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_user_attributes/CMakeLists.linux-aarch64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_user_attributes/CMakeLists.linux-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_user_attributes/CMakeLists.windows-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_user_attributes/ut_user_attributes.cpp (renamed from ydb/core/tx/schemeshard/ut_user_attributes.cpp)0
-rw-r--r--ydb/core/tx/schemeshard/ut_user_attributes_reboots/CMakeLists.darwin-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_user_attributes_reboots/CMakeLists.linux-aarch64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_user_attributes_reboots/CMakeLists.linux-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_user_attributes_reboots/CMakeLists.windows-x86_64.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_user_attributes_reboots/ut_user_attributes_reboots.cpp (renamed from ydb/core/tx/schemeshard/ut_user_attributes_reboots.cpp)0
-rw-r--r--ydb/core/tx/schemeshard/ya.make2
-rw-r--r--ydb/core/tx/sequenceproxy/sequenceproxy_allocate.cpp2
-rw-r--r--ydb/core/tx/sequenceproxy/sequenceproxy_impl.cpp100
-rw-r--r--ydb/core/tx/sequenceproxy/sequenceproxy_impl.h32
-rw-r--r--ydb/core/tx/sequenceproxy/sequenceproxy_resolve.cpp161
-rw-r--r--ydb/core/tx/sequenceproxy/sequenceproxy_ut.cpp47
-rw-r--r--ydb/core/tx/tx_proxy/upload_rows_common_impl.h7
-rw-r--r--ydb/core/viewer/json_query.h6
-rw-r--r--ydb/core/viewer/json_storage_base.h10
-rw-r--r--ydb/core/viewer/viewer_request.cpp2
-rw-r--r--ydb/core/viewer/viewer_request.h8
-rw-r--r--ydb/library/yaml_config/yaml_config.cpp8
-rw-r--r--ydb/library/yaml_config/yaml_config.h44
-rw-r--r--ydb/library/yql/core/issue/yql_issue.txt1
-rw-r--r--ydb/library/yql/minikql/comp_nodes/mkql_wide_combine.cpp10
-rw-r--r--ydb/library/yql/sql/v1/format/sql_format_ut.cpp2
-rw-r--r--ydb/library/yql/sql/v1/node.h1
-rw-r--r--ydb/library/yql/sql/v1/query.cpp3
-rw-r--r--ydb/library/yql/sql/v1/sql_expression.cpp6
-rw-r--r--ydb/library/yql/sql/v1/sql_ut.cpp15
-rw-r--r--ydb/public/api/protos/draft/ydb_dynamic_config.proto2
-rw-r--r--ydb/public/api/protos/ydb_table.proto3
-rw-r--r--ydb/public/sdk/cpp/client/draft/ydb_dynamic_config.cpp12
-rw-r--r--ydb/public/sdk/cpp/client/draft/ydb_dynamic_config.h4
-rw-r--r--ydb/public/sdk/cpp/client/impl/ydb_internal/plain_status/status.cpp6
-rw-r--r--ydb/public/sdk/cpp/client/ydb_datastreams/datastreams.cpp12
-rw-r--r--ydb/public/sdk/cpp/client/ydb_query/impl/exec_query.cpp2
-rw-r--r--ydb/public/sdk/cpp/client/ydb_topic/impl/topic.cpp5
-rw-r--r--ydb/public/sdk/cpp/client/ydb_topic/topic.h4
-rw-r--r--ydb/services/datastreams/datastreams_proxy.cpp6
-rw-r--r--ydb/services/datastreams/datastreams_ut.cpp17
-rw-r--r--ydb/services/keyvalue/ut/ya.make1
-rw-r--r--ydb/services/persqueue_v1/actors/write_session_actor.ipp4
-rw-r--r--ydb/services/ydb/ydb_bulk_upsert_olap_ut.cpp36
-rw-r--r--ydb/services/ydb/ydb_common_ut.h8
-rw-r--r--ydb/services/ydb/ydb_long_tx_ut.cpp33
-rw-r--r--ydb/services/ydb/ydb_query.cpp4
-rw-r--r--ydb/services/ydb/ydb_scripting.cpp4
-rw-r--r--ydb/services/ydb/ydb_table.cpp20
-rw-r--r--ydb/tests/functional/audit/conftest.py5
-rw-r--r--ydb/tests/functional/audit/test_auditlog.py246
-rw-r--r--ydb/tests/functional/audit/ya.make28
-rw-r--r--ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_explain.script-script_/explain.script.plan20
-rw-r--r--ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_join_group_by_lookup.script-script_/join_group_by_lookup.script.plan7
-rw-r--r--ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_write_write_group_by.script-script_/write_write_group_by.script.plan7
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-05
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-15
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-1010
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-1110
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-125
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-1310
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-145
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-155
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-165
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-175
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-185
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-25
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-205
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-215
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-2210
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-275
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-285
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-295
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-35
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-305
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-315
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-325
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-335
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-345
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-355
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-365
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-375
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-385
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-395
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-410
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-405
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-415
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-425
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-510
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-65
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-75
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-810
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-910
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-05
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-15
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-1010
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-1110
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-125
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-1310
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-145
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-155
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-165
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-175
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-185
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-25
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-205
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-215
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-2210
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-275
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-285
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-295
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-35
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-305
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-315
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-325
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-335
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-345
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-355
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-365
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-375
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-385
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-395
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-410
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-405
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-415
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-425
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-510
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-65
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-75
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-810
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-910
-rw-r--r--ydb/tests/functional/scheme_tests/canondata/tablet_scheme_tests.TestTabletSchemes.test_tablet_schemes_flat_bs_controller_/flat_bs_controller.schema55
-rw-r--r--ydb/tests/functional/scheme_tests/canondata/tablet_scheme_tests.TestTabletSchemes.test_tablet_schemes_flat_schemeshard_/flat_schemeshard.schema28
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-jointest_join-group-by-with-null.test_/query_2.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-jointest_join-group-by-with-null.test_/query_3.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-jointest_join-group-by-with-null.test_/query_4.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-jointest_join-group-by-with-null.test_/query_5.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-jointest_join0.test_/query_16.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-jointest_join0.test_/query_2.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-jointest_join0.test_/query_3.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-jointest_join0.test_/query_7.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-jointest_join0.test_/query_8.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-jointest_join4.test_/query_4.plan7
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-select_distinct.test_/query_1.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-select_distinct.test_/query_2.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-select_distinct.test_/query_3.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-select_distinct.test_/query_4.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-select_distinct.test_/query_5.plan10
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-window.test_/query_5.plan7
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_results-jointest_join-group-by-with-null.test_/query_18
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-insert.test_/query_1.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-insert.test_/query_2.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_101.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_103.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_11.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_114.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_115.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_121.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_13.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_16.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_17.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_18.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_2.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_20.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_25.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_31.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_49.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_74.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_76.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_8.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_82.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-1.test_/query_85.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_102.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_110.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_112.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_113.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_130.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_15.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_2.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_42.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_44.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_54.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_55.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_60.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_69.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_7.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_77.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_8.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_83.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_89.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_90.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_91.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_92.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_97.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-2.test_/query_99.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_1.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_108.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_110.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_111.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_112.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_113.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_114.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_119.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_120.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_127.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_128.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_13.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_132.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_137.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_141.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_19.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_25.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_3.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_33.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_41.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_49.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_52.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_59.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_6.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_63.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_64.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_7.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_72.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_8.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_87.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-3.test_/query_92.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_107.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_110.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_111.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_114.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_115.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_116.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_12.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_123.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_126.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_133.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_134.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_2.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_21.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_24.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_3.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_31.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_40.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_44.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_5.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_55.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_60.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_65.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_81.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_84.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_89.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_90.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_91.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_95.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-4.test_/query_98.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-5.test_/query_11.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-5.test_/query_24.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-5.test_/query_26.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-5.test_/query_29.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-5.test_/query_30.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-5.test_/query_34.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select1-5.test_/query_8.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_1.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_10.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_107.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_109.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_11.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_111.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_116.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_122.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_125.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_137.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_15.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_20.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_25.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_29.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_40.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_48.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_51.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_52.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_60.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_65.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_75.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_8.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_89.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_91.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-1.test_/query_94.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_1.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_102.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_119.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_121.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_127.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_133.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_137.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_139.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_143.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_155.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_157.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_2.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_25.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_38.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_4.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_40.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_55.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_57.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_61.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_67.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_75.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_77.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_85.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_89.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_91.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_97.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-2.test_/query_98.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_10.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_107.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_111.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_112.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_114.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_117.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_13.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_135.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_140.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_144.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_145.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_147.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_17.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_2.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_24.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_27.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_31.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_44.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_48.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_5.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_51.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_54.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_59.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_6.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_69.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_70.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_74.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_78.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_79.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_8.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_82.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_85.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-3.test_/query_9.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_10.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_102.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_107.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_111.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_114.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_120.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_134.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_14.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_19.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_2.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_20.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_28.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_33.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_37.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_39.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_45.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_52.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_61.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_63.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_67.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_68.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_70.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_71.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_74.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_8.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_82.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_84.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_86.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_89.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_91.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_96.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_98.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-1.test_/query_1.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-1.test_/query_131.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-1.test_/query_132.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-1.test_/query_17.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-1.test_/query_18.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-1.test_/query_19.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-1.test_/query_2.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-1.test_/query_20.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-1.test_/query_39.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-1.test_/query_40.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-1.test_/query_83.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-1.test_/query_84.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-10.test_/query_11.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-10.test_/query_12.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-10.test_/query_23.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-10.test_/query_24.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-10.test_/query_69.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-10.test_/query_70.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-10.test_/query_75.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-10.test_/query_76.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-10.test_/query_93.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-10.test_/query_94.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-10.test_/query_97.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-10.test_/query_98.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-11.test_/query_105.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-11.test_/query_106.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-11.test_/query_19.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-11.test_/query_20.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-11.test_/query_31.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-11.test_/query_32.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-11.test_/query_43.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-11.test_/query_44.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-11.test_/query_45.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-11.test_/query_46.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-11.test_/query_47.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-11.test_/query_48.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-11.test_/query_5.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-11.test_/query_6.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_105.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_106.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_107.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_108.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_109.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_110.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_111.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_112.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_139.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_140.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_37.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_38.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_45.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_46.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_47.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_48.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_73.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_74.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_77.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_78.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_79.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_80.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_81.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_82.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_85.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-12.test_/query_86.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_10.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_11.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_12.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_13.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_14.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_15.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_16.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_17.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_24.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_25.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_26.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_27.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_34.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_35.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_36.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_37.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_38.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_39.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_62.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_63.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_8.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-13.test_/query_9.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-14.test_/query_22.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-14.test_/query_23.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-14.test_/query_28.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-14.test_/query_29.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-14.test_/query_30.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-14.test_/query_31.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-14.test_/query_60.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-14.test_/query_61.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-14.test_/query_76.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-14.test_/query_77.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-14.test_/query_78.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-14.test_/query_79.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-14.test_/query_80.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-14.test_/query_81.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-14.test_/query_88.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-14.test_/query_89.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-15.test_/query_11.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-15.test_/query_12.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-15.test_/query_17.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-15.test_/query_18.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-15.test_/query_19.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-15.test_/query_20.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-15.test_/query_3.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-15.test_/query_4.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_100.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_101.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_12.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_13.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_14.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_140.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_141.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_15.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_16.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_17.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_22.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_23.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_24.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_25.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_40.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_41.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_44.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_45.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_54.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_55.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_64.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_65.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_66.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_67.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_72.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_73.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_94.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_95.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_98.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-2.test_/query_99.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_1.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_100.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_101.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_102.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_107.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_108.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_119.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_120.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_2.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_29.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_3.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_30.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_4.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_43.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_44.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_45.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_46.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_97.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_98.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-3.test_/query_99.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-4.test_/query_16.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-4.test_/query_17.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-4.test_/query_28.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-4.test_/query_29.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-4.test_/query_40.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-4.test_/query_41.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-4.test_/query_42.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-4.test_/query_43.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-4.test_/query_68.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-4.test_/query_69.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-4.test_/query_70.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-4.test_/query_71.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-4.test_/query_76.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-4.test_/query_77.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-5.test_/query_13.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-5.test_/query_14.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-5.test_/query_21.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-5.test_/query_22.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-5.test_/query_27.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-5.test_/query_28.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-5.test_/query_55.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-5.test_/query_56.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-5.test_/query_75.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-5.test_/query_76.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-6.test_/query_103.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-6.test_/query_104.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-6.test_/query_107.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-6.test_/query_108.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-6.test_/query_131.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-6.test_/query_132.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-6.test_/query_133.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-6.test_/query_134.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-6.test_/query_33.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-6.test_/query_34.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-6.test_/query_35.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-6.test_/query_36.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-6.test_/query_49.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-6.test_/query_50.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-7.test_/query_1.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-7.test_/query_109.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-7.test_/query_110.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-7.test_/query_113.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-7.test_/query_114.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-7.test_/query_119.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-7.test_/query_120.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-7.test_/query_121.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-7.test_/query_122.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-7.test_/query_123.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-7.test_/query_2.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_1.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_108.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_109.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_110.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_111.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_114.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_115.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_116.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_117.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_120.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_121.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_2.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_3.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_58.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_59.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_60.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_61.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_62.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_63.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_80.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_81.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_82.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_83.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_84.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_85.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_86.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_87.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_92.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-8.test_/query_93.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_100.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_101.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_102.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_129.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_130.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_133.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_134.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_21.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_22.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_23.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_24.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_27.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_28.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_29.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_3.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_30.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_31.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_32.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_4.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_63.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_64.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_65.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_66.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_7.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_73.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_74.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_8.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_91.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_92.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_93.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_94.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select3-9.test_/query_99.plan5
-rw-r--r--ydb/tests/functional/suite_tests/canondata/test_stream_query.TestStreamQuery.test_sql_suite_results-window.test_/window.test.out372
-rw-r--r--ydb/tests/functional/suite_tests/stream_query/window.test125
-rw-r--r--ydb/tests/functional/ya.make1
-rw-r--r--ydb/tests/library/harness/kikimr_config.py2
-rw-r--r--ydb/tests/library/harness/ydb_fixtures.py8
-rw-r--r--ydb/tests/oss/launch/compile_protos.py53
-rwxr-xr-xydb/tests/oss/launch/compile_protos.sh6
-rwxr-xr-xydb/tests/oss/launch/prepare.sh2
-rw-r--r--ydb/tests/oss/launch/ya.make6
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 &notifyId,
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(&currentPB, &storedPB,
- (ui32)EComponentId::Test1, errorReason), expected, errorReason);
+ auto storedPB = CompatibilityInfo.MakeStored(componentId, &storePB);
+ UNIT_ASSERT_EQUAL_C(CompatibilityInfo.CheckCompatibility(&currentPB, &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(&currentPB, stored,
- (ui32)EComponentId::Interconnect, errorReason), expected, errorReason);
+ UNIT_ASSERT_EQUAL_C(CompatibilityInfo.CheckCompatibility(&currentPB, 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() ? &current->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() ? &current->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() ? &current->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(&currentCompatibilityInfo);
+ 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()