1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
|
#include "ut_common.h"
#include <ydb/core/persqueue/ut/common/pq_ut_common.h>
#include <ydb/core/wrappers/fake_storage.h>
namespace NKikimr {
namespace NSysView {
NKikimrSubDomains::TSubDomainSettings GetSubDomainDeclareSettings(const TString &name, const TStoragePools &pools) {
NKikimrSubDomains::TSubDomainSettings subdomain;
subdomain.SetName(name);
for (auto& pool: pools) {
*subdomain.AddStoragePools() = pool;
}
return subdomain;
}
NKikimrSubDomains::TSubDomainSettings GetSubDomainDefaultSettings(const TString &name, const TStoragePools &pools) {
NKikimrSubDomains::TSubDomainSettings subdomain;
subdomain.SetName(name);
subdomain.SetCoordinators(2);
subdomain.SetMediators(2);
subdomain.SetPlanResolution(50);
subdomain.SetTimeCastBucketsPerMediator(2);
for (auto& pool: pools) {
*subdomain.AddStoragePools() = pool;
}
return subdomain;
}
TTestEnv::TTestEnv(ui32 staticNodes, ui32 dynamicNodes, const TTestEnvSettings& settings) {
auto mbusPort = PortManager.GetPort();
auto grpcPort = PortManager.GetPort();
TVector<NKikimrKqp::TKqpSetting> kqpSettings;
NKikimrProto::TAuthConfig authConfig = settings.AuthConfig;
authConfig.SetUseBuiltinDomain(true);
Settings = new Tests::TServerSettings(mbusPort, authConfig);
Settings->SetDomainName("Root");
Settings->SetNodeCount(staticNodes);
Settings->SetDynamicNodeCount(dynamicNodes);
Settings->SetKqpSettings(kqpSettings);
// in some tests we check data size, which depends on compaction,
NKikimrConfig::TFeatureFlags featureFlags;
featureFlags.SetEnableBackgroundCompaction(false);
featureFlags.SetEnableResourcePools(true);
featureFlags.SetEnableFollowerStats(true);
featureFlags.SetEnableVectorIndex(true);
featureFlags.SetEnableTieringInColumnShard(true);
featureFlags.SetEnableExternalDataSources(true);
Settings->SetFeatureFlags(featureFlags);
Settings->SetEnablePersistentQueryStats(settings.EnableSVP);
Settings->SetEnableDbCounters(settings.EnableSVP);
Settings->SetEnableForceFollowers(settings.EnableForceFollowers);
Settings->SetEnableTablePgTypes(true);
Settings->SetEnableShowCreate(true);
NKikimrConfig::TAppConfig appConfig;
*appConfig.MutableFeatureFlags() = Settings->FeatureFlags;
appConfig.MutableQueryServiceConfig()->AddAvailableExternalDataSources("ObjectStorage");
Settings->SetAppConfig(appConfig);
for (ui32 i : xrange(settings.StoragePools)) {
TString poolName = Sprintf("test%d", i);
Settings->AddStoragePool(poolName, TString("/Root:") + poolName, 2);
}
Settings->AppConfig->MutableHiveConfig()->AddBalancerIgnoreTabletTypes(NKikimrTabletBase::TTabletTypes::SysViewProcessor);
Server = new Tests::TServer(*Settings);
Server->EnableGRpc(grpcPort);
if (settings.ShowCreateTable) {
this->Server->SetupDefaultProfiles();
}
auto* runtime = Server->GetRuntime();
for (ui32 i = 0; i < runtime->GetNodeCount(); ++i) {
runtime->GetAppData(i).UsePartitionStatsCollectorForTests = true;
}
Client = MakeHolder<Tests::TClient>(*Settings);
Tenants = MakeHolder<Tests::TTenants>(Server);
Client->InitRootScheme("Root");
if (settings.PqTabletsN) {
NKikimr::NPQ::FillPQConfig(Settings->PQConfig, "/Root/PQ", true);
PqTabletIds = Server->StartPQTablets(settings.PqTabletsN);
}
Endpoint = "localhost:" + ToString(grpcPort);
if (settings.ShowCreateTable) {
DriverConfig = NYdb::TDriverConfig().SetEndpoint(Endpoint).SetDatabase("/Root");
} else {
DriverConfig = NYdb::TDriverConfig().SetEndpoint(Endpoint);
}
Driver = MakeHolder<NYdb::TDriver>(DriverConfig);
Server->GetRuntime()->SetLogPriority(NKikimrServices::SYSTEM_VIEWS, NActors::NLog::PRI_DEBUG);
Singleton<NKikimr::NWrappers::NExternalStorage::TFakeExternalStorage>()->SetSecretKey("fakeSecret");
}
TTestEnv::~TTestEnv() {
Driver->Stop(true);
}
TStoragePools TTestEnv::GetPools() const {
TStoragePools pools;
for (const auto& [kind, pool] : Settings->StoragePoolTypes) {
pools.emplace_back(pool.GetName(), kind);
}
return pools;
}
TStoragePools TTestEnv::CreatePoolsForTenant(const TString& tenant) {
TStoragePools result;
for (auto& poolType: Settings->StoragePoolTypes) {
auto& poolKind = poolType.first;
result.emplace_back(Client->CreateStoragePool(poolKind, tenant), poolKind);
}
return result;
}
} // NSysView
} // NKikimr
|