Skip to content

Commit

Permalink
perf(filter): replace map with slice in hot path (#1115)
Browse files Browse the repository at this point in the history
  • Loading branch information
Tetrergeru authored Oct 29, 2024
1 parent ab5833a commit 96f1312
Showing 1 changed file with 17 additions and 6 deletions.
23 changes: 17 additions & 6 deletions filter/series_by_tag_pattern_index.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,16 @@ type SeriesByTagPatternIndex struct {
// namesPrefixTree stores MatchingHandler's for patterns that have name tag in prefix tree structure
namesPrefixTree *PrefixTree
// withoutStrictNameTagPatternMatchers stores MatchingHandler's for patterns that have no name tag
withoutStrictNameTagPatternMatchers map[string]MatchingHandler
withoutStrictNameTagPatternMatchers []patternAndHandler
// Flags for compatibility with different graphite behaviours
compatibility Compatibility
}

type patternAndHandler struct {
pattern string
handler MatchingHandler
}

// NewSeriesByTagPatternIndex creates new SeriesByTagPatternIndex using seriesByTag patterns and parsed specs comes from ParseSeriesByTag.
func NewSeriesByTagPatternIndex(
logger moira.Logger,
Expand All @@ -25,7 +30,7 @@ func NewSeriesByTagPatternIndex(
metrics *metrics.FilterMetrics,
) *SeriesByTagPatternIndex {
namesPrefixTree := &PrefixTree{Logger: logger, Root: &PatternNode{}}
withoutStrictNameTagPatternMatchers := make(map[string]MatchingHandler)
withoutStrictNameTagPatternMatchers := make([]patternAndHandler, 0)

var patternMatchingEvicted int64

Expand Down Expand Up @@ -54,7 +59,13 @@ func NewSeriesByTagPatternIndex(
}

if patternMatching.nameTagValue == "" {
withoutStrictNameTagPatternMatchers[pattern] = patternMatching.matchingHandler
withoutStrictNameTagPatternMatchers = append(
withoutStrictNameTagPatternMatchers,
patternAndHandler{
pattern: pattern,
handler: patternMatching.matchingHandler,
},
)
} else {
namesPrefixTree.AddWithPayload(patternMatching.nameTagValue, pattern, patternMatching.matchingHandler)
}
Expand All @@ -80,9 +91,9 @@ func (index *SeriesByTagPatternIndex) MatchPatterns(metricName string, labels ma
}
index.namesPrefixTree.MatchWithValue(metricName, callback)

for pattern, matchingHandler := range index.withoutStrictNameTagPatternMatchers {
if matchingHandler(metricName, labels) {
matchedPatterns = append(matchedPatterns, pattern)
for _, patternAndHandler := range index.withoutStrictNameTagPatternMatchers {
if patternAndHandler.handler(metricName, labels) {
matchedPatterns = append(matchedPatterns, patternAndHandler.pattern)
}
}

Expand Down

0 comments on commit 96f1312

Please sign in to comment.