You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by zh...@apache.org on 2021/12/19 13:47:13 UTC
[dubbo-go] branch 3.0 updated: Config update issue (#1592)
This is an automated email from the ASF dual-hosted git repository.
zhaoyunxing pushed a commit to branch 3.0
in repository https://gitbox.apache.org/repos/asf/dubbo-go.git
The following commit(s) were added to refs/heads/3.0 by this push:
new 915292c Config update issue (#1592)
915292c is described below
commit 915292c53e5d98d0f2ec0c8d42f075eee43522fa
Author: sunrui1225 <sr...@163.com>
AuthorDate: Sun Dec 19 21:47:07 2021 +0800
Config update issue (#1592)
* config center auto update issue
* split import block
* Remove quotation mark
* log use Infof instead of info
* remove UpdateProperties to register lay
* set UpdateProperties param registryConfig
* use GetConfigResolver method to generate koan
* imports format root_config.go and test
* imports format use imports-formatter -path .
Co-authored-by: ruishansun <ru...@creditease.cn>
---
config/config_center_config.go | 2 ++
config/registry_config.go | 9 +++++++
config/root_config.go | 23 +++++++++++++++++
config/root_config_test.go | 50 ++++++++++++++++++++++++++++++++++++
config/testdata/root_config_test.yml | 17 ++++++++++++
5 files changed, 101 insertions(+)
diff --git a/config/config_center_config.go b/config/config_center_config.go
index 9ad399e..10dbce3 100644
--- a/config/config_center_config.go
+++ b/config/config_center_config.go
@@ -154,6 +154,8 @@ func startConfigCenter(rc *RootConfig) error {
if err = koan.UnmarshalWithConf(rc.Prefix(), rc, koanf.UnmarshalConf{Tag: "yaml"}); err != nil {
return err
}
+
+ dynamicConfig.AddListener(cc.DataId, rc, config_center.WithGroup(cc.Group))
return nil
}
diff --git a/config/registry_config.go b/config/registry_config.go
index af4eadd..506dc79 100644
--- a/config/registry_config.go
+++ b/config/registry_config.go
@@ -397,3 +397,12 @@ func (rcb *RegistryConfigBuilder) Build() *RegistryConfig {
}
return rcb.registryConfig
}
+
+// UpdateProperties update registry
+func (c *RegistryConfig) UpdateProperties(updateRegistryConfig *RegistryConfig) {
+ // if nacos's registry timeout not equal local root config's registry timeout , update.
+ if updateRegistryConfig != nil && updateRegistryConfig.Timeout != c.Timeout {
+ c.Timeout = updateRegistryConfig.Timeout
+ logger.Infof("CenterConfig process update timeout, new value:%v", c.Timeout)
+ }
+}
diff --git a/config/root_config.go b/config/root_config.go
index ad3c33a..7450a32 100644
--- a/config/root_config.go
+++ b/config/root_config.go
@@ -25,6 +25,8 @@ import (
import (
hessian "github.com/apache/dubbo-go-hessian2"
+ "github.com/knadh/koanf"
+
perrors "github.com/pkg/errors"
"go.uber.org/atomic"
@@ -35,6 +37,7 @@ import (
"dubbo.apache.org/dubbo-go/v3/common/constant"
"dubbo.apache.org/dubbo-go/v3/common/extension"
"dubbo.apache.org/dubbo-go/v3/common/logger"
+ "dubbo.apache.org/dubbo-go/v3/config_center"
"dubbo.apache.org/dubbo-go/v3/metadata/service/exporter"
)
@@ -379,3 +382,23 @@ func publishMapping(sc exporter.MetadataServiceExporter) error {
}
return nil
}
+
+// Process receive changing listener's event, dynamic update config
+func (rc *RootConfig) Process(event *config_center.ConfigChangeEvent) {
+ logger.Infof("CenterConfig process event:\n%+v", event)
+ config := NewLoaderConf(WithBytes([]byte(event.Value.(string))))
+ koan := GetConfigResolver(config)
+
+ updateRootConfig := &RootConfig{}
+ if err := koan.UnmarshalWithConf(rc.Prefix(),
+ updateRootConfig, koanf.UnmarshalConf{Tag: "yaml"}); err != nil {
+ logger.Errorf("CenterConfig process unmarshalConf failed, got error %#v", err)
+ return
+ }
+
+ // update register
+ for registerId, updateRegister := range updateRootConfig.Registries {
+ register := rc.Registries[registerId]
+ register.UpdateProperties(updateRegister)
+ }
+}
diff --git a/config/root_config_test.go b/config/root_config_test.go
new file mode 100644
index 0000000..bf38868
--- /dev/null
+++ b/config/root_config_test.go
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package config
+
+import (
+ "testing"
+)
+
+import (
+ "github.com/stretchr/testify/assert"
+)
+
+import (
+ "dubbo.apache.org/dubbo-go/v3/common/yaml"
+ "dubbo.apache.org/dubbo-go/v3/config_center"
+)
+
+func TestGoConfigProcess(t *testing.T) {
+ rc := &RootConfigBuilder{rootConfig: newEmptyRootConfig()}
+ r := &RegistryConfig{Protocol: "zookeeper", Timeout: "10s", Address: "127.0.0.1:2181"}
+ rc.AddRegistry("demoZK", r)
+
+ // test koan.UnmarshalWithConf error
+ b := "dubbo:\n registries:\n demoZK:\n protocol: zookeeper\n timeout: 11s\n address: 127.0.0.1:2181\n simplified: abc123"
+ c2 := &config_center.ConfigChangeEvent{Key: "test", Value: b}
+ rc.rootConfig.Process(c2)
+ assert.Equal(t, rc.rootConfig.Registries["demoZK"].Timeout, "10s")
+
+ // test update registry time out
+ bs, _ := yaml.LoadYMLConfig("./testdata/root_config_test.yml")
+ c := &config_center.ConfigChangeEvent{Key: "test", Value: string(bs)}
+ rc.rootConfig.Process(c)
+ assert.Equal(t, rc.rootConfig.Registries["demoZK"].Timeout, "11s")
+
+}
diff --git a/config/testdata/root_config_test.yml b/config/testdata/root_config_test.yml
new file mode 100644
index 0000000..285b79c
--- /dev/null
+++ b/config/testdata/root_config_test.yml
@@ -0,0 +1,17 @@
+dubbo:
+ registries:
+ demoZK:
+ protocol: zookeeper
+ timeout: 11s
+ address: 127.0.0.1:2181
+ protocols:
+ triple:
+ name: tri
+ port: 20000
+ provider:
+ registry-ids:
+ - demoZK
+ services:
+ GreeterProvider:
+ protocol-ids: triple
+ interface: com.apache.dubbo.sample.basic.IGreeter # must be compatible with grpc or dubbo-java
\ No newline at end of file