Skip to content

Commit c2af35d

Browse files
authored
Statistics: portion of bug fixes (#10718)
1 parent fefa9bb commit c2af35d

23 files changed

+992
-770
lines changed

ydb/core/kqp/provider/yql_kikimr_exec.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2320,6 +2320,11 @@ class TKiSinkCallableExecutionTransformer : public TAsyncCallbackTransformer<TKi
23202320
}
23212321

23222322
if (auto maybeAnalyze = TMaybeNode<TKiAnalyzeTable>(input)) {
2323+
if (!SessionCtx->Config().FeatureFlags.GetEnableColumnStatistics()) {
2324+
ctx.AddError(TIssue("ANALYZE command is not supported because `EnableColumnStatistics` feature flag is off"));
2325+
return SyncError();
2326+
}
2327+
23232328
auto cluster = TString(maybeAnalyze.Cast().DataSink().Cluster());
23242329

23252330
TAnalyzeSettings analyzeSettings = ParseAnalyzeSettings(maybeAnalyze.Cast());

ydb/core/kqp/ut/query/kqp_analyze_ut.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ Y_UNIT_TEST_SUITE(KqpAnalyze) {
1919
using namespace NStat;
2020

2121
Y_UNIT_TEST_TWIN(AnalyzeTable, ColumnStore) {
22-
TTestEnv env(1, 1, 1, true);
22+
TTestEnv env(1, 1, true);
23+
2324
CreateDatabase(env, "Database");
2425

2526
TTableClient client(env.GetDriver());

ydb/core/statistics/aggregator/aggregator_impl.cpp

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -511,7 +511,11 @@ void TStatisticsAggregator::InitializeStatisticsTable() {
511511
if (!EnableColumnStatistics) {
512512
return;
513513
}
514-
Register(CreateStatisticsTableCreator(std::make_unique<TEvStatistics::TEvStatTableCreationResponse>()));
514+
if (!Database) {
515+
return;
516+
}
517+
Register(CreateStatisticsTableCreator(
518+
std::make_unique<TEvStatistics::TEvStatTableCreationResponse>(), Database));
515519
}
516520

517521
void TStatisticsAggregator::Navigate() {
@@ -598,7 +602,7 @@ void TStatisticsAggregator::SaveStatisticsToTable() {
598602
data.push_back(strSketch);
599603
}
600604

601-
Register(CreateSaveStatisticsQuery(SelfId(),
605+
Register(CreateSaveStatisticsQuery(SelfId(), Database,
602606
TraversalPathId, EStatType::COUNT_MIN_SKETCH, std::move(columnTags), std::move(data)));
603607
}
604608

@@ -610,7 +614,7 @@ void TStatisticsAggregator::DeleteStatisticsFromTable() {
610614

611615
PendingDeleteStatistics = false;
612616

613-
Register(CreateDeleteStatisticsQuery(SelfId(), TraversalPathId));
617+
Register(CreateDeleteStatisticsQuery(SelfId(), Database, TraversalPathId));
614618
}
615619

616620
void TStatisticsAggregator::ScheduleNextAnalyze(NIceDb::TNiceDb& db) {

ydb/core/statistics/aggregator/tx_configure.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,13 @@ struct TStatisticsAggregator::TTxConfigure : public TTxBase {
2222

2323
NIceDb::TNiceDb db(txc.DB);
2424

25+
bool needInitialize = !Self->Database;
2526
Self->Database = Record.GetDatabase();
2627
Self->PersistSysParam(db, Schema::SysParam_Database, Self->Database);
28+
29+
if (needInitialize) {
30+
Self->InitializeStatisticsTable();
31+
}
2732
return true;
2833
}
2934

ydb/core/statistics/aggregator/tx_init.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -287,7 +287,9 @@ struct TStatisticsAggregator::TTxInit : public TTxBase {
287287
SA_LOG_W("[" << Self->TabletID() << "] TTxInit::Complete. EnableColumnStatistics=false");
288288
}
289289

290-
Self->InitializeStatisticsTable();
290+
if (Self->Database) {
291+
Self->InitializeStatisticsTable();
292+
}
291293

292294
if (Self->TraversalPathId && Self->TraversalStartKey) {
293295
SA_LOG_D("[" << Self->TabletID() << "] TTxInit::Complete. Start navigate. PathId " << Self->TraversalPathId);

ydb/core/statistics/aggregator/ut/ut_analyze_columnshard.cpp

Lines changed: 32 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -9,45 +9,48 @@
99
namespace NKikimr {
1010
namespace NStat {
1111

12-
13-
1412
Y_UNIT_TEST_SUITE(AnalyzeColumnshard) {
1513
Y_UNIT_TEST(AnalyzeTable) {
1614
TTestEnv env(1, 1);
1715
auto& runtime = *env.GetServer().GetRuntime();
18-
auto tableInfo = CreateDatabaseColumnTables(env, 1, 1)[0];
16+
const auto databaseInfo = CreateDatabaseColumnTables(env, 1, 1);
17+
const auto& tableInfo = databaseInfo.Tables[0];
1918

2019
AnalyzeTable(runtime, tableInfo.ShardIds[0], tableInfo.PathId);
2120
}
2221

2322
Y_UNIT_TEST(Analyze) {
2423
TTestEnv env(1, 1);
2524
auto& runtime = *env.GetServer().GetRuntime();
26-
auto tableInfo = CreateDatabaseColumnTables(env, 1, 1)[0];
25+
const auto databaseInfo = CreateDatabaseColumnTables(env, 1, 1);
26+
const auto& tableInfo = databaseInfo.Tables[0];
2727

2828
Analyze(runtime, tableInfo.SaTabletId, {tableInfo.PathId});
2929
}
3030

3131
Y_UNIT_TEST(AnalyzeServerless) {
3232
TTestEnv env(1, 1);
3333
auto& runtime = *env.GetServer().GetRuntime();
34-
auto tableInfo = CreateServerlessDatabaseColumnTables(env, 1, 1)[0];
34+
auto databaseInfo = CreateServerlessDatabaseColumnTables(env, 1, 1);
35+
const auto& tableInfo = databaseInfo.Tables[0];
3536

3637
Analyze(runtime, tableInfo.SaTabletId, {tableInfo.PathId});
3738
}
3839

3940
Y_UNIT_TEST(AnalyzeAnalyzeOneColumnTableSpecificColumns) {
4041
TTestEnv env(1, 1);
4142
auto& runtime = *env.GetServer().GetRuntime();
42-
auto tableInfo = CreateDatabaseColumnTables(env, 1, 1)[0];
43+
const auto databaseInfo = CreateDatabaseColumnTables(env, 1, 1);
44+
const auto& tableInfo = databaseInfo.Tables[0];
4345

4446
Analyze(runtime, tableInfo.SaTabletId, {{tableInfo.PathId, {1, 2}}});
4547
}
4648

4749
Y_UNIT_TEST(AnalyzeTwoColumnTables) {
4850
TTestEnv env(1, 1);
4951
auto& runtime = *env.GetServer().GetRuntime();
50-
auto tableInfos = CreateDatabaseColumnTables(env, 2, 1);
52+
auto databaseInfo = CreateDatabaseColumnTables(env, 2, 1);
53+
const auto& tableInfos = databaseInfo.Tables;
5154

5255
Analyze(runtime, tableInfos[0].SaTabletId, {tableInfos[0].PathId, tableInfos[1].PathId});
5356
}
@@ -58,11 +61,10 @@ Y_UNIT_TEST_SUITE(AnalyzeColumnshard) {
5861
auto sender = runtime.AllocateEdgeActor();
5962

6063
TBlockEvents<TEvStatistics::TEvAnalyzeTableResponse> block(runtime);
61-
62-
auto tableInfo = CreateDatabaseColumnTables(env, 1, 1)[0];
64+
const auto databaseInfo = CreateDatabaseColumnTables(env, 1, 1);
65+
const auto& tableInfo = databaseInfo.Tables[0];
6366

6467
const TString operationId = "operationId";
65-
6668
AnalyzeStatus(runtime, sender, tableInfo.SaTabletId, operationId, NKikimrStat::TEvAnalyzeStatusResponse::STATUS_NO_OPERATION);
6769

6870
auto analyzeRequest = MakeAnalyzeRequest({{tableInfo.PathId, {1, 2}}}, operationId);
@@ -93,7 +95,8 @@ Y_UNIT_TEST_SUITE(AnalyzeColumnshard) {
9395
Y_UNIT_TEST(AnalyzeSameOperationId) {
9496
TTestEnv env(1, 1);
9597
auto& runtime = *env.GetServer().GetRuntime();
96-
auto tableInfo = CreateDatabaseColumnTables(env, 1, 1)[0];
98+
const auto databaseInfo = CreateDatabaseColumnTables(env, 1, 1);
99+
const auto& tableInfo = databaseInfo.Tables[0];
97100
auto sender = runtime.AllocateEdgeActor();
98101
const TString operationId = "operationId";
99102

@@ -123,7 +126,8 @@ Y_UNIT_TEST_SUITE(AnalyzeColumnshard) {
123126
Y_UNIT_TEST(AnalyzeMultiOperationId) {
124127
TTestEnv env(1, 1);
125128
auto& runtime = *env.GetServer().GetRuntime();
126-
auto tableInfo = CreateDatabaseColumnTables(env, 1, 1)[0];
129+
const auto databaseInfo = CreateDatabaseColumnTables(env, 1, 1);
130+
const auto& tableInfo = databaseInfo.Tables[0];
127131
auto sender = runtime.AllocateEdgeActor();
128132

129133
auto GetOperationId = [] (size_t i) { return TStringBuilder() << "operationId" << i; };
@@ -154,7 +158,8 @@ Y_UNIT_TEST_SUITE(AnalyzeColumnshard) {
154158
Y_UNIT_TEST(AnalyzeRebootSaBeforeAnalyzeTableResponse) {
155159
TTestEnv env(1, 1);
156160
auto& runtime = *env.GetServer().GetRuntime();
157-
auto tableInfo = CreateDatabaseColumnTables(env, 1, 1)[0];
161+
const auto databaseInfo = CreateDatabaseColumnTables(env, 1, 1);
162+
const auto& tableInfo = databaseInfo.Tables[0];
158163
auto sender = runtime.AllocateEdgeActor();
159164

160165
bool eventSeen = false;
@@ -179,7 +184,8 @@ Y_UNIT_TEST_SUITE(AnalyzeColumnshard) {
179184
Y_UNIT_TEST(AnalyzeRebootSaBeforeResolve) {
180185
TTestEnv env(1, 1);
181186
auto& runtime = *env.GetServer().GetRuntime();
182-
auto tableInfo = CreateDatabaseColumnTables(env, 1, 1)[0];
187+
const auto databaseInfo = CreateDatabaseColumnTables(env, 1, 1);
188+
const auto& tableInfo = databaseInfo.Tables[0];
183189
auto sender = runtime.AllocateEdgeActor();
184190

185191
TBlockEvents<TEvTxProxySchemeCache::TEvResolveKeySetResult> block(runtime);
@@ -207,7 +213,8 @@ Y_UNIT_TEST_SUITE(AnalyzeColumnshard) {
207213
Y_UNIT_TEST(AnalyzeRebootSaBeforeReqDistribution) {
208214
TTestEnv env(1, 1);
209215
auto& runtime = *env.GetServer().GetRuntime();
210-
auto tableInfo = CreateDatabaseColumnTables(env, 1, 1)[0];
216+
const auto databaseInfo = CreateDatabaseColumnTables(env, 1, 1);
217+
const auto& tableInfo = databaseInfo.Tables[0];
211218
auto sender = runtime.AllocateEdgeActor();
212219

213220
bool eventSeen = false;
@@ -232,7 +239,8 @@ Y_UNIT_TEST_SUITE(AnalyzeColumnshard) {
232239
Y_UNIT_TEST(AnalyzeRebootSaBeforeAggregate) {
233240
TTestEnv env(1, 1);
234241
auto& runtime = *env.GetServer().GetRuntime();
235-
auto tableInfo = CreateDatabaseColumnTables(env, 1, 1)[0];
242+
const auto databaseInfo = CreateDatabaseColumnTables(env, 1, 1);
243+
const auto& tableInfo = databaseInfo.Tables[0];
236244
auto sender = runtime.AllocateEdgeActor();
237245

238246
bool eventSeen = false;
@@ -257,7 +265,8 @@ Y_UNIT_TEST_SUITE(AnalyzeColumnshard) {
257265
Y_UNIT_TEST(AnalyzeRebootSaBeforeSave) {
258266
TTestEnv env(1, 1);
259267
auto& runtime = *env.GetServer().GetRuntime();
260-
auto tableInfo = CreateDatabaseColumnTables(env, 1, 1)[0];
268+
const auto databaseInfo = CreateDatabaseColumnTables(env, 1, 1);
269+
const auto& tableInfo = databaseInfo.Tables[0];
261270
auto sender = runtime.AllocateEdgeActor();
262271

263272
bool eventSeen = false;
@@ -282,7 +291,8 @@ Y_UNIT_TEST_SUITE(AnalyzeColumnshard) {
282291
Y_UNIT_TEST(AnalyzeRebootSaInAggregate) {
283292
TTestEnv env(1, 1);
284293
auto& runtime = *env.GetServer().GetRuntime();
285-
auto tableInfo = CreateDatabaseColumnTables(env, 1, 10)[0];
294+
const auto databaseInfo = CreateDatabaseColumnTables(env, 1, 10);
295+
const auto& tableInfo = databaseInfo.Tables[0];
286296
auto sender = runtime.AllocateEdgeActor();
287297

288298
int observerCount = 0;
@@ -308,7 +318,8 @@ Y_UNIT_TEST_SUITE(AnalyzeColumnshard) {
308318
Y_UNIT_TEST(AnalyzeRebootColumnShard) {
309319
TTestEnv env(1, 1);
310320
auto& runtime = *env.GetServer().GetRuntime();
311-
auto tableInfo = CreateDatabaseColumnTables(env, 1, 1)[0];
321+
const auto databaseInfo = CreateDatabaseColumnTables(env, 1, 1);
322+
const auto& tableInfo = databaseInfo.Tables[0];
312323
auto sender = runtime.AllocateEdgeActor();
313324

314325
TBlockEvents<TEvStatistics::TEvAnalyzeTableResponse> block(runtime);
@@ -326,7 +337,8 @@ Y_UNIT_TEST_SUITE(AnalyzeColumnshard) {
326337
Y_UNIT_TEST(AnalyzeDeadline) {
327338
TTestEnv env(1, 1);
328339
auto& runtime = *env.GetServer().GetRuntime();
329-
auto tableInfo = CreateDatabaseColumnTables(env, 1, 1)[0];
340+
const auto databaseInfo = CreateDatabaseColumnTables(env, 1, 1);
341+
const auto& tableInfo = databaseInfo.Tables[0];
330342
auto sender = runtime.AllocateEdgeActor();
331343

332344
TBlockEvents<TEvStatistics::TEvAnalyzeTableResponse> block(runtime);

ydb/core/statistics/aggregator/ut/ut_analyze_datashard.cpp

Lines changed: 10 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -7,56 +7,35 @@
77
#include <ydb/core/statistics/events.h>
88
#include <ydb/core/statistics/service/service.h>
99

10-
#include <thread>
11-
1210
namespace NKikimr {
1311
namespace NStat {
1412

15-
namespace {
16-
17-
18-
} // namespace
19-
2013
Y_UNIT_TEST_SUITE(AnalyzeDatashard) {
2114

2215
Y_UNIT_TEST(AnalyzeOneTable) {
2316
TTestEnv env(1, 1);
24-
auto init = [&] () {
25-
CreateDatabase(env, "Database");
26-
CreateUniformTable(env, "Database", "Table");
27-
};
28-
std::thread initThread(init);
2917

3018
auto& runtime = *env.GetServer().GetRuntime();
31-
runtime.SimulateSleep(TDuration::Seconds(5));
32-
initThread.join();
19+
20+
CreateDatabase(env, "Database");
21+
CreateUniformTable(env, "Database", "Table");
3322

3423
ui64 saTabletId;
3524
auto pathId = ResolvePathId(runtime, "/Root/Database/Table", nullptr, &saTabletId);
3625

37-
runtime.SimulateSleep(TDuration::Seconds(30));
38-
3926
Analyze(runtime, saTabletId, {{pathId}});
4027

4128
ValidateCountMinDatashardAbsense(runtime, pathId);
4229
}
4330

4431
Y_UNIT_TEST(AnalyzeTwoTables) {
4532
TTestEnv env(1, 1);
46-
auto init = [&] () {
47-
CreateDatabase(env, "Database");
48-
CreateUniformTable(env, "Database", "Table1");
49-
CreateUniformTable(env, "Database", "Table2");
50-
};
51-
// TODO remove thread
52-
std::thread initThread(init);
5333

5434
auto& runtime = *env.GetServer().GetRuntime();
55-
runtime.SimulateSleep(TDuration::Seconds(5));
56-
initThread.join();
5735

58-
// TODO remove sleep
59-
runtime.SimulateSleep(TDuration::Seconds(30));
36+
CreateDatabase(env, "Database");
37+
CreateUniformTable(env, "Database", "Table1");
38+
CreateUniformTable(env, "Database", "Table2");
6039

6140
ui64 saTabletId1;
6241
auto pathId1 = ResolvePathId(runtime, "/Root/Database/Table1", nullptr, &saTabletId1);
@@ -68,34 +47,21 @@ Y_UNIT_TEST_SUITE(AnalyzeDatashard) {
6847
ValidateCountMinDatashardAbsense(runtime, pathId2);
6948
}
7049

71-
7250
Y_UNIT_TEST(DropTableNavigateError) {
7351
TTestEnv env(1, 1);
74-
auto init = [&] () {
75-
CreateDatabase(env, "Database");
76-
CreateUniformTable(env, "Database", "Table");
77-
};
78-
std::thread initThread(init);
7952

8053
auto& runtime = *env.GetServer().GetRuntime();
81-
runtime.SimulateSleep(TDuration::Seconds(5));
82-
initThread.join();
54+
55+
CreateDatabase(env, "Database");
56+
CreateUniformTable(env, "Database", "Table");
8357

8458
ui64 saTabletId = 0;
8559
auto pathId = ResolvePathId(runtime, "/Root/Database/Table", nullptr, &saTabletId);
8660

87-
auto init2 = [&] () {
88-
DropTable(env, "Database", "Table");
89-
};
90-
std::thread init2Thread(init2);
91-
92-
runtime.SimulateSleep(TDuration::Seconds(5));
93-
init2Thread.join();
61+
DropTable(env, "Database", "Table");
9462

9563
Analyze(runtime, saTabletId, {pathId});
9664

97-
runtime.SimulateSleep(TDuration::Seconds(10));
98-
9965
ValidateCountMinDatashardAbsense(runtime, pathId);
10066
}
10167
}

0 commit comments

Comments
 (0)