22
22
namespace NKikimr {
23
23
namespace NKesus {
24
24
25
+ // Note: this is an extremely high default to avoid breaking clients
26
+ // TODO: make it configurable
27
+ static constexpr i64 DEFAULT_MAX_SESSIONS_INFLIGHT = 100000 ;
28
+
25
29
// //////////////////////////////////////////////////////////////////////////////
26
30
27
31
class TGRpcSessionActor
@@ -613,29 +617,42 @@ class TGRpcSessionActor
613
617
614
618
// //////////////////////////////////////////////////////////////////////////////
615
619
620
+ TKesusGRpcService::TKesusGRpcService (
621
+ NActors::TActorSystem* system,
622
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> counters,
623
+ TIntrusivePtr<NGRpcService::TInFlightLimiterRegistry> limiterRegistry,
624
+ const NActors::TActorId& proxyId,
625
+ bool rlAllowed)
626
+ : TBase(system, counters, proxyId, rlAllowed)
627
+ , LimiterRegistry_(limiterRegistry)
628
+ {}
629
+
616
630
void TKesusGRpcService::SetupIncomingRequests (NYdbGrpc::TLoggerPtr logger) {
617
- auto getCounterBlock = NGRpcService::CreateCounterCb (Counters_, ActorSystem_);
618
631
using NGRpcService::TRateLimiterMode;
632
+ auto getCounterBlock = NGRpcService::CreateCounterCb (Counters_, ActorSystem_);
633
+ auto getLimiter = CreateLimiterCb (LimiterRegistry_);
619
634
620
635
#ifdef ADD_REQUEST
621
636
#error ADD_REQUEST macro is already defined
622
637
#endif
623
638
624
639
#define ADD_REQUEST (NAME, IN, OUT, CB ) \
625
- MakeIntrusive<NGRpcService::TGRpcRequest<Ydb::Coordination::IN, Ydb::Coordination::OUT, TKesusGRpcService>>( \
626
- this , \
627
- &Service_, \
628
- CQ_, \
629
- [this ](NYdbGrpc::IRequestContextBase* reqCtx) { \
630
- NGRpcService::ReportGrpcReqToMon (*ActorSystem_, reqCtx->GetPeer ()); \
631
- ActorSystem_->Send (GRpcRequestProxyId_, \
632
- new NGRpcService::TGrpcRequestOperationCall<Ydb::Coordination::IN, Ydb::Coordination::OUT> \
633
- (reqCtx, &CB, NGRpcService::TRequestAuxSettings{RLSWITCH (TRateLimiterMode::Rps), nullptr })); \
634
- }, \
635
- &Ydb::Coordination::V1::CoordinationService::AsyncService::Request ## NAME, \
636
- " Coordination/" #NAME, \
637
- logger, \
638
- getCounterBlock (" coordination" , #NAME))->Run ();
640
+ for (auto * cq : CQS) { \
641
+ MakeIntrusive<NGRpcService::TGRpcRequest<Ydb::Coordination::IN, Ydb::Coordination::OUT, TKesusGRpcService>>( \
642
+ this , \
643
+ &Service_, \
644
+ cq, \
645
+ [this ](NYdbGrpc::IRequestContextBase* reqCtx) { \
646
+ NGRpcService::ReportGrpcReqToMon (*ActorSystem_, reqCtx->GetPeer ()); \
647
+ ActorSystem_->Send (GRpcRequestProxyId_, \
648
+ new NGRpcService::TGrpcRequestOperationCall<Ydb::Coordination::IN, Ydb::Coordination::OUT> \
649
+ (reqCtx, &CB, NGRpcService::TRequestAuxSettings{RLSWITCH (TRateLimiterMode::Rps), nullptr })); \
650
+ }, \
651
+ &Ydb::Coordination::V1::CoordinationService::AsyncService::Request ## NAME, \
652
+ " Coordination/" #NAME, \
653
+ logger, \
654
+ getCounterBlock (" coordination" , #NAME))->Run (); \
655
+ }
639
656
640
657
ADD_REQUEST (CreateNode, CreateNodeRequest, CreateNodeResponse, NGRpcService::DoCreateCoordinationNode);
641
658
ADD_REQUEST (AlterNode, AlterNodeRequest, AlterNodeResponse, NGRpcService::DoAlterCoordinationNode);
@@ -644,19 +661,21 @@ void TKesusGRpcService::SetupIncomingRequests(NYdbGrpc::TLoggerPtr logger) {
644
661
645
662
#undef ADD_REQUEST
646
663
647
- TGRpcSessionActor::TGRpcRequest::Start (
648
- this ,
649
- this ->GetService (),
650
- CQ_,
651
- &Ydb::Coordination::V1::CoordinationService::AsyncService::RequestSession,
652
- [this ](TIntrusivePtr<TGRpcSessionActor::IContext> context) {
653
- NGRpcService::ReportGrpcReqToMon (*ActorSystem_, context->GetPeerName ());
654
- ActorSystem_->Send (GRpcRequestProxyId_, new NGRpcService::TEvCoordinationSessionRequest (context));
655
- },
656
- *ActorSystem_,
657
- " Coordination/Session" ,
658
- getCounterBlock (" coordination" , " Session" , true ),
659
- /* TODO: limiter */ nullptr );
664
+ for (auto * cq : CQS) {
665
+ TGRpcSessionActor::TGRpcRequest::Start (
666
+ this ,
667
+ this ->GetService (),
668
+ cq,
669
+ &Ydb::Coordination::V1::CoordinationService::AsyncService::RequestSession,
670
+ [this ](TIntrusivePtr<TGRpcSessionActor::IContext> context) {
671
+ NGRpcService::ReportGrpcReqToMon (*ActorSystem_, context->GetPeerName ());
672
+ ActorSystem_->Send (GRpcRequestProxyId_, new NGRpcService::TEvCoordinationSessionRequest (context));
673
+ },
674
+ *ActorSystem_,
675
+ " Coordination/Session" ,
676
+ getCounterBlock (" coordination" , " Session" , true ),
677
+ getLimiter (" CoordinationService" , " Session" , DEFAULT_MAX_SESSIONS_INFLIGHT));
678
+ }
660
679
}
661
680
662
681
} // namespace NKesus
0 commit comments