Skip to content

Commit 580b7a1

Browse files
committed
Resolving comments
Signed-off-by: Paurush Garg <[email protected]>
1 parent 24e6573 commit 580b7a1

File tree

8 files changed

+84
-83
lines changed

8 files changed

+84
-83
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
* [ENHANCEMENT] Metadata Cache: Support inmemory and multi level cache backend. #6829
5353
* [ENHANCEMENT] Store Gateway: Allow to ignore syncing blocks older than certain time using `ignore_blocks_before`. #6830
5454
* [ENHANCEMENT] Distributor: Add native histograms max sample size bytes limit validation. #6834
55+
* [ENHANCEMENT] Ingester: Add activeSeries limit specifically for Native Histogram. #6796
5556
* [BUGFIX] Ingester: Avoid error or early throttling when READONLY ingesters are present in the ring #6517
5657
* [BUGFIX] Ingester: Fix labelset data race condition. #6573
5758
* [BUGFIX] Compactor: Cleaner should not put deletion marker for blocks with no-compact marker. #6576

docs/configuration/config-file-reference.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3606,10 +3606,10 @@ The `limits_config` configures default and per-tenant limits imposed by Cortex s
36063606
# CLI flag: -ingester.max-series-per-metric
36073607
[max_series_per_metric: <int> | default = 50000]
36083608
3609-
# The maximum number of active nativeHistograms series per user, per ingester. 0
3609+
# The maximum number of active native histogram series per user, per ingester. 0
36103610
# to disable.
3611-
# CLI flag: -ingester.max-native-histograms-series-per-user
3612-
[max_native_histograms_series_per_user: <int> | default = 5000000]
3611+
# CLI flag: -ingester.max-native-histogram-series-per-user
3612+
[max_native_histogram_series_per_user: <int> | default = 5000000]
36133613
36143614
# The maximum number of active series per user, across the cluster before
36153615
# replication. 0 to disable. Supported only if -distributor.shard-by-all-labels
@@ -3622,11 +3622,11 @@ The `limits_config` configures default and per-tenant limits imposed by Cortex s
36223622
# CLI flag: -ingester.max-global-series-per-metric
36233623
[max_global_series_per_metric: <int> | default = 0]
36243624
3625-
# The maximum number of active nativeHistograms series per user, across the
3625+
# The maximum number of active native histogram series per user, across the
36263626
# cluster before replication. 0 to disable. Supported only if
36273627
# -distributor.shard-by-all-labels is true.
3628-
# CLI flag: -ingester.max-global-native-histograms-series-per-user
3629-
[max_global_native_histograms_series_per_user: <int> | default = 0]
3628+
# CLI flag: -ingester.max-global-native-histogram-series-per-user
3629+
[max_global_native_histogram_series_per_user: <int> | default = 0]
36303630
36313631
# [Experimental] Enable limits per LabelSet. Supported limits per labelSet:
36323632
# [max_series]

pkg/ingester/ingester.go

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -449,7 +449,7 @@ func (u *userTSDB) PreCreation(metric labels.Labels) error {
449449
}
450450

451451
// Total nativeHistograms series limit.
452-
if err := u.limiter.AssertMaxNativeHistogramsSeriesPerUser(u.userID, u.activeSeries.ActiveNativeHistogram()); err != nil {
452+
if err := u.limiter.AssertMaxNativeHistogramSeriesPerUser(u.userID, u.activeSeries.ActiveNativeHistogram()); err != nil {
453453
return err
454454
}
455455

@@ -1224,22 +1224,22 @@ func (i *Ingester) Push(ctx context.Context, req *cortexpb.WriteRequest) (*corte
12241224
// Keep track of some stats which are tracked only if the samples will be
12251225
// successfully committed
12261226
var (
1227-
succeededSamplesCount = 0
1228-
failedSamplesCount = 0
1229-
succeededHistogramsCount = 0
1230-
failedHistogramsCount = 0
1231-
succeededExemplarsCount = 0
1232-
failedExemplarsCount = 0
1233-
startAppend = time.Now()
1234-
sampleOutOfBoundsCount = 0
1235-
sampleOutOfOrderCount = 0
1236-
sampleTooOldCount = 0
1237-
newValueForTimestampCount = 0
1238-
perUserSeriesLimitCount = 0
1239-
perUserNativeHistogramsSeriesLimitCount = 0
1240-
perLabelSetSeriesLimitCount = 0
1241-
perMetricSeriesLimitCount = 0
1242-
discardedNativeHistogramCount = 0
1227+
succeededSamplesCount = 0
1228+
failedSamplesCount = 0
1229+
succeededHistogramsCount = 0
1230+
failedHistogramsCount = 0
1231+
succeededExemplarsCount = 0
1232+
failedExemplarsCount = 0
1233+
startAppend = time.Now()
1234+
sampleOutOfBoundsCount = 0
1235+
sampleOutOfOrderCount = 0
1236+
sampleTooOldCount = 0
1237+
newValueForTimestampCount = 0
1238+
perUserSeriesLimitCount = 0
1239+
perUserNativeHistogramSeriesLimitCount = 0
1240+
perLabelSetSeriesLimitCount = 0
1241+
perMetricSeriesLimitCount = 0
1242+
discardedNativeHistogramCount = 0
12431243

12441244
updateFirstPartial = func(errFn func() error) {
12451245
if firstPartialErr == nil {
@@ -1275,8 +1275,8 @@ func (i *Ingester) Push(ctx context.Context, req *cortexpb.WriteRequest) (*corte
12751275
return makeLimitError(perUserSeriesLimit, i.limiter.FormatError(userID, cause, copiedLabels))
12761276
})
12771277

1278-
case errors.Is(cause, errMaxNativeHistogramsSeriesPerUserLimitExceeded):
1279-
perUserNativeHistogramsSeriesLimitCount++
1278+
case errors.Is(cause, errMaxNativeHistogramSeriesPerUserLimitExceeded):
1279+
perUserNativeHistogramSeriesLimitCount++
12801280
updateFirstPartial(func() error {
12811281
return makeLimitError(perUserSeriesLimit, i.limiter.FormatError(userID, cause, copiedLabels))
12821282
})
@@ -1524,8 +1524,8 @@ func (i *Ingester) Push(ctx context.Context, req *cortexpb.WriteRequest) (*corte
15241524
if perUserSeriesLimitCount > 0 {
15251525
i.validateMetrics.DiscardedSamples.WithLabelValues(perUserSeriesLimit, userID).Add(float64(perUserSeriesLimitCount))
15261526
}
1527-
if perUserNativeHistogramsSeriesLimitCount > 0 {
1528-
i.validateMetrics.DiscardedSamples.WithLabelValues(perUserNativeHistogramsSeriesLimit, userID).Add(float64(perUserNativeHistogramsSeriesLimitCount))
1527+
if perUserNativeHistogramSeriesLimitCount > 0 {
1528+
i.validateMetrics.DiscardedSamples.WithLabelValues(perUserNativeHistogramSeriesLimit, userID).Add(float64(perUserNativeHistogramSeriesLimitCount))
15291529
}
15301530
if perMetricSeriesLimitCount > 0 {
15311531
i.validateMetrics.DiscardedSamples.WithLabelValues(perMetricSeriesLimit, userID).Add(float64(perMetricSeriesLimitCount))

pkg/ingester/ingester_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -868,10 +868,10 @@ func TestIngesterUserLimitExceeded(t *testing.T) {
868868

869869
}
870870

871-
func TestIngesterUserLimitExceededForNativeHistograms(t *testing.T) {
871+
func TestIngesterUserLimitExceededForNativeHistogram(t *testing.T) {
872872
limits := defaultLimitsTestConfig()
873873
limits.EnableNativeHistograms = true
874-
limits.MaxLocalNativeHistogramsSeriesPerUser = 1
874+
limits.MaxLocalNativeHistogramSeriesPerUser = 1
875875
limits.MaxLocalSeriesPerUser = 1
876876
limits.MaxLocalMetricsWithMetadataPerUser = 1
877877

@@ -923,7 +923,7 @@ func TestIngesterUserLimitExceededForNativeHistograms(t *testing.T) {
923923
httpResp, ok := httpgrpc.HTTPResponseFromError(err)
924924
require.True(t, ok, "returned error is not an httpgrpc response")
925925
assert.Equal(t, http.StatusBadRequest, int(httpResp.Code))
926-
assert.Equal(t, wrapWithUser(makeLimitError(perUserNativeHistogramsSeriesLimit, ing.limiter.FormatError(userID, errMaxNativeHistogramsSeriesPerUserLimitExceeded, labels1)), userID).Error(), string(httpResp.Body))
926+
assert.Equal(t, wrapWithUser(makeLimitError(perUserNativeHistogramSeriesLimit, ing.limiter.FormatError(userID, errMaxNativeHistogramSeriesPerUserLimitExceeded, labels1)), userID).Error(), string(httpResp.Body))
927927

928928
// Append two metadata, expect no error since metadata is a best effort approach.
929929
_, err = ing.Push(ctx, cortexpb.ToWriteRequest(nil, nil, []*cortexpb.MetricMetadata{metadata1, metadata2}, nil, cortexpb.API))

pkg/ingester/limiter.go

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,11 @@ import (
1212
)
1313

1414
var (
15-
errMaxSeriesPerMetricLimitExceeded = errors.New("per-metric series limit exceeded")
16-
errMaxMetadataPerMetricLimitExceeded = errors.New("per-metric metadata limit exceeded")
17-
errMaxSeriesPerUserLimitExceeded = errors.New("per-user series limit exceeded")
18-
errMaxNativeHistogramsSeriesPerUserLimitExceeded = errors.New("per-user nativeHistograms series limit exceeded")
19-
errMaxMetadataPerUserLimitExceeded = errors.New("per-user metric metadata limit exceeded")
15+
errMaxSeriesPerMetricLimitExceeded = errors.New("per-metric series limit exceeded")
16+
errMaxMetadataPerMetricLimitExceeded = errors.New("per-metric metadata limit exceeded")
17+
errMaxSeriesPerUserLimitExceeded = errors.New("per-user series limit exceeded")
18+
errMaxNativeHistogramSeriesPerUserLimitExceeded = errors.New("per-user native histogram series limit exceeded")
19+
errMaxMetadataPerUserLimitExceeded = errors.New("per-user metric metadata limit exceeded")
2020
)
2121

2222
type errMaxSeriesPerLabelSetLimitExceeded struct {
@@ -96,14 +96,14 @@ func (l *Limiter) AssertMaxSeriesPerUser(userID string, series int) error {
9696
return errMaxSeriesPerUserLimitExceeded
9797
}
9898

99-
// AssertMaxNativeHistogramsSeriesPerUser limit has not been reached compared to the current
100-
// number of nativeHistograms series in input and returns an error if so.
101-
func (l *Limiter) AssertMaxNativeHistogramsSeriesPerUser(userID string, series int) error {
102-
if actualLimit := l.maxNativeHistogramsSeriesPerUser(userID); series < actualLimit {
99+
// AssertMaxNativeHistogramSeriesPerUser limit has not been reached compared to the current
100+
// number of native histogram series in input and returns an error if so.
101+
func (l *Limiter) AssertMaxNativeHistogramSeriesPerUser(userID string, series int) error {
102+
if actualLimit := l.maxNativeHistogramSeriesPerUser(userID); series < actualLimit {
103103
return nil
104104
}
105105

106-
return errMaxNativeHistogramsSeriesPerUserLimitExceeded
106+
return errMaxNativeHistogramSeriesPerUserLimitExceeded
107107
}
108108

109109
// AssertMaxMetricsWithMetadataPerUser limit has not been reached compared to the current
@@ -145,7 +145,7 @@ func (l *Limiter) FormatError(userID string, err error, lbls labels.Labels) erro
145145
switch {
146146
case errors.Is(err, errMaxSeriesPerUserLimitExceeded):
147147
return l.formatMaxSeriesPerUserError(userID)
148-
case errors.Is(err, errMaxNativeHistogramsSeriesPerUserLimitExceeded):
148+
case errors.Is(err, errMaxNativeHistogramSeriesPerUserLimitExceeded):
149149
return l.formatMaxNativeHistogramsSeriesPerUserError(userID)
150150
case errors.Is(err, errMaxSeriesPerMetricLimitExceeded):
151151
return l.formatMaxSeriesPerMetricError(userID, lbls.Get(labels.MetricName))
@@ -172,9 +172,9 @@ func (l *Limiter) formatMaxSeriesPerUserError(userID string) error {
172172
}
173173

174174
func (l *Limiter) formatMaxNativeHistogramsSeriesPerUserError(userID string) error {
175-
actualLimit := l.maxNativeHistogramsSeriesPerUser(userID)
176-
localLimit := l.limits.MaxLocalNativeHistogramsSeriesPerUser(userID)
177-
globalLimit := l.limits.MaxGlobalNativeHistogramsSeriesPerUser(userID)
175+
actualLimit := l.maxNativeHistogramSeriesPerUser(userID)
176+
localLimit := l.limits.MaxLocalNativeHistogramSeriesPerUser(userID)
177+
globalLimit := l.limits.MaxGlobalNativeHistogramSeriesPerUser(userID)
178178

179179
return fmt.Errorf("per-user nativeHistograms series limit of %d exceeded, %s (local limit: %d global limit: %d actual local limit: %d)",
180180
minNonZero(localLimit, globalLimit), l.AdminLimitMessage, localLimit, globalLimit, actualLimit)
@@ -270,11 +270,11 @@ func (l *Limiter) maxSeriesPerUser(userID string) int {
270270
)
271271
}
272272

273-
func (l *Limiter) maxNativeHistogramsSeriesPerUser(userID string) int {
273+
func (l *Limiter) maxNativeHistogramSeriesPerUser(userID string) int {
274274
return l.maxByLocalAndGlobal(
275275
userID,
276-
l.limits.MaxLocalNativeHistogramsSeriesPerUser,
277-
l.limits.MaxGlobalNativeHistogramsSeriesPerUser,
276+
l.limits.MaxLocalNativeHistogramSeriesPerUser,
277+
l.limits.MaxGlobalNativeHistogramSeriesPerUser,
278278
)
279279
}
280280

pkg/ingester/limiter_test.go

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -56,12 +56,12 @@ func TestLimiter_maxSeriesPerUser(t *testing.T) {
5656

5757
func TestLimiter_maxNativeHistogramsSeriesPerUser(t *testing.T) {
5858
applyLimits := func(limits *validation.Limits, localLimit, globalLimit int) {
59-
limits.MaxLocalNativeHistogramsSeriesPerUser = localLimit
60-
limits.MaxGlobalNativeHistogramsSeriesPerUser = globalLimit
59+
limits.MaxLocalNativeHistogramSeriesPerUser = localLimit
60+
limits.MaxGlobalNativeHistogramSeriesPerUser = globalLimit
6161
}
6262

6363
runMaxFn := func(limiter *Limiter) int {
64-
return limiter.maxNativeHistogramsSeriesPerUser("test")
64+
return limiter.maxNativeHistogramSeriesPerUser("test")
6565
}
6666

6767
runLimiterMaxFunctionTest(t, applyLimits, runMaxFn, false)
@@ -473,7 +473,7 @@ func TestLimiter_AssertMaxNativeHistogramsSeriesPerUser(t *testing.T) {
473473
ringIngesterCount: 10,
474474
shardByAllLabels: true,
475475
series: 300,
476-
expected: errMaxNativeHistogramsSeriesPerUserLimitExceeded,
476+
expected: errMaxNativeHistogramSeriesPerUserLimitExceeded,
477477
},
478478
}
479479

@@ -488,13 +488,13 @@ func TestLimiter_AssertMaxNativeHistogramsSeriesPerUser(t *testing.T) {
488488

489489
// Mock limits
490490
limits, err := validation.NewOverrides(validation.Limits{
491-
MaxLocalNativeHistogramsSeriesPerUser: testData.maxLocalNativeHistogramsSeriesPerUser,
492-
MaxGlobalNativeHistogramsSeriesPerUser: testData.maxGlobalNativeHistogramsSeriesPerUser,
491+
MaxLocalNativeHistogramSeriesPerUser: testData.maxLocalNativeHistogramsSeriesPerUser,
492+
MaxGlobalNativeHistogramSeriesPerUser: testData.maxGlobalNativeHistogramsSeriesPerUser,
493493
}, nil)
494494
require.NoError(t, err)
495495

496496
limiter := NewLimiter(limits, ring, util.ShardingStrategyDefault, testData.shardByAllLabels, testData.ringReplicationFactor, false, "")
497-
actual := limiter.AssertMaxNativeHistogramsSeriesPerUser("test", testData.series)
497+
actual := limiter.AssertMaxNativeHistogramSeriesPerUser("test", testData.series)
498498

499499
assert.Equal(t, testData.expected, actual)
500500
})
@@ -656,11 +656,11 @@ func TestLimiter_FormatError(t *testing.T) {
656656

657657
// Mock limits
658658
limits, err := validation.NewOverrides(validation.Limits{
659-
MaxGlobalSeriesPerUser: 100,
660-
MaxGlobalNativeHistogramsSeriesPerUser: 100,
661-
MaxGlobalSeriesPerMetric: 20,
662-
MaxGlobalMetricsWithMetadataPerUser: 10,
663-
MaxGlobalMetadataPerMetric: 3,
659+
MaxGlobalSeriesPerUser: 100,
660+
MaxGlobalNativeHistogramSeriesPerUser: 100,
661+
MaxGlobalSeriesPerMetric: 20,
662+
MaxGlobalMetricsWithMetadataPerUser: 10,
663+
MaxGlobalMetadataPerMetric: 3,
664664
}, nil)
665665
require.NoError(t, err)
666666

@@ -670,7 +670,7 @@ func TestLimiter_FormatError(t *testing.T) {
670670
actual := limiter.FormatError("user-1", errMaxSeriesPerUserLimitExceeded, lbls)
671671
assert.EqualError(t, actual, "per-user series limit of 100 exceeded, please contact administrator to raise it (local limit: 0 global limit: 100 actual local limit: 100)")
672672

673-
actual = limiter.FormatError("user-1", errMaxNativeHistogramsSeriesPerUserLimitExceeded, lbls)
673+
actual = limiter.FormatError("user-1", errMaxNativeHistogramSeriesPerUserLimitExceeded, lbls)
674674
assert.EqualError(t, actual, "per-user nativeHistograms series limit of 100 exceeded, please contact administrator to raise it (local limit: 0 global limit: 100 actual local limit: 100)")
675675

676676
actual = limiter.FormatError("user-1", errMaxSeriesPerMetricLimitExceeded, lbls)

pkg/ingester/user_state.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,10 @@ import (
1616

1717
// DiscardedSamples metric labels
1818
const (
19-
perUserSeriesLimit = "per_user_series_limit"
20-
perUserNativeHistogramsSeriesLimit = "per_user_native_histograms_series_limit"
21-
perMetricSeriesLimit = "per_metric_series_limit"
22-
perLabelsetSeriesLimit = "per_labelset_series_limit"
19+
perUserSeriesLimit = "per_user_series_limit"
20+
perUserNativeHistogramSeriesLimit = "per_user_native_histogram_series_limit"
21+
perMetricSeriesLimit = "per_metric_series_limit"
22+
perLabelsetSeriesLimit = "per_labelset_series_limit"
2323
)
2424

2525
const numMetricCounterShards = 128

0 commit comments

Comments
 (0)