Skip to content

Commit cb958ba

Browse files
committed
Move store max_pending_requests to limits config
1 parent 2651ebf commit cb958ba

File tree

3 files changed

+9
-35
lines changed

3 files changed

+9
-35
lines changed

cmd/thanos/receive.go

Lines changed: 3 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -420,20 +420,8 @@ func runReceive(
420420
store.LazyRetrieval,
421421
options...,
422422
)
423-
if conf.maxPendingGrpcReadRequests > 0 {
424-
level.Info(logger).Log(
425-
"msg", "set max pending gRPC read request in instrumented store server",
426-
"max_pending_requests", conf.maxPendingGrpcReadRequests,
427-
)
428-
}
429-
mts := store.NewLimitedStoreServerWithOptions(
430-
store.NewInstrumentedStoreServer(reg, proxy),
431-
reg,
432-
conf.storeRateLimits,
433-
store.LimitsOptions{
434-
MaxPendingSeriesRequests: int32(conf.maxPendingGrpcReadRequests),
435-
},
436-
)
423+
424+
mts := store.NewLimitedStoreServer(store.NewInstrumentedStoreServer(reg, proxy), reg, conf.storeRateLimits)
437425
rw := store.ReadWriteTSDBStore{
438426
StoreServer: mts,
439427
WriteableStoreServer: webHandler,
@@ -999,7 +987,6 @@ type receiveConfig struct {
999987
topMetricsMinimumCardinality uint64
1000988
topMetricsUpdateInterval time.Duration
1001989
matcherConverterCacheCapacity int
1002-
maxPendingGrpcReadRequests int
1003990
maxPendingGrpcWriteRequests int
1004991

1005992
featureList *[]string
@@ -1165,9 +1152,7 @@ func (rc *receiveConfig) registerFlag(cmd extkingpin.FlagClause) {
11651152
Default("5m").DurationVar(&rc.topMetricsUpdateInterval)
11661153
cmd.Flag("receive.store-matcher-converter-cache-capacity", "The number of label matchers to cache in the matcher converter for the Store API. Set to 0 to disable to cache. Default is 0.").
11671154
Default("0").IntVar(&rc.matcherConverterCacheCapacity)
1168-
cmd.Flag("receive.max-pending-grcp-read-requests", "Throttle gRPC read requests when this number of requests are pending. Value 0 disables this feature.").
1169-
Default("0").IntVar(&rc.maxPendingGrpcReadRequests)
1170-
cmd.Flag("receive.max-pending-grcp-write-requests", "Throttle gRPC write requests when this number of requests are pending. Value 0 disables this feature.").
1155+
cmd.Flag("receive.max-pending-grcp-write-requests", "Reject right away gRPC write requests when this number of requests are pending. Value 0 disables this feature.").
11711156
Default("0").IntVar(&rc.maxPendingGrpcWriteRequests)
11721157
rc.featureList = cmd.Flag("enable-feature", "Comma separated experimental feature names to enable. The current list of features is "+metricNamesFilter+".").Default("").Strings()
11731158
}

pkg/receive/limiter.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,15 +112,15 @@ func NewLimiterWithOptions(
112112
r ReceiverMode,
113113
logger log.Logger,
114114
configReloadTimer time.Duration,
115-
config LimiterOptions) (*Limiter, error) {
115+
opts LimiterOptions) (*Limiter, error) {
116116
limiter := &Limiter{
117117
writeGate: gate.NewNoop(),
118118
requestLimiter: &noopRequestLimiter{},
119119
headSeriesLimiter: NewNopSeriesLimit(),
120120
logger: logger,
121121
receiverMode: r,
122122
configReloadTimer: configReloadTimer,
123-
maxPendingRequests: config.MaxPendingRequests,
123+
maxPendingRequests: opts.MaxPendingRequests,
124124
}
125125

126126
if reg != nil {

pkg/store/limiter.go

Lines changed: 4 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -110,11 +110,14 @@ func NewBytesLimiterFactory(limit units.Base2Bytes) BytesLimiterFactory {
110110
type SeriesSelectLimits struct {
111111
SeriesPerRequest uint64
112112
SamplesPerRequest uint64
113+
PendingRequests int32
113114
}
114115

115116
func (l *SeriesSelectLimits) RegisterFlags(cmd extkingpin.FlagClause) {
116117
cmd.Flag("store.limits.request-series", "The maximum series allowed for a single Series request. The Series call fails if this limit is exceeded. 0 means no limit.").Default("0").Uint64Var(&l.SeriesPerRequest)
117118
cmd.Flag("store.limits.request-samples", "The maximum samples allowed for a single Series request, The Series call fails if this limit is exceeded. 0 means no limit. NOTE: For efficiency the limit is internally implemented as 'chunks limit' considering each chunk contains a maximum of 120 samples.").Default("0").Uint64Var(&l.SamplesPerRequest)
119+
cmd.Flag("store.limits.pending-requests", "Reject gRPC series requests right away when this number of requests are pending. Value 0 disables this feature.").
120+
Default("0").Int32Var(&l.PendingRequests)
118121
}
119122

120123
var _ storepb.StoreServer = &limitedStoreServer{}
@@ -134,22 +137,8 @@ type limitedStoreServer struct {
134137
pendingRequestsGauge prometheus.Gauge
135138
}
136139

137-
type LimitsOptions struct {
138-
// Value 0 disables the feature.
139-
MaxPendingSeriesRequests int32
140-
}
141-
142140
// NewLimitedStoreServer creates a new limitedStoreServer.
143141
func NewLimitedStoreServer(store storepb.StoreServer, reg prometheus.Registerer, selectLimits SeriesSelectLimits) storepb.StoreServer {
144-
return NewLimitedStoreServerWithOptions(store, reg, selectLimits, LimitsOptions{})
145-
}
146-
147-
func NewLimitedStoreServerWithOptions(
148-
store storepb.StoreServer,
149-
reg prometheus.Registerer,
150-
selectLimits SeriesSelectLimits,
151-
opts LimitsOptions,
152-
) storepb.StoreServer {
153142
return &limitedStoreServer{
154143
StoreServer: store,
155144
newSeriesLimiter: NewSeriesLimiterFactory(selectLimits.SeriesPerRequest),
@@ -166,7 +155,7 @@ func NewLimitedStoreServerWithOptions(
166155
Name: "thanos_store_server_hit_max_pending_series_requests_total",
167156
Help: "Number of pending series requests that hit the max pending request limit",
168157
}),
169-
maxPendingRequests: opts.MaxPendingSeriesRequests,
158+
maxPendingRequests: selectLimits.PendingRequests,
170159
}
171160
}
172161

0 commit comments

Comments
 (0)