From 7a495112dbd2db2ce3d1d4546b847c8f2c880092 Mon Sep 17 00:00:00 2001 From: Bulat Gayazov Date: Mon, 29 Sep 2025 17:14:59 +0000 Subject: [PATCH 1/2] Optimized serialization in discovery cache cron job --- ydb/core/discovery/discovery.cpp | 14 ++++++++++++-- ydb/core/discovery/discovery.h | 2 ++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/ydb/core/discovery/discovery.cpp b/ydb/core/discovery/discovery.cpp index c9f024146ad2..a84aed081f9b 100644 --- a/ydb/core/discovery/discovery.cpp +++ b/ydb/core/discovery/discovery.cpp @@ -238,8 +238,11 @@ namespace NDiscoveryPrivate { class TDiscoveryCache: public TActorBootstrapped { THashMap> CurrentCachedMessages; + THashMap> DirtyCachedMessages; + THashMap> OldCachedMessages; // when subscriptions are disabled THashMap> CachedNotAvailable; // for subscriptions + THolder NameserviceResponse; struct TWaiter { @@ -311,7 +314,10 @@ namespace NDiscoveryPrivate { Y_ABORT_UNLESS(currentCachedMessage); - currentCachedMessage->UpdateEntries(std::move(msg->Updates)); + if (!msg->Updates.empty()) { + currentCachedMessage->UpdateEntries(std::move(msg->Updates)); + DirtyCachedMessages[path] = currentCachedMessage; + } auto it = Requested.find(path); Y_ABORT_UNLESS(it == Requested.end()); @@ -336,6 +342,8 @@ namespace NDiscoveryPrivate { EndpointId.GetOrElse({}), {}, msg->Status) ); + DirtyCachedMessages.erase(path); + if (AppData()->FeatureFlags.GetEnableSubscriptionsInDiscovery()) { if (msg->Status != TEvStateStorage::TEvBoardInfo::EStatus::Ok) { CurrentCachedMessages.erase(path); @@ -369,10 +377,12 @@ namespace NDiscoveryPrivate { Y_ABORT_UNLESS(NameserviceResponse); - for (auto& [_, cachedData] : CurrentCachedMessages) { + for (auto& [_, cachedData] : DirtyCachedMessages) { cachedData->UpdateCache(NameserviceResponse, EndpointId.GetOrElse({})); } + DirtyCachedMessages.clear(); + Schedule(TDuration::Seconds(1), new TEvents::TEvWakeup()); } diff --git a/ydb/core/discovery/discovery.h b/ydb/core/discovery/discovery.h index 6c96564e7b2b..0e188cce3345 100644 --- a/ydb/core/discovery/discovery.h +++ b/ydb/core/discovery/discovery.h @@ -56,6 +56,8 @@ class TCachedMessageData { TMap InfoEntries; // OwnerId -> Payload TEvStateStorage::TEvBoardInfo::EStatus Status; + bool IsDirty = false; + public: TCachedMessageData(const TString& cachedMessage, const TString& cachedMessageSsl, const TMap& infoEntries, From 7d6d7eda41f18840f75cac594c61914dae4397f0 Mon Sep 17 00:00:00 2001 From: Bulat Gayazov Date: Mon, 29 Sep 2025 17:29:15 +0000 Subject: [PATCH 2/2] Fix --- ydb/core/discovery/discovery.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/ydb/core/discovery/discovery.h b/ydb/core/discovery/discovery.h index 0e188cce3345..6c96564e7b2b 100644 --- a/ydb/core/discovery/discovery.h +++ b/ydb/core/discovery/discovery.h @@ -56,8 +56,6 @@ class TCachedMessageData { TMap InfoEntries; // OwnerId -> Payload TEvStateStorage::TEvBoardInfo::EStatus Status; - bool IsDirty = false; - public: TCachedMessageData(const TString& cachedMessage, const TString& cachedMessageSsl, const TMap& infoEntries,