You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by al...@apache.org on 2021/09/04 08:11:51 UTC
[dubbo-go] branch config-enhance updated: fix(getty): fix nil panic
when set default getty config (#1437)
This is an automated email from the ASF dual-hosted git repository.
alexstocks pushed a commit to branch config-enhance
in repository https://gitbox.apache.org/repos/asf/dubbo-go.git
The following commit(s) were added to refs/heads/config-enhance by this push:
new d7e5177 fix(getty): fix nil panic when set default getty config (#1437)
d7e5177 is described below
commit d7e51774dd2eec27d77cb72a3370db645d65f325
Author: Mulavar <97...@qq.com>
AuthorDate: Sat Sep 4 16:11:45 2021 +0800
fix(getty): fix nil panic when set default getty config (#1437)
* fix(getty): fix nil panic when set default getty config
* style(getty): go fmt
* style(getty): add license header
Co-authored-by: dongjianhui03 <do...@meituan.com>
---
remoting/getty/config.go | 12 +++++++----
remoting/getty/getty_client.go | 9 ++++----
remoting/getty/getty_client_test.go | 18 ++++++++++++++++
remoting/getty/getty_server.go | 10 +++++----
remoting/getty/getty_server_test.go | 41 +++++++++++++++++++++++++++++++++++++
5 files changed, 78 insertions(+), 12 deletions(-)
diff --git a/remoting/getty/config.go b/remoting/getty/config.go
index 5cf36bf..234fa86 100644
--- a/remoting/getty/config.go
+++ b/remoting/getty/config.go
@@ -109,8 +109,8 @@ type (
)
// GetDefaultClientConfig gets client default configuration
-func GetDefaultClientConfig() ClientConfig {
- return ClientConfig{
+func GetDefaultClientConfig() *ClientConfig {
+ defaultClientConfig := &ClientConfig{
ReconnectInterval: 0,
ConnectionNum: 16,
HeartbeatPeriod: "30s",
@@ -132,11 +132,13 @@ func GetDefaultClientConfig() ClientConfig {
SessionName: "client",
},
}
+ _ = defaultClientConfig.CheckValidity()
+ return defaultClientConfig
}
// GetDefaultServerConfig gets server default configuration
-func GetDefaultServerConfig() ServerConfig {
- return ServerConfig{
+func GetDefaultServerConfig() *ServerConfig {
+ defaultServerConfig := &ServerConfig{
SessionTimeout: "180s",
SessionNumber: 700,
GrPoolSize: 120,
@@ -156,6 +158,8 @@ func GetDefaultServerConfig() ServerConfig {
SessionName: "server",
},
}
+ _ = defaultServerConfig.CheckValidity()
+ return defaultServerConfig
}
// CheckValidity confirm getty session params
diff --git a/remoting/getty/getty_client.go b/remoting/getty/getty_client.go
index 226e33e..d6ca10d 100644
--- a/remoting/getty/getty_client.go
+++ b/remoting/getty/getty_client.go
@@ -49,12 +49,14 @@ var (
errClientClosed = perrors.New("client closed")
errClientReadTimeout = perrors.New("maybe the client read timeout or fail to decode tcp stream in Writer.Write")
- clientConf *ClientConfig
+ clientConf *ClientConfig
+
clientGrPool gxsync.GenericTaskPool
)
// it is init client for single protocol.
func initClient(protocol string) {
+ clientConf = GetDefaultClientConfig()
if protocol == "" {
return
}
@@ -69,9 +71,9 @@ func initClient(protocol string) {
}
protocolConf := config.GetRootConfig().Protocols[protocol]
- defaultClientConfig := GetDefaultClientConfig()
if protocolConf == nil {
logger.Info("use default getty client config")
+ return
} else {
gettyClientConfig := protocolConf.Params
if gettyClientConfig == nil {
@@ -82,12 +84,11 @@ func initClient(protocol string) {
if err != nil {
panic(err)
}
- err = yaml.Unmarshal(gettyClientConfigBytes, &defaultClientConfig)
+ err = yaml.Unmarshal(gettyClientConfigBytes, clientConf)
if err != nil {
panic(err)
}
}
- clientConf = &defaultClientConfig
if err := clientConf.CheckValidity(); err != nil {
logger.Warnf("[CheckValidity] error: %v", err)
return
diff --git a/remoting/getty/getty_client_test.go b/remoting/getty/getty_client_test.go
index cef1197..2820681 100644
--- a/remoting/getty/getty_client_test.go
+++ b/remoting/getty/getty_client_test.go
@@ -38,6 +38,7 @@ import (
"dubbo.apache.org/dubbo-go/v3/common"
. "dubbo.apache.org/dubbo-go/v3/common/constant"
"dubbo.apache.org/dubbo-go/v3/common/proxy/proxy_factory"
+ "dubbo.apache.org/dubbo-go/v3/config"
"dubbo.apache.org/dubbo-go/v3/protocol"
"dubbo.apache.org/dubbo-go/v3/protocol/invocation"
"dubbo.apache.org/dubbo-go/v3/remoting"
@@ -476,3 +477,20 @@ func (u *UserProvider) Reference() string {
func (u User) JavaClassName() string {
return "com.ikurento.user.User"
}
+
+func TestInitClient(t *testing.T) {
+ originRootConf := config.GetRootConfig()
+ rootConf := config.RootConfig{
+ Protocols: map[string]*config.ProtocolConfig{
+ "dubbo": {
+ Name: "dubbo",
+ Ip: "127.0.0.1",
+ Port: "20003",
+ },
+ },
+ }
+ config.SetRootConfig(rootConf)
+ initServer("dubbo")
+ config.SetRootConfig(*originRootConf)
+ assert.NotNil(t, srvConf)
+}
diff --git a/remoting/getty/getty_server.go b/remoting/getty/getty_server.go
index f048bd7..e53f0d4 100644
--- a/remoting/getty/getty_server.go
+++ b/remoting/getty/getty_server.go
@@ -43,9 +43,12 @@ import (
"dubbo.apache.org/dubbo-go/v3/remoting"
)
-var srvConf *ServerConfig
+var (
+ srvConf *ServerConfig
+)
func initServer(protocol string) {
+ srvConf = GetDefaultServerConfig()
if protocol == "" {
return
}
@@ -60,9 +63,9 @@ func initServer(protocol string) {
}
protocolConf := config.GetRootConfig().Protocols[protocol]
- defaultServerConfig := GetDefaultServerConfig()
if protocolConf == nil {
logger.Info("use default getty server config")
+ return
} else {
gettyServerConfig := protocolConf.Params
if gettyServerConfig == nil {
@@ -74,12 +77,11 @@ func initServer(protocol string) {
if err != nil {
panic(err)
}
- err = yaml.Unmarshal(gettyServerConfigBytes, &defaultServerConfig)
+ err = yaml.Unmarshal(gettyServerConfigBytes, srvConf)
if err != nil {
panic(err)
}
}
- srvConf = &defaultServerConfig
if err := srvConf.CheckValidity(); err != nil {
panic(err)
}
diff --git a/remoting/getty/getty_server_test.go b/remoting/getty/getty_server_test.go
new file mode 100644
index 0000000..1f08199
--- /dev/null
+++ b/remoting/getty/getty_server_test.go
@@ -0,0 +1,41 @@
+/*
+ * 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 getty
+
+import (
+ "dubbo.apache.org/dubbo-go/v3/config"
+ "github.com/stretchr/testify/assert"
+ "testing"
+)
+
+func TestInitServer(t *testing.T) {
+ originRootConf := config.GetRootConfig()
+ rootConf := config.RootConfig{
+ Protocols: map[string]*config.ProtocolConfig{
+ "dubbo": {
+ Name: "dubbo",
+ Ip: "127.0.0.1",
+ Port: "20003",
+ },
+ },
+ }
+ config.SetRootConfig(rootConf)
+ initServer("dubbo")
+ config.SetRootConfig(*originRootConf)
+ assert.NotNil(t, srvConf)
+}