|
@@ -5569,6 +5569,53 @@ Y_UNIT_TEST_SUITE(TFlatTableExecutorBTreeIndex) {
|
|
|
UNIT_ASSERT_VALUES_EQUAL(failedAttempts, 288);
|
|
|
}
|
|
|
|
|
|
+ Y_UNIT_TEST(UseBtreeIndex_True_Generations) {
|
|
|
+ TMyEnvBase env;
|
|
|
+ TRowsModel rows;
|
|
|
+
|
|
|
+ auto &appData = env->GetAppData();
|
|
|
+ appData.FeatureFlags.SetEnableLocalDBBtreeIndex(true);
|
|
|
+ auto counters = MakeIntrusive<TSharedPageCacheCounters>(env->GetDynamicCounters());
|
|
|
+ int readRows = 0, failedAttempts = 0;
|
|
|
+
|
|
|
+ env.FireDummyTablet(ui32(NFake::TDummy::EFlg::Comp));
|
|
|
+
|
|
|
+ auto policy = MakeIntrusive<TCompactionPolicy>();
|
|
|
+ policy->MinBTreeIndexNodeSize = 128;
|
|
|
+ policy->Generations.push_back({100 * 1024, 2, 2, 200 * 1024, NLocalDb::LegacyQueueIdToTaskName(1), false});
|
|
|
+ for (auto& gen : policy->Generations) {
|
|
|
+ gen.ExtraCompactionPercent = 0;
|
|
|
+ gen.ExtraCompactionMinSize = 0;
|
|
|
+ gen.ExtraCompactionExpPercent = 0;
|
|
|
+ gen.ExtraCompactionExpMaxSize = 0;
|
|
|
+ gen.UpliftPartSize = 0;
|
|
|
+ }
|
|
|
+ env.SendSync(rows.MakeScheme(std::move(policy)));
|
|
|
+
|
|
|
+ env.SendSync(rows.VersionTo(TRowVersion(1, 10)).RowTo(0).MakeRows(1000, 950));
|
|
|
+ env.SendSync(rows.VersionTo(TRowVersion(2, 20)).RowTo(0).MakeRows(1000, 950));
|
|
|
+
|
|
|
+ env.SendSync(new NFake::TEvCompact(TRowsModel::TableId));
|
|
|
+ env.WaitFor<NFake::TEvCompacted>();
|
|
|
+
|
|
|
+ // gen 0 data pages are always kept in shared cache
|
|
|
+ // b-tree index pages are always kept in shared cache
|
|
|
+ UNIT_ASSERT_VALUES_EQUAL(counters->ActivePages->Val(), 48);
|
|
|
+
|
|
|
+ env.SendSync(new NFake::TEvExecute{ new TTxFullScan(readRows, failedAttempts) });
|
|
|
+ UNIT_ASSERT_VALUES_EQUAL(readRows, 1000);
|
|
|
+ UNIT_ASSERT_VALUES_EQUAL(failedAttempts, 286);
|
|
|
+
|
|
|
+ // restart tablet
|
|
|
+ env.SendSync(new TEvents::TEvPoison, false, true);
|
|
|
+ env.FireDummyTablet(ui32(NFake::TDummy::EFlg::Comp));
|
|
|
+
|
|
|
+ // after restart we have no pages in private cache
|
|
|
+ env.SendSync(new NFake::TEvExecute{ new TTxFullScan(readRows, failedAttempts) }, true);
|
|
|
+ UNIT_ASSERT_VALUES_EQUAL(readRows, 1000);
|
|
|
+ UNIT_ASSERT_VALUES_EQUAL(failedAttempts, 332);
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
|
|
|
} // namespace NTabletFlatExecutor
|