aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorijon <ijon@yandex-team.com>2023-01-23 10:08:45 +0300
committerijon <ijon@yandex-team.com>2023-01-23 10:08:45 +0300
commitbf11eefa37a047706d6f807847aef142a22dd447 (patch)
treee7b3efa2663373f5dbe82e3bbb0ee755df152fcd
parent6b86da079d2677e428c32d096a69a18b82ff129b (diff)
downloadydb-bf11eefa37a047706d6f807847aef142a22dd447.tar.gz
schemeshard, alter database: fix tx_proxy/ut_ext_tenant tests
-rw-r--r--ydb/core/tx/schemeshard/schemeshard__operation_alter_extsubdomain.cpp4
-rw-r--r--ydb/core/tx/tx_proxy/proxy_ext_tenant_ut.cpp62
-rw-r--r--ydb/core/tx/tx_proxy/proxy_ut_helpers.h20
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) {