From d8827474f53da79c89d3f9c8660578e4dd8164ff Mon Sep 17 00:00:00 2001 From: SU Chen Date: Tue, 17 May 2022 16:14:41 +0800 Subject: [PATCH] udpate topicmapper policy route from map to array to eliminate random order (#622) --- pkg/filters/topicmapper/topic.go | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/pkg/filters/topicmapper/topic.go b/pkg/filters/topicmapper/topic.go index 795e61c2b8..6e84b8d51c 100644 --- a/pkg/filters/topicmapper/topic.go +++ b/pkg/filters/topicmapper/topic.go @@ -27,17 +27,22 @@ import ( type topicMapFunc func(mqttTopic string) (topic string, headers map[string]string, err error) -func getPolicyRoute(routes []*PolicyRe) map[string]*regexp.Regexp { - ans := make(map[string]*regexp.Regexp) +type policyRe struct { + name string + re *regexp.Regexp +} + +func getPolicyRoute(routes []*PolicyRe) []*policyRe { + res := make([]*policyRe, 0, len(routes)) for _, route := range routes { r, err := regexp.Compile(route.MatchExpr) if err != nil { logger.SpanErrorf(nil, "topicMapper policy <%s> match expr <%s> compile failed: %v", route.Name, route.MatchExpr, err) } else { - ans[route.Name] = r + res = append(res, &policyRe{name: route.Name, re: r}) } } - return ans + return res } type topicRouteType map[string][]*regexp.Regexp @@ -77,9 +82,9 @@ func getTopicMapFunc(topicMapper *Spec) topicMapFunc { } getPolicy := func(level string) *Policy { - for name, r := range policyRoute { - if r.MatchString(level) { - return policyMap[name] + for _, route := range policyRoute { + if route.re.MatchString(level) { + return policyMap[route.name] } } return nil