Skip to content

Commit 9b40ec6

Browse files
committed
YQ WM added unit tests for sls disable (#8687)
1 parent 0b86319 commit 9b40ec6

File tree

5 files changed

+157
-2
lines changed

5 files changed

+157
-2
lines changed

ydb/core/kqp/ut/scheme/kqp_scheme_ut.cpp

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6226,6 +6226,57 @@ Y_UNIT_TEST_SUITE(KqpScheme) {
62266226
"Path does not exist");
62276227
}
62286228

6229+
Y_UNIT_TEST(DisableResourcePoolsOnServerless) {
6230+
auto ydb = NWorkload::TYdbSetupSettings()
6231+
.CreateSampleTenants(true)
6232+
.EnableResourcePoolsOnServerless(false)
6233+
.Create();
6234+
6235+
auto checkDisabled = [](const auto& result) {
6236+
UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), NYdb::EStatus::GENERIC_ERROR, result.GetIssues().ToString());
6237+
UNIT_ASSERT_STRING_CONTAINS(result.GetIssues().ToString(), "Resource pools are disabled for serverless domains. Please contact your system administrator to enable it");
6238+
};
6239+
6240+
auto checkNotFound = [](const auto& result) {
6241+
UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), NYdb::EStatus::GENERIC_ERROR, result.GetIssues().ToString());
6242+
UNIT_ASSERT_STRING_CONTAINS(result.GetIssues().ToString(), "Path does not exist");
6243+
};
6244+
6245+
const auto& createSql = R"(
6246+
CREATE RESOURCE POOL MyResourcePool WITH (
6247+
CONCURRENT_QUERY_LIMIT=20,
6248+
QUEUE_SIZE=1000
6249+
);)";
6250+
6251+
const auto& alterSql = R"(
6252+
ALTER RESOURCE POOL MyResourcePool
6253+
SET (CONCURRENT_QUERY_LIMIT = 30, QUEUE_SIZE = 100),
6254+
RESET (QUERY_MEMORY_LIMIT_PERCENT_PER_NODE);
6255+
)";
6256+
6257+
const auto& dropSql = "DROP RESOURCE POOL MyResourcePool;";
6258+
6259+
auto settings = NWorkload::TQueryRunnerSettings().PoolId("");
6260+
6261+
// Dedicated, enabled
6262+
settings.Database(ydb->GetSettings().GetDedicatedTenantName()).NodeIndex(1);
6263+
NWorkload::TSampleQueries::CheckSuccess(ydb->ExecuteQuery(createSql, settings));
6264+
NWorkload::TSampleQueries::CheckSuccess(ydb->ExecuteQuery(alterSql, settings));
6265+
NWorkload::TSampleQueries::CheckSuccess(ydb->ExecuteQuery(dropSql, settings));
6266+
6267+
// Shared, enabled
6268+
settings.Database(ydb->GetSettings().GetSharedTenantName()).NodeIndex(2);
6269+
NWorkload::TSampleQueries::CheckSuccess(ydb->ExecuteQuery(createSql, settings));
6270+
NWorkload::TSampleQueries::CheckSuccess(ydb->ExecuteQuery(alterSql, settings));
6271+
NWorkload::TSampleQueries::CheckSuccess(ydb->ExecuteQuery(dropSql, settings));
6272+
6273+
// Serverless, disabled
6274+
settings.Database(ydb->GetSettings().GetServerlessTenantName()).NodeIndex(2);
6275+
checkDisabled(ydb->ExecuteQuery(createSql, settings));
6276+
checkNotFound(ydb->ExecuteQuery(alterSql, settings));
6277+
checkNotFound(ydb->ExecuteQuery(dropSql, settings));
6278+
}
6279+
62296280
Y_UNIT_TEST(ResourcePoolsValidation) {
62306281
NKikimrConfig::TAppConfig config;
62316282
config.MutableFeatureFlags()->SetEnableResourcePools(true);
@@ -6495,6 +6546,57 @@ Y_UNIT_TEST_SUITE(KqpScheme) {
64956546
"Classifier with name MyResourcePoolClassifier not found in database /Root");
64966547
}
64976548

6549+
Y_UNIT_TEST(DisableResourcePoolClassifiersOnServerless) {
6550+
auto ydb = NWorkload::TYdbSetupSettings()
6551+
.CreateSampleTenants(true)
6552+
.EnableResourcePoolsOnServerless(false)
6553+
.Create();
6554+
6555+
auto checkDisabled = [](const auto& result) {
6556+
UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), NYdb::EStatus::GENERIC_ERROR, result.GetIssues().ToString());
6557+
UNIT_ASSERT_STRING_CONTAINS(result.GetIssues().ToString(), "Resource pool classifiers are disabled for serverless domains. Please contact your system administrator to enable it");
6558+
};
6559+
6560+
auto checkNotFound = [](const auto& result) {
6561+
UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), NYdb::EStatus::GENERIC_ERROR, result.GetIssues().ToString());
6562+
UNIT_ASSERT_STRING_CONTAINS(result.GetIssues().ToString(), "Classifier with name MyResourcePoolClassifier not found in database");
6563+
};
6564+
6565+
const auto& createSql = R"(
6566+
CREATE RESOURCE POOL CLASSIFIER MyResourcePoolClassifier WITH (
6567+
RANK=20,
6568+
RESOURCE_POOL="test_pool"
6569+
);)";
6570+
6571+
const auto& alterSql = R"(
6572+
ALTER RESOURCE POOL CLASSIFIER MyResourcePoolClassifier
6573+
SET (RANK = 1, MEMBERNAME = "test@user"),
6574+
RESET (RESOURCE_POOL);
6575+
)";
6576+
6577+
const auto& dropSql = "DROP RESOURCE POOL CLASSIFIER MyResourcePoolClassifier;";
6578+
6579+
auto settings = NWorkload::TQueryRunnerSettings().PoolId("");
6580+
6581+
// Dedicated, enabled
6582+
settings.Database(ydb->GetSettings().GetDedicatedTenantName()).NodeIndex(1);
6583+
NWorkload::TSampleQueries::CheckSuccess(ydb->ExecuteQuery(createSql, settings));
6584+
NWorkload::TSampleQueries::CheckSuccess(ydb->ExecuteQuery(alterSql, settings));
6585+
NWorkload::TSampleQueries::CheckSuccess(ydb->ExecuteQuery(dropSql, settings));
6586+
6587+
// Shared, enabled
6588+
settings.Database(ydb->GetSettings().GetSharedTenantName()).NodeIndex(2);
6589+
NWorkload::TSampleQueries::CheckSuccess(ydb->ExecuteQuery(createSql, settings));
6590+
NWorkload::TSampleQueries::CheckSuccess(ydb->ExecuteQuery(alterSql, settings));
6591+
NWorkload::TSampleQueries::CheckSuccess(ydb->ExecuteQuery(dropSql, settings));
6592+
6593+
// Serverless, disabled
6594+
settings.Database(ydb->GetSettings().GetServerlessTenantName()).NodeIndex(2);
6595+
checkDisabled(ydb->ExecuteQuery(createSql, settings));
6596+
checkDisabled(ydb->ExecuteQuery(alterSql, settings));
6597+
checkNotFound(ydb->ExecuteQuery(dropSql, settings));
6598+
}
6599+
64986600
Y_UNIT_TEST(ResourcePoolClassifiersValidation) {
64996601
NKikimrConfig::TAppConfig config;
65006602
config.MutableFeatureFlags()->SetEnableResourcePools(true);

ydb/core/kqp/workload_service/ut/common/kqp_workload_service_ut_common.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,7 @@ class TWorkloadServiceYdbSetup : public IYdbSetup {
231231
TAppConfig appConfig;
232232
appConfig.MutableFeatureFlags()->SetEnableResourcePools(Settings_.EnableResourcePools_);
233233
appConfig.MutableFeatureFlags()->SetEnableMetadataObjectsOnServerless(Settings_.EnableMetadataObjectsOnServerless_);
234+
appConfig.MutableFeatureFlags()->SetEnableResourcePoolsOnServerless(Settings_.EnableResourcePoolsOnServerless_);
234235
appConfig.MutableFeatureFlags()->SetEnableResourcePoolsCounters(true);
235236

236237
return appConfig;
@@ -523,7 +524,7 @@ class TWorkloadServiceYdbSetup : public IYdbSetup {
523524
request->SetQuery(query);
524525
request->SetType(NKikimrKqp::QUERY_TYPE_SQL_GENERIC_QUERY);
525526
request->SetAction(NKikimrKqp::QUERY_ACTION_EXECUTE);
526-
request->SetDatabase(Settings_.DomainName_);
527+
request->SetDatabase(settings.Database_ ? settings.Database_ : Settings_.DomainName_);
527528
request->SetPoolId(*settings.PoolId_);
528529

529530
return event;

ydb/core/kqp/workload_service/ut/common/kqp_workload_service_ut_common.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ struct TYdbSetupSettings {
7070
FLUENT_SETTING_DEFAULT(bool, CreateSampleTenants, false);
7171
FLUENT_SETTING_DEFAULT(bool, EnableResourcePools, true);
7272
FLUENT_SETTING_DEFAULT(bool, EnableMetadataObjectsOnServerless, true);
73+
FLUENT_SETTING_DEFAULT(bool, EnableResourcePoolsOnServerless, false);
7374

7475
// Default pool settings
7576
FLUENT_SETTING_DEFAULT(TString, PoolId, "sample_pool_id");

ydb/core/kqp/workload_service/ut/kqp_workload_service_ut.cpp

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
#include <ydb/core/base/appdata_fwd.h>
2+
#include <ydb/core/base/path.h>
23

34
#include <ydb/core/kqp/workload_service/ut/common/kqp_workload_service_ut_common.h>
45

@@ -47,6 +48,56 @@ Y_UNIT_TEST_SUITE(KqpWorkloadService) {
4748
TSampleQueries::TSelect42::CheckResult(ydb->ExecuteQuery(TSampleQueries::TSelect42::Query, TQueryRunnerSettings().PoolId("another_pool_id")));
4849
}
4950

51+
Y_UNIT_TEST(WorkloadServiceDisabledByFeatureFlagOnServerless) {
52+
auto ydb = TYdbSetupSettings()
53+
.CreateSampleTenants(true)
54+
.EnableResourcePoolsOnServerless(false)
55+
.Create();
56+
57+
const TString& poolId = "another_pool_id";
58+
auto settings = TQueryRunnerSettings().PoolId(poolId);
59+
60+
// Dedicated, enabled
61+
TSampleQueries::CheckNotFound(ydb->ExecuteQuery(
62+
TSampleQueries::TSelect42::Query,
63+
settings.Database(ydb->GetSettings().GetDedicatedTenantName()).NodeIndex(1)
64+
), poolId);
65+
66+
// Shared, enabled
67+
TSampleQueries::CheckNotFound(ydb->ExecuteQuery(
68+
TSampleQueries::TSelect42::Query,
69+
settings.Database(ydb->GetSettings().GetSharedTenantName()).NodeIndex(2)
70+
), poolId);
71+
72+
// Serverless, disabled
73+
TSampleQueries::TSelect42::CheckResult(ydb->ExecuteQuery(
74+
TSampleQueries::TSelect42::Query,
75+
settings.Database(ydb->GetSettings().GetServerlessTenantName()).NodeIndex(2)
76+
));
77+
}
78+
79+
Y_UNIT_TEST(WorkloadServiceDisabledByInvalidDatabasePath) {
80+
auto ydb = TYdbSetupSettings().Create();
81+
82+
const TString& poolId = "another_pool_id";
83+
auto settings = TQueryRunnerSettings().PoolId(poolId);
84+
85+
TSampleQueries::CheckNotFound(ydb->ExecuteQuery(TSampleQueries::TSelect42::Query, settings), poolId);
86+
87+
const TString& tabmleName = "sub_path";
88+
ydb->ExecuteSchemeQuery(TStringBuilder() << R"(
89+
CREATE TABLE )" << tabmleName << R"( (
90+
Key Int32,
91+
PRIMARY KEY (Key)
92+
);
93+
)");
94+
95+
TSampleQueries::TSelect42::CheckResult(ydb->ExecuteQuery(
96+
TSampleQueries::TSelect42::Query,
97+
settings.Database(TStringBuilder() << CanonizePath(ydb->GetSettings().DomainName_) << "/" << tabmleName)
98+
));
99+
}
100+
50101
TQueryRunnerResultAsync StartQueueSizeCheckRequests(TIntrusivePtr<IYdbSetup> ydb, const TQueryRunnerSettings& settings) {
51102
// One of these requests should be rejected by QueueSize
52103
auto firstRequest = ydb->ExecuteQueryAsync(TSampleQueries::TSelect42::Query, settings);

ydb/tests/tools/kqprun/kqprun.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -296,7 +296,7 @@ class TMain : public TMainClassArgs {
296296
TablesMapping[tableName] = filePath;
297297
});
298298

299-
options.AddLongOption('c', "app-config", "File with app config (TAppConfig for ydb tennant)")
299+
options.AddLongOption('c', "app-config", "File with app config (TAppConfig for ydb tenant)")
300300
.RequiredArgument("file")
301301
.DefaultValue("./configuration/app_config.conf")
302302
.Handler1([this](const NLastGetopt::TOptsParser* option) {

0 commit comments

Comments
 (0)