Skip to content

Commit d4d9201

Browse files
authored
Merge 2af229a into 1067562
2 parents 1067562 + 2af229a commit d4d9201

File tree

3 files changed

+118
-34
lines changed

3 files changed

+118
-34
lines changed

ydb/core/tablet_flat/flat_sausagecache.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -285,6 +285,7 @@ const TSharedData* TPrivatePageCache::Lookup(TPageId pageId, TInfo *info) {
285285
}
286286

287287
if (page->Empty()) {
288+
Y_DEBUG_ABORT_UNLESS(info->GetPageType(page->Id) != EPage::FlatIndex, "Flat index pages should have been sticked and preloaded");
288289
ToLoad.PushBack(page);
289290
Stats.CurrentCacheMisses++;
290291
}

ydb/core/tablet_flat/shared_sausagecache.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1140,10 +1140,11 @@ class TSharedPageCache : public TActorBootstrapped<TSharedPageCache> {
11401140
LOG_NOTICE_S(ctx, NKikimrServices::TABLET_SAUSAGECACHE, "Switch replacement policy "
11411141
<< "from " << currentReplacementPolicy << " to " << Config.GetReplacementPolicy());
11421142
Evict(Cache.Switch(CreateCache(), Counters.ReplacementPolicySize(Config.GetReplacementPolicy())));
1143-
DoGC();
11441143
LOG_NOTICE_S(ctx, NKikimrServices::TABLET_SAUSAGECACHE, "Switch replacement policy done "
11451144
<< " from " << currentReplacementPolicy << " to " << Config.GetReplacementPolicy());
11461145
}
1146+
1147+
DoGC();
11471148
}
11481149

11491150
inline ui64 GetStatAllBytes() const {

ydb/core/tablet_flat/ut/ut_shared_sausagecache.cpp

Lines changed: 115 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -126,16 +126,16 @@ void WaitEvent(TMyEnvBase& env, ui32 eventType, ui32 requiredCount = 1) {
126126
env->DispatchEvents(options);
127127
}
128128

129-
void RestartAndClearCache(TMyEnvBase& env) {
129+
void RestartAndClearCache(TMyEnvBase& env, ui64 memoryLimit = Max<ui64>()) {
130130
env.SendSync(new TEvents::TEvPoison, false, true);
131131
env->Send(MakeSharedPageCacheId(), TActorId{}, new NMemory::TEvConsumerLimit(0_MB));
132132
WaitEvent(env, NMemory::EvConsumerLimit);
133-
env->Send(MakeSharedPageCacheId(), TActorId{}, new NMemory::TEvConsumerLimit(8_MB));
133+
env->Send(MakeSharedPageCacheId(), TActorId{}, new NMemory::TEvConsumerLimit(memoryLimit));
134134
WaitEvent(env, NMemory::EvConsumerLimit);
135135
env.FireDummyTablet(ui32(NFake::TDummy::EFlg::Comp));
136136
}
137137

138-
void SetupSharedCache(TMyEnvBase& env, NKikimrSharedCache::TReplacementPolicy policy = NKikimrSharedCache::ThreeLeveledLRU, ui64 limit = 8_MB) {
138+
void SetupSharedCache(TMyEnvBase& env, NKikimrSharedCache::TReplacementPolicy policy = NKikimrSharedCache::ThreeLeveledLRU, ui64 limit = 8_MB, bool resetMemoryLimit = false) {
139139
auto request = MakeHolder<NConsole::TEvConsole::TEvConfigNotificationRequest>();
140140

141141
auto config = request->Record.MutableConfig()->MutableSharedCacheConfig();
@@ -144,6 +144,11 @@ void SetupSharedCache(TMyEnvBase& env, NKikimrSharedCache::TReplacementPolicy po
144144

145145
env->Send(MakeSharedPageCacheId(), TActorId{}, request.Release());
146146
WaitEvent(env, NConsole::TEvConsole::EvConfigNotificationRequest);
147+
148+
if (resetMemoryLimit) {
149+
env->Send(MakeSharedPageCacheId(), TActorId{}, new NMemory::TEvConsumerLimit(Max<ui64>()));
150+
WaitEvent(env, NMemory::EvConsumerLimit);
151+
}
147152
}
148153

149154
Y_UNIT_TEST(Limits) {
@@ -260,7 +265,7 @@ Y_UNIT_TEST(Limits_Config) {
260265

261266
SetupSharedCache(env, NKikimrSharedCache::ThreeLeveledLRU, 2_MB);
262267
LogCounters(counters);
263-
UNIT_ASSERT_DOUBLES_EQUAL(counters->ActiveBytes->Val(), static_cast<i64>(8_MB / 3 * 2), static_cast<i64>(1_MB / 3));
268+
UNIT_ASSERT_DOUBLES_EQUAL(counters->ActiveBytes->Val(), static_cast<i64>(2_MB), static_cast<i64>(1_MB / 3));
264269
UNIT_ASSERT_VALUES_EQUAL(counters->ActiveLimitBytes->Val(), 2_MB);
265270
UNIT_ASSERT_VALUES_EQUAL(counters->PassiveBytes->Val(), passiveBytes);
266271
UNIT_ASSERT_VALUES_EQUAL(counters->ConfigLimitBytes->Val(), 2_MB);
@@ -275,7 +280,7 @@ Y_UNIT_TEST(Limits_Config) {
275280

276281
SetupSharedCache(env, NKikimrSharedCache::ThreeLeveledLRU, 0_MB);
277282
LogCounters(counters);
278-
UNIT_ASSERT_DOUBLES_EQUAL(counters->ActiveBytes->Val(), static_cast<i64>(1_MB), static_cast<i64>(1_MB / 3));
283+
UNIT_ASSERT_DOUBLES_EQUAL(counters->ActiveBytes->Val(), static_cast<i64>(0_MB), static_cast<i64>(1_MB / 3));
279284
UNIT_ASSERT_VALUES_EQUAL(counters->ActiveLimitBytes->Val(), 0_MB);
280285
UNIT_ASSERT_VALUES_EQUAL(counters->PassiveBytes->Val(), passiveBytes);
281286
UNIT_ASSERT_VALUES_EQUAL(counters->ConfigLimitBytes->Val(), 0_MB);
@@ -291,7 +296,9 @@ Y_UNIT_TEST(ThreeLeveledLRU) {
291296
env.FireDummyTablet(ui32(NFake::TDummy::EFlg::Comp));
292297
env.SendSync(new NFake::TEvExecute{ new TTxInitSchema() });
293298

294-
SetupSharedCache(env);
299+
// set shared cache limit greater than compacted data size
300+
// to avoid becoming compacted data into passive data and being offloaded after it
301+
SetupSharedCache(env, NKikimrSharedCache::ThreeLeveledLRU, 20_MB, true);
295302

296303
// write 100 rows, each ~100KB (~10MB)
297304
for (i64 key = 0; key < 100; ++key) {
@@ -304,13 +311,22 @@ Y_UNIT_TEST(ThreeLeveledLRU) {
304311
Cerr << "...waiting until compacted" << Endl;
305312
env.WaitFor<NFake::TEvCompacted>();
306313

314+
LogCounters(counters);
315+
UNIT_ASSERT_DOUBLES_EQUAL(counters->ActiveBytes->Val(), static_cast<i64>(10_MB), static_cast<i64>(1_MB / 3));
316+
UNIT_ASSERT_VALUES_EQUAL(counters->PassiveBytes->Val(), 0);
317+
318+
SetupSharedCache(env, NKikimrSharedCache::ThreeLeveledLRU, 8_MB);
319+
LogCounters(counters);
320+
UNIT_ASSERT_DOUBLES_EQUAL(counters->ActiveBytes->Val(), static_cast<i64>(8_MB), static_cast<i64>(1_MB / 3));
321+
UNIT_ASSERT_VALUES_EQUAL(counters->PassiveBytes->Val(), 0);
322+
307323
TRetriedCounters retried;
308324
for (i64 key = 99; key >= 0; --key) {
309325
env.SendSync(new NFake::TEvExecute{ new TTxReadRow(key, retried) });
310326
}
311327
LogCounters(counters);
312328
UNIT_ASSERT_DOUBLES_EQUAL(counters->ActiveBytes->Val(), static_cast<i64>(8_MB), static_cast<i64>(1_MB / 3));
313-
UNIT_ASSERT_VALUES_EQUAL(retried, (TVector<ui32>{100, 45, 5}));
329+
UNIT_ASSERT_VALUES_EQUAL(retried, (TVector<ui32>{100, 20, 3, 1}));
314330

315331
RestartAndClearCache(env);
316332

@@ -392,7 +408,9 @@ Y_UNIT_TEST(S3FIFO) {
392408
env.FireDummyTablet(ui32(NFake::TDummy::EFlg::Comp));
393409
env.SendSync(new NFake::TEvExecute{ new TTxInitSchema() });
394410

395-
SetupSharedCache(env, NKikimrSharedCache::S3FIFO);
411+
// set shared cache limit greater than compacted data size
412+
// to avoid becoming compacted data into passive data and being offloaded after it
413+
SetupSharedCache(env, NKikimrSharedCache::S3FIFO, 20_MB, true);
396414

397415
// write 100 rows, each ~100KB (~10MB)
398416
for (i64 key = 0; key < 100; ++key) {
@@ -405,6 +423,15 @@ Y_UNIT_TEST(S3FIFO) {
405423
Cerr << "...waiting until compacted" << Endl;
406424
env.WaitFor<NFake::TEvCompacted>();
407425

426+
LogCounters(counters);
427+
UNIT_ASSERT_DOUBLES_EQUAL(counters->ActiveBytes->Val(), static_cast<i64>(10_MB), static_cast<i64>(1_MB / 3));
428+
UNIT_ASSERT_VALUES_EQUAL(counters->PassiveBytes->Val(), 0);
429+
430+
SetupSharedCache(env, NKikimrSharedCache::S3FIFO, 8_MB);
431+
LogCounters(counters);
432+
UNIT_ASSERT_DOUBLES_EQUAL(counters->ActiveBytes->Val(), static_cast<i64>(8_MB), static_cast<i64>(1_MB / 3));
433+
UNIT_ASSERT_VALUES_EQUAL(counters->PassiveBytes->Val(), 131);
434+
408435
TRetriedCounters retried;
409436
for (i64 key = 99; key >= 0; --key) {
410437
env.SendSync(new NFake::TEvExecute{ new TTxReadRow(key, retried) });
@@ -429,15 +456,15 @@ Y_UNIT_TEST(S3FIFO) {
429456
}
430457
LogCounters(counters);
431458
UNIT_ASSERT_DOUBLES_EQUAL(counters->ActiveBytes->Val(), static_cast<i64>(8_MB), static_cast<i64>(1_MB / 3));
432-
UNIT_ASSERT_VALUES_EQUAL(retried, (TVector<ui32>{100, 19, 2}));
459+
UNIT_ASSERT_VALUES_EQUAL(retried, (TVector<ui32>{100, 20, 3}));
433460

434461
retried = {};
435462
for (i64 key = 99; key >= 0; --key) {
436463
env.SendSync(new NFake::TEvExecute{ new TTxReadRow(key, retried) }, true);
437464
}
438465
LogCounters(counters);
439466
UNIT_ASSERT_DOUBLES_EQUAL(counters->ActiveBytes->Val(), static_cast<i64>(8_MB), static_cast<i64>(1_MB / 3));
440-
UNIT_ASSERT_VALUES_EQUAL(retried, (TVector<ui32>{100, 21, 2}));
467+
UNIT_ASSERT_VALUES_EQUAL(retried, (TVector<ui32>{100, 23, 2}));
441468

442469
RestartAndClearCache(env);
443470

@@ -493,7 +520,9 @@ Y_UNIT_TEST(ClockPro) {
493520
env.FireDummyTablet(ui32(NFake::TDummy::EFlg::Comp));
494521
env.SendSync(new NFake::TEvExecute{ new TTxInitSchema() });
495522

496-
SetupSharedCache(env, NKikimrSharedCache::ClockPro);
523+
// set shared cache limit greater than compacted data size
524+
// to avoid becoming compacted data into passive data and being offloaded after it
525+
SetupSharedCache(env, NKikimrSharedCache::ClockPro, 20_MB, true);
497526

498527
// write 100 rows, each ~100KB (~10MB)
499528
for (i64 key = 0; key < 100; ++key) {
@@ -506,13 +535,22 @@ Y_UNIT_TEST(ClockPro) {
506535
Cerr << "...waiting until compacted" << Endl;
507536
env.WaitFor<NFake::TEvCompacted>();
508537

538+
LogCounters(counters);
539+
UNIT_ASSERT_DOUBLES_EQUAL(counters->ActiveBytes->Val(), static_cast<i64>(10_MB), static_cast<i64>(1_MB / 3));
540+
UNIT_ASSERT_VALUES_EQUAL(counters->PassiveBytes->Val(), 0);
541+
542+
SetupSharedCache(env, NKikimrSharedCache::ClockPro, 8_MB);
543+
LogCounters(counters);
544+
UNIT_ASSERT_DOUBLES_EQUAL(counters->ActiveBytes->Val(), static_cast<i64>(8_MB), static_cast<i64>(1_MB / 3));
545+
UNIT_ASSERT_VALUES_EQUAL(counters->PassiveBytes->Val(), 0);
546+
509547
TRetriedCounters retried;
510548
for (i64 key = 99; key >= 0; --key) {
511549
env.SendSync(new NFake::TEvExecute{ new TTxReadRow(key, retried) });
512550
}
513551
LogCounters(counters);
514552
UNIT_ASSERT_DOUBLES_EQUAL(counters->ActiveBytes->Val(), static_cast<i64>(8_MB), static_cast<i64>(1_MB / 3));
515-
UNIT_ASSERT_VALUES_EQUAL(retried, (TVector<ui32>{100, 20, 2}));
553+
UNIT_ASSERT_VALUES_EQUAL(retried, (TVector<ui32>{100, 19, 2}));
516554

517555
RestartAndClearCache(env);
518556

@@ -608,7 +646,7 @@ Y_UNIT_TEST(ReplacementPolicySwitch) {
608646
env.FireDummyTablet(ui32(NFake::TDummy::EFlg::Comp));
609647
env.SendSync(new NFake::TEvExecute{ new TTxInitSchema() });
610648

611-
SetupSharedCache(env);
649+
SetupSharedCache(env, NKikimrSharedCache::ThreeLeveledLRU);
612650

613651
// write 100 rows, each ~100KB (~10MB)
614652
for (i64 key = 0; key < 100; ++key) {
@@ -650,7 +688,7 @@ Y_UNIT_TEST(ReplacementPolicySwitch) {
650688
UNIT_ASSERT_VALUES_EQUAL(counters->ReplacementPolicySize(NKikimrSharedCache::ThreeLeveledLRU)->Val(), 0);
651689
}
652690

653-
Y_UNIT_TEST(Compaction_BTreeIndex) {
691+
Y_UNIT_TEST(BigCache_BTreeIndex) {
654692
TMyEnvBase env;
655693
env->SetLogPriority(NKikimrServices::TABLET_SAUSAGECACHE, NActors::NLog::PRI_TRACE);
656694
env->SetLogPriority(NKikimrServices::TABLET_EXECUTOR, NActors::NLog::PRI_TRACE);
@@ -661,7 +699,7 @@ Y_UNIT_TEST(Compaction_BTreeIndex) {
661699
env.FireDummyTablet(ui32(NFake::TDummy::EFlg::Comp));
662700
env.SendSync(new NFake::TEvExecute{ new TTxInitSchema() });
663701

664-
SetupSharedCache(env, NKikimrSharedCache::S3FIFO);
702+
SetupSharedCache(env, NKikimrSharedCache::S3FIFO, 20_MB, true);
665703

666704
// write 100 rows, each ~100KB (~10MB)
667705
for (i64 key = 0; key < 100; ++key) {
@@ -675,8 +713,8 @@ Y_UNIT_TEST(Compaction_BTreeIndex) {
675713
env.WaitFor<NFake::TEvCompacted>();
676714

677715
LogCounters(counters);
678-
UNIT_ASSERT_DOUBLES_EQUAL(counters->ActiveBytes->Val(), static_cast<i64>(8_MB), static_cast<i64>(1_MB / 3));
679-
UNIT_ASSERT_VALUES_EQUAL(counters->ActivePages->Val(), 98);
716+
UNIT_ASSERT_DOUBLES_EQUAL(counters->ActiveBytes->Val(), static_cast<i64>(10_MB), static_cast<i64>(1_MB / 3));
717+
UNIT_ASSERT_VALUES_EQUAL(counters->ActivePages->Val(), 118);
680718
UNIT_ASSERT_DOUBLES_EQUAL(counters->PassiveBytes->Val(), static_cast<i64>(0_MB), static_cast<i64>(1_MB / 3));
681719
UNIT_ASSERT_VALUES_EQUAL(counters->PassivePages->Val(), 0);
682720
UNIT_ASSERT_DOUBLES_EQUAL(counters->CacheHitBytes->Val(), static_cast<i64>(0_MB), static_cast<i64>(1_MB / 3));
@@ -689,18 +727,29 @@ Y_UNIT_TEST(Compaction_BTreeIndex) {
689727
env.SendSync(new NFake::TEvExecute{ new TTxReadRow(key, retried) });
690728
}
691729
LogCounters(counters);
692-
UNIT_ASSERT_VALUES_EQUAL(retried, (TVector<ui32>{100, 19, 2}));
693-
UNIT_ASSERT_DOUBLES_EQUAL(counters->ActiveBytes->Val(), static_cast<i64>(8_MB), static_cast<i64>(1_MB / 3));
694-
UNIT_ASSERT_VALUES_EQUAL(counters->ActivePages->Val(), 98);
730+
UNIT_ASSERT_VALUES_EQUAL(retried, (TVector<ui32>{100}));
731+
UNIT_ASSERT_DOUBLES_EQUAL(counters->ActiveBytes->Val(), static_cast<i64>(10_MB), static_cast<i64>(1_MB / 3));
732+
UNIT_ASSERT_VALUES_EQUAL(counters->ActivePages->Val(), 118);
695733
UNIT_ASSERT_DOUBLES_EQUAL(counters->PassiveBytes->Val(), static_cast<i64>(0_MB), static_cast<i64>(1_MB / 3));
696734
UNIT_ASSERT_VALUES_EQUAL(counters->PassivePages->Val(), 0);
697735
UNIT_ASSERT_DOUBLES_EQUAL(counters->CacheHitBytes->Val(), static_cast<i64>(0_MB), static_cast<i64>(1_MB / 3));
698736
UNIT_ASSERT_VALUES_EQUAL(counters->CacheHitPages->Val(), 0);
699-
UNIT_ASSERT_DOUBLES_EQUAL(counters->CacheMissBytes->Val(), static_cast<i64>(2_MB), static_cast<i64>(1_MB / 3));
700-
UNIT_ASSERT_VALUES_EQUAL(counters->CacheMissPages->Val(), 21);
737+
UNIT_ASSERT_DOUBLES_EQUAL(counters->CacheMissBytes->Val(), static_cast<i64>(0_MB), static_cast<i64>(1_MB / 3));
738+
UNIT_ASSERT_VALUES_EQUAL(counters->CacheMissPages->Val(), 0);
739+
740+
RestartAndClearCache(env);
741+
LogCounters(counters);
742+
retried = {};
743+
for (i64 key = 99; key >= 0; --key) {
744+
env.SendSync(new NFake::TEvExecute{ new TTxReadRow(key, retried) }, true);
745+
}
746+
LogCounters(counters);
747+
UNIT_ASSERT_VALUES_EQUAL(retried, (TVector<ui32>{100, 100, 14, 2}));
748+
UNIT_ASSERT_VALUES_EQUAL(counters->ActivePages->Val(), 118);
749+
UNIT_ASSERT_VALUES_EQUAL(counters->PassivePages->Val(), 0);
701750
}
702751

703-
Y_UNIT_TEST(Compaction_FlatIndex) {
752+
Y_UNIT_TEST(BigCache_FlatIndex) {
704753
TMyEnvBase env;
705754
env->SetLogPriority(NKikimrServices::TABLET_SAUSAGECACHE, NActors::NLog::PRI_TRACE);
706755
env->SetLogPriority(NKikimrServices::TABLET_EXECUTOR, NActors::NLog::PRI_TRACE);
@@ -711,7 +760,7 @@ Y_UNIT_TEST(Compaction_FlatIndex) {
711760
env.FireDummyTablet(ui32(NFake::TDummy::EFlg::Comp));
712761
env.SendSync(new NFake::TEvExecute{ new TTxInitSchema() });
713762

714-
SetupSharedCache(env, NKikimrSharedCache::S3FIFO);
763+
SetupSharedCache(env, NKikimrSharedCache::S3FIFO, 20_MB, true);
715764

716765
// write 100 rows, each ~100KB (~10MB)
717766
for (i64 key = 0; key < 100; ++key) {
@@ -725,8 +774,8 @@ Y_UNIT_TEST(Compaction_FlatIndex) {
725774
env.WaitFor<NFake::TEvCompacted>();
726775

727776
LogCounters(counters);
728-
UNIT_ASSERT_DOUBLES_EQUAL(counters->ActiveBytes->Val(), static_cast<i64>(8_MB), static_cast<i64>(1_MB / 3));
729-
UNIT_ASSERT_VALUES_EQUAL(counters->ActivePages->Val(), 83);
777+
UNIT_ASSERT_DOUBLES_EQUAL(counters->ActiveBytes->Val(), static_cast<i64>(10_MB), static_cast<i64>(1_MB / 3));
778+
UNIT_ASSERT_VALUES_EQUAL(counters->ActivePages->Val(), 102);
730779
UNIT_ASSERT_DOUBLES_EQUAL(counters->PassiveBytes->Val(), static_cast<i64>(0_MB), static_cast<i64>(1_MB / 3));
731780
UNIT_ASSERT_VALUES_EQUAL(counters->PassivePages->Val(), 0);
732781
UNIT_ASSERT_DOUBLES_EQUAL(counters->CacheHitBytes->Val(), static_cast<i64>(0_MB), static_cast<i64>(1_MB / 3));
@@ -739,18 +788,29 @@ Y_UNIT_TEST(Compaction_FlatIndex) {
739788
env.SendSync(new NFake::TEvExecute{ new TTxReadRow(key, retried) });
740789
}
741790
LogCounters(counters);
742-
UNIT_ASSERT_VALUES_EQUAL(retried, (TVector<ui32>{100, 19}));
743-
UNIT_ASSERT_DOUBLES_EQUAL(counters->ActiveBytes->Val(), static_cast<i64>(8_MB), static_cast<i64>(1_MB / 3));
744-
UNIT_ASSERT_VALUES_EQUAL(counters->ActivePages->Val(), 83);
791+
UNIT_ASSERT_VALUES_EQUAL(retried, (TVector<ui32>{100}));
792+
UNIT_ASSERT_DOUBLES_EQUAL(counters->ActiveBytes->Val(), static_cast<i64>(10_MB), static_cast<i64>(1_MB / 3));
793+
UNIT_ASSERT_VALUES_EQUAL(counters->ActivePages->Val(), 102);
745794
UNIT_ASSERT_DOUBLES_EQUAL(counters->PassiveBytes->Val(), static_cast<i64>(0_MB), static_cast<i64>(1_MB / 3));
746795
UNIT_ASSERT_VALUES_EQUAL(counters->PassivePages->Val(), 0);
747796
UNIT_ASSERT_DOUBLES_EQUAL(counters->CacheHitBytes->Val(), static_cast<i64>(0_MB), static_cast<i64>(1_MB / 3));
748797
UNIT_ASSERT_VALUES_EQUAL(counters->CacheHitPages->Val(), 0);
749-
UNIT_ASSERT_DOUBLES_EQUAL(counters->CacheMissBytes->Val(), static_cast<i64>(2_MB), static_cast<i64>(1_MB / 3));
750-
UNIT_ASSERT_VALUES_EQUAL(counters->CacheMissPages->Val(), 19);
798+
UNIT_ASSERT_DOUBLES_EQUAL(counters->CacheMissBytes->Val(), static_cast<i64>(0_MB), static_cast<i64>(1_MB / 3));
799+
UNIT_ASSERT_VALUES_EQUAL(counters->CacheMissPages->Val(), 0);
800+
801+
RestartAndClearCache(env);
802+
LogCounters(counters);
803+
retried = {};
804+
for (i64 key = 99; key >= 0; --key) {
805+
env.SendSync(new NFake::TEvExecute{ new TTxReadRow(key, retried) }, true);
806+
}
807+
LogCounters(counters);
808+
UNIT_ASSERT_VALUES_EQUAL(retried, (TVector<ui32>{100, 100}));
809+
UNIT_ASSERT_VALUES_EQUAL(counters->ActivePages->Val(), 102);
810+
UNIT_ASSERT_VALUES_EQUAL(counters->PassivePages->Val(), 0);
751811
}
752812

753-
Y_UNIT_TEST(Compaction_ZeroCache_BTreeIndex) {
813+
Y_UNIT_TEST(ZeroCache_BTreeIndex) {
754814
TMyEnvBase env;
755815
env->SetLogPriority(NKikimrServices::TABLET_SAUSAGECACHE, NActors::NLog::PRI_TRACE);
756816
env->SetLogPriority(NKikimrServices::TABLET_EXECUTOR, NActors::NLog::PRI_TRACE);
@@ -798,9 +858,20 @@ Y_UNIT_TEST(Compaction_ZeroCache_BTreeIndex) {
798858
UNIT_ASSERT_VALUES_EQUAL(counters->CacheHitPages->Val(), 0);
799859
UNIT_ASSERT_DOUBLES_EQUAL(counters->CacheMissBytes->Val(), static_cast<i64>(10_MB), static_cast<i64>(1_MB / 3));
800860
UNIT_ASSERT_VALUES_EQUAL(counters->CacheMissPages->Val(), 400);
861+
862+
RestartAndClearCache(env);
863+
LogCounters(counters);
864+
retried = {};
865+
for (i64 key = 99; key >= 0; --key) {
866+
env.SendSync(new NFake::TEvExecute{ new TTxReadRow(key, retried) }, true);
867+
}
868+
LogCounters(counters);
869+
UNIT_ASSERT_VALUES_EQUAL(retried, (TVector<ui32>{100, 100, 100, 100, 100}));
870+
UNIT_ASSERT_VALUES_EQUAL(counters->ActivePages->Val(), 0);
871+
UNIT_ASSERT_VALUES_EQUAL(counters->PassivePages->Val(), 1);
801872
}
802873

803-
Y_UNIT_TEST(Compaction_ZeroCache_FlatIndex) {
874+
Y_UNIT_TEST(ZeroCache_FlatIndex) {
804875
TMyEnvBase env;
805876
env->SetLogPriority(NKikimrServices::TABLET_SAUSAGECACHE, NActors::NLog::PRI_TRACE);
806877
env->SetLogPriority(NKikimrServices::TABLET_EXECUTOR, NActors::NLog::PRI_TRACE);
@@ -848,6 +919,17 @@ Y_UNIT_TEST(Compaction_ZeroCache_FlatIndex) {
848919
UNIT_ASSERT_VALUES_EQUAL(counters->CacheHitPages->Val(), 0);
849920
UNIT_ASSERT_DOUBLES_EQUAL(counters->CacheMissBytes->Val(), static_cast<i64>(10_MB), static_cast<i64>(1_MB / 3));
850921
UNIT_ASSERT_VALUES_EQUAL(counters->CacheMissPages->Val(), 100);
922+
923+
RestartAndClearCache(env);
924+
LogCounters(counters);
925+
retried = {};
926+
for (i64 key = 99; key >= 0; --key) {
927+
env.SendSync(new NFake::TEvExecute{ new TTxReadRow(key, retried) }, true);
928+
}
929+
LogCounters(counters);
930+
UNIT_ASSERT_VALUES_EQUAL(retried, (TVector<ui32>{100, 100}));
931+
UNIT_ASSERT_VALUES_EQUAL(counters->ActivePages->Val(), 0);
932+
UNIT_ASSERT_VALUES_EQUAL(counters->PassivePages->Val(), 2);
851933
}
852934

853935
}

0 commit comments

Comments
 (0)