Skip to content

Commit 6306922

Browse files
authored
stable-25-3-1: Optimized serialization in discovery cache cron job (#26350)
2 parents 048ee29 + b6db189 commit 6306922

File tree

1 file changed

+12
-2
lines changed

1 file changed

+12
-2
lines changed

ydb/core/discovery/discovery.cpp

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -281,8 +281,11 @@ namespace NDiscoveryPrivate {
281281

282282
class TDiscoveryCache: public TActorBootstrapped<TDiscoveryCache> {
283283
THashMap<TString, std::shared_ptr<NDiscovery::TCachedMessageData>> CurrentCachedMessages;
284+
THashMap<TString, std::shared_ptr<NDiscovery::TCachedMessageData>> DirtyCachedMessages;
285+
284286
THashMap<TString, std::shared_ptr<NDiscovery::TCachedMessageData>> OldCachedMessages; // when subscriptions are disabled
285287
THashMap<TString, std::shared_ptr<NDiscovery::TCachedMessageData>> CachedNotAvailable; // for subscriptions
288+
286289
THolder<TEvInterconnect::TEvNodeInfo> NameserviceResponse;
287290
TBridgeInfo::TPtr BridgeInfo;
288291

@@ -354,7 +357,10 @@ namespace NDiscoveryPrivate {
354357
auto& currentCachedMessage = CurrentCachedMessages[path];
355358
Y_ABORT_UNLESS(currentCachedMessage);
356359

357-
currentCachedMessage->UpdateEntries(std::move(msg->Updates));
360+
if (!msg->Updates.empty()) {
361+
currentCachedMessage->UpdateEntries(std::move(msg->Updates));
362+
DirtyCachedMessages[path] = currentCachedMessage;
363+
}
358364

359365
auto it = Requested.find(path);
360366
Y_ABORT_UNLESS(it == Requested.end());
@@ -382,6 +388,8 @@ namespace NDiscoveryPrivate {
382388
EndpointId.GetOrElse({}), {}, msg->Status)
383389
);
384390

391+
DirtyCachedMessages.erase(path);
392+
385393
if (AppData()->FeatureFlags.GetEnableSubscriptionsInDiscovery()) {
386394
if (msg->Status != TEvStateStorage::TEvBoardInfo::EStatus::Ok) {
387395
CurrentCachedMessages.erase(path);
@@ -416,10 +424,12 @@ namespace NDiscoveryPrivate {
416424
Y_ABORT_UNLESS(NameserviceResponse);
417425
Y_ABORT_UNLESS(!IsBridgeMode(ActorContext()) || BridgeInfo);
418426

419-
for (auto& [_, cachedData] : CurrentCachedMessages) {
427+
for (auto& [_, cachedData] : DirtyCachedMessages) {
420428
cachedData->UpdateCache(NameserviceResponse, BridgeInfo, EndpointId.GetOrElse({}));
421429
}
422430

431+
DirtyCachedMessages.clear();
432+
423433
Schedule(TDuration::Seconds(1), new TEvents::TEvWakeup());
424434
}
425435

0 commit comments

Comments
 (0)