@@ -9,26 +9,31 @@ namespace NGRpcService {
9
9
10
10
TGRpcYdbTableService::TGRpcYdbTableService (NActors::TActorSystem *system,
11
11
TIntrusivePtr<::NMonitoring::TDynamicCounters> counters,
12
+ TIntrusivePtr<TInFlightLimiterRegistry> inFlightLimiterRegistry,
12
13
const NActors::TActorId& proxyId,
13
14
bool rlAllowed,
14
15
size_t handlersPerCompletionQueue)
15
16
: TGrpcServiceBase(system, counters, proxyId, rlAllowed)
16
17
, HandlersPerCompletionQueue(Max(size_t {1 }, handlersPerCompletionQueue))
18
+ , LimiterRegistry_(inFlightLimiterRegistry)
17
19
{
18
20
}
19
21
20
22
TGRpcYdbTableService::TGRpcYdbTableService (NActors::TActorSystem *system,
21
23
TIntrusivePtr<::NMonitoring::TDynamicCounters> counters,
24
+ TIntrusivePtr<TInFlightLimiterRegistry> inFlightLimiterRegistry,
22
25
const TVector<NActors::TActorId>& proxies,
23
26
bool rlAllowed,
24
27
size_t handlersPerCompletionQueue)
25
28
: TGrpcServiceBase(system, counters, proxies, rlAllowed)
26
29
, HandlersPerCompletionQueue(Max(size_t {1 }, handlersPerCompletionQueue))
30
+ , LimiterRegistry_(inFlightLimiterRegistry)
27
31
{
28
32
}
29
33
30
34
void TGRpcYdbTableService::SetupIncomingRequests (NYdbGrpc::TLoggerPtr logger) {
31
35
auto getCounterBlock = CreateCounterCb (Counters_, ActorSystem_);
36
+ auto getLimiter = CreateLimiterCb (LimiterRegistry_);
32
37
33
38
size_t proxyCounter = 0 ;
34
39
@@ -60,23 +65,24 @@ void TGRpcYdbTableService::SetupIncomingRequests(NYdbGrpc::TLoggerPtr logger) {
60
65
} \
61
66
}
62
67
63
- #define ADD_STREAM_REQUEST_LIMIT (NAME, IN, OUT, CB, LIMIT_TYPE, REQUEST_TYPE ) \
64
- for (size_t i = 0 ; i < HandlersPerCompletionQueue; ++i) { \
65
- for (auto * cq: CQS) { \
66
- MakeIntrusive<TGRpcRequest<Ydb::Table::IN, Ydb::Table::OUT, TGRpcYdbTableService>> \
67
- (this , &Service_, cq, \
68
- [this , proxyCounter](NYdbGrpc::IRequestContextBase *ctx) { \
69
- NGRpcService::ReportGrpcReqToMon (*ActorSystem_, ctx->GetPeer ()); \
70
- ActorSystem_->Send (GRpcProxies_[proxyCounter % GRpcProxies_.size ()], \
71
- new TGrpcRequestNoOperationCall<Ydb::Table::IN, Ydb::Table::OUT> \
72
- (ctx, &CB, TRequestAuxSettings { \
73
- .RlMode = RLSWITCH (TRateLimiterMode::LIMIT_TYPE), \
74
- .RequestType = NJaegerTracing::ERequestType::TABLE_##REQUEST_TYPE, \
75
- })); \
76
- }, &Ydb::Table::V1::TableService::AsyncService::Request ## NAME, \
77
- #NAME, logger, getCounterBlock (" table" , #NAME))->Run (); \
78
- ++proxyCounter; \
79
- } \
68
+ #define ADD_STREAM_REQUEST_LIMIT (NAME, IN, OUT, CB, LIMIT_TYPE, REQUEST_TYPE, USE_LIMITER ) \
69
+ for (size_t i = 0 ; i < HandlersPerCompletionQueue; ++i) { \
70
+ for (auto * cq: CQS) { \
71
+ MakeIntrusive<TGRpcRequest<Ydb::Table::IN, Ydb::Table::OUT, TGRpcYdbTableService>> \
72
+ (this , &Service_, cq, \
73
+ [this , proxyCounter](NYdbGrpc::IRequestContextBase *ctx) { \
74
+ NGRpcService::ReportGrpcReqToMon (*ActorSystem_, ctx->GetPeer ()); \
75
+ ActorSystem_->Send (GRpcProxies_[proxyCounter % GRpcProxies_.size ()], \
76
+ new TGrpcRequestNoOperationCall<Ydb::Table::IN, Ydb::Table::OUT> \
77
+ (ctx, &CB, TRequestAuxSettings { \
78
+ .RlMode = RLSWITCH (TRateLimiterMode::LIMIT_TYPE), \
79
+ .RequestType = NJaegerTracing::ERequestType::TABLE_##REQUEST_TYPE, \
80
+ })); \
81
+ }, &Ydb::Table::V1::TableService::AsyncService::Request ## NAME, \
82
+ #NAME, logger, getCounterBlock (" table" , #NAME), \
83
+ (USE_LIMITER ? getLimiter (" TableService" , #NAME, UNLIMITED_INFLIGHT) : nullptr ))->Run (); \
84
+ ++proxyCounter; \
85
+ } \
80
86
}
81
87
82
88
ADD_REQUEST_LIMIT (CreateSession, DoCreateSessionRequest, Rps, CREATESESSION)
@@ -101,9 +107,9 @@ void TGRpcYdbTableService::SetupIncomingRequests(NYdbGrpc::TLoggerPtr logger) {
101
107
ADD_REQUEST_LIMIT (ExecuteDataQuery, DoExecuteDataQueryRequest, Ru, EXECUTEDATAQUERY, Auditable)
102
108
ADD_REQUEST_LIMIT (BulkUpsert, DoBulkUpsertRequest, Ru, BULKUPSERT, Auditable)
103
109
104
- ADD_STREAM_REQUEST_LIMIT (StreamExecuteScanQuery, ExecuteScanQueryRequest, ExecuteScanQueryPartialResponse, DoExecuteScanQueryRequest, RuOnProgress, STREAMEXECUTESCANQUERY)
105
- ADD_STREAM_REQUEST_LIMIT (StreamReadTable, ReadTableRequest, ReadTableResponse, DoReadTableRequest, RuOnProgress, STREAMREADTABLE)
106
- ADD_STREAM_REQUEST_LIMIT (ReadRows, ReadRowsRequest, ReadRowsResponse, DoReadRowsRequest, Ru, READROWS)
110
+ ADD_STREAM_REQUEST_LIMIT (StreamExecuteScanQuery, ExecuteScanQueryRequest, ExecuteScanQueryPartialResponse, DoExecuteScanQueryRequest, RuOnProgress, STREAMEXECUTESCANQUERY, false )
111
+ ADD_STREAM_REQUEST_LIMIT (StreamReadTable, ReadTableRequest, ReadTableResponse, DoReadTableRequest, RuOnProgress, STREAMREADTABLE, false )
112
+ ADD_STREAM_REQUEST_LIMIT (ReadRows, ReadRowsRequest, ReadRowsResponse, DoReadRowsRequest, Ru, READROWS, true )
107
113
108
114
#undef ADD_REQUEST_LIMIT
109
115
#undef ADD_STREAM_REQUEST_LIMIT
0 commit comments