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

Function getCardinalityForLimitsPerLabelSet

pkg/ingester/user_state.go:163–191  ·  view source on GitHub ↗
(ctx context.Context, numSeries uint64, ir tsdb.IndexReader, allLimits []validation.LimitsPerLabelSet, limit validation.LimitsPerLabelSet)

Source from the content-addressed store, hash-verified

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.
165 if limit.LabelSet.Len() > 0 {
166 p, err := getPostingForLabels(ctx, ir, limit.LabelSet)
167 if err != nil {
168 return 0, err
169 }
170 return getPostingCardinality(p)
171 }
172
173 // Default partition needs to get cardinality of all series that doesn't belong to any existing partitions.
174 postings := make([]index.Postings, 0, len(allLimits)-1)
175 for _, l := range allLimits {
176 if l.Hash == limit.Hash {
177 continue
178 }
179 p, err := getPostingForLabels(ctx, ir, l.LabelSet)
180 if err != nil {
181 return 0, err
182 }
183 postings = append(postings, p)
184 }
185 mergedCardinality, err := getPostingCardinality(index.Merge(ctx, postings...))
186 if err != nil {
187 return 0, err
188 }
189
190 return int(numSeries) - mergedCardinality, nil
191}
192
193func getPostingForLabels(ctx context.Context, ir tsdb.IndexReader, lbls labels.Labels) (index.Postings, error) {
194 postings := make([]index.Postings, 0, lbls.Len())

Callers 2

backFillLimitMethod · 0.85

Calls 4

getPostingForLabelsFunction · 0.85
getPostingCardinalityFunction · 0.85
MergeMethod · 0.65
LenMethod · 0.45

Tested by 1