diff options
author | ivanmorozov <ivanmorozov@yandex-team.com> | 2023-07-08 10:42:41 +0300 |
---|---|---|
committer | ivanmorozov <ivanmorozov@yandex-team.com> | 2023-07-08 10:42:41 +0300 |
commit | 81455e7b2b77e04a368defb143ff6662655c493e (patch) | |
tree | 93740ba5f14027d440543ed11263fb1ddc7b01b4 /library/cpp | |
parent | 8b786ab7d76b124c88dbc7ed858770e56ae14206 (diff) | |
download | ydb-81455e7b2b77e04a368defb143ff6662655c493e.tar.gz |
KIKIMR-18568: remove dependency library/cpp/actors to ydb/core/protos
Diffstat (limited to 'library/cpp')
42 files changed, 228 insertions, 117 deletions
diff --git a/library/cpp/actors/core/CMakeLists.darwin-x86_64.txt b/library/cpp/actors/core/CMakeLists.darwin-x86_64.txt index 747c10d87d2..ad0db0f5719 100644 --- a/library/cpp/actors/core/CMakeLists.darwin-x86_64.txt +++ b/library/cpp/actors/core/CMakeLists.darwin-x86_64.txt @@ -25,6 +25,12 @@ get_built_tool_path( tools/enum_parser/enum_parser enum_parser ) +get_built_tool_path( + TOOL_enum_parser_bin + TOOL_enum_parser_dependency + tools/enum_parser/enum_parser + enum_parser +) add_library(cpp-actors-core) target_link_libraries(cpp-actors-core PUBLIC @@ -67,6 +73,7 @@ target_sources(cpp-actors-core PRIVATE ${CMAKE_SOURCE_DIR}/library/cpp/actors/core/executor_thread.cpp ${CMAKE_SOURCE_DIR}/library/cpp/actors/core/harmonizer.cpp ${CMAKE_SOURCE_DIR}/library/cpp/actors/core/interconnect.cpp + ${CMAKE_SOURCE_DIR}/library/cpp/actors/core/indexes.cpp ${CMAKE_SOURCE_DIR}/library/cpp/actors/core/io_dispatcher.cpp ${CMAKE_SOURCE_DIR}/library/cpp/actors/core/log.cpp ${CMAKE_SOURCE_DIR}/library/cpp/actors/core/log_settings.cpp @@ -92,6 +99,11 @@ generate_enum_serilization(cpp-actors-core library/cpp/actors/core/actor.h ) generate_enum_serilization(cpp-actors-core + ${CMAKE_SOURCE_DIR}/library/cpp/actors/core/indexes.h + INCLUDE_HEADERS + library/cpp/actors/core/indexes.h +) +generate_enum_serilization(cpp-actors-core ${CMAKE_SOURCE_DIR}/library/cpp/actors/core/log_iface.h INCLUDE_HEADERS library/cpp/actors/core/log_iface.h diff --git a/library/cpp/actors/core/CMakeLists.linux-aarch64.txt b/library/cpp/actors/core/CMakeLists.linux-aarch64.txt index 4aa2f487056..25276b5598c 100644 --- a/library/cpp/actors/core/CMakeLists.linux-aarch64.txt +++ b/library/cpp/actors/core/CMakeLists.linux-aarch64.txt @@ -25,6 +25,12 @@ get_built_tool_path( tools/enum_parser/enum_parser enum_parser ) +get_built_tool_path( + TOOL_enum_parser_bin + TOOL_enum_parser_dependency + tools/enum_parser/enum_parser + enum_parser +) add_library(cpp-actors-core) target_link_libraries(cpp-actors-core PUBLIC @@ -68,6 +74,7 @@ target_sources(cpp-actors-core PRIVATE ${CMAKE_SOURCE_DIR}/library/cpp/actors/core/executor_thread.cpp ${CMAKE_SOURCE_DIR}/library/cpp/actors/core/harmonizer.cpp ${CMAKE_SOURCE_DIR}/library/cpp/actors/core/interconnect.cpp + ${CMAKE_SOURCE_DIR}/library/cpp/actors/core/indexes.cpp ${CMAKE_SOURCE_DIR}/library/cpp/actors/core/io_dispatcher.cpp ${CMAKE_SOURCE_DIR}/library/cpp/actors/core/log.cpp ${CMAKE_SOURCE_DIR}/library/cpp/actors/core/log_settings.cpp @@ -93,6 +100,11 @@ generate_enum_serilization(cpp-actors-core library/cpp/actors/core/actor.h ) generate_enum_serilization(cpp-actors-core + ${CMAKE_SOURCE_DIR}/library/cpp/actors/core/indexes.h + INCLUDE_HEADERS + library/cpp/actors/core/indexes.h +) +generate_enum_serilization(cpp-actors-core ${CMAKE_SOURCE_DIR}/library/cpp/actors/core/log_iface.h INCLUDE_HEADERS library/cpp/actors/core/log_iface.h diff --git a/library/cpp/actors/core/CMakeLists.linux-x86_64.txt b/library/cpp/actors/core/CMakeLists.linux-x86_64.txt index 4aa2f487056..25276b5598c 100644 --- a/library/cpp/actors/core/CMakeLists.linux-x86_64.txt +++ b/library/cpp/actors/core/CMakeLists.linux-x86_64.txt @@ -25,6 +25,12 @@ get_built_tool_path( tools/enum_parser/enum_parser enum_parser ) +get_built_tool_path( + TOOL_enum_parser_bin + TOOL_enum_parser_dependency + tools/enum_parser/enum_parser + enum_parser +) add_library(cpp-actors-core) target_link_libraries(cpp-actors-core PUBLIC @@ -68,6 +74,7 @@ target_sources(cpp-actors-core PRIVATE ${CMAKE_SOURCE_DIR}/library/cpp/actors/core/executor_thread.cpp ${CMAKE_SOURCE_DIR}/library/cpp/actors/core/harmonizer.cpp ${CMAKE_SOURCE_DIR}/library/cpp/actors/core/interconnect.cpp + ${CMAKE_SOURCE_DIR}/library/cpp/actors/core/indexes.cpp ${CMAKE_SOURCE_DIR}/library/cpp/actors/core/io_dispatcher.cpp ${CMAKE_SOURCE_DIR}/library/cpp/actors/core/log.cpp ${CMAKE_SOURCE_DIR}/library/cpp/actors/core/log_settings.cpp @@ -93,6 +100,11 @@ generate_enum_serilization(cpp-actors-core library/cpp/actors/core/actor.h ) generate_enum_serilization(cpp-actors-core + ${CMAKE_SOURCE_DIR}/library/cpp/actors/core/indexes.h + INCLUDE_HEADERS + library/cpp/actors/core/indexes.h +) +generate_enum_serilization(cpp-actors-core ${CMAKE_SOURCE_DIR}/library/cpp/actors/core/log_iface.h INCLUDE_HEADERS library/cpp/actors/core/log_iface.h diff --git a/library/cpp/actors/core/CMakeLists.windows-x86_64.txt b/library/cpp/actors/core/CMakeLists.windows-x86_64.txt index 747c10d87d2..ad0db0f5719 100644 --- a/library/cpp/actors/core/CMakeLists.windows-x86_64.txt +++ b/library/cpp/actors/core/CMakeLists.windows-x86_64.txt @@ -25,6 +25,12 @@ get_built_tool_path( tools/enum_parser/enum_parser enum_parser ) +get_built_tool_path( + TOOL_enum_parser_bin + TOOL_enum_parser_dependency + tools/enum_parser/enum_parser + enum_parser +) add_library(cpp-actors-core) target_link_libraries(cpp-actors-core PUBLIC @@ -67,6 +73,7 @@ target_sources(cpp-actors-core PRIVATE ${CMAKE_SOURCE_DIR}/library/cpp/actors/core/executor_thread.cpp ${CMAKE_SOURCE_DIR}/library/cpp/actors/core/harmonizer.cpp ${CMAKE_SOURCE_DIR}/library/cpp/actors/core/interconnect.cpp + ${CMAKE_SOURCE_DIR}/library/cpp/actors/core/indexes.cpp ${CMAKE_SOURCE_DIR}/library/cpp/actors/core/io_dispatcher.cpp ${CMAKE_SOURCE_DIR}/library/cpp/actors/core/log.cpp ${CMAKE_SOURCE_DIR}/library/cpp/actors/core/log_settings.cpp @@ -92,6 +99,11 @@ generate_enum_serilization(cpp-actors-core library/cpp/actors/core/actor.h ) generate_enum_serilization(cpp-actors-core + ${CMAKE_SOURCE_DIR}/library/cpp/actors/core/indexes.h + INCLUDE_HEADERS + library/cpp/actors/core/indexes.h +) +generate_enum_serilization(cpp-actors-core ${CMAKE_SOURCE_DIR}/library/cpp/actors/core/log_iface.h INCLUDE_HEADERS library/cpp/actors/core/log_iface.h diff --git a/library/cpp/actors/core/actor.h b/library/cpp/actors/core/actor.h index 794369179f4..54ab5a5f3bb 100644 --- a/library/cpp/actors/core/actor.h +++ b/library/cpp/actors/core/actor.h @@ -4,6 +4,7 @@ #include "event.h" #include "executor_thread.h" #include "monotonic.h" +#include "indexes.h" #include <library/cpp/actors/util/local_process_key.h> @@ -11,18 +12,6 @@ #include <util/generic/noncopyable.h> namespace NActors { -struct TActorActivityTag {}; -} - -template <> -class TLocalProcessKeyStateIndexConstructor<NActors::TActorActivityTag> { -public: - static ui32 BuildCurrentIndex(const TStringBuf name, const ui32 /*currentNamesCount*/) { - return NProfiling::MakeTag(name.data()); - } -}; - -namespace NActors { class TActorSystem; class TMailboxTable; struct TMailboxHeader; @@ -333,56 +322,43 @@ namespace NActors { friend class TExecutorPoolBaseMailboxed; friend class TExecutorThread; + IActor(const ui32 activityType) + : SelfActorId(TActorId()) + , ElapsedTicks(0) + , ActivityType(activityType) + , HandledEvents(0) { + } + protected: TActorCallbackBehaviour CImpl; public: using TEventFlags = IEventHandle::TEventFlags; using TReceiveFunc = TActorCallbackBehaviour::TReceiveFunc; /// @sa services.proto NKikimrServices::TActivity::EType - enum EActorActivity { - OTHER = 0, - ACTOR_SYSTEM = 1, - ACTORLIB_COMMON = 2, - ACTORLIB_STATS = 3, - LOG_ACTOR = 4, - INTERCONNECT_PROXY_TCP = 12, - INTERCONNECT_SESSION_TCP = 13, - INTERCONNECT_COMMON = 171, - SELF_PING_ACTOR = 207, - TEST_ACTOR_RUNTIME = 283, - INTERCONNECT_HANDSHAKE = 284, - INTERCONNECT_POLLER = 285, - INTERCONNECT_SESSION_KILLER = 286, - ACTOR_SYSTEM_SCHEDULER_ACTOR = 312, - ACTOR_FUTURE_CALLBACK = 337, - INTERCONNECT_MONACTOR = 362, - INTERCONNECT_LOAD_ACTOR = 376, - INTERCONNECT_LOAD_RESPONDER = 377, - NAMESERVICE = 450, - DNS_RESOLVER = 481, - INTERCONNECT_PROXY_WRAPPER = 546, - ACTOR_COROUTINE = 577 - }; - + using EActorActivity = EInternalActorType; using EActivityType = EActorActivity; ui32 ActivityType; protected: ui64 HandledEvents; - IActor(TActorCallbackBehaviour&& cImpl, ui32 activityType = OTHER) + template <typename EEnum = EActivityType, typename std::enable_if<std::is_enum<EEnum>::value, bool>::type v = true> + IActor(const EEnum activityEnumType = EActivityType::OTHER) + : IActor(TEnumProcessKey<TActorActivityTag, EEnum>::GetIndex(activityEnumType)) { + } + + IActor(TActorCallbackBehaviour&& cImpl, const ui32 activityType) : SelfActorId(TActorId()) , ElapsedTicks(0) , CImpl(std::move(cImpl)) , ActivityType(activityType) - , HandledEvents(0) { + , HandledEvents(0) + { } - IActor(ui32 activityType = OTHER) - : SelfActorId(TActorId()) - , ElapsedTicks(0) - , ActivityType(activityType) - , HandledEvents(0) { + template <typename EEnum = EActivityType, typename std::enable_if<std::is_enum<EEnum>::value, bool>::type v = true> + IActor(TActorCallbackBehaviour&& cImpl, const EEnum activityEnumType = EActivityType::OTHER) + : IActor(std::move(cImpl), TEnumProcessKey<TActorActivityTag, EEnum>::GetIndex(activityEnumType)) { } public: @@ -608,12 +584,19 @@ namespace NActors { } class IActorCallback: public IActor { - public: - IActorCallback(TReceiveFunc stateFunc, ui32 activityType = OTHER) + protected: + template <class TEnum = IActor::EActivityType> + IActorCallback(TReceiveFunc stateFunc, const TEnum activityType = IActor::EActivityType::OTHER) : IActor(TActorCallbackBehaviour(stateFunc), activityType) { } + IActorCallback(TReceiveFunc stateFunc, const ui32 activityType) + : IActor(TActorCallbackBehaviour(stateFunc), activityType) { + + } + + public: template <typename T> void Become(T stateFunc) { CImpl.Become(stateFunc); @@ -653,6 +636,7 @@ namespace NActors { return TLocalProcessKey<TActorActivityTag, TDerived::ActorName>::GetIndex(); } else if constexpr (HasActorActivityType<TDerived>::value) { using TActorActivity = decltype(((TDerived*)nullptr)->ActorActivityType()); + static_assert(std::is_enum<TActorActivity>::value); return TEnumProcessKey<TActorActivityTag, TActorActivity>::GetIndex(TDerived::ActorActivityType()); } else { // 200 characters is limit for solomon metric tag length @@ -668,9 +652,13 @@ namespace NActors { protected: // static constexpr char ActorName[] = "UNNAMED"; - TActor(void (TDerived::*func)(TAutoPtr<IEventHandle>& ev), ui32 activityType = GetActivityTypeIndex()) - : IActorCallback(static_cast<TReceiveFunc>(func), activityType) - { + TActor(void (TDerived::* func)(TAutoPtr<IEventHandle>& ev)) + : IActorCallback(static_cast<TReceiveFunc>(func), GetActivityTypeIndex()) { + } + + template <class TEnum = EActivityType> + TActor(void (TDerived::* func)(TAutoPtr<IEventHandle>& ev), const TEnum activityEnumType = EActivityType::OTHER) + : IActorCallback(static_cast<TReceiveFunc>(func), activityEnumType) { } public: diff --git a/library/cpp/actors/core/actor_bootstrapped.h b/library/cpp/actors/core/actor_bootstrapped.h index 8145baacff6..fff1193819b 100644 --- a/library/cpp/actors/core/actor_bootstrapped.h +++ b/library/cpp/actors/core/actor_bootstrapped.h @@ -35,5 +35,10 @@ namespace NActors { TActorBootstrapped() : TActor<TDerived>(&TDerived::StateBootstrap) { } + + template <class TEnum> + TActorBootstrapped(const TEnum activityType) + : TActor<TDerived>(&TDerived::StateBootstrap, activityType) { + } }; } diff --git a/library/cpp/actors/core/actor_coroutine.h b/library/cpp/actors/core/actor_coroutine.h index 2f460807380..a098c334cf4 100644 --- a/library/cpp/actors/core/actor_coroutine.h +++ b/library/cpp/actors/core/actor_coroutine.h @@ -211,7 +211,8 @@ namespace NActors { THolder<TActorCoroImpl> Impl; public: - TActorCoro(THolder<TActorCoroImpl> impl, ui32 activityType = IActor::ACTOR_COROUTINE) + template <class TEnumActivityType = IActor::EActivityType> + TActorCoro(THolder<TActorCoroImpl> impl, const TEnumActivityType activityType = IActor::EActivityType::ACTOR_COROUTINE) : IActorCallback(static_cast<TReceiveFunc>(&TActorCoro::StateFunc), activityType) , Impl(std::move(impl)) {} diff --git a/library/cpp/actors/core/actor_ut.cpp b/library/cpp/actors/core/actor_ut.cpp index 55dfb96513b..6901cc298d2 100644 --- a/library/cpp/actors/core/actor_ut.cpp +++ b/library/cpp/actors/core/actor_ut.cpp @@ -56,7 +56,7 @@ Y_UNIT_TEST_SUITE(ActorBenchmark) { class TSendReceiveActor : public TActorBootstrapped<TSendReceiveActor> { public: static constexpr auto ActorActivityType() { - return ACTORLIB_COMMON; + return EActivityType::ACTORLIB_COMMON; } TSendReceiveActor(double* elapsedTime, TActorId receiver, bool allocation, ERole role, ESendingType sendingType, ui32 neighbours = 0) @@ -646,10 +646,8 @@ Y_UNIT_TEST_SUITE(TestDecorator) { Y_UNIT_TEST(LocalProcessKey) { static constexpr char ActorName[] = "TestActor"; - UNIT_ASSERT((TEnumProcessKey<TActorActivityTag, IActor::EActorActivity>::GetName(IActor::INTERCONNECT_PROXY_TCP) == "INTERCONNECT_PROXY_TCP")); - + UNIT_ASSERT((TEnumProcessKey<TActorActivityTag, IActor::EActorActivity>::GetName(IActor::EActivityType::INTERCONNECT_PROXY_TCP) == "INTERCONNECT_PROXY_TCP")); UNIT_ASSERT((TLocalProcessKey<TActorActivityTag, ActorName>::GetName() == ActorName)); - UNIT_ASSERT((TEnumProcessKey<TActorActivityTag, IActor::EActorActivity>::GetIndex(IActor::INTERCONNECT_PROXY_TCP) == IActor::INTERCONNECT_PROXY_TCP)); } } diff --git a/library/cpp/actors/core/executor_pool_basic.cpp b/library/cpp/actors/core/executor_pool_basic.cpp index ae106564c00..4e630531865 100644 --- a/library/cpp/actors/core/executor_pool_basic.cpp +++ b/library/cpp/actors/core/executor_pool_basic.cpp @@ -232,7 +232,7 @@ namespace NActors { if (needToWait && wctx.HasCapturedMessageBox) { timers.HPNow = GetCycleCountFast(); - wctx.AddElapsedCycles(IActor::ACTOR_SYSTEM, timers.HPNow - timers.HPStart); + wctx.AddElapsedCycles(ActorSystemIndex, timers.HPNow - timers.HPStart); return 0; } @@ -260,7 +260,7 @@ namespace NActors { if (const ui32 activation = Activations.Pop(++revolvingCounter)) { timers.HPNow = GetCycleCountFast(); timers.Elapsed += timers.HPNow - timers.HPStart; - wctx.AddElapsedCycles(IActor::ACTOR_SYSTEM, timers.Elapsed); + wctx.AddElapsedCycles(ActorSystemIndex, timers.Elapsed); if (timers.Parked > 0) { wctx.AddParkedCycles(timers.Parked); } diff --git a/library/cpp/actors/core/executor_pool_basic.h b/library/cpp/actors/core/executor_pool_basic.h index 813f91dc9a9..b773b6f9167 100644 --- a/library/cpp/actors/core/executor_pool_basic.h +++ b/library/cpp/actors/core/executor_pool_basic.h @@ -4,6 +4,7 @@ #include "executor_thread.h" #include "scheduler_queue.h" #include "executor_pool_base.h" +#include "indexes.h" #include "harmonizer.h" #include <library/cpp/actors/util/unordered_cache.h> #include <library/cpp/actors/util/threadparkpad.h> @@ -82,7 +83,7 @@ namespace NActors { IHarmonizer *Harmonizer; const i16 Priority = 0; - + const ui32 ActorSystemIndex = NActors::TActorTypeOperator::GetActorSystemIndex(); public: struct TSemaphore { i64 OldSemaphore = 0; // 34 bits diff --git a/library/cpp/actors/core/executor_pool_io.cpp b/library/cpp/actors/core/executor_pool_io.cpp index c5a2a34e564..6987bbd29c1 100644 --- a/library/cpp/actors/core/executor_pool_io.cpp +++ b/library/cpp/actors/core/executor_pool_io.cpp @@ -52,7 +52,7 @@ namespace NActors { if (const ui32 activation = Activations.Pop(++revolvingCounter)) { hpnow = GetCycleCountFast(); elapsed += hpnow - hpstart; - wctx.AddElapsedCycles(IActor::ACTOR_SYSTEM, elapsed); + wctx.AddElapsedCycles(ActorSystemIndex, elapsed); if (parked > 0) { wctx.AddParkedCycles(parked); } diff --git a/library/cpp/actors/core/executor_pool_io.h b/library/cpp/actors/core/executor_pool_io.h index e576d642a1d..6c9069d9b63 100644 --- a/library/cpp/actors/core/executor_pool_io.h +++ b/library/cpp/actors/core/executor_pool_io.h @@ -4,6 +4,7 @@ #include "executor_thread.h" #include "scheduler_queue.h" #include "executor_pool_base.h" +#include "indexes.h" #include <library/cpp/actors/util/ticket_lock.h> #include <library/cpp/actors/util/unordered_cache.h> #include <library/cpp/actors/util/threadparkpad.h> @@ -23,7 +24,7 @@ namespace NActors { TTicketLock ScheduleLock; const TString PoolName; - + const ui32 ActorSystemIndex = NActors::TActorTypeOperator::GetActorSystemIndex(); public: TIOExecutorPool(ui32 poolId, ui32 threads, const TString& poolName = "", TAffinity* affinity = nullptr, ui32 maxActivityType = 1); diff --git a/library/cpp/actors/core/executor_pool_united.cpp b/library/cpp/actors/core/executor_pool_united.cpp index 9dd06368be5..d1e9e15385c 100644 --- a/library/cpp/actors/core/executor_pool_united.cpp +++ b/library/cpp/actors/core/executor_pool_united.cpp @@ -1338,21 +1338,21 @@ namespace NActors { } } - wctx.AddElapsedCycles(IActor::ACTOR_SYSTEM, timeTracker.Elapsed()); + wctx.AddElapsedCycles(ActorSystemIndex, timeTracker.Elapsed()); return result; } TPoolId TUnitedWorkers::WaitSequence(TCpu& cpu, TWorkerContext& wctx, TTimeTracker& timeTracker) { TPoolId result; if (cpu.ActiveWait(Us2Ts(Config.SpinThresholdUs), result)) { - wctx.AddElapsedCycles(IActor::ACTOR_SYSTEM, timeTracker.Elapsed()); + wctx.AddElapsedCycles(ActorSystemIndex, timeTracker.Elapsed()); return result; } if (cpu.StartBlocking(result)) { - wctx.AddElapsedCycles(IActor::ACTOR_SYSTEM, timeTracker.Elapsed()); + wctx.AddElapsedCycles(ActorSystemIndex, timeTracker.Elapsed()); return result; } - wctx.AddElapsedCycles(IActor::ACTOR_SYSTEM, timeTracker.Elapsed()); + wctx.AddElapsedCycles(ActorSystemIndex, timeTracker.Elapsed()); cpu.LoadLog.RegisterBusyPeriod(GetCycleCountFast()); bool wakeup; do { diff --git a/library/cpp/actors/core/executor_pool_united_workers.h b/library/cpp/actors/core/executor_pool_united_workers.h index d82afd6c6d2..2b96eda762e 100644 --- a/library/cpp/actors/core/executor_pool_united_workers.h +++ b/library/cpp/actors/core/executor_pool_united_workers.h @@ -2,6 +2,7 @@ #include "defs.h" #include "balancer.h" +#include "indexes.h" #include "scheduler_queue.h" #include <library/cpp/actors/util/cpu_load_log.h> @@ -31,7 +32,7 @@ namespace NActors { volatile bool StopFlag = false; TMinusOneCpuEstimator<1024> MinusOneCpuEstimator; - + const ui32 ActorSystemIndex = NActors::TActorTypeOperator::GetActorSystemIndex(); public: TUnitedWorkers( const TUnitedWorkersConfig& config, diff --git a/library/cpp/actors/core/indexes.cpp b/library/cpp/actors/core/indexes.cpp new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/library/cpp/actors/core/indexes.cpp diff --git a/library/cpp/actors/core/indexes.h b/library/cpp/actors/core/indexes.h new file mode 100644 index 00000000000..61cc78fccc5 --- /dev/null +++ b/library/cpp/actors/core/indexes.h @@ -0,0 +1,59 @@ +#pragma once +#include <library/cpp/actors/util/local_process_key.h> +#include <library/cpp/actors/prof/tag.h> + +namespace NActors { + +struct TActorActivityTag {}; + +} + +template <> +class TLocalProcessKeyStateIndexConstructor<NActors::TActorActivityTag> { +public: + static ui32 BuildCurrentIndex(const TStringBuf name, const ui32 /*currentNamesCount*/) { + return NProfiling::MakeTag(name.data()); + } +}; +namespace NActors { +enum class EInternalActorType { + OTHER = 0, + ACTOR_SYSTEM, + ACTORLIB_COMMON, + ACTORLIB_STATS, + LOG_ACTOR, + INTERCONNECT_PROXY_TCP, + INTERCONNECT_SESSION_TCP, + INTERCONNECT_COMMON, + SELF_PING_ACTOR, + TEST_ACTOR_RUNTIME, + INTERCONNECT_HANDSHAKE, + INTERCONNECT_POLLER, + INTERCONNECT_SESSION_KILLER, + ACTOR_SYSTEM_SCHEDULER_ACTOR, + ACTOR_FUTURE_CALLBACK, + INTERCONNECT_MONACTOR, + INTERCONNECT_LOAD_ACTOR, + INTERCONNECT_LOAD_RESPONDER, + NAMESERVICE, + DNS_RESOLVER, + INTERCONNECT_PROXY_WRAPPER, + ACTOR_COROUTINE +}; + +class TActorTypeOperator { +public: + template <class TEnum> + static ui32 GetEnumActivityType(const TEnum enumValue) { + return TEnumProcessKey<TActorActivityTag, TEnum>::GetIndex(enumValue); + } + + static ui32 GetActorSystemIndex() { + return TEnumProcessKey<TActorActivityTag, EInternalActorType>::GetIndex(EInternalActorType::ACTOR_SYSTEM); + } + + static ui32 GetOtherActivityIndex() { + return TEnumProcessKey<TActorActivityTag, EInternalActorType>::GetIndex(EInternalActorType::OTHER); + } +}; +} diff --git a/library/cpp/actors/core/invoke.h b/library/cpp/actors/core/invoke.h index a971f906311..e22d5008532 100644 --- a/library/cpp/actors/core/invoke.h +++ b/library/cpp/actors/core/invoke.h @@ -77,19 +77,20 @@ namespace NActors { // actor's class. But `complete` handler is invoked in parent context and can use its contents. Do not forget to // handle TEvInvokeResult event by calling Process/GetResult method, whichever is necessary. - template<typename TCallback, typename TCompletion, ui32 Activity> - class TInvokeActor : public TActorBootstrapped<TInvokeActor<TCallback, TCompletion, Activity>> { + template<typename TCallback, typename TCompletion, class TEnum> + class TInvokeActor : public TActorBootstrapped<TInvokeActor<TCallback, TCompletion, TEnum>> { + private: + using TBase = TActorBootstrapped<TInvokeActor<TCallback, TCompletion, TEnum>>; TCallback Callback; TCompletion Complete; - + const TEnum Activity; + static_assert(std::is_enum<TEnum>::value); public: - static constexpr auto ActorActivityType() { - return static_cast<IActor::EActorActivity>(Activity); - } - - TInvokeActor(TCallback&& callback, TCompletion&& complete) - : Callback(std::move(callback)) + TInvokeActor(TCallback&& callback, TCompletion&& complete, const TEnum activity) + : TBase(activity) + , Callback(std::move(callback)) , Complete(std::move(complete)) + , Activity(activity) {} void Bootstrap(const TActorId& parentId, const TActorContext& ctx) { @@ -101,10 +102,10 @@ namespace NActors { } }; - template<ui32 Activity, typename TCallback, typename TCompletion> - std::unique_ptr<IActor> CreateInvokeActor(TCallback&& callback, TCompletion&& complete) { - return std::make_unique<TInvokeActor<std::decay_t<TCallback>, std::decay_t<TCompletion>, Activity>>( - std::forward<TCallback>(callback), std::forward<TCompletion>(complete)); + template<typename TEnum, typename TCallback, typename TCompletion> + std::unique_ptr<IActor> CreateInvokeActor(TCallback&& callback, TCompletion&& complete, const TEnum activity) { + return std::make_unique<TInvokeActor<std::decay_t<TCallback>, std::decay_t<TCompletion>, TEnum>>( + std::forward<TCallback>(callback), std::forward<TCompletion>(complete), activity); } template <class TInvokeExecutor> diff --git a/library/cpp/actors/core/log.h b/library/cpp/actors/core/log.h index 36b9ac0980a..6899fb9ca40 100644 --- a/library/cpp/actors/core/log.h +++ b/library/cpp/actors/core/log.h @@ -197,8 +197,8 @@ namespace NActors { //////////////////////////////////////////////////////////////////////////////// class TLoggerActor: public TActor<TLoggerActor> { public: - static constexpr IActor::EActivityType ActorActivityType() { - return IActor::LOG_ACTOR; + static IActor::EActivityType ActorActivityType() { + return IActor::EActivityType::LOG_ACTOR; } TLoggerActor(TIntrusivePtr<NLog::TSettings> settings, diff --git a/library/cpp/actors/core/process_stats.cpp b/library/cpp/actors/core/process_stats.cpp index 349d207a71e..b690d92d8d9 100644 --- a/library/cpp/actors/core/process_stats.cpp +++ b/library/cpp/actors/core/process_stats.cpp @@ -146,7 +146,7 @@ namespace { class TProcStatCollectingActor: public TActorBootstrapped<TProcStatCollectingActor<TDerived>> { public: static constexpr IActor::EActivityType ActorActivityType() { - return IActor::ACTORLIB_STATS; + return IActor::EActivityType::ACTORLIB_STATS; } TProcStatCollectingActor(TDuration interval) diff --git a/library/cpp/actors/core/scheduler_actor.cpp b/library/cpp/actors/core/scheduler_actor.cpp index fef051da619..db2bcf2791b 100644 --- a/library/cpp/actors/core/scheduler_actor.cpp +++ b/library/cpp/actors/core/scheduler_actor.cpp @@ -61,7 +61,7 @@ namespace NActors { public: static constexpr IActor::EActivityType ActorActivityType() { - return IActor::ACTOR_SYSTEM_SCHEDULER_ACTOR; + return IActor::EActivityType::ACTOR_SYSTEM_SCHEDULER_ACTOR; } TSchedulerActor(const TSchedulerConfig& cfg) diff --git a/library/cpp/actors/core/ya.make b/library/cpp/actors/core/ya.make index d5a67c03a52..7dcfdd7c3dd 100644 --- a/library/cpp/actors/core/ya.make +++ b/library/cpp/actors/core/ya.make @@ -63,6 +63,7 @@ SRCS( interconnect.cpp interconnect.h invoke.h + indexes.cpp io_dispatcher.cpp io_dispatcher.h lease.h @@ -101,6 +102,7 @@ SRCS( GENERATE_ENUM_SERIALIZATION(defs.h) GENERATE_ENUM_SERIALIZATION(actor.h) +GENERATE_ENUM_SERIALIZATION(indexes.h) GENERATE_ENUM_SERIALIZATION(log_iface.h) PEERDIR( diff --git a/library/cpp/actors/dnsresolver/dnsresolver.cpp b/library/cpp/actors/dnsresolver/dnsresolver.cpp index 71e7f4d037f..fb66be86169 100644 --- a/library/cpp/actors/dnsresolver/dnsresolver.cpp +++ b/library/cpp/actors/dnsresolver/dnsresolver.cpp @@ -163,7 +163,7 @@ namespace NDnsResolver { } static constexpr EActivityType ActorActivityType() { - return DNS_RESOLVER; + return EActivityType::DNS_RESOLVER; } private: diff --git a/library/cpp/actors/dnsresolver/dnsresolver_caching.cpp b/library/cpp/actors/dnsresolver/dnsresolver_caching.cpp index a7e38806c03..d16fc28e5f8 100644 --- a/library/cpp/actors/dnsresolver/dnsresolver_caching.cpp +++ b/library/cpp/actors/dnsresolver/dnsresolver_caching.cpp @@ -98,7 +98,7 @@ namespace NDnsResolver { { } static constexpr EActivityType ActorActivityType() { - return DNS_RESOLVER; + return EActivityType::DNS_RESOLVER; } private: diff --git a/library/cpp/actors/dnsresolver/dnsresolver_ondemand.cpp b/library/cpp/actors/dnsresolver/dnsresolver_ondemand.cpp index f55251e2809..8b0ddf5a6d7 100644 --- a/library/cpp/actors/dnsresolver/dnsresolver_ondemand.cpp +++ b/library/cpp/actors/dnsresolver/dnsresolver_ondemand.cpp @@ -13,7 +13,7 @@ namespace NDnsResolver { { } static constexpr EActivityType ActorActivityType() { - return DNS_RESOLVER; + return EActivityType::DNS_RESOLVER; } private: diff --git a/library/cpp/actors/helpers/flow_controlled_queue.cpp b/library/cpp/actors/helpers/flow_controlled_queue.cpp index 104d239481b..49ed7c79f0d 100644 --- a/library/cpp/actors/helpers/flow_controlled_queue.cpp +++ b/library/cpp/actors/helpers/flow_controlled_queue.cpp @@ -153,7 +153,8 @@ class TFlowControlledRequestQueue : public IActorCallback { PassAway(); } public: - TFlowControlledRequestQueue(TActorId target, ui32 activity, const TFlowControlledQueueConfig &config) + template <class TEnum> + TFlowControlledRequestQueue(TActorId target, const TEnum activity, const TFlowControlledQueueConfig &config) : IActorCallback(static_cast<TReceiveFunc>(&TFlowControlledRequestQueue::StateWork), activity) , Target(target) , Config(config) @@ -206,8 +207,8 @@ void TFlowControlledRequestActor::HandleUndelivered(TEvents::TEvUndelivered::TPt PassAway(); } - -IActor* CreateFlowControlledRequestQueue(TActorId targetId, ui32 activity, const TFlowControlledQueueConfig &config) { +template <class TEnum> +IActor* CreateFlowControlledRequestQueue(TActorId targetId, const TEnum activity, const TFlowControlledQueueConfig &config) { return new TFlowControlledRequestQueue(targetId, activity, config); } diff --git a/library/cpp/actors/helpers/flow_controlled_queue.h b/library/cpp/actors/helpers/flow_controlled_queue.h index d2504053047..bbfffa18d7f 100644 --- a/library/cpp/actors/helpers/flow_controlled_queue.h +++ b/library/cpp/actors/helpers/flow_controlled_queue.h @@ -13,6 +13,7 @@ namespace NActors { ui32 LatencyFactor = 4; }; - IActor* CreateFlowControlledRequestQueue(TActorId targetId, ui32 activity = IActor::ACTORLIB_COMMON, const TFlowControlledQueueConfig &config = TFlowControlledQueueConfig()); + template <class TEnum = IActor::EActivityType> + IActor* CreateFlowControlledRequestQueue(TActorId targetId, const TEnum activity = IActor::EActivityType::ACTORLIB_COMMON, const TFlowControlledQueueConfig &config = TFlowControlledQueueConfig()); } diff --git a/library/cpp/actors/helpers/future_callback.h b/library/cpp/actors/helpers/future_callback.h index 8ca0d99fdae..6626dd439d2 100644 --- a/library/cpp/actors/helpers/future_callback.h +++ b/library/cpp/actors/helpers/future_callback.h @@ -12,7 +12,7 @@ struct TActorFutureCallback : TActor<TActorFutureCallback<EventType>> { TCallback Callback; static constexpr IActor::EActivityType ActorActivityType() { - return IActor::ACTOR_FUTURE_CALLBACK; + return IActor::EActivityType::ACTOR_FUTURE_CALLBACK; } TActorFutureCallback(TCallback&& callback) diff --git a/library/cpp/actors/helpers/pool_stats_collector.h b/library/cpp/actors/helpers/pool_stats_collector.h index a122f7f2f0b..471fd7211c5 100644 --- a/library/cpp/actors/helpers/pool_stats_collector.h +++ b/library/cpp/actors/helpers/pool_stats_collector.h @@ -338,7 +338,7 @@ private: public: static constexpr IActor::EActivityType ActorActivityType() { - return IActor::ACTORLIB_STATS; + return IActor::EActivityType::ACTORLIB_STATS; } TStatsCollectingActor( diff --git a/library/cpp/actors/helpers/selfping_actor.cpp b/library/cpp/actors/helpers/selfping_actor.cpp index dcad5931c97..0ab1dc57e41 100644 --- a/library/cpp/actors/helpers/selfping_actor.cpp +++ b/library/cpp/actors/helpers/selfping_actor.cpp @@ -122,7 +122,7 @@ private: public: static constexpr auto ActorActivityType() { - return SELF_PING_ACTOR; + return EActivityType::SELF_PING_ACTOR; } TSelfPingActor(TDuration sendInterval, diff --git a/library/cpp/actors/interconnect/interconnect_handshake.cpp b/library/cpp/actors/interconnect/interconnect_handshake.cpp index 9b2cf91a694..00ebaa5217f 100644 --- a/library/cpp/actors/interconnect/interconnect_handshake.cpp +++ b/library/cpp/actors/interconnect/interconnect_handshake.cpp @@ -1218,12 +1218,12 @@ namespace NActors { const TActorId& peer, ui32 nodeId, ui64 nextPacket, TString peerHostName, TSessionParams params) { return new TActorCoro(MakeHolder<THandshakeActor>(std::move(common), self, peer, nodeId, nextPacket, - std::move(peerHostName), std::move(params)), IActor::INTERCONNECT_HANDSHAKE); + std::move(peerHostName), std::move(params)), IActor::EActivityType::INTERCONNECT_HANDSHAKE); } IActor* CreateIncomingHandshakeActor(TInterconnectProxyCommon::TPtr common, TSocketPtr socket) { return new TActorCoro(MakeHolder<THandshakeActor>(std::move(common), std::move(socket)), - IActor::INTERCONNECT_HANDSHAKE); + IActor::EActivityType::INTERCONNECT_HANDSHAKE); } } diff --git a/library/cpp/actors/interconnect/interconnect_mon.cpp b/library/cpp/actors/interconnect/interconnect_mon.cpp index 6be0b894b87..f8245e1d723 100644 --- a/library/cpp/actors/interconnect/interconnect_mon.cpp +++ b/library/cpp/actors/interconnect/interconnect_mon.cpp @@ -21,7 +21,7 @@ namespace NInterconnect { public: static constexpr IActor::EActorActivity ActorActivityType() { - return INTERCONNECT_MONACTOR; + return EActivityType::INTERCONNECT_MONACTOR; } TQueryProcessor(const TActorId& sender, bool json) @@ -190,7 +190,7 @@ namespace NInterconnect { public: static constexpr IActor::EActorActivity ActorActivityType() { - return INTERCONNECT_MONACTOR; + return EActivityType::INTERCONNECT_MONACTOR; } TInterconnectMonActor(TIntrusivePtr<TInterconnectProxyCommon> common) diff --git a/library/cpp/actors/interconnect/interconnect_nameserver_dynamic.cpp b/library/cpp/actors/interconnect/interconnect_nameserver_dynamic.cpp index 6ab3d84724d..1a563454df3 100644 --- a/library/cpp/actors/interconnect/interconnect_nameserver_dynamic.cpp +++ b/library/cpp/actors/interconnect/interconnect_nameserver_dynamic.cpp @@ -88,7 +88,7 @@ namespace NActors { public: static constexpr EActivityType ActorActivityType() { - return NAMESERVICE; + return EActivityType::NAMESERVICE; } TInterconnectDynamicNameserver(const TIntrusivePtr<TTableNameserverSetup>& setup, const TDuration& pendingPeriod, ui32 /*resolvePoolId*/ ) diff --git a/library/cpp/actors/interconnect/interconnect_nameserver_table.cpp b/library/cpp/actors/interconnect/interconnect_nameserver_table.cpp index 43419bf70d3..e5507b9838e 100644 --- a/library/cpp/actors/interconnect/interconnect_nameserver_table.cpp +++ b/library/cpp/actors/interconnect/interconnect_nameserver_table.cpp @@ -14,7 +14,7 @@ namespace NActors { public: static constexpr EActivityType ActorActivityType() { - return NAMESERVICE; + return EActivityType::NAMESERVICE; } TInterconnectNameserverTable(const TIntrusivePtr<TTableNameserverSetup>& setup, ui32 /*resolvePoolId*/) diff --git a/library/cpp/actors/interconnect/interconnect_proxy_wrapper.cpp b/library/cpp/actors/interconnect/interconnect_proxy_wrapper.cpp index b68d4242b60..0692cea963b 100644 --- a/library/cpp/actors/interconnect/interconnect_proxy_wrapper.cpp +++ b/library/cpp/actors/interconnect/interconnect_proxy_wrapper.cpp @@ -12,7 +12,7 @@ namespace NActors { public: TInterconnectProxyWrapper(TIntrusivePtr<TInterconnectProxyCommon> common, ui32 nodeId, TInterconnectMock *mock) - : IActorCallback(static_cast<TReceiveFunc>(&TInterconnectProxyWrapper::StateFunc), INTERCONNECT_PROXY_WRAPPER) + : IActorCallback(static_cast<TReceiveFunc>(&TInterconnectProxyWrapper::StateFunc), EActivityType::INTERCONNECT_PROXY_WRAPPER) , Common(std::move(common)) , NodeId(nodeId) , Mock(mock) diff --git a/library/cpp/actors/interconnect/interconnect_resolve.cpp b/library/cpp/actors/interconnect/interconnect_resolve.cpp index d638ff830cd..921f08fba6f 100644 --- a/library/cpp/actors/interconnect/interconnect_resolve.cpp +++ b/library/cpp/actors/interconnect/interconnect_resolve.cpp @@ -39,7 +39,7 @@ namespace NActors { { } static constexpr EActivityType ActorActivityType() { - return NAMESERVICE; + return EActivityType::NAMESERVICE; } void Bootstrap() { diff --git a/library/cpp/actors/interconnect/interconnect_tcp_proxy.h b/library/cpp/actors/interconnect/interconnect_tcp_proxy.h index 9ea7fa0c312..009d5f1c21a 100644 --- a/library/cpp/actors/interconnect/interconnect_tcp_proxy.h +++ b/library/cpp/actors/interconnect/interconnect_tcp_proxy.h @@ -58,7 +58,7 @@ namespace NActors { }; static constexpr EActivityType ActorActivityType() { - return INTERCONNECT_PROXY_TCP; + return EActivityType::INTERCONNECT_PROXY_TCP; } TInterconnectProxyTCP(const ui32 node, TInterconnectProxyCommon::TPtr common, IActor **dynamicPtr = nullptr); diff --git a/library/cpp/actors/interconnect/interconnect_tcp_server.h b/library/cpp/actors/interconnect/interconnect_tcp_server.h index d3538940b70..41f46ab6d42 100644 --- a/library/cpp/actors/interconnect/interconnect_tcp_server.h +++ b/library/cpp/actors/interconnect/interconnect_tcp_server.h @@ -12,7 +12,7 @@ namespace NActors { class TInterconnectListenerTCP: public TActor<TInterconnectListenerTCP>, public TInterconnectLoggingBase { public: static constexpr EActivityType ActorActivityType() { - return INTERCONNECT_COMMON; + return EActivityType::INTERCONNECT_COMMON; } TInterconnectListenerTCP(const TString& address, ui16 port, TInterconnectProxyCommon::TPtr common, const TMaybe<SOCKET>& socket = Nothing()); diff --git a/library/cpp/actors/interconnect/interconnect_tcp_session.h b/library/cpp/actors/interconnect/interconnect_tcp_session.h index 12000570063..adc9fd3710d 100644 --- a/library/cpp/actors/interconnect/interconnect_tcp_session.h +++ b/library/cpp/actors/interconnect/interconnect_tcp_session.h @@ -203,7 +203,7 @@ namespace NActors { public: static constexpr EActivityType ActorActivityType() { - return INTERCONNECT_SESSION_TCP; + return EActivityType::INTERCONNECT_SESSION_TCP; } TInputSessionTCP(const TActorId& sessionId, @@ -411,7 +411,7 @@ namespace NActors { public: static constexpr EActivityType ActorActivityType() { - return INTERCONNECT_SESSION_TCP; + return EActivityType::INTERCONNECT_SESSION_TCP; } TInterconnectSessionTCP(TInterconnectProxyTCP* const proxy, TSessionParams params); @@ -646,7 +646,7 @@ namespace NActors { public: static constexpr EActivityType ActorActivityType() { - return INTERCONNECT_SESSION_KILLER; + return EActivityType::INTERCONNECT_SESSION_KILLER; } TInterconnectSessionKiller(TInterconnectProxyCommon::TPtr common) diff --git a/library/cpp/actors/interconnect/load.cpp b/library/cpp/actors/interconnect/load.cpp index d460903f35d..20ca0ef8a94 100644 --- a/library/cpp/actors/interconnect/load.cpp +++ b/library/cpp/actors/interconnect/load.cpp @@ -64,7 +64,7 @@ namespace NInterconnect { {} static constexpr IActor::EActivityType ActorActivityType() { - return IActor::INTERCONNECT_LOAD_RESPONDER; + return IActor::EActivityType::INTERCONNECT_LOAD_RESPONDER; } private: @@ -101,7 +101,7 @@ namespace NInterconnect { public: static constexpr IActor::EActivityType ActorActivityType() { - return IActor::INTERCONNECT_LOAD_RESPONDER; + return IActor::EActivityType::INTERCONNECT_LOAD_RESPONDER; } TLoadResponderMasterActor() @@ -151,7 +151,7 @@ namespace NInterconnect { public: static constexpr IActor::EActivityType ActorActivityType() { - return IActor::INTERCONNECT_LOAD_ACTOR; + return IActor::EActivityType::INTERCONNECT_LOAD_ACTOR; } TLoadActor(const TLoadParams& params) diff --git a/library/cpp/actors/interconnect/poller_actor.cpp b/library/cpp/actors/interconnect/poller_actor.cpp index 1646aa7016f..9dbd9838aa6 100644 --- a/library/cpp/actors/interconnect/poller_actor.cpp +++ b/library/cpp/actors/interconnect/poller_actor.cpp @@ -247,7 +247,7 @@ namespace NActors { public: static constexpr IActor::EActivityType ActorActivityType() { - return IActor::INTERCONNECT_POLLER; + return IActor::EActivityType::INTERCONNECT_POLLER; } void Bootstrap() { diff --git a/library/cpp/actors/testlib/test_runtime.cpp b/library/cpp/actors/testlib/test_runtime.cpp index e093b2e6bf4..92745747675 100644 --- a/library/cpp/actors/testlib/test_runtime.cpp +++ b/library/cpp/actors/testlib/test_runtime.cpp @@ -85,7 +85,7 @@ namespace NActors { class TTestActorRuntimeBase::TEdgeActor : public TActor<TEdgeActor> { public: static constexpr EActivityType ActorActivityType() { - return TEST_ACTOR_RUNTIME; + return EActivityType::TEST_ACTOR_RUNTIME; } TEdgeActor(TTestActorRuntimeBase* runtime) @@ -1802,7 +1802,7 @@ namespace NActors { class TReplyActor : public TActor<TReplyActor> { public: static constexpr EActivityType ActorActivityType() { - return TEST_ACTOR_RUNTIME; + return EActivityType::TEST_ACTOR_RUNTIME; } TReplyActor(TStrandingActorDecorator* owner) @@ -1818,7 +1818,7 @@ namespace NActors { }; static constexpr EActivityType ActorActivityType() { - return TEST_ACTOR_RUNTIME; + return EActivityType::TEST_ACTOR_RUNTIME; } TStrandingActorDecorator(const TActorId& delegatee, bool isSync, const TVector<TActorId>& additionalActors, diff --git a/library/cpp/actors/util/local_process_key.h b/library/cpp/actors/util/local_process_key.h index 28fd590d379..1ba756e8d5d 100644 --- a/library/cpp/actors/util/local_process_key.h +++ b/library/cpp/actors/util/local_process_key.h @@ -49,12 +49,12 @@ public: Names.resize(MaxKeysCount); } -private: - - static constexpr ui32 MaxKeysCount = 1000000; - size_t Register(TStringBuf name) { TGuard<TMutex> g(Mutex); + auto it = Map.find(name); + if (it != Map.end()) { + return it->second; + } const ui32 index = TLocalProcessKeyStateIndexConstructor<T>::BuildCurrentIndex(name, Names.size()); auto x = Map.emplace(name, index); if (x.second) { @@ -66,6 +66,10 @@ private: } private: + + static constexpr ui32 MaxKeysCount = 1000000; + +private: TVector<TString> Names; THashMap<TString, size_t> Map; TMutex Mutex; @@ -115,11 +119,11 @@ private: template <typename T, typename EnumT> class TEnumProcessKey { public: - static TStringBuf GetName(EnumT key) { + static TStringBuf GetName(const EnumT key) { return TLocalProcessKeyState<T>::GetInstance().GetNameByIndex(GetIndex(key)); } - static size_t GetIndex(EnumT key) { + static size_t GetIndex(const EnumT key) { ui32 index = static_cast<ui32>(key); Y_VERIFY(index < Enum2Index.size()); return Enum2Index[index]; |