From 33806264ec5844173b99de9e2203ed696e3f2d82 Mon Sep 17 00:00:00 2001
From: Aliaksandr Valialkin <valyala@gmail.com>
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 d32c48ec99..5d62cbc045 100644
--- a/lib/storage/tag_filters.go
+++ b/lib/storage/tag_filters.go
@@ -243,15 +243,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
 }
 
@@ -315,9 +315,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) {
@@ -385,9 +382,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)
@@ -397,9 +391,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.
@@ -571,8 +562,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) {
 		// '.*'