diff options
author | ijon <ijon@yandex-team.com> | 2023-01-23 10:08:45 +0300 |
---|---|---|
committer | ijon <ijon@yandex-team.com> | 2023-01-23 10:08:45 +0300 |
commit | bf11eefa37a047706d6f807847aef142a22dd447 (patch) | |
tree | e7b3efa2663373f5dbe82e3bbb0ee755df152fcd | |
parent | 6b86da079d2677e428c32d096a69a18b82ff129b (diff) | |
download | ydb-bf11eefa37a047706d6f807847aef142a22dd447.tar.gz |
schemeshard, alter database: fix tx_proxy/ut_ext_tenant tests
-rw-r--r-- | ydb/core/tx/schemeshard/schemeshard__operation_alter_extsubdomain.cpp | 4 | ||||
-rw-r--r-- | ydb/core/tx/tx_proxy/proxy_ext_tenant_ut.cpp | 62 | ||||
-rw-r--r-- | ydb/core/tx/tx_proxy/proxy_ut_helpers.h | 20 |
3 files changed, 54 insertions, 32 deletions
diff --git a/ydb/core/tx/schemeshard/schemeshard__operation_alter_extsubdomain.cpp b/ydb/core/tx/schemeshard/schemeshard__operation_alter_extsubdomain.cpp index 08a8164a67..ef90dc85a7 100644 --- a/ydb/core/tx/schemeshard/schemeshard__operation_alter_extsubdomain.cpp +++ b/ydb/core/tx/schemeshard/schemeshard__operation_alter_extsubdomain.cpp @@ -570,7 +570,7 @@ public: TTxState& txState = context.SS->CreateTx(OperationId, TTxState::TxAlterExtSubDomainCreateHive, basenameId); // Create subdomain alter - TSubDomainInfo::TPtr alter = new TSubDomainInfo(*subdomainInfo, 0, 0); + TSubDomainInfo::TPtr alter = new TSubDomainInfo(*subdomainInfo, 0, 0, delta.StoragePoolsAdded); LOG_D("TAlterExtSubDomainCreateHive Propose" << ", opId: " << OperationId @@ -583,7 +583,7 @@ public: // Create shard for the hive to-be. { TChannelsBindings channelsBinding; - if (!context.SS->ResolveSubdomainsChannels(delta.StoragePoolsAdded, channelsBinding)) { + if (!context.SS->ResolveSubdomainsChannels(alter->GetStoragePools(), channelsBinding)) { result->SetError(NKikimrScheme::StatusInvalidParameter, "failed to construct channels binding"); return result; } diff --git a/ydb/core/tx/tx_proxy/proxy_ext_tenant_ut.cpp b/ydb/core/tx/tx_proxy/proxy_ext_tenant_ut.cpp index ff7c9579d8..f46e47617e 100644 --- a/ydb/core/tx/tx_proxy/proxy_ext_tenant_ut.cpp +++ b/ydb/core/tx/tx_proxy/proxy_ext_tenant_ut.cpp @@ -93,7 +93,7 @@ void DeclareAndDefineWithNodes(TTestEnvWithPoolsSupport& env) { NTestLs::IsExtSubdomain(ls); //root TSS auto ver = NTestLs::ExtractPathVersion(ls); UNIT_ASSERT_VALUES_EQUAL(ver.PathId, 1); - UNIT_ASSERT_VALUES_EQUAL(ver.Version, 4); + UNIT_ASSERT_VALUES_EQUAL(ver.Version, (env.GetSettings().FeatureFlags.GetEnableAlterDatabaseCreateHiveFirst() ? 5 : 4)); } { @@ -126,7 +126,7 @@ void CreateTableInsideAndLs(TTestEnvWithPoolsSupport& env) { auto ver = NTestLs::ExtractPathVersion(ls); UNIT_ASSERT_VALUES_UNEQUAL(ver.OwnerId, rootSchemeShard); UNIT_ASSERT_VALUES_EQUAL(ver.PathId, 1); - UNIT_ASSERT_VALUES_EQUAL(ver.Version, 4); + UNIT_ASSERT_VALUES_EQUAL(ver.Version, (env.GetSettings().FeatureFlags.GetEnableAlterDatabaseCreateHiveFirst() ? 5 : 4)); } { @@ -147,7 +147,7 @@ void CreateTableInsideAndLs(TTestEnvWithPoolsSupport& env) { auto ver = NTestLs::ExtractPathVersion(ls); UNIT_ASSERT_VALUES_UNEQUAL(ver.OwnerId, rootSchemeShard); UNIT_ASSERT_VALUES_EQUAL(ver.PathId, 1); - UNIT_ASSERT_VALUES_EQUAL(ver.Version, 6); + UNIT_ASSERT_VALUES_EQUAL(ver.Version, (env.GetSettings().FeatureFlags.GetEnableAlterDatabaseCreateHiveFirst() ? 7 : 6)); } UNIT_ASSERT_VALUES_EQUAL(NMsgBusProxy::MSTATUS_OK, env.GetClient().ForceDeleteSubdomain("/dc-1", "USER_0")); @@ -227,7 +227,7 @@ void CreateTableInsideThenStopTenantAndForceDeleteSubDomain(TTestEnvWithPoolsSup UNIT_ASSERT_VALUES_EQUAL(NMsgBusProxy::MSTATUS_OK, env.GetClient().CreateExtSubdomain("/dc-1", subdomain_0)); auto ls = env.GetClient().Ls("/dc-1/USER_0"); - NTestLs::IsUnavailable(ls); //root TSS not ready yet + NTestLs::IsUnavailable(ls); // extsubdomain is not ready yet ls = env.GetClient().Ls("/dc-1"); NTestLs::ChildrenCount(ls, 1); @@ -243,7 +243,7 @@ void CreateTableInsideThenStopTenantAndForceDeleteSubDomain(TTestEnvWithPoolsSup UNIT_ASSERT_VALUES_EQUAL(NMsgBusProxy::MSTATUS_OK, env.GetClient().AlterExtSubdomain("/dc-1", subdomain)); auto ls = env.GetClient().Ls("/dc-1/USER_0"); - NTestLs::IsExtSubdomain(ls); //root TSS ready + NTestLs::IsExtSubdomain(ls); // extsubdomain's SS is ready auto ver = NTestLs::ExtractPathVersion(ls); UNIT_ASSERT_VALUES_UNEQUAL(ver.OwnerId, rootSchemeShard); schemeshards[x] = ver.OwnerId; @@ -251,7 +251,7 @@ void CreateTableInsideThenStopTenantAndForceDeleteSubDomain(TTestEnvWithPoolsSup UNIT_ASSERT_VALUES_UNEQUAL(schemeshards[x], schemeshards[x-1]); } UNIT_ASSERT_VALUES_EQUAL(ver.PathId, 1); - UNIT_ASSERT_VALUES_EQUAL(ver.Version, 4); + UNIT_ASSERT_VALUES_EQUAL(ver.Version, (env.GetSettings().FeatureFlags.GetEnableAlterDatabaseCreateHiveFirst() ? 5 : 4)); } { @@ -274,7 +274,7 @@ void CreateTableInsideThenStopTenantAndForceDeleteSubDomain(TTestEnvWithPoolsSup auto ver = NTestLs::ExtractPathVersion(ls); UNIT_ASSERT_VALUES_EQUAL(ver.OwnerId, schemeshards[x]); UNIT_ASSERT_VALUES_EQUAL(ver.PathId, 1); - UNIT_ASSERT_VALUES_EQUAL(ver.Version, 6); + UNIT_ASSERT_VALUES_EQUAL(ver.Version, (env.GetSettings().FeatureFlags.GetEnableAlterDatabaseCreateHiveFirst() ? 7 : 6)); ls = env.GetClient().Ls("/dc-1"); @@ -288,7 +288,9 @@ void CreateTableInsideThenStopTenantAndForceDeleteSubDomain(TTestEnvWithPoolsSup { auto ls = env.GetClient().Ls("/dc-1"); - NTestLs::NoChildren(ls); + //NOTE: no need to check children count because extsubdomain root path + // could still exist technically but in a state of being deleted -- + // -- all that counts is that path status: should be DoesNotExist auto ver = NTestLs::ExtractPathVersion(ls); UNIT_ASSERT_VALUES_EQUAL(ver.OwnerId, rootSchemeShard); UNIT_ASSERT_VALUES_EQUAL(ver.PathId, 1); @@ -296,7 +298,7 @@ void CreateTableInsideThenStopTenantAndForceDeleteSubDomain(TTestEnvWithPoolsSup env.GetClient().RefreshPathCache(&env.GetRuntime(), "/dc-1/USER_0"); ls = env.GetClient().Ls("/dc-1/USER_0"); - NTestLs::IsDoesNotExist(ls); //root TSS deleted + NTestLs::IsDoesNotExist(ls); // extsubdomain root deleted } } } @@ -490,7 +492,7 @@ void CreateTableInsideAndAlterDomainAndTable(TTestEnvWithPoolsSupport& env) { UNIT_ASSERT_VALUES_EQUAL(NMsgBusProxy::MSTATUS_OK, env.GetClient().CreateExtSubdomain("/dc-1", subdomain_0)); auto ls = env.GetClient().Ls("/dc-1/USER_0"); - NTestLs::IsUnavailable(ls); //root TSS not ready yet + NTestLs::IsUnavailable(ls); // extsubdomain is not ready yet ls = env.GetClient().Ls("/dc-1"); NTestLs::ChildrenCount(ls, 1); @@ -505,7 +507,7 @@ void CreateTableInsideAndAlterDomainAndTable(TTestEnvWithPoolsSupport& env) { UNIT_ASSERT_VALUES_EQUAL(NMsgBusProxy::MSTATUS_OK, env.GetClient().AlterExtSubdomain("/dc-1", subdomain)); auto ls = env.GetClient().Ls("/dc-1/USER_0"); - NTestLs::IsExtSubdomain(ls); //root TSS ready + NTestLs::IsExtSubdomain(ls); // extsubdomain's SS is ready auto ver = NTestLs::ExtractPathVersion(ls); UNIT_ASSERT_VALUES_UNEQUAL(ver.OwnerId, rootSchemeShard); schemeshards[x] = ver.OwnerId; @@ -557,7 +559,7 @@ void CreateTableInsideAndAlterDomainAndTable(TTestEnvWithPoolsSupport& env) { UNIT_ASSERT_VALUES_EQUAL(NMsgBusProxy::MSTATUS_OK, env.GetClient().AlterExtSubdomain("/dc-1", subdomain)); auto ls = env.GetClient().Ls("/dc-1/USER_0"); - NTestLs::IsExtSubdomain(ls); //root TSS ready + NTestLs::IsExtSubdomain(ls); // extsubdomain's SS is ready auto ver = NTestLs::ExtractPathVersion(ls); UNIT_ASSERT_VALUES_UNEQUAL(ver.OwnerId, rootSchemeShard); schemeshards[x] = ver.OwnerId; @@ -565,7 +567,7 @@ void CreateTableInsideAndAlterDomainAndTable(TTestEnvWithPoolsSupport& env) { UNIT_ASSERT_VALUES_UNEQUAL(schemeshards[x], schemeshards[x-1]); } UNIT_ASSERT_VALUES_EQUAL(ver.PathId, 1); - UNIT_ASSERT_VALUES_EQUAL(ver.Version, 7); + UNIT_ASSERT_VALUES_EQUAL(ver.Version, (env.GetSettings().FeatureFlags.GetEnableAlterDatabaseCreateHiveFirst() ? 8 : 7)); NKikimrSubDomains::TDomainDescription description = NTestLs::ExtractDomainDescription(ls); UNIT_ASSERT_VALUES_UNEQUAL(description.GetProcessingParams().GetHive(), 0); @@ -600,13 +602,13 @@ void CreateTableInsideAndAlterDomainAndTable(TTestEnvWithPoolsSupport& env) { UNIT_ASSERT_VALUES_EQUAL(description.GetPartitionConfig().GetFollowerCount(), 1); } - env.GetTenants().Stop(); - UNIT_ASSERT_VALUES_EQUAL(NMsgBusProxy::MSTATUS_OK, env.GetClient().ForceDeleteSubdomain("/dc-1", "USER_0")); { auto ls = env.GetClient().Ls("/dc-1"); - NTestLs::NoChildren(ls); + //NOTE: no need to check children count because extsubdomain root path + // could still exist technically but in a state of being deleted -- + // -- all that counts is that path status: should be DoesNotExist auto ver = NTestLs::ExtractPathVersion(ls); UNIT_ASSERT_VALUES_EQUAL(ver.OwnerId, rootSchemeShard); UNIT_ASSERT_VALUES_EQUAL(ver.PathId, 1); @@ -614,8 +616,10 @@ void CreateTableInsideAndAlterDomainAndTable(TTestEnvWithPoolsSupport& env) { env.GetClient().RefreshPathCache(&env.GetRuntime(), "/dc-1/USER_0"); ls = env.GetClient().Ls("/dc-1/USER_0"); - NTestLs::IsDoesNotExist(ls); //root TSS deleted + NTestLs::IsDoesNotExist(ls); // extsubdomain root deleted } + + env.GetTenants().Stop(); } } @@ -710,33 +714,33 @@ Y_UNIT_TEST_SUITE(TExtSubDomainTest) { DeclareAndDrop(env); } - Y_UNIT_TEST(DeclareAndDefineWithoutNodes) { - TTestEnvWithPoolsSupport env(1, 0, 2); + Y_UNIT_TEST_FLAG(DeclareAndDefineWithoutNodes, AlterDatabaseCreateHiveFirst) { + TTestEnvWithPoolsSupport env(1, 0, 2, AlterDatabaseCreateHiveFirst); DeclareAndDefineWithoutNodes(env); } - Y_UNIT_TEST(DeclareAndDefineWithNodes) { - TTestEnvWithPoolsSupport env(1, 1, 2); + Y_UNIT_TEST_FLAG(DeclareAndDefineWithNodes, AlterDatabaseCreateHiveFirst) { + TTestEnvWithPoolsSupport env(1, 1, 2, AlterDatabaseCreateHiveFirst); DeclareAndDefineWithNodes(env); } - Y_UNIT_TEST(CreateTableInsideAndLs) { - TTestEnvWithPoolsSupport env(1, 1, 2); + Y_UNIT_TEST_FLAG(CreateTableInsideAndLs, AlterDatabaseCreateHiveFirst) { + TTestEnvWithPoolsSupport env(1, 1, 2, AlterDatabaseCreateHiveFirst); CreateTableInsideAndLs(env); } - Y_UNIT_TEST(DeclareAndAlterPools) { - TTestEnvWithPoolsSupport env(1, 1, 2); + Y_UNIT_TEST_FLAG(DeclareAndAlterPools, AlterDatabaseCreateHiveFirst) { + TTestEnvWithPoolsSupport env(1, 1, 2, AlterDatabaseCreateHiveFirst); DeclareAndAlterPools(env); } - Y_UNIT_TEST(CreateTableInsideThenStopTenantAndForceDeleteSubDomain) { - TTestEnvWithPoolsSupport env(1, 1, 2); + Y_UNIT_TEST_FLAG(CreateTableInsideThenStopTenantAndForceDeleteSubDomain, AlterDatabaseCreateHiveFirst) { + TTestEnvWithPoolsSupport env(1, 1, 2, AlterDatabaseCreateHiveFirst); CreateTableInsideThenStopTenantAndForceDeleteSubDomain(env); } - Y_UNIT_TEST(CreateTableInsideAndAlterDomainAndTable) { - TTestEnvWithPoolsSupport env(1, 1, 2); + Y_UNIT_TEST_FLAG(CreateTableInsideAndAlterDomainAndTable, AlterDatabaseCreateHiveFirst) { + TTestEnvWithPoolsSupport env(1, 1, 2, AlterDatabaseCreateHiveFirst); CreateTableInsideAndAlterDomainAndTable(env); } diff --git a/ydb/core/tx/tx_proxy/proxy_ut_helpers.h b/ydb/core/tx/tx_proxy/proxy_ut_helpers.h index 846b0cf568..aa1718deb7 100644 --- a/ydb/core/tx/tx_proxy/proxy_ut_helpers.h +++ b/ydb/core/tx/tx_proxy/proxy_ut_helpers.h @@ -7,6 +7,23 @@ #include <library/cpp/testing/unittest/registar.h> #include <library/cpp/testing/unittest/tests_data.h> + +// ad-hoc test parametrization support: only for single boolean flag +// taken from ydb/core/ut/common/kqp_ut_common.h:Y_UNIT_TEST_TWIN +//TODO: introduce general support for test parametrization? +#define Y_UNIT_TEST_FLAG(N, OPT) \ + template<bool OPT> void Test##N(NUnitTest::TTestContext&); \ + struct TTestRegistration##N { \ + TTestRegistration##N() { \ + TCurrentTest::AddTest(#N "-" #OPT "-false", static_cast<void (*)(NUnitTest::TTestContext&)>(&Test##N<false>), false); \ + TCurrentTest::AddTest(#N "-" #OPT "-true", static_cast<void (*)(NUnitTest::TTestContext&)>(&Test##N<true>), false); \ + } \ + }; \ + static TTestRegistration##N testRegistration##N; \ + template<bool OPT> \ + void Test##N(NUnitTest::TTestContext&) + + namespace NKikimr { namespace NTxProxyUT { @@ -188,13 +205,14 @@ void SetRowInSimpletable(TBaseTestEnv& env, ui64 key, ui64 value, const TString class TTestEnvWithPoolsSupport: public TBaseTestEnv { public: - TTestEnvWithPoolsSupport(ui32 staticNodes = 1, ui32 dynamicNodes = 0, ui32 poolsCount = 2) + TTestEnvWithPoolsSupport(ui32 staticNodes = 1, ui32 dynamicNodes = 0, ui32 poolsCount = 2, bool enableAlterDatabaseCreateHiveFirst = true) { Settings = new Tests::TServerSettings(PortManager.GetPort(3534)); GetSettings().SetEnableMockOnSingleNode(false); GetSettings().SetNodeCount(staticNodes); GetSettings().SetDynamicNodeCount(dynamicNodes); + GetSettings().SetEnableAlterDatabaseCreateHiveFirst(enableAlterDatabaseCreateHiveFirst); GetSettings().SetEnableSystemViews(false); for (ui32 poolNum = 1; poolNum <= poolsCount; ++poolNum) { |