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

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


The following commit(s) were added to refs/heads/release-3.0 by this push:
     new 29614de38 fix: solve config bool field zero value bug by using pointer 
(#2338)
29614de38 is described below

commit 29614de382da296a5a113c1642422d660ee216e8
Author: Wang Guan <[email protected]>
AuthorDate: Mon Jun 19 13:37:11 2023 +0800

    fix: solve config bool field zero value bug by using pointer (#2338)
    
    fixes #2336
---
 cluster/router/tag/match.go        |  2 +-
 cluster/router/tag/router.go       |  7 ++---
 cluster/router/tag/router_test.go  | 54 ++++++++++++++++++++------------------
 config/logger_config.go            | 10 +++----
 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, 53 insertions(+), 48 deletions(-)

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 d642a792a..9b438cf13 100644
--- a/cluster/router/tag/router.go
+++ b/cluster/router/tag/router.go
@@ -58,7 +58,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)
@@ -118,9 +118,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 22ddba793..198781394 100644
--- a/cluster/router/tag/router_test.go
+++ b/cluster/router/tag/router_test.go
@@ -53,6 +53,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)
@@ -131,9 +135,9 @@ func TestRouter(t *testing.T) {
                assert.Nil(t, err)
                
p.routerConfigs.Store(consumerUrl.Service()+constant.TagRouterRuleSuffix, 
config.RouterConfig{
                        Key:     consumerUrl.Service() + 
constant.TagRouterRuleSuffix,
-                       Force:   false,
-                       Enabled: true,
-                       Valid:   true,
+                       Force:   falsePointer,
+                       Enabled: truePointer,
+                       Valid:   truePointer,
                })
                ivk := protocol.NewBaseInvoker(url1)
                ivk1 := protocol.NewBaseInvoker(url2)
@@ -151,9 +155,9 @@ func TestRouter(t *testing.T) {
                assert.Nil(t, err)
                
p.routerConfigs.Store(consumerUrl.Service()+constant.TagRouterRuleSuffix, 
config.RouterConfig{
                        Key:     consumerUrl.Service() + 
constant.TagRouterRuleSuffix,
-                       Force:   false,
-                       Enabled: true,
-                       Valid:   true,
+                       Force:   falsePointer,
+                       Enabled: truePointer,
+                       Valid:   truePointer,
                })
                ivk := protocol.NewBaseInvoker(url1)
                ivk1 := protocol.NewBaseInvoker(url2)
@@ -172,9 +176,9 @@ func TestRouter(t *testing.T) {
                assert.Nil(t, err)
                
p.routerConfigs.Store(consumerUrl.Service()+constant.TagRouterRuleSuffix, 
config.RouterConfig{
                        Key:     consumerUrl.Service() + 
constant.TagRouterRuleSuffix,
-                       Force:   false,
-                       Enabled: true,
-                       Valid:   true,
+                       Force:   falsePointer,
+                       Enabled: truePointer,
+                       Valid:   truePointer,
                        Tags: []config.Tag{{
                                Name:      "tag",
                                Addresses: []string{"192.168.0.3:20000"},
@@ -196,9 +200,9 @@ func TestRouter(t *testing.T) {
                assert.Nil(t, err)
                
p.routerConfigs.Store(consumerUrl.Service()+constant.TagRouterRuleSuffix, 
config.RouterConfig{
                        Key:     consumerUrl.Service() + 
constant.TagRouterRuleSuffix,
-                       Force:   false,
-                       Enabled: true,
-                       Valid:   true,
+                       Force:   falsePointer,
+                       Enabled: truePointer,
+                       Valid:   truePointer,
                        Tags: []config.Tag{{
                                Name: "tag",
                        }},
@@ -220,9 +224,9 @@ func TestRouter(t *testing.T) {
                assert.Nil(t, err)
                
p.routerConfigs.Store(consumerUrl.Service()+constant.TagRouterRuleSuffix, 
config.RouterConfig{
                        Key:     consumerUrl.Service() + 
constant.TagRouterRuleSuffix,
-                       Force:   false,
-                       Enabled: true,
-                       Valid:   true,
+                       Force:   falsePointer,
+                       Enabled: truePointer,
+                       Valid:   truePointer,
                        Tags: []config.Tag{{
                                Name:      "tag",
                                Addresses: []string{"192.168.0.3:20000"},
@@ -245,9 +249,9 @@ func TestRouter(t *testing.T) {
                assert.Nil(t, err)
                
p.routerConfigs.Store(consumerUrl.Service()+constant.TagRouterRuleSuffix, 
config.RouterConfig{
                        Key:     consumerUrl.Service() + 
constant.TagRouterRuleSuffix,
-                       Force:   false,
-                       Enabled: true,
-                       Valid:   true,
+                       Force:   falsePointer,
+                       Enabled: truePointer,
+                       Valid:   truePointer,
                        Tags: []config.Tag{{
                                Name:      "tag",
                                Addresses: []string{"192.168.0.1:20000", 
"192.168.0.3:20000"},
@@ -270,9 +274,9 @@ func TestRouter(t *testing.T) {
                assert.Nil(t, err)
                
p.routerConfigs.Store(consumerUrl.Service()+constant.TagRouterRuleSuffix, 
config.RouterConfig{
                        Key:     consumerUrl.Service() + 
constant.TagRouterRuleSuffix,
-                       Force:   false,
-                       Enabled: true,
-                       Valid:   true,
+                       Force:   falsePointer,
+                       Enabled: truePointer,
+                       Valid:   truePointer,
                        Tags: []config.Tag{{
                                Name:      "tag",
                                Addresses: []string{"192.168.0.4:20000"},
@@ -295,9 +299,9 @@ func TestRouter(t *testing.T) {
                assert.Nil(t, err)
                
p.routerConfigs.Store(consumerUrl.Service()+constant.TagRouterRuleSuffix, 
config.RouterConfig{
                        Key:     consumerUrl.Service() + 
constant.TagRouterRuleSuffix,
-                       Force:   false,
-                       Enabled: true,
-                       Valid:   false,
+                       Force:   falsePointer,
+                       Enabled: truePointer,
+                       Valid:   falsePointer,
                        Tags: []config.Tag{{
                                Name:      "tag",
                                Addresses: []string{"192.168.0.1:20000", 
"192.168.0.3:20000"},
@@ -364,7 +368,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/logger_config.go b/config/logger_config.go
index 872c444c6..ff062cd39 100644
--- a/config/logger_config.go
+++ b/config/logger_config.go
@@ -41,9 +41,9 @@ import (
 
 type ZapConfig struct {
        Level             string                 `default:"info" 
json:"level,omitempty" yaml:"level" property:"level"`
-       Development       bool                   `default:"false" 
json:"development,omitempty" yaml:"development" property:"development"`
-       DisableCaller     bool                   `default:"false" 
json:"disable-caller,omitempty" yaml:"disable-caller" property:"disable-caller"`
-       DisableStacktrace bool                   `default:"false" 
json:"disable-stacktrace,omitempty" yaml:"disable-stacktrace" 
property:"disable-stacktrace"`
+       Development       *bool                  `default:"false" 
json:"development,omitempty" yaml:"development" property:"development"`
+       DisableCaller     *bool                  `default:"false" 
json:"disable-caller,omitempty" yaml:"disable-caller" property:"disable-caller"`
+       DisableStacktrace *bool                  `default:"false" 
json:"disable-stacktrace,omitempty" yaml:"disable-stacktrace" 
property:"disable-stacktrace"`
        Encoding          string                 `default:"console" 
json:"encoding,omitempty" yaml:"encoding" property:"encoding"`
        EncoderConfig     EncoderConfig          `default:"" 
json:"encoder-config,omitempty" yaml:"encoder-config" property:"encoder-config"`
        OutputPaths       []string               `default:"[\"stderr\"]" 
json:"output-paths,omitempty" yaml:"output-paths" property:"output-paths"`
@@ -110,8 +110,8 @@ func (lc *LoggerConfig) check() error {
 func (e *ZapConfig) setZapConfig(config *zap.Config) {
        config.OutputPaths = e.OutputPaths
        config.ErrorOutputPaths = e.ErrorOutputPaths
-       config.DisableStacktrace = e.DisableStacktrace
-       config.DisableCaller = e.DisableCaller
+       config.DisableStacktrace = *e.DisableStacktrace
+       config.DisableCaller = *e.DisableCaller
        config.InitialFields = e.InitialFields
 }
 
diff --git a/config/provider_config.go b/config/provider_config.go
index d70cf6b0c..ab58b12c4 100644
--- a/config/provider_config.go
+++ b/config/provider_config.go
@@ -54,8 +54,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 29f2af03f..ad84bc33b 100644
--- a/protocol/dubbo3/dubbo3_invoker.go
+++ b/protocol/dubbo3/dubbo3_invoker.go
@@ -107,7 +107,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 ea5a9ece8..dc2fde4c3 100644
--- a/protocol/dubbo3/dubbo3_protocol.go
+++ b/protocol/dubbo3/dubbo3_protocol.go
@@ -234,7 +234,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