diff --git a/ydb/core/kqp/compile_service/kqp_compile_computation_pattern_service.cpp b/ydb/core/kqp/compile_service/kqp_compile_computation_pattern_service.cpp index b34b71da9984..6cdde2f174d4 100644 --- a/ydb/core/kqp/compile_service/kqp_compile_computation_pattern_service.cpp +++ b/ydb/core/kqp/compile_service/kqp_compile_computation_pattern_service.cpp @@ -84,7 +84,7 @@ class TKqpCompileComputationPatternService : public TActorBootstrapped> patternsToCompile; + THashMap> patternsToCompile; patternCache->GetPatternsToCompile(patternsToCompile); TVector> patternsToCompileWithAccessTimes; @@ -115,7 +115,7 @@ class TKqpCompileComputationPatternService : public TActorBootstrapped Counters; struct TPatternToCompile { - NMiniKQL::TSerializedProgram SerializedProgram; + TString SerializedProgram; std::shared_ptr Entry; }; diff --git a/ydb/library/yql/minikql/computation/mkql_computation_pattern_cache.cpp b/ydb/library/yql/minikql/computation/mkql_computation_pattern_cache.cpp index 68e6a19edf2b..556697f383c4 100644 --- a/ydb/library/yql/minikql/computation/mkql_computation_pattern_cache.cpp +++ b/ydb/library/yql/minikql/computation/mkql_computation_pattern_cache.cpp @@ -33,7 +33,7 @@ class TComputationPatternLRUCache::TLRUPatternCacheImpl return CurrentPatternsCompiledCodeSizeInBytes; } - std::shared_ptr* Find(const TSerializedProgram& serializedProgram) { + std::shared_ptr* Find(const TString& serializedProgram) { auto it = SerializedProgramToPatternCacheHolder.find(serializedProgram); if (it == SerializedProgramToPatternCacheHolder.end()) { return nullptr; @@ -44,7 +44,7 @@ class TComputationPatternLRUCache::TLRUPatternCacheImpl return &it->second.Entry; } - void Insert(const TSerializedProgram& serializedProgram, std::shared_ptr& entry) { + void Insert(const TString& serializedProgram, std::shared_ptr& entry) { auto [it, inserted] = SerializedProgramToPatternCacheHolder.emplace(std::piecewise_construct, std::forward_as_tuple(serializedProgram), std::forward_as_tuple(serializedProgram, entry)); @@ -69,7 +69,7 @@ class TComputationPatternLRUCache::TLRUPatternCacheImpl ClearIfNeeded(); } - void NotifyPatternCompiled(const TSerializedProgram& serializedProgram, std::shared_ptr& entry) { + void NotifyPatternCompiled(const TString & serializedProgram, std::shared_ptr& entry) { auto it = SerializedProgramToPatternCacheHolder.find(serializedProgram); if (it == SerializedProgramToPatternCacheHolder.end()) { return; @@ -108,7 +108,7 @@ class TComputationPatternLRUCache::TLRUPatternCacheImpl * Most recently accessed items are in back of the lists, least recently accessed items are in front of the lists. */ struct TPatternCacheHolder : public TIntrusiveListItem, TIntrusiveListItem { - TPatternCacheHolder(TSerializedProgram serializedProgram, std::shared_ptr entry) + TPatternCacheHolder(TString serializedProgram, std::shared_ptr entry) : SerializedProgram(std::move(serializedProgram)) , Entry(std::move(entry)) {} @@ -121,7 +121,7 @@ class TComputationPatternLRUCache::TLRUPatternCacheImpl return !TIntrusiveListItem::Empty(); } - TSerializedProgram SerializedProgram; + TString SerializedProgram; std::shared_ptr Entry; }; @@ -195,7 +195,7 @@ class TComputationPatternLRUCache::TLRUPatternCacheImpl size_t CurrentCompiledPatternsSize = 0; size_t CurrentPatternsCompiledCodeSizeInBytes = 0; - THashMap SerializedProgramToPatternCacheHolder; + THashMap SerializedProgramToPatternCacheHolder; TIntrusiveList LRUPatternList; TIntrusiveList LRUCompiledPatternList; }; @@ -223,7 +223,7 @@ TComputationPatternLRUCache::~TComputationPatternLRUCache() { CleanCache(); } -std::shared_ptr TComputationPatternLRUCache::Find(const TSerializedProgram& serializedProgram) { +std::shared_ptr TComputationPatternLRUCache::Find(const TString& serializedProgram) { std::lock_guard lock(Mutex); if (auto it = Cache->Find(serializedProgram)) { ++*Hits; @@ -238,7 +238,7 @@ std::shared_ptr TComputationPatternLRUCache::Find(const TSer return {}; } -TComputationPatternLRUCache::TTicket TComputationPatternLRUCache::FindOrSubscribe(const TSerializedProgram& serializedProgram) { +TComputationPatternLRUCache::TTicket TComputationPatternLRUCache::FindOrSubscribe(const TString& serializedProgram) { std::lock_guard lock(Mutex); if (auto it = Cache->Find(serializedProgram)) { ++*Hits; @@ -263,7 +263,7 @@ TComputationPatternLRUCache::TTicket TComputationPatternLRUCache::FindOrSubscrib return TTicket(serializedProgram, false, promise, nullptr); } -void TComputationPatternLRUCache::EmplacePattern(const TSerializedProgram& serializedProgram, std::shared_ptr patternWithEnv) { +void TComputationPatternLRUCache::EmplacePattern(const TString& serializedProgram, std::shared_ptr patternWithEnv) { Y_DEBUG_ABORT_UNLESS(patternWithEnv && patternWithEnv->Pattern); TMaybe>>> subscribers; @@ -290,7 +290,7 @@ void TComputationPatternLRUCache::EmplacePattern(const TSerializedProgram& seria } } -void TComputationPatternLRUCache::NotifyPatternCompiled(const TSerializedProgram& serializedProgram, std::shared_ptr patternWithEnv) { +void TComputationPatternLRUCache::NotifyPatternCompiled(const TString& serializedProgram, std::shared_ptr patternWithEnv) { std::lock_guard lock(Mutex); Cache->NotifyPatternCompiled(serializedProgram, patternWithEnv); } @@ -309,7 +309,7 @@ void TComputationPatternLRUCache::CleanCache() { Cache->Clear(); } -void TComputationPatternLRUCache::AccessPattern(const TSerializedProgram & serializedProgram, std::shared_ptr & entry) { +void TComputationPatternLRUCache::AccessPattern(const TString & serializedProgram, std::shared_ptr & entry) { if (!Configuration.PatternAccessTimesBeforeTryToCompile || entry->Pattern->IsCompiled()) { return; } @@ -321,11 +321,11 @@ void TComputationPatternLRUCache::AccessPattern(const TSerializedProgram & seria } } -void TComputationPatternLRUCache::NotifyMissing(const TSerializedProgram& serializedProgram) { +void TComputationPatternLRUCache::NotifyMissing(const TString& serialized) { TMaybe>>> subscribers; { std::lock_guard lock(Mutex); - auto notifyIt = Notify.find(serializedProgram); + auto notifyIt = Notify.find(serialized); if (notifyIt != Notify.end()) { subscribers.swap(notifyIt->second); Notify.erase(notifyIt); diff --git a/ydb/library/yql/minikql/computation/mkql_computation_pattern_cache.h b/ydb/library/yql/minikql/computation/mkql_computation_pattern_cache.h index 58c047fa7a63..c9867b74f79d 100644 --- a/ydb/library/yql/minikql/computation/mkql_computation_pattern_cache.h +++ b/ydb/library/yql/minikql/computation/mkql_computation_pattern_cache.h @@ -1,7 +1,6 @@ #pragma once #include "mkql_computation_node.h" -#include "mkql_serialized_program.h" #include #include @@ -58,8 +57,8 @@ class TComputationPatternLRUCache { public: class TTicket : private TNonCopyable { public: - TTicket(const TSerializedProgram& serializedProgram, bool isOwned, const NThreading::TFuture>& future, TComputationPatternLRUCache* cache) - : SerializedProgram(serializedProgram) + TTicket(const TString& serialized, bool isOwned, const NThreading::TFuture>& future, TComputationPatternLRUCache* cache) + : Serialized(serialized) , IsOwned(isOwned) , Future(future) , Cache(cache) @@ -67,7 +66,7 @@ class TComputationPatternLRUCache { ~TTicket() { if (Cache) { - Cache->NotifyMissing(SerializedProgram); + Cache->NotifyMissing(Serialized); } } @@ -85,7 +84,7 @@ class TComputationPatternLRUCache { } private: - const TSerializedProgram SerializedProgram; + const TString Serialized; const bool IsOwned; const NThreading::TFuture> Future; TComputationPatternLRUCache* Cache; @@ -125,13 +124,13 @@ class TComputationPatternLRUCache { return std::make_shared(useAlloc); } - std::shared_ptr Find(const TSerializedProgram& serializedProgram); + std::shared_ptr Find(const TString& serializedProgram); - TTicket FindOrSubscribe(const TSerializedProgram& serializedProgram); + TTicket FindOrSubscribe(const TString& serializedProgram); - void EmplacePattern(const TSerializedProgram& serializedProgram, std::shared_ptr patternWithEnv); + void EmplacePattern(const TString& serializedProgram, std::shared_ptr patternWithEnv); - void NotifyPatternCompiled(const TSerializedProgram& serializedProgram, std::shared_ptr patternWithEnv); + void NotifyPatternCompiled(const TString& serializedProgram, std::shared_ptr patternWithEnv); size_t GetSize() const; @@ -160,27 +159,27 @@ class TComputationPatternLRUCache { return PatternsToCompile.size(); } - void GetPatternsToCompile(THashMap> & result) { + void GetPatternsToCompile(THashMap> & result) { std::lock_guard lock(Mutex); result.swap(PatternsToCompile); } private: - void AccessPattern(const TSerializedProgram & serializedProgram, std::shared_ptr & entry); + void AccessPattern(const TString & serializedProgram, std::shared_ptr & entry); - void NotifyMissing(const TSerializedProgram& serializedProgram); + void NotifyMissing(const TString& serialized); static constexpr size_t CacheMaxElementsSize = 10000; friend class TTicket; mutable std::mutex Mutex; - THashMap>>>> Notify; + THashMap>>>> Notify; class TLRUPatternCacheImpl; std::unique_ptr Cache; - THashMap> PatternsToCompile; + THashMap> PatternsToCompile; const Config Configuration; diff --git a/ydb/library/yql/minikql/computation/mkql_serialized_program.h b/ydb/library/yql/minikql/computation/mkql_serialized_program.h deleted file mode 100644 index 1b08127204ed..000000000000 --- a/ydb/library/yql/minikql/computation/mkql_serialized_program.h +++ /dev/null @@ -1,49 +0,0 @@ -#pragma once - -#include -#include - -namespace NKikimr::NMiniKQL { - -/// Serialized program with precomputed hash -class TSerializedProgram -{ -public: - TSerializedProgram(TString data) - : Data(std::move(data)) - , Hash(THash()(data)) - {} - - const TString & GetData() const - { - return Data; - } - - uint64_t GetHash() const - { - return Hash; - } - - friend bool operator==(const TSerializedProgram & lhs, const TSerializedProgram & rhs) - { - return lhs.Hash == rhs.Hash && lhs.Data == rhs.Data; - } - - friend bool operator!=(const TSerializedProgram & lhs, const TSerializedProgram & rhs) - { - return !(lhs == rhs); - } - -private: - TString Data; - ui64 Hash; -}; - -} - -template<> -struct THash { - inline ui64 operator()(const NKikimr::NMiniKQL::TSerializedProgram& serializedProgram) const noexcept { - return serializedProgram.GetHash(); - } -};