diff --git a/ydb/core/tablet_flat/flat_executor_ut.cpp b/ydb/core/tablet_flat/flat_executor_ut.cpp index 1641c59c7e7a..4371aed14864 100644 --- a/ydb/core/tablet_flat/flat_executor_ut.cpp +++ b/ydb/core/tablet_flat/flat_executor_ut.cpp @@ -5048,6 +5048,13 @@ Y_UNIT_TEST_SUITE(TFlatTableExecutorIndexLoading) { env.SendSync(new NFake::TEvExecute(new NTestSuiteTFlatTableExecutorResourceProfile::TTxSetResourceProfile("zero"))); env.SendSync(new NFake::TEvExecute{ new TTxPrechargeAndSeek() }); + // restart tablet + env.SendSync(new TEvents::TEvPoison, false, true); + env.FireDummyTablet(ui32(NFake::TDummy::EFlg::Comp)); + + // should have the same behaviour + env.SendSync(new NFake::TEvExecute{ new TTxPrechargeAndSeek() }, true); + // If we didn't crash, then assume the test succeeded env.SendSync(new TEvents::TEvPoison, false, true); } diff --git a/ydb/core/tablet_flat/flat_sausagecache.cpp b/ydb/core/tablet_flat/flat_sausagecache.cpp index cbde110cd066..93cef08a6951 100644 --- a/ydb/core/tablet_flat/flat_sausagecache.cpp +++ b/ydb/core/tablet_flat/flat_sausagecache.cpp @@ -305,6 +305,8 @@ void TPrivatePageCache::TPrivatePageCache::TryShareBody(TPage *page) { } const TSharedData* TPrivatePageCache::Lookup(ui32 pageId, TInfo *info) { + using EPage = NTable::NPage::EPage; + TPage *page = info->EnsurePage(pageId); TryLoad(page); @@ -319,6 +321,12 @@ const TSharedData* TPrivatePageCache::Lookup(ui32 pageId, TInfo *info) { if (page->Empty()) { ToLoad.PushBack(page); + + // Note: for now we mark index pages sticky before we load them + if (!page->Sticky && EPage(info->PageCollection->Page(page->Id).Type) == EPage::Index) { + MarkSticky(page->Id, info); + } + Stats.CurrentCacheMisses++; } return nullptr; @@ -519,8 +527,6 @@ void TPrivatePageCache::DropSharedBody(TInfo *info, ui32 pageId) { TPrivatePageCache::TPage::TWaitQueuePtr TPrivatePageCache::ProvideBlock( NSharedCache::TEvResult::TLoaded&& loaded, TInfo *info) { - using EPage = NTable::NPage::EPage; - Y_VERIFY_DEBUG(loaded.Page && loaded.Page.IsUsed()); TPage *page = info->EnsurePage(loaded.PageId); @@ -536,11 +542,6 @@ TPrivatePageCache::TPage::TWaitQueuePtr TPrivatePageCache::ProvideBlock( if (Y_UNLIKELY(page->SharedPending)) Stats.TotalSharedPending -= page->Size; - // Note: for now we mark index pages sticky after we load them - if (!page->Sticky && EPage(info->PageCollection->Page(page->Id).Type) == EPage::Index) { - MarkSticky(page->Id, info); - } - // Note: we must be careful not to accidentally drop the sticky bit page->Fill(std::move(loaded.Page), page->Sticky); Stats.TotalSharedBody += page->Size;