Skip to content

Commit d9cdc77

Browse files
unify portion change operations (#13157)
1 parent 8bd8b57 commit d9cdc77

File tree

37 files changed

+419
-270
lines changed

37 files changed

+419
-270
lines changed

ydb/core/formats/arrow/special_keys.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,9 @@ class TSpecialKeys {
3737

3838
TString SerializePayloadToString() const;
3939
TString SerializeFullToString() const;
40+
TString DebugString() const {
41+
return Data->ToString();
42+
}
4043
ui64 GetMemorySize() const;
4144
};
4245

ydb/core/kqp/ut/olap/blobs_sharing_ut.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -272,7 +272,6 @@ Y_UNIT_TEST_SUITE(KqpOlapBlobsSharing) {
272272
, TableClient(Kikimr.GetTableClient()) {
273273
CSController->SetOverridePeriodicWakeupActivationPeriod(TDuration::Seconds(1));
274274
CSController->SetOverrideLagForCompactionBeforeTierings(TDuration::Seconds(1));
275-
CSController->SetOverrideReduceMemoryIntervalLimit(1LLU << 30);
276275
}
277276

278277
void WaitResharding(const TString& hint = "") {

ydb/core/kqp/ut/olap/indexes_ut.cpp

Lines changed: 50 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ Y_UNIT_TEST_SUITE(KqpOlapIndexes) {
2121
auto csController = NYDBTest::TControllers::RegisterCSControllerGuard<NYDBTest::NColumnShard::TController>();
2222
csController->SetOverridePeriodicWakeupActivationPeriod(TDuration::Seconds(1));
2323
csController->SetOverrideLagForCompactionBeforeTierings(TDuration::Seconds(1));
24-
csController->SetOverrideReduceMemoryIntervalLimit(1LLU << 30);
2524
csController->SetOverrideMemoryLimitForPortionReading(1e+10);
2625
csController->SetOverrideBlobSplitSettings(NOlap::NSplitter::TSplitSettings());
2726

@@ -103,7 +102,6 @@ Y_UNIT_TEST_SUITE(KqpOlapIndexes) {
103102
auto csController = NYDBTest::TControllers::RegisterCSControllerGuard<NYDBTest::NColumnShard::TController>();
104103
csController->SetOverridePeriodicWakeupActivationPeriod(TDuration::Seconds(1));
105104
csController->SetOverrideLagForCompactionBeforeTierings(TDuration::Seconds(1));
106-
csController->SetOverrideReduceMemoryIntervalLimit(1LLU << 30);
107105
csController->SetOverrideBlobSplitSettings(NOlap::NSplitter::TSplitSettings());
108106

109107
TLocalHelper(kikimr).CreateTestOlapTableWithoutStore();
@@ -341,20 +339,36 @@ Y_UNIT_TEST_SUITE(KqpOlapIndexes) {
341339
public:
342340
TTestIndexesScenario& Initialize() {
343341
Settings = TKikimrSettings().SetWithSampleTables(false);
342+
Settings.AppConfig.MutableColumnShardConfig()->SetReaderClassName("SIMPLE");
344343
Kikimr = std::make_unique<TKikimrRunner>(Settings);
345344
return *this;
346345
}
347346

348347
void Execute() {
349348
auto csController = NYDBTest::TControllers::RegisterCSControllerGuard<NOlap::TWaitCompactionController>();
350-
csController->SetOverrideReduceMemoryIntervalLimit(1LLU << 30);
351349
csController->SetOverrideMemoryLimitForPortionReading(1e+10);
352350
csController->SetOverrideBlobSplitSettings(NOlap::NSplitter::TSplitSettings());
353351
TLocalHelper(*Kikimr).CreateTestOlapTable();
354352
auto tableClient = Kikimr->GetTableClient();
355353

356-
// Tests::NCommon::TLoggerInit(kikimr).Initialize();
354+
/*
355+
Tests::NCommon::TLoggerInit(*Kikimr)
356+
.SetComponents({ NKikimrServices::TX_COLUMNSHARD }, "CS")
357+
.SetPriority(NActors::NLog::PRI_DEBUG)
358+
.Initialize();
359+
*/
357360

361+
{
362+
auto alterQuery =
363+
TStringBuilder() <<
364+
R"(ALTER OBJECT `/Root/olapStore` (TYPE TABLESTORE) SET (ACTION=UPSERT_OPTIONS, `COMPACTION_PLANNER.CLASS_NAME`=`lc-buckets`, `COMPACTION_PLANNER.FEATURES`=`
365+
{"levels" : [{"class_name" : "Zero", "portions_live_duration" : "10s", "expected_blobs_size" : 2048000, "portions_count_available" : 1},
366+
{"class_name" : "Zero"}]}`);
367+
)";
368+
auto session = tableClient.CreateSession().GetValueSync().GetSession();
369+
auto alterResult = session.ExecuteSchemeQuery(alterQuery).GetValueSync();
370+
UNIT_ASSERT_VALUES_EQUAL_C(alterResult.GetStatus(), NYdb::EStatus::SUCCESS, alterResult.GetIssues().ToString());
371+
}
358372
{
359373
auto alterQuery =
360374
TStringBuilder() << Sprintf(
@@ -391,15 +405,13 @@ Y_UNIT_TEST_SUITE(KqpOlapIndexes) {
391405
std::vector<ui32> levels;
392406

393407
{
394-
for (ui32 i = 0; i < 2; ++i) {
395-
WriteTestData(*Kikimr, "/Root/olapStore/olapTable", 1000000, 300000000, 10000);
396-
WriteTestData(*Kikimr, "/Root/olapStore/olapTable", 1100000, 300100000, 10000);
397-
WriteTestData(*Kikimr, "/Root/olapStore/olapTable", 1200000, 300200000, 10000);
398-
WriteTestData(*Kikimr, "/Root/olapStore/olapTable", 1300000, 300300000, 10000);
399-
WriteTestData(*Kikimr, "/Root/olapStore/olapTable", 1400000, 300400000, 10000);
400-
WriteTestData(*Kikimr, "/Root/olapStore/olapTable", 2000000, 200000000, 70000);
401-
WriteTestData(*Kikimr, "/Root/olapStore/olapTable", 3000000, 100000000, 110000);
402-
}
408+
WriteTestData(*Kikimr, "/Root/olapStore/olapTable", 1000000, 300000000, 10000);
409+
WriteTestData(*Kikimr, "/Root/olapStore/olapTable", 1100000, 300100000, 10000);
410+
WriteTestData(*Kikimr, "/Root/olapStore/olapTable", 1200000, 300200000, 10000);
411+
WriteTestData(*Kikimr, "/Root/olapStore/olapTable", 1300000, 300300000, 10000);
412+
WriteTestData(*Kikimr, "/Root/olapStore/olapTable", 1400000, 300400000, 10000);
413+
WriteTestData(*Kikimr, "/Root/olapStore/olapTable", 2000000, 200000000, 70000);
414+
WriteTestData(*Kikimr, "/Root/olapStore/olapTable", 3000000, 100000000, 110000);
403415

404416
const auto filler = [&](const ui32 startRes, const ui32 startUid, const ui32 count) {
405417
for (ui32 i = 0; i < count; ++i) {
@@ -422,39 +434,33 @@ Y_UNIT_TEST_SUITE(KqpOlapIndexes) {
422434

423435
AFL_VERIFY(csController->GetIndexesSkippingOnSelect().Val() == 0);
424436
AFL_VERIFY(csController->GetIndexesApprovedOnSelect().Val() == 0);
425-
TInstant start = Now();
426-
ui32 compactionsStart = csController->GetCompactionStartedCounter().Val();
427-
while (Now() - start < TDuration::Seconds(10)) {
428-
if (compactionsStart != csController->GetCompactionStartedCounter().Val()) {
429-
compactionsStart = csController->GetCompactionStartedCounter().Val();
430-
start = Now();
431-
}
432-
Cerr << "WAIT_COMPACTION: " << csController->GetCompactionStartedCounter().Val() << Endl;
433-
Sleep(TDuration::Seconds(1));
434-
}
437+
csController->WaitCompactions(TDuration::Seconds(25));
435438
// important checker for control compactions (<=21) and control indexes constructed (>=21)
436-
AFL_VERIFY(csController->GetCompactionStartedCounter().Val() == 21)("count", csController->GetCompactionStartedCounter().Val());
439+
AFL_VERIFY(csController->GetCompactionStartedCounter().Val() == 3)("count", csController->GetCompactionStartedCounter().Val());
437440

438441
{
439442
ExecuteSQL(R"(SELECT COUNT(*)
440443
FROM `/Root/olapStore/olapTable`
441-
WHERE resource_id LIKE '%110a151' AND resource_id LIKE '110a%' AND resource_id LIKE '%dd%')", "[[0u;]]");
444+
WHERE resource_id LIKE '%110a151' AND resource_id LIKE '110a%' AND resource_id LIKE '%dd%')",
445+
"[[0u;]]");
442446
AFL_VERIFY(!csController->GetIndexesApprovedOnSelect().Val());
443447
AFL_VERIFY(csController->GetIndexesSkippingOnSelect().Val());
444448
}
445449
{
446450
ResetZeroLevel(csController);
447451
ExecuteSQL(R"(SELECT COUNT(*)
448452
FROM `/Root/olapStore/olapTable`
449-
WHERE resource_id LIKE '%110a151%')", "[[0u;]]");
453+
WHERE resource_id LIKE '%110a151%')",
454+
"[[0u;]]");
450455
AFL_VERIFY(!csController->GetIndexesApprovedOnSelect().Val());
451-
AFL_VERIFY(csController->GetIndexesSkippingOnSelect().Val() - SkipStart);
456+
AFL_VERIFY(csController->GetIndexesSkippingOnSelect().Val() - SkipStart == 3);
452457
}
453458
{
454459
ResetZeroLevel(csController);
455460
ExecuteSQL(R"(SELECT COUNT(*)
456461
FROM `/Root/olapStore/olapTable`
457-
WHERE ((resource_id = '2' AND level = 222222) OR (resource_id = '1' AND level = 111111) OR (resource_id LIKE '%11dd%')) AND uid = '222')", "[[0u;]]");
462+
WHERE ((resource_id = '2' AND level = 222222) OR (resource_id = '1' AND level = 111111) OR (resource_id LIKE '%11dd%')) AND uid = '222')",
463+
"[[0u;]]");
458464

459465
AFL_VERIFY(csController->GetIndexesSkippedNoData().Val() == 0)("val", csController->GetIndexesSkippedNoData().Val());
460466
AFL_VERIFY(csController->GetIndexesApprovedOnSelect().Val() - ApproveStart < csController->GetIndexesSkippingOnSelect().Val() - SkipStart);
@@ -476,7 +482,7 @@ Y_UNIT_TEST_SUITE(KqpOlapIndexes) {
476482
};
477483
ExecuteSQL(query(resourceIds[idx], uids[idx], levels[idx]), "[[1u;]]");
478484
}
479-
AFL_VERIFY((csController->GetIndexesApprovedOnSelect().Val() - ApproveStart) * 5 < csController->GetIndexesSkippingOnSelect().Val() - SkipStart)
485+
AFL_VERIFY((csController->GetIndexesApprovedOnSelect().Val() - ApproveStart) < csController->GetIndexesSkippingOnSelect().Val() - SkipStart)
480486
("approved", csController->GetIndexesApprovedOnSelect().Val() - ApproveStart)(
481487
"skipped", csController->GetIndexesSkippingOnSelect().Val() - SkipStart);
482488
}
@@ -485,53 +491,54 @@ Y_UNIT_TEST_SUITE(KqpOlapIndexes) {
485491
ui32 requestsCount = 300;
486492
for (ui32 i = 0; i < requestsCount; ++i) {
487493
const ui32 idx = RandomNumber<ui32>(uids.size());
488-
const auto query = [](const TString& res, const TString& /* uid */, const ui32 /* level */) {
494+
const auto query = [](const TString& res) {
489495
TStringBuilder sb;
490496
sb << "SELECT COUNT(*) FROM `/Root/olapStore/olapTable`" << Endl;
491497
sb << "WHERE" << Endl;
492498
sb << "resource_id LIKE '%" << res << "%'" << Endl;
493499
return sb;
494500
};
495-
ExecuteSQL(query(resourceIds[idx], uids[idx], levels[idx]), "[[1u;]]");
501+
ExecuteSQL(query(resourceIds[idx]), "[[1u;]]");
496502
}
497-
AFL_VERIFY(csController->GetIndexesSkippingOnSelect().Val() - SkipStart)("approved", csController->GetIndexesApprovedOnSelect().Val() - ApproveStart)(
498-
"skipped", csController->GetIndexesSkippingOnSelect().Val() - SkipStart);
503+
// AFL_VERIFY(csController->GetIndexesSkippingOnSelect().Val() - SkipStart)(
504+
// "approved", csController->GetIndexesApprovedOnSelect().Val() - ApproveStart)(
505+
// "skipped", csController->GetIndexesSkippingOnSelect().Val() - SkipStart);
499506
}
500507
{
501508
ResetZeroLevel(csController);
502509
ui32 requestsCount = 300;
503510
for (ui32 i = 0; i < requestsCount; ++i) {
504511
const ui32 idx = RandomNumber<ui32>(uids.size());
505-
const auto query = [](const TString& res, const TString& /* uid */, const ui32 /* level */) {
512+
const auto query = [](const TString& res) {
506513
TStringBuilder sb;
507514
sb << "SELECT COUNT(*) FROM `/Root/olapStore/olapTable`" << Endl;
508515
sb << "WHERE" << Endl;
509516
sb << "resource_id LIKE '" << res << "%'" << Endl;
510517
return sb;
511518
};
512-
ExecuteSQL(query(resourceIds[idx], uids[idx], levels[idx]), "[[1u;]]");
519+
ExecuteSQL(query(resourceIds[idx]), "[[1u;]]");
513520
}
514-
AFL_VERIFY(csController->GetIndexesSkippingOnSelect().Val() - SkipStart)(
515-
"approved", csController->GetIndexesApprovedOnSelect().Val() - ApproveStart)(
516-
"skipped", csController->GetIndexesSkippingOnSelect().Val() - SkipStart);
521+
// AFL_VERIFY(csController->GetIndexesSkippingOnSelect().Val() - SkipStart)(
522+
// "approved", csController->GetIndexesApprovedOnSelect().Val() - ApproveStart)(
523+
// "skipped", csController->GetIndexesSkippingOnSelect().Val() - SkipStart);
517524
}
518525
{
519526
ResetZeroLevel(csController);
520527
ui32 requestsCount = 300;
521528
for (ui32 i = 0; i < requestsCount; ++i) {
522529
const ui32 idx = RandomNumber<ui32>(uids.size());
523-
const auto query = [](const TString& res, const TString& /* uid */, const ui32 /* level */) {
530+
const auto query = [](const TString& res) {
524531
TStringBuilder sb;
525532
sb << "SELECT COUNT(*) FROM `/Root/olapStore/olapTable`" << Endl;
526533
sb << "WHERE" << Endl;
527534
sb << "resource_id LIKE '%" << res << "'" << Endl;
528535
return sb;
529536
};
530-
ExecuteSQL(query(resourceIds[idx], uids[idx], levels[idx]), "[[1u;]]");
537+
ExecuteSQL(query(resourceIds[idx]), "[[1u;]]");
531538
}
532-
AFL_VERIFY(csController->GetIndexesSkippingOnSelect().Val() - SkipStart)(
533-
"approved", csController->GetIndexesApprovedOnSelect().Val() - ApproveStart)(
534-
"skipped", csController->GetIndexesSkippingOnSelect().Val() - SkipStart);
539+
// AFL_VERIFY(csController->GetIndexesSkippingOnSelect().Val() - SkipStart)(
540+
// "approved", csController->GetIndexesApprovedOnSelect().Val() - ApproveStart)(
541+
// "skipped", csController->GetIndexesSkippingOnSelect().Val() - SkipStart);
535542
}
536543
}
537544
};

ydb/core/kqp/ut/olap/kqp_olap_ut.cpp

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2649,7 +2649,6 @@ Y_UNIT_TEST_SUITE(KqpOlap) {
26492649
// Tests::NCommon::TLoggerInit(kikimr).Initialize();
26502650

26512651
auto csController = NYDBTest::TControllers::RegisterCSControllerGuard<NYDBTest::NColumnShard::TController>();
2652-
csController->SetOverrideReduceMemoryIntervalLimit(1LLU << 30);
26532652

26542653
{
26552654
auto alterQuery = TStringBuilder() <<
@@ -2734,7 +2733,6 @@ Y_UNIT_TEST_SUITE(KqpOlap) {
27342733
// Tests::NCommon::TLoggerInit(kikimr).Initialize();
27352734

27362735
auto csController = NYDBTest::TControllers::RegisterCSControllerGuard<NYDBTest::NColumnShard::TController>();
2737-
csController->SetOverrideReduceMemoryIntervalLimit(1LLU << 30);
27382736

27392737
WriteTestData(kikimr, "/Root/olapStore/olapTable", 1000000, 300000000, 10000);
27402738
WriteTestData(kikimr, "/Root/olapStore/olapTable", 1100000, 300100000, 10000);
@@ -2790,7 +2788,6 @@ Y_UNIT_TEST_SUITE(KqpOlap) {
27902788
auto csController = NYDBTest::TControllers::RegisterCSControllerGuard<NYDBTest::NColumnShard::TController>();
27912789
csController->SetOverridePeriodicWakeupActivationPeriod(TDuration::Seconds(1));
27922790
csController->SetOverrideLagForCompactionBeforeTierings(TDuration::Seconds(1));
2793-
csController->SetOverrideReduceMemoryIntervalLimit(1LLU << 30);
27942791
csController->DisableBackground(NKikimr::NYDBTest::ICSController::EBackground::Indexation);
27952792

27962793
testHelper.CreateTestOlapTable();

ydb/core/kqp/ut/olap/sparsed_ut.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -310,7 +310,6 @@ Y_UNIT_TEST_SUITE(KqpOlapSparsed) {
310310
auto csController = NYDBTest::TControllers::RegisterCSControllerGuard<NYDBTest::NColumnShard::TController>();
311311
csController->SetOverridePeriodicWakeupActivationPeriod(TDuration::Seconds(1));
312312
csController->SetOverrideLagForCompactionBeforeTierings(TDuration::Seconds(1));
313-
csController->SetOverrideReduceMemoryIntervalLimit(1LLU << 30);
314313

315314
TLocalHelper helper(kikimr);
316315
helper.SetOptionalStorageId(NOlap::NBlobOperations::TGlobal::DefaultStorageId);

ydb/core/protos/flat_scheme_op.proto

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -484,6 +484,7 @@ message TCompactionLevelConstructorContainer {
484484
message TZeroLevel {
485485
optional uint32 PortionsLiveDurationSeconds = 1;
486486
optional uint64 ExpectedBlobsSize = 2;
487+
optional uint64 PortionsCountAvailable = 3;
487488
}
488489

489490
oneof Implementation {

ydb/core/statistics/ut_common/ut_common.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,6 @@ TTestEnv::TTestEnv(ui32 staticNodes, ui32 dynamicNodes, bool useRealThreads)
5858

5959
CSController->SetOverridePeriodicWakeupActivationPeriod(TDuration::Seconds(1));
6060
CSController->SetOverrideLagForCompactionBeforeTierings(TDuration::Seconds(1));
61-
CSController->SetOverrideReduceMemoryIntervalLimit(1LLU << 30);
6261

6362
Server->GetRuntime()->SetLogPriority(NKikimrServices::STATISTICS, NActors::NLog::PRI_DEBUG);
6463
}

ydb/core/tx/columnshard/columnshard_impl.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@ class TChangesWithAppend;
5151
class TCompactColumnEngineChanges;
5252
class TInsertColumnEngineChanges;
5353
class TStoragesManager;
54+
class TRemovePortionsChange;
55+
class TMovePortionsChange;
5456

5557
namespace NReader {
5658
class TTxScan;
@@ -206,6 +208,8 @@ class TColumnShard: public TActor<TColumnShard>, public NTabletFlatExecutor::TTa
206208
friend class NOlap::NReader::TTxInternalScan;
207209
friend class NOlap::NReader::NPlain::TIndexScannerConstructor;
208210
friend class NOlap::NReader::NSimple::TIndexScannerConstructor;
211+
friend class NOlap::TRemovePortionsChange;
212+
friend class NOlap::TMovePortionsChange;
209213

210214
class TStoragesManager;
211215
friend class TTxController;

ydb/core/tx/columnshard/common/limits.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,6 @@ class TGlobalLimits {
1111
static constexpr inline ui64 ScanMemoryLimit = 3ULL << 30;
1212

1313
static constexpr inline ui64 DefaultBlobsMemoryIntervalLimit = ScanMemoryLimit;
14-
static constexpr inline ui64 DefaultRejectMemoryIntervalLimit = ScanMemoryLimit;
15-
static constexpr inline ui64 DefaultReduceMemoryIntervalLimit = 0.8 * ScanMemoryLimit;
1614
static constexpr inline ui64 DefaultReadSequentiallyBufferSize = ((ui64)8) << 20;
1715
};
1816
}

0 commit comments

Comments
 (0)