MCPcopy Create free account
hub / github.com/cortexproject/cortex / backFillLimit

Method backFillLimit

pkg/ingester/user_state.go:133–161  ·  view source on GitHub ↗
(ctx context.Context, u *userTSDB, forceBackfill bool, allLimits []validation.LimitsPerLabelSet, limit validation.LimitsPerLabelSet, s *labelSetCounterShard)

Source from the content-addressed store, hash-verified

131}
132
133func (m *labelSetCounter) backFillLimit(ctx context.Context, u *userTSDB, forceBackfill bool, allLimits []validation.LimitsPerLabelSet, limit validation.LimitsPerLabelSet, s *labelSetCounterShard) (int, error) {
134 s.Lock()
135 defer s.Unlock()
136 // If not force backfill, use existing counter value.
137 if !forceBackfill {
138 if r, ok := s.valuesCounter[limit.Hash]; ok {
139 return r.count, nil
140 }
141 }
142
143 ir, err := u.db.Head().Index()
144 if err != nil {
145 return 0, err
146 }
147
148 defer ir.Close()
149
150 numSeries := u.db.Head().NumSeries()
151 totalCount, err := getCardinalityForLimitsPerLabelSet(ctx, numSeries, ir, allLimits, limit)
152 if err != nil {
153 return 0, err
154 }
155
156 s.valuesCounter[limit.Hash] = &labelSetCounterEntry{
157 count: totalCount,
158 labels: limit.LabelSet,
159 }
160 return totalCount, nil
161}
162
163func getCardinalityForLimitsPerLabelSet(ctx context.Context, numSeries uint64, ir tsdb.IndexReader, allLimits []validation.LimitsPerLabelSet, limit validation.LimitsPerLabelSet) (int, error) {
164 // Easy path with explicit labels.

Callers 2

UpdateMetricMethod · 0.95

Calls 3

HeadMethod · 0.80
CloseMethod · 0.65

Tested by

no test coverage detected