This is an automated email from the ASF dual-hosted git repository.

liujun pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/dubbo-go.git


The following commit(s) were added to refs/heads/main by this push:
     new ff1e96417 fix: solve config bool field zero value bug by using pointer 
(#2344)
ff1e96417 is described below

commit ff1e96417e3e573df847054880635bdad82758d5
Author: Wang Guan <[email protected]>
AuthorDate: Sat Jul 1 09:13:08 2023 +0800

    fix: solve config bool field zero value bug by using pointer (#2344)
    
    fixes #2336
---
 cluster/router/condition/dynamic_router.go |  4 +-
 cluster/router/tag/match.go                |  2 +-
 cluster/router/tag/router.go               |  7 +--
 cluster/router/tag/router_test.go          | 87 ++++++++++++++++--------------
 config/provider_config.go                  |  4 +-
 config/router_config.go                    | 16 +++---
 config/tracing_config.go                   |  2 +-
 config/tracing_config_test.go              |  2 +-
 protocol/dubbo3/dubbo3_invoker.go          |  2 +-
 protocol/dubbo3/dubbo3_protocol.go         |  2 +-
 10 files changed, 67 insertions(+), 61 deletions(-)

diff --git a/cluster/router/condition/dynamic_router.go 
b/cluster/router/condition/dynamic_router.go
index 9d613dfe4..6d89771b3 100644
--- a/cluster/router/condition/dynamic_router.go
+++ b/cluster/router/condition/dynamic_router.go
@@ -88,8 +88,8 @@ func generateConditions(routerConfig *config.RouterConfig) 
([]*StateRouter, erro
                        return nil, err
                }
                url.AddParam(constant.RuleKey, conditionRule)
-               url.AddParam(constant.ForceKey, 
strconv.FormatBool(routerConfig.Force))
-               url.AddParam(constant.EnabledKey, 
strconv.FormatBool(routerConfig.Enabled))
+               url.AddParam(constant.ForceKey, 
strconv.FormatBool(*routerConfig.Force))
+               url.AddParam(constant.EnabledKey, 
strconv.FormatBool(*routerConfig.Enabled))
                conditionRoute, err := NewConditionStateRouter(url)
                if err != nil {
                        return nil, err
diff --git a/cluster/router/tag/match.go b/cluster/router/tag/match.go
index f9f900e03..14633606a 100644
--- a/cluster/router/tag/match.go
+++ b/cluster/router/tag/match.go
@@ -117,7 +117,7 @@ func requestTag(invokers []protocol.Invoker, url 
*common.URL, invocation protoco
                logger.Debugf("[tag router] filter dynamic tag address, 
invokers=%+v", result)
        }
        // returns the result directly
-       if cfg.Force || requestIsForce(url, invocation) {
+       if *cfg.Force || requestIsForce(url, invocation) {
                return result
        }
        if len(result) != 0 {
diff --git a/cluster/router/tag/router.go b/cluster/router/tag/router.go
index 7561cf1e0..3475d7f18 100644
--- a/cluster/router/tag/router.go
+++ b/cluster/router/tag/router.go
@@ -59,7 +59,7 @@ func (p *PriorityRouter) Route(invokers []protocol.Invoker, 
url *common.URL, inv
                return staticTag(invokers, url, invocation)
        }
        routerCfg := value.(config.RouterConfig)
-       if !routerCfg.Enabled || !routerCfg.Valid {
+       if !*routerCfg.Enabled || !*routerCfg.Valid {
                return staticTag(invokers, url, invocation)
        }
        return dynamicTag(invokers, url, invocation, routerCfg)
@@ -119,9 +119,10 @@ func parseRoute(routeContent string) 
(*config.RouterConfig, error) {
        if err != nil {
                return nil, err
        }
-       routerConfig.Valid = true
+       routerConfig.Valid = new(bool)
+       *routerConfig.Valid = true
        if len(routerConfig.Tags) == 0 {
-               routerConfig.Valid = false
+               *routerConfig.Valid = false
        }
        return routerConfig, nil
 }
diff --git a/cluster/router/tag/router_test.go 
b/cluster/router/tag/router_test.go
index 8a29503ac..cb270a1bb 100644
--- a/cluster/router/tag/router_test.go
+++ b/cluster/router/tag/router_test.go
@@ -18,6 +18,7 @@
 package tag
 
 import (
+       "strings"
        "testing"
 )
 
@@ -53,6 +54,10 @@ func initUrl() {
 
 func TestRouter(t *testing.T) {
        initUrl()
+       trueValue := true
+       truePointer := &trueValue
+       falseValue := false
+       falsePointer := &falseValue
        t.Run("staticEmptyTag", func(t *testing.T) {
                p, err := NewTagPriorityRouter()
                assert.Nil(t, err)
@@ -129,11 +134,11 @@ func TestRouter(t *testing.T) {
        t.Run("dynamicEmptyTag_requestEmptyTag", func(t *testing.T) {
                p, err := NewTagPriorityRouter()
                assert.Nil(t, err)
-               
p.routerConfigs.Store(consumerUrl.GetParam(constant.ApplicationKey, 
"")+constant.TagRouterRuleSuffix, config.RouterConfig{
-                       Key:     consumerUrl.GetParam(constant.ApplicationKey, 
"") + constant.TagRouterRuleSuffix,
-                       Force:   false,
-                       Enabled: true,
-                       Valid:   true,
+               
p.routerConfigs.Store(consumerUrl.Service()+constant.TagRouterRuleSuffix, 
config.RouterConfig{
+                       Key:     consumerUrl.Service() + 
constant.TagRouterRuleSuffix,
+                       Force:   falsePointer,
+                       Enabled: truePointer,
+                       Valid:   truePointer,
                })
                ivk := protocol.NewBaseInvoker(url1)
                ivk1 := protocol.NewBaseInvoker(url2)
@@ -149,11 +154,11 @@ func TestRouter(t *testing.T) {
        t.Run("dynamicEmptyTag_requestHasTag", func(t *testing.T) {
                p, err := NewTagPriorityRouter()
                assert.Nil(t, err)
-               
p.routerConfigs.Store(consumerUrl.GetParam(constant.ApplicationKey, 
"")+constant.TagRouterRuleSuffix, config.RouterConfig{
-                       Key:     consumerUrl.GetParam(constant.ApplicationKey, 
"") + constant.TagRouterRuleSuffix,
-                       Force:   false,
-                       Enabled: true,
-                       Valid:   true,
+               
p.routerConfigs.Store(consumerUrl.Service()+constant.TagRouterRuleSuffix, 
config.RouterConfig{
+                       Key:     consumerUrl.Service() + 
constant.TagRouterRuleSuffix,
+                       Force:   falsePointer,
+                       Enabled: truePointer,
+                       Valid:   truePointer,
                })
                ivk := protocol.NewBaseInvoker(url1)
                ivk1 := protocol.NewBaseInvoker(url2)
@@ -170,11 +175,11 @@ func TestRouter(t *testing.T) {
        t.Run("dynamicTag_requestEmptyTag", func(t *testing.T) {
                p, err := NewTagPriorityRouter()
                assert.Nil(t, err)
-               
p.routerConfigs.Store(consumerUrl.GetParam(constant.ApplicationKey, 
"")+constant.TagRouterRuleSuffix, config.RouterConfig{
-                       Key:     consumerUrl.GetParam(constant.ApplicationKey, 
"") + constant.TagRouterRuleSuffix,
-                       Force:   false,
-                       Enabled: true,
-                       Valid:   true,
+               
p.routerConfigs.Store(strings.Join([]string{consumerUrl.GetParam(constant.ApplicationKey,
 ""), constant.TagRouterRuleSuffix}, ""), config.RouterConfig{
+                       Key:     consumerUrl.Service() + 
constant.TagRouterRuleSuffix,
+                       Force:   falsePointer,
+                       Enabled: truePointer,
+                       Valid:   truePointer,
                        Tags: []config.Tag{{
                                Name:      "tag",
                                Addresses: []string{"192.168.0.3:20000"},
@@ -194,11 +199,11 @@ func TestRouter(t *testing.T) {
        t.Run("dynamicTag_emptyAddress_requestHasTag", func(t *testing.T) {
                p, err := NewTagPriorityRouter()
                assert.Nil(t, err)
-               
p.routerConfigs.Store(consumerUrl.GetParam(constant.ApplicationKey, 
"")+constant.TagRouterRuleSuffix, config.RouterConfig{
-                       Key:     consumerUrl.GetParam(constant.ApplicationKey, 
"") + constant.TagRouterRuleSuffix,
-                       Force:   false,
-                       Enabled: true,
-                       Valid:   true,
+               
p.routerConfigs.Store(consumerUrl.Service()+constant.TagRouterRuleSuffix, 
config.RouterConfig{
+                       Key:     consumerUrl.Service() + 
constant.TagRouterRuleSuffix,
+                       Force:   falsePointer,
+                       Enabled: truePointer,
+                       Valid:   truePointer,
                        Tags: []config.Tag{{
                                Name: "tag",
                        }},
@@ -218,11 +223,11 @@ func TestRouter(t *testing.T) {
        t.Run("dynamicTag_address_requestHasTag", func(t *testing.T) {
                p, err := NewTagPriorityRouter()
                assert.Nil(t, err)
-               
p.routerConfigs.Store(consumerUrl.GetParam(constant.ApplicationKey, 
"")+constant.TagRouterRuleSuffix, config.RouterConfig{
-                       Key:     consumerUrl.GetParam(constant.ApplicationKey, 
"") + constant.TagRouterRuleSuffix,
-                       Force:   false,
-                       Enabled: true,
-                       Valid:   true,
+               
p.routerConfigs.Store(strings.Join([]string{consumerUrl.GetParam(constant.ApplicationKey,
 ""), constant.TagRouterRuleSuffix}, ""), config.RouterConfig{
+                       Key:     consumerUrl.Service() + 
constant.TagRouterRuleSuffix,
+                       Force:   falsePointer,
+                       Enabled: truePointer,
+                       Valid:   truePointer,
                        Tags: []config.Tag{{
                                Name:      "tag",
                                Addresses: []string{"192.168.0.3:20000"},
@@ -243,11 +248,11 @@ func TestRouter(t *testing.T) {
        t.Run("dynamicTag_twoAddress_requestHasTag", func(t *testing.T) {
                p, err := NewTagPriorityRouter()
                assert.Nil(t, err)
-               
p.routerConfigs.Store(consumerUrl.GetParam(constant.ApplicationKey, 
"")+constant.TagRouterRuleSuffix, config.RouterConfig{
-                       Key:     consumerUrl.GetParam(constant.ApplicationKey, 
"") + constant.TagRouterRuleSuffix,
-                       Force:   false,
-                       Enabled: true,
-                       Valid:   true,
+               
p.routerConfigs.Store(strings.Join([]string{consumerUrl.GetParam(constant.ApplicationKey,
 ""), constant.TagRouterRuleSuffix}, ""), config.RouterConfig{
+                       Key:     consumerUrl.Service() + 
constant.TagRouterRuleSuffix,
+                       Force:   falsePointer,
+                       Enabled: truePointer,
+                       Valid:   truePointer,
                        Tags: []config.Tag{{
                                Name:      "tag",
                                Addresses: []string{"192.168.0.1:20000", 
"192.168.0.3:20000"},
@@ -268,11 +273,11 @@ func TestRouter(t *testing.T) {
        t.Run("dynamicTag_addressNotMatch_requestHasTag", func(t *testing.T) {
                p, err := NewTagPriorityRouter()
                assert.Nil(t, err)
-               
p.routerConfigs.Store(consumerUrl.GetParam(constant.ApplicationKey, 
"")+constant.TagRouterRuleSuffix, config.RouterConfig{
-                       Key:     consumerUrl.GetParam(constant.ApplicationKey, 
"") + constant.TagRouterRuleSuffix,
-                       Force:   false,
-                       Enabled: true,
-                       Valid:   true,
+               
p.routerConfigs.Store(consumerUrl.Service()+constant.TagRouterRuleSuffix, 
config.RouterConfig{
+                       Key:     consumerUrl.Service() + 
constant.TagRouterRuleSuffix,
+                       Force:   falsePointer,
+                       Enabled: truePointer,
+                       Valid:   truePointer,
                        Tags: []config.Tag{{
                                Name:      "tag",
                                Addresses: []string{"192.168.0.4:20000"},
@@ -293,11 +298,11 @@ func TestRouter(t *testing.T) {
        t.Run("dynamicTag_notValid", func(t *testing.T) {
                p, err := NewTagPriorityRouter()
                assert.Nil(t, err)
-               
p.routerConfigs.Store(consumerUrl.GetParam(constant.ApplicationKey, 
"")+constant.TagRouterRuleSuffix, config.RouterConfig{
-                       Key:     consumerUrl.GetParam(constant.ApplicationKey, 
"") + constant.TagRouterRuleSuffix,
-                       Force:   false,
-                       Enabled: true,
-                       Valid:   false,
+               
p.routerConfigs.Store(consumerUrl.Service()+constant.TagRouterRuleSuffix, 
config.RouterConfig{
+                       Key:     consumerUrl.Service() + 
constant.TagRouterRuleSuffix,
+                       Force:   falsePointer,
+                       Enabled: truePointer,
+                       Valid:   falsePointer,
                        Tags: []config.Tag{{
                                Name:      "tag",
                                Addresses: []string{"192.168.0.1:20000", 
"192.168.0.3:20000"},
@@ -365,7 +370,7 @@ tags:
                routerCfg := value.(config.RouterConfig)
                assert.True(t, routerCfg.Key == 
"org.apache.dubbo.UserProvider.Test")
                assert.True(t, len(routerCfg.Tags) == 2)
-               assert.True(t, routerCfg.Enabled)
+               assert.True(t, *routerCfg.Enabled)
        })
 
        t.Run("configNotValid", func(t *testing.T) {
diff --git a/config/provider_config.go b/config/provider_config.go
index 364319192..5ca41f33b 100644
--- a/config/provider_config.go
+++ b/config/provider_config.go
@@ -55,8 +55,8 @@ type ProviderConfig struct {
        FilterConf   interface{}               `yaml:"filter_conf" 
json:"filter_conf,omitempty" property:"filter_conf"`
        ConfigType   map[string]string         `yaml:"config_type" 
json:"config_type,omitempty" property:"config_type"`
        // adaptive service
-       AdaptiveService        bool `default:"false" yaml:"adaptive-service" 
json:"adaptive-service" property:"adaptive-service"`
-       AdaptiveServiceVerbose bool `default:"false" 
yaml:"adaptive-service-verbose" json:"adaptive-service-verbose" 
property:"adaptive-service-verbose"`
+       AdaptiveService        bool `yaml:"adaptive-service" 
json:"adaptive-service" property:"adaptive-service"`
+       AdaptiveServiceVerbose bool `yaml:"adaptive-service-verbose" 
json:"adaptive-service-verbose" property:"adaptive-service-verbose"`
 
        rootConfig *RootConfig
 }
diff --git a/config/router_config.go b/config/router_config.go
index ed9babf64..616e994ea 100644
--- a/config/router_config.go
+++ b/config/router_config.go
@@ -31,10 +31,10 @@ import (
 type RouterConfig struct {
        Scope      string   `validate:"required" yaml:"scope" 
json:"scope,omitempty" property:"scope"` // must be chosen from `service` and 
`application`.
        Key        string   `validate:"required" yaml:"key" 
json:"key,omitempty" property:"key"`       // specifies which service or 
application the rule body acts on.
-       Force      bool     `default:"false" yaml:"force" 
json:"force,omitempty" property:"force"`
-       Runtime    bool     `default:"false" yaml:"runtime" 
json:"runtime,omitempty" property:"runtime"`
-       Enabled    bool     `default:"true" yaml:"enabled" 
json:"enabled,omitempty" property:"enabled"`
-       Valid      bool     `default:"true" yaml:"valid" json:"valid,omitempty" 
property:"valid"`
+       Force      *bool    `default:"false" yaml:"force" 
json:"force,omitempty" property:"force"`
+       Runtime    *bool    `default:"false" yaml:"runtime" 
json:"runtime,omitempty" property:"runtime"`
+       Enabled    *bool    `default:"true" yaml:"enabled" 
json:"enabled,omitempty" property:"enabled"`
+       Valid      *bool    `default:"true" yaml:"valid" json:"valid,omitempty" 
property:"valid"`
        Priority   int      `default:"0" yaml:"priority" 
json:"priority,omitempty" property:"priority"`
        Conditions []string `yaml:"conditions" json:"conditions,omitempty" 
property:"conditions"`
        Tags       []Tag    `yaml:"tags" json:"tags,omitempty" property:"tags"`
@@ -91,22 +91,22 @@ func (rcb *RouterConfigBuilder) SetKey(key string) 
*RouterConfigBuilder {
 }
 
 func (rcb *RouterConfigBuilder) SetForce(force bool) *RouterConfigBuilder {
-       rcb.routerConfig.Force = force
+       rcb.routerConfig.Force = &force
        return rcb
 }
 
 func (rcb *RouterConfigBuilder) SetRuntime(runtime bool) *RouterConfigBuilder {
-       rcb.routerConfig.Runtime = runtime
+       rcb.routerConfig.Runtime = &runtime
        return rcb
 }
 
 func (rcb *RouterConfigBuilder) SetEnabled(enabled bool) *RouterConfigBuilder {
-       rcb.routerConfig.Enabled = enabled
+       rcb.routerConfig.Enabled = &enabled
        return rcb
 }
 
 func (rcb *RouterConfigBuilder) SetValid(valid bool) *RouterConfigBuilder {
-       rcb.routerConfig.Valid = valid
+       rcb.routerConfig.Valid = &valid
        return rcb
 }
 
diff --git a/config/tracing_config.go b/config/tracing_config.go
index 9807aff31..b79aef6cc 100644
--- a/config/tracing_config.go
+++ b/config/tracing_config.go
@@ -30,7 +30,7 @@ type TracingConfig struct {
        Name        string `default:"jaeger" yaml:"name" json:"name,omitempty" 
property:"name"` // jaeger or zipkin(todo)
        ServiceName string `yaml:"serviceName" json:"serviceName,omitempty" 
property:"serviceName"`
        Address     string `yaml:"address" json:"address,omitempty" 
property:"address"`
-       UseAgent    bool   `default:"false" yaml:"use-agent" 
json:"use-agent,omitempty" property:"use-agent"`
+       UseAgent    *bool  `default:"false" yaml:"use-agent" 
json:"use-agent,omitempty" property:"use-agent"`
 }
 
 // Prefix dubbo.router
diff --git a/config/tracing_config_test.go b/config/tracing_config_test.go
index d21f3d1dd..0a04ea315 100644
--- a/config/tracing_config_test.go
+++ b/config/tracing_config_test.go
@@ -36,5 +36,5 @@ func TestTracingConfig(t *testing.T) {
        assert.Nil(t, err)
        assert.Equal(t, tracing.Prefix(), constant.TracingConfigPrefix)
        assert.Equal(t, tracing.Name, "jaeger")
-       assert.Equal(t, tracing.UseAgent, false)
+       assert.Equal(t, *tracing.UseAgent, false)
 }
diff --git a/protocol/dubbo3/dubbo3_invoker.go 
b/protocol/dubbo3/dubbo3_invoker.go
index 327b58d3b..af6d9fa21 100644
--- a/protocol/dubbo3/dubbo3_invoker.go
+++ b/protocol/dubbo3/dubbo3_invoker.go
@@ -108,7 +108,7 @@ func NewDubboInvoker(url *common.URL) (*DubboInvoker, 
error) {
                                opts = append(opts, triConfig.WithJaegerConfig(
                                        tracingConfig.Address,
                                        tracingConfig.ServiceName,
-                                       tracingConfig.UseAgent,
+                                       *tracingConfig.UseAgent,
                                ))
                        } else {
                                logger.Warnf("unsupported tracing name %s, now 
triple only support jaeger", tracingConfig.Name)
diff --git a/protocol/dubbo3/dubbo3_protocol.go 
b/protocol/dubbo3/dubbo3_protocol.go
index 66caf2836..8d824b95d 100644
--- a/protocol/dubbo3/dubbo3_protocol.go
+++ b/protocol/dubbo3/dubbo3_protocol.go
@@ -235,7 +235,7 @@ func (dp *DubboProtocol) openServer(url *common.URL, 
tripleCodecType tripleConst
                                opts = append(opts, triConfig.WithJaegerConfig(
                                        tracingConfig.Address,
                                        tracingConfig.ServiceName,
-                                       tracingConfig.UseAgent,
+                                       *tracingConfig.UseAgent,
                                ))
                        default:
                                logger.Warnf("unsupported tracing name %s, now 
triple only support jaeger", tracingConfig.Name)

Reply via email to