Skip to content
Snippets Groups Projects
Commit b04224bb authored by watermelo's avatar watermelo
Browse files

Fix: fix tag router rule copy

parent e3610678
No related branches found
No related tags found
No related merge requests found
......@@ -41,8 +41,8 @@ import (
type RouterRule struct {
router.BaseRouterRule `yaml:",inline"`
Tags []Tag
addressToTagNames map[string][]string
tagNameToAddresses map[string][]string
AddressToTagNames map[string][]string
TagNameToAddresses map[string][]string
}
func getRule(rawRule string) (*RouterRule, error) {
......@@ -58,13 +58,13 @@ func getRule(rawRule string) (*RouterRule, error) {
// parseTags use for flattening tags data to @addressToTagNames and @tagNameToAddresses
func (t *RouterRule) parseTags() {
t.addressToTagNames = make(map[string][]string, 2*len(t.Tags))
t.tagNameToAddresses = make(map[string][]string, len(t.Tags))
t.AddressToTagNames = make(map[string][]string, 2*len(t.Tags))
t.TagNameToAddresses = make(map[string][]string, len(t.Tags))
for _, tag := range t.Tags {
for _, address := range tag.Addresses {
t.addressToTagNames[address] = append(t.addressToTagNames[address], tag.Name)
t.AddressToTagNames[address] = append(t.AddressToTagNames[address], tag.Name)
}
t.tagNameToAddresses[tag.Name] = tag.Addresses
t.TagNameToAddresses[tag.Name] = tag.Addresses
}
}
......@@ -85,15 +85,15 @@ func (t *RouterRule) getTagNames() []string {
}
func (t *RouterRule) hasTag(tag string) bool {
return len(t.tagNameToAddresses[tag]) > 0
return len(t.TagNameToAddresses[tag]) > 0
}
func (t *RouterRule) getAddressToTagNames() map[string][]string {
return t.addressToTagNames
return t.AddressToTagNames
}
func (t *RouterRule) getTagNameToAddresses() map[string][]string {
return t.tagNameToAddresses
return t.TagNameToAddresses
}
func (t *RouterRule) getTags() []Tag {
......
......@@ -24,6 +24,7 @@ import (
import (
gxnet "github.com/dubbogo/gost/net"
"github.com/jinzhu/copier"
perrors "github.com/pkg/errors"
)
......@@ -63,11 +64,6 @@ func (c *tagRouter) isEnabled() bool {
return c.enabled
}
func (c *tagRouter) tagRouterRuleCopy() RouterRule {
routerRule := *c.tagRouterRule
return routerRule
}
// Route gets a list of invoker
func (c *tagRouter) Route(invokers []protocol.Invoker, url *common.URL, invocation protocol.Invocation) []protocol.Invoker {
var (
......@@ -85,7 +81,8 @@ func (c *tagRouter) Route(invokers []protocol.Invoker, url *common.URL, invocati
}
// since the rule can be changed by config center, we should copy one to use.
tagRouterRuleCopy := c.tagRouterRuleCopy()
tagRouterRuleCopy := new(RouterRule)
_ = copier.Copy(tagRouterRuleCopy, c.tagRouterRule)
tag, ok := invocation.Attachments()[constant.Tagkey]
if !ok {
tag = url.GetParam(constant.Tagkey, "")
......@@ -93,7 +90,7 @@ func (c *tagRouter) Route(invokers []protocol.Invoker, url *common.URL, invocati
// if we are requesting for a Provider with a specific tag
if len(tag) > 0 {
return filterInvokersWithTag(invokers, url, invocation, tagRouterRuleCopy, tag)
return filterInvokersWithTag(invokers, url, invocation, *tagRouterRuleCopy, tag)
}
// return all addresses in dynamic tag group.
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment