From 0c5bb2a397d9d222be299e97e4515e1afc45884d Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Wed, 17 Feb 2021 18:54:59 +0200 Subject: [PATCH] lib/storage: revert ecf132933e52f4ecc25be9b5c6d61b8a0eb7458d, since negative filters require the same amount of work as non-negative filters --- lib/storage/tag_filters.go | 17 +++-------------- 1 file changed, 3 insertions(+), 14 deletions(-) diff --git a/lib/storage/tag_filters.go b/lib/storage/tag_filters.go index b09c64487c..c0732a7229 100644 --- a/lib/storage/tag_filters.go +++ b/lib/storage/tag_filters.go @@ -255,15 +255,15 @@ func (tf *tagFilter) Less(other *tagFilter) bool { if tf.matchCost != other.matchCost { return tf.matchCost < other.matchCost } - if tf.isNegative != other.isNegative { - return !tf.isNegative - } if tf.isRegexp != other.isRegexp { return !tf.isRegexp } if len(tf.orSuffixes) != len(other.orSuffixes) { return len(tf.orSuffixes) < len(other.orSuffixes) } + if tf.isNegative != other.isNegative { + return !tf.isNegative + } return bytes.Compare(tf.prefix, other.prefix) < 0 } @@ -333,9 +333,6 @@ func (tf *tagFilter) InitFromGraphiteQuery(commonPrefix, query []byte, paths []s tf.prefix = marshalTagValueNoTrailingTagSeparator(tf.prefix, []byte(prefix)) tf.orSuffixes = append(tf.orSuffixes[:0], orSuffixes...) tf.reSuffixMatch, tf.matchCost = newMatchFuncForOrSuffixes(orSuffixes) - if isNegative { - tf.matchCost *= negativeMatchCostMultiplier - } } func getCommonPrefix(ss []string) (string, []string) { @@ -403,9 +400,6 @@ func (tf *tagFilter) Init(commonPrefix, key, value []byte, isNegative, isRegexp tf.orSuffixes = append(tf.orSuffixes[:0], "") tf.isEmptyMatch = len(prefix) == 0 tf.matchCost = fullMatchCost - if isNegative { - tf.matchCost *= negativeMatchCostMultiplier - } return nil } rcv, err := getRegexpFromCache(expr) @@ -415,9 +409,6 @@ func (tf *tagFilter) Init(commonPrefix, key, value []byte, isNegative, isRegexp tf.orSuffixes = append(tf.orSuffixes[:0], rcv.orValues...) tf.reSuffixMatch = rcv.reMatch tf.matchCost = rcv.reCost - if isNegative { - tf.matchCost *= negativeMatchCostMultiplier - } tf.isEmptyMatch = len(prefix) == 0 && tf.reSuffixMatch(nil) if !tf.isNegative && len(key) == 0 && strings.IndexByte(rcv.literalSuffix, '.') >= 0 { // Reverse suffix is needed only for non-negative regexp filters on __name__ that contains dots. @@ -589,8 +580,6 @@ const ( reMatchCost = 100 ) -const negativeMatchCostMultiplier = 1000 - func getOptimizedReMatchFuncExt(reMatch func(b []byte) bool, sre *syntax.Regexp) (func(b []byte) bool, string, uint64) { if isDotStar(sre) { // '.*'