Skip to content

Commit bf6d055

Browse files
authored
Remove share body logic (#11987)
1 parent 3891cbb commit bf6d055

7 files changed

+33
-140
lines changed

ydb/core/tablet_flat/flat_executor.cpp

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2771,9 +2771,6 @@ void TExecutor::Handle(NSharedCache::TEvUpdated::TPtr &ev) {
27712771

27722772
for (auto &kv : msg->Actions) {
27732773
if (auto *info = PrivatePageCache->Info(kv.first)) {
2774-
for (auto &kvCorrected : kv.second.Accepted) {
2775-
PrivatePageCache->UpdateSharedBody(info, kvCorrected.first, std::move(kvCorrected.second));
2776-
}
27772774
for (ui32 pageId : kv.second.Dropped) {
27782775
PrivatePageCache->DropSharedBody(info, pageId);
27792776
}
@@ -3598,7 +3595,6 @@ void TExecutor::UpdateCounters(const TActorContext &ctx) {
35983595
Counters->Simple()[TExecutorCounters::CACHE_TOTAL_SHARED_BODY].Set(stats.TotalSharedBody);
35993596
Counters->Simple()[TExecutorCounters::CACHE_TOTAL_PINNED_BODY].Set(stats.TotalPinnedBody);
36003597
Counters->Simple()[TExecutorCounters::CACHE_TOTAL_EXCLUSIVE].Set(stats.TotalExclusive);
3601-
Counters->Simple()[TExecutorCounters::CACHE_TOTAL_SHARED_PENDING].Set(stats.TotalSharedPending);
36023598
Counters->Simple()[TExecutorCounters::CACHE_TOTAL_STICKY].Set(stats.TotalSticky);
36033599
}
36043600

@@ -4119,7 +4115,6 @@ void TExecutor::RenderHtmlPage(NMon::TEvRemoteHttpInfo::TPtr &ev) const {
41194115
DIV_CLASS("row") {str << "Total bytes in shared cache: " << PrivatePageCache->GetStats().TotalSharedBody; }
41204116
DIV_CLASS("row") {str << "Total bytes in local cache: " << PrivatePageCache->GetStats().TotalPinnedBody; }
41214117
DIV_CLASS("row") {str << "Total bytes exclusive to local cache: " << PrivatePageCache->GetStats().TotalExclusive; }
4122-
DIV_CLASS("row") {str << "Total bytes in transit to shared cache: " << PrivatePageCache->GetStats().TotalSharedPending; }
41234118
DIV_CLASS("row") {str << "Total bytes marked as sticky: " << PrivatePageCache->GetStats().TotalSticky; }
41244119

41254120
if (GcLogic) {

ydb/core/tablet_flat/flat_executor_tx_env.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,11 @@ namespace NTabletFlatExecutor {
3838
return { !ReadMissingReferences, page };
3939
}
4040

41-
const TSharedData* TryGetPage(const TPart* part, TPageId page, TGroupId groupId) override
41+
const TSharedData* TryGetPage(const TPart* part, TPageId pageId, TGroupId groupId) override
4242
{
4343
auto *partStore = CheckedCast<const NTable::TPartStore*>(part);
4444

45-
return Lookup(partStore->PageCollections.at(groupId.Index).Get(), page);
45+
return Lookup(partStore->PageCollections.at(groupId.Index).Get(), pageId);
4646
}
4747

4848
void EnableReadMissingReferences() noexcept {

ydb/core/tablet_flat/flat_sausagecache.cpp

Lines changed: 7 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ namespace NTabletFlatExecutor {
77
TPrivatePageCache::TPage::TPage(size_t size, TPageId pageId, TInfo* info)
88
: LoadState(LoadStateNo)
99
, Sticky(false)
10-
, SharedPending(false)
1110
, Id(pageId)
1211
, Size(size)
1312
, Info(info)
@@ -47,20 +46,15 @@ void TPrivatePageCache::RegisterPageCollection(TIntrusivePtr<TInfo> info) {
4746

4847
for (const auto& kv : info->PageMap) {
4948
auto* page = kv.second.Get();
50-
Y_DEBUG_ABORT_UNLESS(page);
51-
52-
if (page->SharedBody)
53-
Stats.TotalSharedBody += page->Size;
49+
Y_ABORT_UNLESS(page);
50+
Y_ABORT_UNLESS(page->SharedBody, "New filled pages can't be without a shared body");
51+
52+
Stats.TotalSharedBody += page->Size;
5453
if (page->PinnedBody)
5554
Stats.TotalPinnedBody += page->Size;
56-
if (page->PinnedBody && !page->SharedBody)
57-
Stats.TotalExclusive += page->Size;
5855
if (page->Sticky)
5956
Stats.TotalSticky += page->Size;
6057

61-
Y_DEBUG_ABORT_UNLESS(!page->SharedPending, "New page shouldn't be shared pending");
62-
TryShareBody(page);
63-
6458
TryUnload(page);
6559
Y_DEBUG_ABORT_UNLESS(!page->IsUnnecessary());
6660
}
@@ -132,8 +126,6 @@ bool TPrivatePageCache::UnlockPageCollection(TLogoBlobID id) {
132126
Stats.TotalPinnedBody -= page->Size;
133127
if (page->PinnedBody && !page->SharedBody)
134128
Stats.TotalExclusive -= page->Size;
135-
if (page->SharedPending)
136-
Stats.TotalSharedPending -= page->Size;
137129
if (page->Sticky)
138130
Stats.TotalSticky -= page->Size;
139131
}
@@ -204,8 +196,6 @@ std::pair<ui32, ui64> TPrivatePageCache::Request(TVector<ui32> &pages, TPrivateP
204196
TPage *page = info->EnsurePage(*it);
205197
switch (page->LoadState) {
206198
case TPage::LoadStateNo:
207-
Y_DEBUG_ABORT_UNLESS(!page->SharedPending, "Trying to load a page that may be restored");
208-
[[fallthrough]];
209199
case TPage::LoadStateRequestedAsync:
210200
page->LoadState = TPage::LoadStateRequested;
211201
bytesToRequest += page->Size;
@@ -261,8 +251,8 @@ void TPrivatePageCache::TryLoad(TPage *page) {
261251

262252
void TPrivatePageCache::TPrivatePageCache::TryUnload(TPage *page) {
263253
if (page->LoadState == TPage::LoadStateLoaded) {
264-
if (!page->SharedPending && !page->PinPad && !page->Sticky) {
265-
ToTouchShared[page->Info->Id][page->Id];
254+
if (!page->PinPad && !page->Sticky) {
255+
ToTouchShared[page->Info->Id].insert(page->Id);
266256
page->LoadState = TPage::LoadStateNo;
267257
if (Y_LIKELY(page->PinnedBody)) {
268258
Stats.TotalPinnedBody -= page->Size;
@@ -291,19 +281,6 @@ void TPrivatePageCache::TPrivatePageCache::TryEraseIfUnnecessary(TPage *page) {
291281
}
292282
}
293283

294-
void TPrivatePageCache::TPrivatePageCache::TryShareBody(TPage *page) {
295-
if (page->LoadState == TPage::LoadStateLoaded) {
296-
auto &x = ToTouchShared[page->Info->Id][page->Id];
297-
if (!page->SharedPending && !page->SharedBody && page->PinnedBody) {
298-
// We keep pinned body around until it's either
299-
// accepted or dropped by the shared cache
300-
page->SharedPending = true;
301-
Stats.TotalSharedPending += page->Size;
302-
x = page->PinnedBody;
303-
}
304-
}
305-
}
306-
307284
const TSharedData* TPrivatePageCache::Lookup(TPageId pageId, TInfo *info) {
308285
TPage *page = info->EnsurePage(pageId);
309286

@@ -502,45 +479,11 @@ void TPrivatePageCache::ResetTouchesAndToLoad(bool verifyEmpty) {
502479
Stats.CurrentCacheMisses = 0;
503480
}
504481

505-
void TPrivatePageCache::UpdateSharedBody(TInfo *info, TPageId pageId, TSharedPageRef shared) {
506-
TPage *page = info->GetPage(pageId);
507-
if (!page)
508-
return;
509-
510-
// Note: shared cache may accept a pending page if it is used by multiple private caches
511-
// (for example, used by tablet and its follower)
512-
if (Y_UNLIKELY(!page->SharedPending)) {
513-
return;
514-
}
515-
Y_DEBUG_ABORT_UNLESS(page->LoadState == TPage::LoadStateLoaded, "Shared pending page should be loaded");
516-
517-
// Shared cache accepted our page and provided its shared reference
518-
Stats.TotalSharedPending -= page->Size;
519-
page->SharedPending = false;
520-
if (Y_LIKELY(!page->SharedBody)) {
521-
Stats.TotalSharedBody += page->Size;
522-
if (Y_LIKELY(page->PinnedBody)) {
523-
Stats.TotalExclusive -= page->Size;
524-
}
525-
}
526-
page->SharedBody = std::move(shared);
527-
TryUnload(page);
528-
}
529-
530482
void TPrivatePageCache::DropSharedBody(TInfo *info, TPageId pageId) {
531483
TPage *page = info->GetPage(pageId);
532484
if (!page)
533485
return;
534486

535-
// Note: shared cache may drop a pending page if it is used by multiple private caches
536-
// (for example, used by tablet and its follower)
537-
if (Y_UNLIKELY(page->SharedPending)) {
538-
// Shared cache rejected our page so we should drop it too
539-
Stats.TotalSharedPending -= page->Size;
540-
page->SharedPending = false;
541-
TryUnload(page);
542-
}
543-
544487
if (!page->SharedBody.IsUsed()) {
545488
if (Y_LIKELY(page->SharedBody)) {
546489
Stats.TotalSharedBody -= page->Size;
@@ -568,8 +511,6 @@ TPrivatePageCache::TPage::TWaitQueuePtr TPrivatePageCache::ProvideBlock(
568511
Stats.TotalPinnedBody -= page->Size;
569512
if (Y_UNLIKELY(page->PinnedBody && !page->SharedBody))
570513
Stats.TotalExclusive -= page->Size;
571-
if (Y_UNLIKELY(page->SharedPending))
572-
Stats.TotalSharedPending -= page->Size;
573514

574515
// Note: we must be careful not to accidentally drop the sticky bit
575516
page->Fill(std::move(loaded.Page), page->Sticky);
@@ -603,7 +544,7 @@ THashMap<TLogoBlobID, TIntrusivePtr<TPrivatePageCache::TInfo>> TPrivatePageCache
603544
return ret;
604545
}
605546

606-
THashMap<TLogoBlobID, THashMap<TPrivatePageCache::TPageId, TSharedData>> TPrivatePageCache::GetPrepareSharedTouched() {
547+
THashMap<TLogoBlobID, THashSet<TPrivatePageCache::TPageId>> TPrivatePageCache::GetPrepareSharedTouched() {
607548
return std::move(ToTouchShared);
608549
}
609550

ydb/core/tablet_flat/flat_sausagecache.h

Lines changed: 3 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ class TPrivatePageCache {
3232
ui64 TotalSharedBody = 0; // total number of bytes currently referenced from shared cache
3333
ui64 TotalPinnedBody = 0; // total number of bytes currently pinned in memory
3434
ui64 TotalExclusive = 0; // total number of bytes exclusive to this cache (not from shared cache)
35-
ui64 TotalSharedPending = 0; // total number of bytes waiting for transfer to shared cache
3635
ui64 TotalSticky = 0; // total number of bytes marked as sticky (never unloaded from memory)
3736
ui64 PinnedSetSize = 0; // number of bytes pinned by transactions (even those not currently loaded)
3837
ui64 PinnedLoadSize = 0; // number of bytes pinned by transactions (which are currently being loaded)
@@ -54,7 +53,6 @@ class TPrivatePageCache {
5453

5554
ui32 LoadState : 2;
5655
ui32 Sticky : 1;
57-
ui32 SharedPending : 1;
5856

5957
const TPageId Id;
6058
const size_t Size;
@@ -74,22 +72,13 @@ class TPrivatePageCache {
7472
return (
7573
LoadState == LoadStateNo &&
7674
!Sticky &&
77-
!SharedPending &&
7875
!PinPad &&
7976
!WaitQueue &&
8077
!SharedBody);
8178
}
8279

83-
void Fill(TSharedData data, bool sticky = false) {
84-
Y_DEBUG_ABORT_UNLESS(!SharedBody && !SharedPending, "Populating cache with shared data already present");
80+
void Fill(TSharedPageRef shared, bool sticky) {
8581
Sticky = sticky;
86-
LoadState = LoadStateLoaded;
87-
PinnedBody = std::move(data);
88-
}
89-
90-
void Fill(TSharedPageRef shared, bool sticky = false) {
91-
Sticky = sticky;
92-
SharedPending = false;
9382
SharedBody = std::move(shared);
9483
LoadState = LoadStateLoaded;
9584
PinnedBody = TPinnedPageRef(SharedBody).GetData();
@@ -170,16 +159,15 @@ class TPrivatePageCache {
170159
THashMap<TPrivatePageCache::TInfo*, TVector<ui32>> GetToLoad() const;
171160
void ResetTouchesAndToLoad(bool verifyEmpty);
172161

173-
void UpdateSharedBody(TInfo *collectionInfo, TPageId pageId, TSharedPageRef shared);
174162
void DropSharedBody(TInfo *collectionInfo, TPageId pageId);
175163

176164
TPage::TWaitQueuePtr ProvideBlock(NSharedCache::TEvResult::TLoaded&& loaded, TInfo *collectionInfo);
177165
THashMap<TLogoBlobID, TIntrusivePtr<TInfo>> DetachPrivatePageCache();
178-
THashMap<TLogoBlobID, THashMap<TPageId, TSharedData>> GetPrepareSharedTouched();
166+
THashMap<TLogoBlobID, THashSet<TPageId>> GetPrepareSharedTouched();
179167

180168
private:
181169
THashMap<TLogoBlobID, TIntrusivePtr<TInfo>> PageCollections;
182-
THashMap<TLogoBlobID, THashMap<TPageId, TSharedData>> ToTouchShared;
170+
THashMap<TLogoBlobID, THashSet<TPageId>> ToTouchShared;
183171

184172
TStats Stats;
185173

@@ -192,7 +180,6 @@ class TPrivatePageCache {
192180
void TryLoad(TPage *page);
193181
void TryUnload(TPage *page);
194182
void TryEraseIfUnnecessary(TPage *page);
195-
void TryShareBody(TPage *page);
196183
};
197184

198185
}}

ydb/core/tablet_flat/shared_cache_events.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
namespace NKikimr::NSharedCache {
1515
using EPriority = NTabletFlatExecutor::NBlockIO::EPriority;
16+
using TPageId = NTable::NPage::TPageId;
1617

1718
enum EEv {
1819
EvBegin = EventSpaceBegin(TKikimrEvents::ES_FLAT_EXECUTOR),
@@ -45,9 +46,9 @@ namespace NKikimr::NSharedCache {
4546
};
4647

4748
struct TEvTouch : public TEventLocal<TEvTouch, EvTouch> {
48-
THashMap<TLogoBlobID, THashMap<ui32, TSharedData>> Touched;
49+
THashMap<TLogoBlobID, THashSet<TPageId>> Touched;
4950

50-
TEvTouch(THashMap<TLogoBlobID, THashMap<ui32, TSharedData>> &&touched)
51+
TEvTouch(THashMap<TLogoBlobID, THashSet<TPageId>> &&touched)
5152
: Touched(std::move(touched))
5253
{}
5354
};
@@ -135,7 +136,6 @@ namespace NKikimr::NSharedCache {
135136

136137
struct TEvUpdated : public TEventLocal<TEvUpdated, EvUpdated> {
137138
struct TActions {
138-
THashMap<ui32, TSharedPageRef> Accepted;
139139
THashSet<ui32> Dropped;
140140
};
141141

ydb/core/tablet_flat/shared_sausagecache.cpp

Lines changed: 8 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -709,41 +709,17 @@ class TSharedPageCache : public TActorBootstrapped<TSharedPageCache> {
709709

710710
void Handle(NSharedCache::TEvTouch::TPtr &ev) {
711711
NSharedCache::TEvTouch *msg = ev->Get();
712-
THashMap<TLogoBlobID, NSharedCache::TEvUpdated::TActions> actions;
713-
for (auto &xpair : msg->Touched) {
714-
auto collectionIt = Collections.find(xpair.first);
715-
if (collectionIt == Collections.end()) {
716-
for (auto &x : xpair.second) {
717-
if (x.second) {
718-
actions[xpair.first].Dropped.insert(x.first);
719-
x.second = { };
720-
}
721-
}
712+
713+
for (auto &[metaId, touchedPages] : msg->Touched) {
714+
auto collection = Collections.FindPtr(metaId);
715+
if (!collection) {
722716
continue;
723717
}
724-
auto &collection = collectionIt->second;
725-
for (auto &x : xpair.second) {
726-
const ui32 pageId = x.first;
727-
Y_ABORT_UNLESS(pageId < collection.PageMap.size());
728-
auto* page = collection.PageMap[pageId].Get();
718+
for (auto pageId : touchedPages) {
719+
Y_ABORT_UNLESS(pageId < collection->PageMap.size());
720+
auto* page = collection->PageMap[pageId].Get();
729721
if (!page) {
730-
if (x.second) {
731-
Y_ABORT_UNLESS(collection.PageMap.emplace(pageId, (page = new TPage(pageId, x.second.size(), &collection))));
732-
} else {
733-
continue;
734-
}
735-
}
736-
Y_ABORT_UNLESS(page);
737-
738-
if (auto body = std::move(x.second)) {
739-
if (page->HasMissingBody()) {
740-
page->Initialize(std::move(body));
741-
BodyProvided(collection, page);
742-
}
743-
744-
auto ref = TSharedPageRef::MakeUsed(page, SharedCachePages->GCList);
745-
Y_ABORT_UNLESS(ref.IsUsed(), "Unexpected failure to grab a cached page");
746-
actions[xpair.first].Accepted[pageId] = std::move(ref);
722+
continue;
747723
}
748724

749725
switch (page->State) {
@@ -768,12 +744,6 @@ class TSharedPageCache : public TActorBootstrapped<TSharedPageCache> {
768744
}
769745
}
770746

771-
if (actions) {
772-
auto msg = MakeHolder<NSharedCache::TEvUpdated>();
773-
msg->Actions = std::move(actions);
774-
Send(ev->Sender, msg.Release());
775-
}
776-
777747
DoGC();
778748
}
779749

0 commit comments

Comments
 (0)