diff --git a/ydb/core/mind/node_broker.cpp b/ydb/core/mind/node_broker.cpp index 865daaee8527..63fd3b5a2ede 100644 --- a/ydb/core/mind/node_broker.cpp +++ b/ydb/core/mind/node_broker.cpp @@ -7,7 +7,9 @@ #include #include #include +#include #include +#include #include #include @@ -66,6 +68,7 @@ void TNodeBroker::OnActivateExecutor(const TActorContext &ctx) EnableStableNodeNames = appData->FeatureFlags.GetEnableStableNodeNames(); + Executor()->RegisterExternalTabletCounters(TabletCountersPtr); ClearState(); ProcessTx(CreateTxInitScheme(), ctx); @@ -296,6 +299,7 @@ void TNodeBroker::ProcessListNodesRequest(TEvNodeBroker::TEvListNodes::TPtr &ev) if (version != Epoch.Version) resp->PreSerializedData = EpochCache; + TabletCounters->Percentile()[COUNTER_LIST_NODES_BYTES].IncrementFor(resp->GetCachedByteSize()); LOG_TRACE_S(TActorContext::AsActorContext(), NKikimrServices::NODE_BROKER, "Send TEvNodesInfo for epoch " << Epoch.ToString()); @@ -427,6 +431,7 @@ void TNodeBroker::PrepareEpochCache() FillNodeInfo(entry.second, *info.AddExpiredNodes()); Y_PROTOBUF_SUPPRESS_NODISCARD info.SerializeToString(&EpochCache); + TabletCounters->Simple()[COUNTER_EPOCH_SIZE_BYTES].Set(EpochCache.Size()); } void TNodeBroker::AddNodeToEpochCache(const TNodeInfo &node) @@ -441,6 +446,7 @@ void TNodeBroker::AddNodeToEpochCache(const TNodeInfo &node) Y_PROTOBUF_SUPPRESS_NODISCARD info.SerializeToString(&delta); EpochCache += delta; + TabletCounters->Simple()[COUNTER_EPOCH_SIZE_BYTES].Set(EpochCache.Size()); } void TNodeBroker::SubscribeForConfigUpdates(const TActorContext &ctx) @@ -822,6 +828,7 @@ void TNodeBroker::Handle(TEvConsole::TEvReplaceConfigSubscriptionsResponse::TPtr void TNodeBroker::Handle(TEvNodeBroker::TEvListNodes::TPtr &ev, const TActorContext &) { + TabletCounters->Cumulative()[COUNTER_LIST_NODES_REQUESTS].Increment(1); auto &rec = ev->Get()->Record; ui64 epoch = rec.GetMinEpoch(); @@ -836,6 +843,7 @@ void TNodeBroker::Handle(TEvNodeBroker::TEvListNodes::TPtr &ev, void TNodeBroker::Handle(TEvNodeBroker::TEvResolveNode::TPtr &ev, const TActorContext &ctx) { + TabletCounters->Cumulative()[COUNTER_RESOLVE_NODE_REQUESTS].Increment(1); ui32 nodeId = ev->Get()->Record.GetNodeId(); TAutoPtr resp = new TEvNodeBroker::TEvResolvedNode; @@ -859,6 +867,7 @@ void TNodeBroker::Handle(TEvNodeBroker::TEvRegistrationRequest::TPtr &ev, { LOG_TRACE_S(ctx, NKikimrServices::NODE_BROKER, "Handle TEvNodeBroker::TEvRegistrationRequest" << ": request# " << ev->Get()->Record.ShortDebugString()); + TabletCounters->Cumulative()[COUNTER_REGISTRATION_REQUESTS].Increment(1); class TResolveTenantActor : public TActorBootstrapped { TEvNodeBroker::TEvRegistrationRequest::TPtr Ev; @@ -945,6 +954,7 @@ void TNodeBroker::Handle(TEvNodeBroker::TEvRegistrationRequest::TPtr &ev, void TNodeBroker::Handle(TEvNodeBroker::TEvExtendLeaseRequest::TPtr &ev, const TActorContext &ctx) { + TabletCounters->Cumulative()[COUNTER_EXTEND_LEASE_REQUESTS].Increment(1); ui32 nodeId = ev->Get()->Record.GetNodeId(); ProcessTx(nodeId, CreateTxExtendLease(ev), ctx); } @@ -995,6 +1005,23 @@ void TNodeBroker::Handle(TEvPrivate::TEvResolvedRegistrationRequest::TPtr &ev, ProcessTx(CreateTxRegisterNode(ev), ctx); } +TNodeBroker::TNodeBroker(const TActorId &tablet, TTabletStorageInfo *info) + : TActor(&TThis::StateInit) + , TTabletExecutedFlat(info, tablet, new NMiniKQL::TMiniKQLFactory) + , EpochDuration(TDuration::Hours(1)) + , ConfigSubscriptionId(0) + , StableNodeNamePrefix("slot-") + , TxProcessor(new TTxProcessor(*this, "root", NKikimrServices::NODE_BROKER)) +{ + TabletCountersPtr.Reset(new TProtobufTabletCounters< + ESimpleCounters_descriptor, + ECumulativeCounters_descriptor, + EPercentileCounters_descriptor, + ETxTypes_descriptor + >()); + TabletCounters = TabletCountersPtr.Get(); +} + IActor *CreateNodeBroker(const TActorId &tablet, TTabletStorageInfo *info) { diff --git a/ydb/core/mind/node_broker__extend_lease.cpp b/ydb/core/mind/node_broker__extend_lease.cpp index a9845d7ceff0..7788593e0257 100644 --- a/ydb/core/mind/node_broker__extend_lease.cpp +++ b/ydb/core/mind/node_broker__extend_lease.cpp @@ -2,6 +2,7 @@ #include "node_broker__scheme.h" #include +#include namespace NKikimr { namespace NNodeBroker { @@ -17,6 +18,8 @@ class TNodeBroker::TTxExtendLease : public TTransactionBase { { } + TTxType GetTxType() const override { return TXTYPE_EXTEND_LEASE; } + bool Error(TStatus::ECode code, const TString &reason, const TActorContext &ctx) diff --git a/ydb/core/mind/node_broker__init_scheme.cpp b/ydb/core/mind/node_broker__init_scheme.cpp index bc0c011c34ad..8e44825ce559 100644 --- a/ydb/core/mind/node_broker__init_scheme.cpp +++ b/ydb/core/mind/node_broker__init_scheme.cpp @@ -1,6 +1,8 @@ #include "node_broker_impl.h" #include "node_broker__scheme.h" +#include + namespace NKikimr { namespace NNodeBroker { @@ -11,6 +13,8 @@ class TNodeBroker::TTxInitScheme : public TTransactionBase { { } + TTxType GetTxType() const override { return TXTYPE_INIT_SCHEME; } + bool Execute(TTransactionContext &txc, const TActorContext &ctx) override { LOG_DEBUG(ctx, NKikimrServices::NODE_BROKER, "TTxInitScheme Execute"); diff --git a/ydb/core/mind/node_broker__load_state.cpp b/ydb/core/mind/node_broker__load_state.cpp index 7cca5bea2c8d..8a58c91c6c99 100644 --- a/ydb/core/mind/node_broker__load_state.cpp +++ b/ydb/core/mind/node_broker__load_state.cpp @@ -2,6 +2,7 @@ #include "node_broker__scheme.h" #include +#include namespace NKikimr { namespace NNodeBroker { @@ -13,6 +14,8 @@ class TNodeBroker::TTxLoadState : public TTransactionBase { { } + TTxType GetTxType() const override { return TXTYPE_LOAD_STATE; } + bool Execute(TTransactionContext &txc, const TActorContext &ctx) override { LOG_DEBUG(ctx, NKikimrServices::NODE_BROKER, "TTxLoadState Execute"); diff --git a/ydb/core/mind/node_broker__register_node.cpp b/ydb/core/mind/node_broker__register_node.cpp index 04691ecf1b2d..e10237f4e614 100644 --- a/ydb/core/mind/node_broker__register_node.cpp +++ b/ydb/core/mind/node_broker__register_node.cpp @@ -2,6 +2,7 @@ #include "node_broker__scheme.h" #include +#include namespace NKikimr { namespace NNodeBroker { @@ -21,6 +22,8 @@ class TNodeBroker::TTxRegisterNode : public TTransactionBase { { } + TTxType GetTxType() const override { return TXTYPE_REGISTER_NODE; } + bool Error(TStatus::ECode code, const TString &reason, const TActorContext &ctx) diff --git a/ydb/core/mind/node_broker__update_config.cpp b/ydb/core/mind/node_broker__update_config.cpp index 2211b447ac1e..c5a891f83b03 100644 --- a/ydb/core/mind/node_broker__update_config.cpp +++ b/ydb/core/mind/node_broker__update_config.cpp @@ -1,6 +1,8 @@ #include "node_broker_impl.h" #include "node_broker__scheme.h" +#include + namespace NKikimr { namespace NNodeBroker { @@ -24,6 +26,8 @@ class TNodeBroker::TTxUpdateConfig : public TTransactionBase { { } + TTxType GetTxType() const override { return TXTYPE_UPDATE_CONFIG; } + bool ProcessNotification(const TActorContext &ctx) { auto &rec = Notification->Get()->Record; diff --git a/ydb/core/mind/node_broker__update_config_subscription.cpp b/ydb/core/mind/node_broker__update_config_subscription.cpp index 8fa376ec85b8..dec51fc71f14 100644 --- a/ydb/core/mind/node_broker__update_config_subscription.cpp +++ b/ydb/core/mind/node_broker__update_config_subscription.cpp @@ -1,6 +1,8 @@ #include "node_broker_impl.h" #include "node_broker__scheme.h" +#include + namespace NKikimr { namespace NNodeBroker { @@ -14,6 +16,8 @@ class TNodeBroker::TTxUpdateConfigSubscription : public TTransactionBase + namespace NKikimr { namespace NNodeBroker { @@ -11,6 +13,8 @@ class TNodeBroker::TTxUpdateEpoch : public TTransactionBase { { } + TTxType GetTxType() const override { return TXTYPE_UPDATE_EPOCH; } + bool Execute(TTransactionContext &txc, const TActorContext &ctx) override { LOG_DEBUG_S(ctx, NKikimrServices::NODE_BROKER, "TTxUpdateEpoch Execute"); diff --git a/ydb/core/mind/node_broker_impl.h b/ydb/core/mind/node_broker_impl.h index ae18b17b5ef5..d111ce59cec1 100644 --- a/ydb/core/mind/node_broker_impl.h +++ b/ydb/core/mind/node_broker_impl.h @@ -341,16 +341,11 @@ class TNodeBroker : public TActor TSchedulerCookieHolder EpochTimerCookieHolder; TString EpochCache; + TTabletCountersBase* TabletCounters; + TAutoPtr TabletCountersPtr; + public: - TNodeBroker(const TActorId &tablet, TTabletStorageInfo *info) - : TActor(&TThis::StateInit) - , TTabletExecutedFlat(info, tablet, new NMiniKQL::TMiniKQLFactory) - , EpochDuration(TDuration::Hours(1)) - , ConfigSubscriptionId(0) - , StableNodeNamePrefix("slot-") - , TxProcessor(new TTxProcessor(*this, "root", NKikimrServices::NODE_BROKER)) - { - } + TNodeBroker(const TActorId &tablet, TTabletStorageInfo *info); static constexpr NKikimrServices::TActivity::EType ActorActivityType() { diff --git a/ydb/core/protos/counters_node_broker.proto b/ydb/core/protos/counters_node_broker.proto new file mode 100644 index 000000000000..936b268ae692 --- /dev/null +++ b/ydb/core/protos/counters_node_broker.proto @@ -0,0 +1,54 @@ +import "ydb/core/protos/counters.proto"; + +package NKikimr.NNodeBroker; + +option java_package = "ru.yandex.kikimr.proto"; + +option (NKikimr.TabletTypeName) = "NodeBroker"; // Used as prefix for all counters + +enum ESimpleCounters { + COUNTER_EPOCH_SIZE_BYTES = 0 [(CounterOpts) = {Name: "EpochSizeBytes"}]; +} + +enum ECumulativeCounters { + COUNTER_LIST_NODES_REQUESTS = 0 [(CounterOpts) = {Name: "ListNodesRequests"}]; + COUNTER_RESOLVE_NODE_REQUESTS = 1 [(CounterOpts) = {Name: "ResolveNodeRequests"}]; + COUNTER_REGISTRATION_REQUESTS = 2 [(CounterOpts) = {Name: "RegistrationRequests"}]; + COUNTER_EXTEND_LEASE_REQUESTS = 3 [(CounterOpts) = {Name: "ExtendLeaseRequests"}]; +} + +enum EPercentileCounters { + COUNTER_LIST_NODES_BYTES = 0 [(CounterOpts) = { + Name: "ListNodesBytes", + Ranges: { Value: 0 Name: "0" } + Ranges: { Value: 128 Name: "128" } + Ranges: { Value: 1024 Name: "1024" } + Ranges: { Value: 2048 Name: "2048" } + Ranges: { Value: 4096 Name: "4096" } + Ranges: { Value: 8192 Name: "8192" } + Ranges: { Value: 16384 Name: "16384" } + Ranges: { Value: 32768 Name: "32768" } + Ranges: { Value: 65536 Name: "65536" } + Ranges: { Value: 131072 Name: "131072" } + Ranges: { Value: 262144 Name: "262144" } + Ranges: { Value: 524288 Name: "524288" } + Ranges: { Value: 1048576 Name: "1048576" } + Ranges: { Value: 2097152 Name: "2097152" } + Ranges: { Value: 4194304 Name: "4194304" } + Ranges: { Value: 8388608 Name: "8388608" } + Ranges: { Value: 16777216 Name: "16777216" } + Ranges: { Value: 33554432 Name: "33554432" } + Ranges: { Value: 67108864 Name: "67108864" } + Ranges: { Value: 134217728 Name: "134217728" } + }]; +} + +enum ETxTypes { + TXTYPE_EXTEND_LEASE = 0 [(TxTypeOpts) = {Name: "TTxExtendLease"}]; + TXTYPE_INIT_SCHEME = 1 [(TxTypeOpts) = {Name: "TTxInitScheme"}]; + TXTYPE_LOAD_STATE = 2 [(TxTypeOpts) = {Name: "TTxLoadState"}]; + TXTYPE_REGISTER_NODE = 3 [(TxTypeOpts) = {Name: "TTxRegisterNode"}]; + TXTYPE_UPDATE_CONFIG = 4 [(TxTypeOpts) = {Name: "TTxUpdateConfig"}]; + TXTYPE_UPDATE_CONFIG_SUBSCRIPTION = 5 [(TxTypeOpts) = {Name: "TTxUpdateConfigSubscription"}]; + TXTYPE_UPDATE_EPOCH = 6 [(TxTypeOpts) = {Name: "TTxUpdateEpoch"}]; +} diff --git a/ydb/core/protos/ya.make b/ydb/core/protos/ya.make index d5d2f709a27a..aa55a2d8a046 100644 --- a/ydb/core/protos/ya.make +++ b/ydb/core/protos/ya.make @@ -51,6 +51,7 @@ SRCS( counters_kesus.proto counters_keyvalue.proto counters_mediator.proto + counters_node_broker.proto counters_pq.proto counters_replication.proto counters_schemeshard.proto