Skip to content

Commit 77115f2

Browse files
authored
Merge 441c131 into 1af55df
2 parents 1af55df + 441c131 commit 77115f2

File tree

3 files changed

+25
-51
lines changed

3 files changed

+25
-51
lines changed

ydb/core/tablet_flat/shared_sausagecache.cpp

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ TSharedPageCacheCounters::TSharedPageCacheCounters(const TIntrusivePtr<::NMonito
3838
namespace NKikimr {
3939
namespace NTabletFlatExecutor {
4040

41+
using namespace NCache;
42+
4143
static bool Satisfies(NLog::EPriority priority = NLog::PRI_DEBUG) {
4244
if (NLog::TSettings *settings = TlsActivationContext->LoggerSettings())
4345
return settings->Satisfies(priority, NKikimrServices::TABLET_SAUSAGECACHE);
@@ -178,7 +180,7 @@ class TSharedPageCache : public TActorBootstrapped<TSharedPageCache> {
178180
TRequestQueue ScanRequests;
179181

180182
THolder<TSharedPageCacheConfig> Config;
181-
TCacheCache<TPage, TPage::TWeight, TCacheCacheConfig::TDefaultGeneration<TPage>> Cache;
183+
THolder<ICacheCache<TPage>> Cache;
182184

183185
ui64 StatBioReqs = 0;
184186
ui64 StatHitPages = 0;
@@ -193,14 +195,18 @@ class TSharedPageCache : public TActorBootstrapped<TSharedPageCache> {
193195

194196
ui64 MemLimitBytes;
195197

198+
void CreateCache() {
199+
TCacheCacheConfig cacheCacheConfig(1, Config->Counters->FreshBytes, Config->Counters->StagingBytes, Config->Counters->WarmBytes);
200+
Cache = MakeHolder<TCacheCache<TPage, TPage::TWeight, TCacheCacheConfig::TDefaultGeneration<TPage>>>(std::move(cacheCacheConfig));
201+
}
202+
196203
void ActualizeCacheSizeLimit() {
197204
ui64 limitBytes = Min(Config->LimitBytes.value_or(Max<ui64>()), MemLimitBytes);
198205

199206
// limit of cache depends only on config and mem because passive pages may go in and out arbitrary
200207
// we may have some passive bytes, so if we fully fill this Cache we may exceed the limit
201208
// because of that DoGC should be called to ensure limits
202-
// unlimited cache is banned
203-
Cache.UpdateCacheSize(Max<ui64>(1, limitBytes));
209+
Cache->UpdateCacheSize(limitBytes);
204210

205211
if (Config->Counters) {
206212
Config->Counters->ConfigLimitBytes->Set(Config->LimitBytes.value_or(0));
@@ -219,7 +225,7 @@ class TSharedPageCache : public TActorBootstrapped<TSharedPageCache> {
219225
THashSet<TCollection*> recheck;
220226
while (GetStatAllBytes() > MemLimitBytes
221227
|| GetStatAllBytes() > Config->LimitBytes.value_or(Max<ui64>()) && StatActiveBytes > configActiveReservedBytes) {
222-
auto page = Cache.EvictNext();
228+
auto page = Cache->EvictNext();
223229
if (!page) {
224230
break;
225231
}
@@ -366,7 +372,7 @@ class TSharedPageCache : public TActorBootstrapped<TSharedPageCache> {
366372
++*Config->Counters->CacheHitPages;
367373
*Config->Counters->CacheHitBytes += page->Size;
368374
}
369-
Evict(Cache.Touch(page));
375+
Evict(Cache->Touch(page));
370376
break;
371377
case PageStateNo:
372378
++pagesToLoad;
@@ -648,7 +654,7 @@ class TSharedPageCache : public TActorBootstrapped<TSharedPageCache> {
648654
AddActivePage(page);
649655
[[fallthrough]];
650656
case PageStateLoaded:
651-
Evict(Cache.Touch(page));
657+
Evict(Cache->Touch(page));
652658
break;
653659
default:
654660
Y_ABORT("unknown load state");
@@ -749,7 +755,7 @@ class TSharedPageCache : public TActorBootstrapped<TSharedPageCache> {
749755

750756
page->Initialize(std::move(paged.Data));
751757
BodyProvided(collection, paged.PageId, page);
752-
Evict(Cache.Touch(page));
758+
Evict(Cache->Touch(page));
753759
}
754760
}
755761

@@ -882,7 +888,7 @@ class TSharedPageCache : public TActorBootstrapped<TSharedPageCache> {
882888
const TLogoBlobID &pageCollectionId = collectionIt->first;
883889

884890
if (auto logl = Logger->Log(ELnLev::Debug))
885-
logl << "droping pageCollection " << pageCollectionId;
891+
logl << "dropping pageCollection " << pageCollectionId;
886892

887893
for (auto &expe : collection.Expectants) {
888894
for (auto &xpair : expe.second.SourceRequests) {
@@ -901,7 +907,7 @@ class TSharedPageCache : public TActorBootstrapped<TSharedPageCache> {
901907
for (const auto &kv : collection.PageMap) {
902908
auto* page = kv.second.Get();
903909

904-
Cache.Evict(page);
910+
Cache->Erase(page);
905911
page->CacheGeneration = TCacheCacheConfig::CacheGenNone;
906912

907913
if (page->State == PageStateLoaded) {
@@ -1099,8 +1105,8 @@ class TSharedPageCache : public TActorBootstrapped<TSharedPageCache> {
10991105
public:
11001106
TSharedPageCache(THolder<TSharedPageCacheConfig> config)
11011107
: Config(std::move(config))
1102-
, Cache(TCacheCacheConfig(1, Config->Counters->FreshBytes, Config->Counters->StagingBytes, Config->Counters->WarmBytes))
11031108
{
1109+
CreateCache();
11041110
AsyncRequests.Limit = Config->TotalAsyncQueueInFlyLimit;
11051111
ScanRequests.Limit = Config->TotalScanQueueInFlyLimit;
11061112
}

ydb/core/util/cache_cache.h

Lines changed: 8 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
#pragma once
22
#include "defs.h"
3+
#include <ydb/core/util/cache_cache_iface.h>
34
#include <ydb/core/util/queue_oneone_inplace.h>
45
#include <library/cpp/monlib/counters/counters.h>
56
#include <library/cpp/monlib/dynamic_counters/counters.h>
67
#include <util/generic/ptr.h>
78
#include <util/generic/intrlist.h>
89

9-
namespace NKikimr {
10+
namespace NKikimr::NCache {
1011

1112
struct TCacheCacheConfig : public TAtomicRefCount<TCacheCacheConfig> {
1213
using TCounterPtr = ::NMonitoring::TDynamicCounters::TCounterPtr;
@@ -71,7 +72,7 @@ template <typename TItem
7172
, typename TWeight = TCacheCacheConfig::TDefaultWeight<TItem>
7273
, typename TGeneration = TCacheCacheConfig::TDefaultGeneration<TItem>
7374
>
74-
class TCacheCache {
75+
class TCacheCache : public ICacheCache<TItem> {
7576
public:
7677
TCacheCache(const TCacheCacheConfig &config)
7778
: Config(config)
@@ -80,7 +81,7 @@ class TCacheCache {
8081
, WarmWeight(0)
8182
{}
8283

83-
TItem* EvictNext() {
84+
TItem* EvictNext() override {
8485
TItem* ret = nullptr;
8586

8687
if (!StagingList.Empty()) {
@@ -101,7 +102,7 @@ class TCacheCache {
101102
}
102103

103104
// returns evicted elements as list
104-
TIntrusiveList<TItem> Touch(TItem *item) {
105+
TIntrusiveList<TItem> Touch(TItem *item) override {
105106
TIntrusiveList<TItem> evictedList;
106107
TIntrusiveListItem<TItem> *xitem = item;
107108

@@ -130,8 +131,7 @@ class TCacheCache {
130131
return evictedList;
131132
}
132133

133-
// evict and erase differs on Evicted handling
134-
void Evict(TItem *item) {
134+
void Erase(TItem *item) override {
135135
const TCacheCacheConfig::ECacheGeneration cacheGen = GenerationOp.Get(item);
136136
switch (cacheGen) {
137137
case TCacheCacheConfig::CacheGenNone:
@@ -153,43 +153,11 @@ class TCacheCache {
153153
*Config.ReportedWarm = WarmWeight;
154154
break;
155155
default:
156-
Y_DEBUG_ABORT("unknown cache generaton");
156+
Y_DEBUG_ABORT("unknown cache generation");
157157
}
158158
}
159159

160-
void Erase(TItem *item) {
161-
const TCacheCacheConfig::ECacheGeneration cacheGen = GenerationOp.Get(item);
162-
switch (cacheGen) {
163-
case TCacheCacheConfig::CacheGenNone:
164-
break;
165-
case TCacheCacheConfig::CacheGenEvicted:
166-
item->Unlink();
167-
GenerationOp.Set(item, TCacheCacheConfig::CacheGenNone);
168-
break;
169-
case TCacheCacheConfig::CacheGenFresh:
170-
Unlink(item, FreshWeight);
171-
if (Config.ReportedFresh)
172-
*Config.ReportedFresh = FreshWeight;
173-
break;
174-
case TCacheCacheConfig::CacheGenStaging:
175-
Unlink(item, StagingWeight);
176-
if (Config.ReportedStaging)
177-
*Config.ReportedStaging = StagingWeight;
178-
break;
179-
case TCacheCacheConfig::CacheGenWarm:
180-
Unlink(item, WarmWeight);
181-
if (Config.ReportedWarm)
182-
*Config.ReportedWarm = WarmWeight;
183-
break;
184-
default:
185-
Y_DEBUG_ABORT("unknown cache generaton");
186-
}
187-
}
188-
189-
void UpdateCacheSize(ui64 cacheSize) {
190-
if (cacheSize == 0)
191-
cacheSize = Max<ui64>();
192-
160+
void UpdateCacheSize(ui64 cacheSize) override {
193161
Config.SetLimit(cacheSize);
194162
}
195163

ydb/core/util/cache_cache_ut.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#include "cache_cache.h"
22
#include <library/cpp/testing/unittest/registar.h>
33

4-
namespace NKikimr {
4+
namespace NKikimr::NCache {
55

66
Y_UNIT_TEST_SUITE(TCacheCacheTest) {
77

0 commit comments

Comments
 (0)