Skip to content

Commit eb84489

Browse files
authored
Removing fingerprint calculator from the lock on the GetSeries API (#4765)
* Removing fingerprint calculator from the lock on the GetSeries API * Add test to prove order does not matter on QueryLimiter,AddSeries
1 parent 9ae152c commit eb84489

File tree

2 files changed

+35
-6
lines changed

2 files changed

+35
-6
lines changed

pkg/distributor/distributor.go

+6-3
Original file line numberDiff line numberDiff line change
@@ -1028,8 +1028,9 @@ func (d *Distributor) MetricsForLabelMatchers(ctx context.Context, from, through
10281028
if err := queryLimiter.AddSeries(cortexpb.FromMetricsToLabelAdapters(m)); err != nil {
10291029
return nil, err
10301030
}
1031+
fingerprint := m.Fingerprint()
10311032
mutex.Lock()
1032-
(*metrics)[m.Fingerprint()] = m
1033+
(*metrics)[fingerprint] = m
10331034
mutex.Unlock()
10341035
}
10351036

@@ -1060,11 +1061,13 @@ func (d *Distributor) MetricsForLabelMatchersStream(ctx context.Context, from, t
10601061
for _, metric := range resp.Metric {
10611062
m := cortexpb.FromLabelAdaptersToMetricWithCopy(metric.Labels)
10621063

1063-
if err := queryLimiter.AddSeries(cortexpb.FromMetricsToLabelAdapters(m)); err != nil {
1064+
if err := queryLimiter.AddSeries(metric.Labels); err != nil {
10641065
return nil, err
10651066
}
1067+
1068+
fingerprint := m.Fingerprint()
10661069
mutex.Lock()
1067-
(*metrics)[m.Fingerprint()] = m
1070+
(*metrics)[fingerprint] = m
10681071
mutex.Unlock()
10691072
}
10701073
}

pkg/util/limiter/query_limiter_test.go

+29-3
Original file line numberDiff line numberDiff line change
@@ -45,17 +45,43 @@ func TestQueryLimiter_AddSeriers_ShouldReturnErrorOnLimitExceeded(t *testing.T)
4545
)
4646

4747
var (
48-
series1 = labels.FromMap(map[string]string{
49-
labels.MetricName: metricName + "_1",
48+
series1 = []cortexpb.LabelAdapter{
49+
{
50+
Name: labels.MetricName,
51+
Value: metricName + "_1",
52+
},
53+
{
54+
Name: "series1",
55+
Value: "1",
56+
},
57+
}
58+
59+
series1OtherOrderLabels = []cortexpb.LabelAdapter{
60+
{
61+
Name: "series1",
62+
Value: "1",
63+
},
64+
{
65+
Name: labels.MetricName,
66+
Value: metricName + "_1",
67+
},
68+
}
69+
70+
series1FromMap = labels.FromMap(map[string]string{
5071
"series1": "1",
72+
labels.MetricName: metricName + "_1",
5173
})
5274
series2 = labels.FromMap(map[string]string{
5375
labels.MetricName: metricName + "_2",
5476
"series2": "1",
5577
})
5678
limiter = NewQueryLimiter(1, 0, 0)
5779
)
58-
err := limiter.AddSeries(cortexpb.FromLabelsToLabelAdapters(series1))
80+
err := limiter.AddSeries(series1)
81+
require.NoError(t, err)
82+
err = limiter.AddSeries(cortexpb.FromLabelsToLabelAdapters(series1FromMap))
83+
require.NoError(t, err)
84+
err = limiter.AddSeries(series1OtherOrderLabels)
5985
require.NoError(t, err)
6086
err = limiter.AddSeries(cortexpb.FromLabelsToLabelAdapters(series2))
6187
require.Error(t, err)

0 commit comments

Comments
 (0)