You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by la...@apache.org on 2021/09/02 14:41:39 UTC

[dubbo-go] branch config-enhance updated: feat(config): add new protocol config (#1425)

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

laurence 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 7206057  feat(config): add new protocol config (#1425)
7206057 is described below

commit 720605763126235f16cbb3884ff01cb648b0328d
Author: Mulavar <97...@qq.com>
AuthorDate: Thu Sep 2 22:41:35 2021 +0800

    feat(config): add new protocol config (#1425)
    
    * feat(config): add new protocol config
    
    * feat(config): replace '_' with '-'
    
    Co-authored-by: dongjianhui03 <do...@meituan.com>
---
 config/protocol_config.go      |  7 +++--
 config/provider_config.go      |  5 ++-
 remoting/getty/config.go       | 70 +++++++++++++++++++++---------------------
 remoting/getty/getty_client.go | 43 ++++++++++++++------------
 remoting/getty/getty_server.go | 24 ++++++++++-----
 remoting/getty/pool.go         |  4 +--
 6 files changed, 82 insertions(+), 71 deletions(-)

diff --git a/config/protocol_config.go b/config/protocol_config.go
index 11eeb7b..ab24145 100644
--- a/config/protocol_config.go
+++ b/config/protocol_config.go
@@ -27,9 +27,10 @@ import (
 
 // ProtocolConfig is protocol configuration
 type ProtocolConfig struct {
-	Name string `default:"dubbo" validate:"required" yaml:"name" json:"name,omitempty" property:"name"`
-	Ip   string `yaml:"ip"  json:"ip,omitempty" property:"ip"`
-	Port string `default:"2000" yaml:"port" json:"port,omitempty" property:"port"`
+	Name   string      `default:"dubbo" validate:"required" yaml:"name" json:"name,omitempty" property:"name"`
+	Ip     string      `yaml:"ip"  json:"ip,omitempty" property:"ip"`
+	Port   string      `default:"2000" yaml:"port" json:"port,omitempty" property:"port"`
+	Params interface{} `yaml:"params" json:"params,omitempty" property:"params"`
 }
 
 func initProtocolsConfig(rc *RootConfig) error {
diff --git a/config/provider_config.go b/config/provider_config.go
index 4a7adef..eaed3a2 100644
--- a/config/provider_config.go
+++ b/config/provider_config.go
@@ -43,9 +43,8 @@ type ProviderConfig struct {
 	Services map[string]*ServiceConfig `yaml:"services" json:"services,omitempty" property:"services"`
 
 	ProxyFactory string `default:"default" yaml:"proxy" json:"proxy,omitempty" property:"proxy"`
-	// Protocols      map[string]*ProtocolConfig `yaml:"protocols" json:"protocols,omitempty" property:"protocols"`
-	ProtocolConf interface{} `yaml:"protocol_conf" json:"protocol_conf,omitempty" property:"protocol_conf"`
-	FilterConf   interface{} `yaml:"filter_conf" json:"filter_conf,omitempty" property:"filter_conf"`
+
+	FilterConf interface{} `yaml:"filter_conf" json:"filter_conf,omitempty" property:"filter_conf"`
 	// ShutdownConfig *ShutdownConfig            `yaml:"shutdown_conf" json:"shutdown_conf,omitempty" property:"shutdown_conf"`
 	ConfigType map[string]string `yaml:"config_type" json:"config_type,omitempty" property:"config_type"`
 }
diff --git a/remoting/getty/config.go b/remoting/getty/config.go
index 9971d5c..5cf36bf 100644
--- a/remoting/getty/config.go
+++ b/remoting/getty/config.go
@@ -36,21 +36,21 @@ const (
 type (
 	// GettySessionParam is session configuration for getty
 	GettySessionParam struct {
-		CompressEncoding bool   `default:"false" yaml:"compress_encoding" json:"compress_encoding,omitempty"`
-		TcpNoDelay       bool   `default:"true" yaml:"tcp_no_delay" json:"tcp_no_delay,omitempty"`
-		TcpKeepAlive     bool   `default:"true" yaml:"tcp_keep_alive" json:"tcp_keep_alive,omitempty"`
-		KeepAlivePeriod  string `default:"180s" yaml:"keep_alive_period" json:"keep_alive_period,omitempty"`
+		CompressEncoding bool   `default:"false" yaml:"compress-encoding" json:"compress-encoding,omitempty"`
+		TcpNoDelay       bool   `default:"true" yaml:"tcp-no-delay" json:"tcp-no-delay,omitempty"`
+		TcpKeepAlive     bool   `default:"true" yaml:"tcp-keep-alive" json:"tcp-keep-alive,omitempty"`
+		KeepAlivePeriod  string `default:"180s" yaml:"keep-alive-period" json:"keep-alive-period,omitempty"`
 		keepAlivePeriod  time.Duration
-		TcpRBufSize      int    `default:"262144" yaml:"tcp_r_buf_size" json:"tcp_r_buf_size,omitempty"`
-		TcpWBufSize      int    `default:"65536" yaml:"tcp_w_buf_size" json:"tcp_w_buf_size,omitempty"`
-		TcpReadTimeout   string `default:"1s" yaml:"tcp_read_timeout" json:"tcp_read_timeout,omitempty"`
+		TcpRBufSize      int    `default:"262144" yaml:"tcp-r-buf-size" json:"tcp-r-buf-size,omitempty"`
+		TcpWBufSize      int    `default:"65536" yaml:"tcp-w-buf-size" json:"tcp-w-buf-size,omitempty"`
+		TcpReadTimeout   string `default:"1s" yaml:"tcp-read-timeout" json:"tcp-read-timeout,omitempty"`
 		tcpReadTimeout   time.Duration
-		TcpWriteTimeout  string `default:"5s" yaml:"tcp_write_timeout" json:"tcp_write_timeout,omitempty"`
+		TcpWriteTimeout  string `default:"5s" yaml:"tcp-write-timeout" json:"tcp-write-timeout,omitempty"`
 		tcpWriteTimeout  time.Duration
-		WaitTimeout      string `default:"7s" yaml:"wait_timeout" json:"wait_timeout,omitempty"`
+		WaitTimeout      string `default:"7s" yaml:"wait-timeout" json:"wait-timeout,omitempty"`
 		waitTimeout      time.Duration
-		MaxMsgLen        int    `default:"1024" yaml:"max_msg_len" json:"max_msg_len,omitempty"`
-		SessionName      string `default:"rpc" yaml:"session_name" json:"session_name,omitempty"`
+		MaxMsgLen        int    `default:"1024" yaml:"max-msg-len" json:"max-msg-len,omitempty"`
+		SessionName      string `default:"rpc" yaml:"session-name" json:"session-name,omitempty"`
 	}
 
 	// ServerConfig holds supported types by the multiconfig package
@@ -58,53 +58,53 @@ type (
 		SSLEnabled bool
 
 		// heartbeat
-		HeartbeatPeriod string `default:"60s" yaml:"heartbeat_period" json:"heartbeat_period,omitempty"`
+		HeartbeatPeriod string `default:"60s" yaml:"heartbeat-period" json:"heartbeat-period,omitempty"`
 		heartbeatPeriod time.Duration
 
 		// heartbeat timeout
-		HeartbeatTimeout string `default:"5s" yaml:"heartbeat_timeout" json:"heartbeat_timeout,omitempty"`
+		HeartbeatTimeout string `default:"5s" yaml:"heartbeat-timeout" json:"heartbeat-timeout,omitempty"`
 		heartbeatTimeout time.Duration
 
 		// session
-		SessionTimeout string `default:"60s" yaml:"session_timeout" json:"session_timeout,omitempty"`
+		SessionTimeout string `default:"60s" yaml:"session-timeout" json:"session-timeout,omitempty"`
 		sessionTimeout time.Duration
-		SessionNumber  int `default:"1000" yaml:"session_number" json:"session_number,omitempty"`
+		SessionNumber  int `default:"1000" yaml:"session-number" json:"session-number,omitempty"`
 
-		// grpool
-		GrPoolSize  int `default:"0" yaml:"gr_pool_size" json:"gr_pool_size,omitempty"`
-		QueueLen    int `default:"0" yaml:"queue_len" json:"queue_len,omitempty"`
-		QueueNumber int `default:"0" yaml:"queue_number" json:"queue_number,omitempty"`
+		// gr pool
+		GrPoolSize  int `default:"0" yaml:"gr-pool-size" json:"gr-pool-size,omitempty"`
+		QueueLen    int `default:"0" yaml:"queue-len" json:"queue-len,omitempty"`
+		QueueNumber int `default:"0" yaml:"queue-number" json:"queue-number,omitempty"`
 
 		// session tcp parameters
-		GettySessionParam GettySessionParam `required:"true" yaml:"getty_session_param" json:"getty_session_param,omitempty"`
+		GettySessionParam GettySessionParam `required:"true" yaml:",inline" json:",inline"`
 	}
 
-	// ClientConfig holds supported types by the multiconfig package
+	// ClientConfig holds supported types by the multi config package
 	ClientConfig struct {
-		ReconnectInterval int `default:"0" yaml:"reconnect_interval" json:"reconnect_interval,omitempty"`
+		ReconnectInterval int `default:"0" yaml:"reconnect-interval" json:"reconnect-interval,omitempty"`
 
 		// session pool
-		ConnectionNum int `default:"16" yaml:"connection_number" json:"connection_number,omitempty"`
+		ConnectionNum int `default:"16" yaml:"connection-number" json:"connection-number,omitempty"`
 
 		// heartbeat
-		HeartbeatPeriod string `default:"60s" yaml:"heartbeat_period" json:"heartbeat_period,omitempty"`
+		HeartbeatPeriod string `default:"60s" yaml:"heartbeat-period" json:"heartbeat-period,omitempty"`
 		heartbeatPeriod time.Duration
 
 		// heartbeat timeout
-		HeartbeatTimeout string `default:"5s" yaml:"heartbeat_timeout" json:"heartbeat_timeout,omitempty"`
+		HeartbeatTimeout string `default:"5s" yaml:"heartbeat-timeout" json:"heartbeat-timeout,omitempty"`
 		heartbeatTimeout time.Duration
 
 		// session
-		SessionTimeout string `default:"60s" yaml:"session_timeout" json:"session_timeout,omitempty"`
+		SessionTimeout string `default:"60s" yaml:"session-timeout" json:"session-timeout,omitempty"`
 		sessionTimeout time.Duration
 
-		// grpool
-		GrPoolSize  int `default:"0" yaml:"gr_pool_size" json:"gr_pool_size,omitempty"`
-		QueueLen    int `default:"0" yaml:"queue_len" json:"queue_len,omitempty"`
-		QueueNumber int `default:"0" yaml:"queue_number" json:"queue_number,omitempty"`
+		// gr pool
+		GrPoolSize  int `default:"0" yaml:"gr-pool-size" json:"gr-pool-size,omitempty"`
+		QueueLen    int `default:"0" yaml:"queue-len" json:"queue-len,omitempty"`
+		QueueNumber int `default:"0" yaml:"queue-number" json:"queue-number,omitempty"`
 
 		// session tcp parameters
-		GettySessionParam GettySessionParam `required:"true" yaml:"getty_session_param" json:"getty_session_param,omitempty"`
+		GettySessionParam GettySessionParam `required:"true" yaml:",inline" json:",inline"`
 	}
 )
 
@@ -158,7 +158,7 @@ func GetDefaultServerConfig() ServerConfig {
 	}
 }
 
-// CheckValidity confirm getty sessian params
+// CheckValidity confirm getty session params
 func (c *GettySessionParam) CheckValidity() error {
 	var err error
 
@@ -203,7 +203,7 @@ func (c *ClientConfig) CheckValidity() error {
 	}
 
 	if c.heartbeatPeriod >= time.Duration(config.MaxWheelTimeSpan) {
-		return perrors.WithMessagef(err, "heartbeat_period %s should be less than %s",
+		return perrors.WithMessagef(err, "heartbeat-period %s should be less than %s",
 			c.HeartbeatPeriod, time.Duration(config.MaxWheelTimeSpan))
 	}
 
@@ -231,7 +231,7 @@ func (c *ServerConfig) CheckValidity() error {
 	}
 
 	if c.heartbeatPeriod >= time.Duration(config.MaxWheelTimeSpan) {
-		return perrors.WithMessagef(err, "heartbeat_period %s should be less than %s",
+		return perrors.WithMessagef(err, "heartbeat-period %s should be less than %s",
 			c.HeartbeatPeriod, time.Duration(config.MaxWheelTimeSpan))
 	}
 
@@ -246,7 +246,7 @@ func (c *ServerConfig) CheckValidity() error {
 	}
 
 	if c.sessionTimeout >= time.Duration(config.MaxWheelTimeSpan) {
-		return perrors.WithMessagef(err, "session_timeout %s should be less than %s",
+		return perrors.WithMessagef(err, "session-timeout %s should be less than %s",
 			c.SessionTimeout, time.Duration(config.MaxWheelTimeSpan))
 	}
 
diff --git a/remoting/getty/getty_client.go b/remoting/getty/getty_client.go
index bd2143e..226e33e 100644
--- a/remoting/getty/getty_client.go
+++ b/remoting/getty/getty_client.go
@@ -50,7 +50,7 @@ var (
 	errClientReadTimeout = perrors.New("maybe the client read timeout or fail to decode tcp stream in Writer.Write")
 
 	clientConf   *ClientConfig
-	clientGrpool gxsync.GenericTaskPool
+	clientGrPool gxsync.GenericTaskPool
 )
 
 // it is init client for single protocol.
@@ -59,27 +59,30 @@ func initClient(protocol string) {
 		return
 	}
 
-	// load clientconfig from consumer_config
+	// load client config from rootConfig.Protocols
 	// default use dubbo
 	if config.GetApplicationConfig() == nil {
 		return
 	}
-	protocolConf := config.GetRootConfig().Network
+	if config.GetRootConfig().Protocols == nil {
+		return
+	}
+
+	protocolConf := config.GetRootConfig().Protocols[protocol]
 	defaultClientConfig := GetDefaultClientConfig()
 	if protocolConf == nil {
-		logger.Info("protocol_conf default use dubbo config")
+		logger.Info("use default getty client config")
 	} else {
-		//dubboConf := protocolConf.(map[interface{}]interface{})[protocol]
-		dubboConf := protocolConf[protocol]
-		if dubboConf == nil {
-			logger.Warnf("dubboConf is nil")
+		gettyClientConfig := protocolConf.Params
+		if gettyClientConfig == nil {
+			logger.Warnf("gettyClientConfig is nil")
 			return
 		}
-		dubboConfByte, err := yaml.Marshal(dubboConf)
+		gettyClientConfigBytes, err := yaml.Marshal(gettyClientConfig)
 		if err != nil {
 			panic(err)
 		}
-		err = yaml.Unmarshal(dubboConfByte, &defaultClientConfig)
+		err = yaml.Unmarshal(gettyClientConfigBytes, &defaultClientConfig)
 		if err != nil {
 			panic(err)
 		}
@@ -89,12 +92,12 @@ func initClient(protocol string) {
 		logger.Warnf("[CheckValidity] error: %v", err)
 		return
 	}
-	setClientGrpool()
+	setClientGrPool()
 
 	rand.Seed(time.Now().UnixNano())
 }
 
-// ShutdownConfig ClientConf
+// SetClientConf ClientConf
 func SetClientConf(c ClientConfig) {
 	clientConf = &c
 	err := clientConf.CheckValidity()
@@ -102,11 +105,11 @@ func SetClientConf(c ClientConfig) {
 		logger.Warnf("[ClientConfig CheckValidity] error: %v", err)
 		return
 	}
-	setClientGrpool()
+	setClientGrPool()
 }
 
-func setClientGrpool() {
-	clientGrpool = gxsync.NewTaskPoolSimple(clientConf.GrPoolSize)
+func setClientGrPool() {
+	clientGrPool = gxsync.NewTaskPoolSimple(clientConf.GrPoolSize)
 }
 
 // Options : param config
@@ -132,7 +135,7 @@ type Client struct {
 	codec              remoting.Codec
 }
 
-// create client
+// NewClient create client
 func NewClient(opt Options) *Client {
 	switch {
 	case opt.ConnectTimeout == 0:
@@ -153,7 +156,7 @@ func NewClient(opt Options) *Client {
 func (c *Client) SetExchangeClient(client *remoting.ExchangeClient) {
 }
 
-// init client and try to connection.
+// Connect init client and try to connection.
 func (c *Client) Connect(url *common.URL) error {
 	initClient(url.Protocol)
 	c.conf = *clientConf
@@ -168,7 +171,7 @@ func (c *Client) Connect(url *common.URL) error {
 	return err
 }
 
-// close network connection
+// Close close network connection
 func (c *Client) Close() {
 	c.mux.Lock()
 	client := c.gettyClient
@@ -180,7 +183,7 @@ func (c *Client) Close() {
 	}
 }
 
-// send request
+// Request send request
 func (c *Client) Request(request *remoting.Request, timeout time.Duration, response *remoting.PendingResponse) error {
 	_, session, err := c.selectSession(c.addr)
 	if err != nil {
@@ -215,7 +218,7 @@ func (c *Client) Request(request *remoting.Request, timeout time.Duration, respo
 	return perrors.WithStack(err)
 }
 
-// isAvailable returns true if the connection is available, or it can be re-established.
+// IsAvailable returns true if the connection is available, or it can be re-established.
 func (c *Client) IsAvailable() bool {
 	client, _, err := c.selectSession(c.addr)
 	return err == nil &&
diff --git a/remoting/getty/getty_server.go b/remoting/getty/getty_server.go
index a9ae886..f048bd7 100644
--- a/remoting/getty/getty_server.go
+++ b/remoting/getty/getty_server.go
@@ -46,27 +46,35 @@ import (
 var srvConf *ServerConfig
 
 func initServer(protocol string) {
-	// load clientconfig from provider_config
+	if protocol == "" {
+		return
+	}
+
+	// load server config from rootConfig.Protocols
 	// default use dubbo
 	if config.GetApplicationConfig() == nil {
 		return
 	}
-	protocolConf := config.GetProviderConfig().ProtocolConf
+	if config.GetRootConfig().Protocols == nil {
+		return
+	}
+
+	protocolConf := config.GetRootConfig().Protocols[protocol]
 	defaultServerConfig := GetDefaultServerConfig()
 	if protocolConf == nil {
-		logger.Info("protocol_conf default use dubbo config")
+		logger.Info("use default getty server config")
 	} else {
-		dubboConf := protocolConf.(map[interface{}]interface{})[protocol]
-		if dubboConf == nil {
-			logger.Warnf("dubboConf is nil")
+		gettyServerConfig := protocolConf.Params
+		if gettyServerConfig == nil {
+			logger.Warnf("gettyServerConfig is nil")
 			return
 		}
 
-		dubboConfByte, err := yaml.Marshal(dubboConf)
+		gettyServerConfigBytes, err := yaml.Marshal(gettyServerConfig)
 		if err != nil {
 			panic(err)
 		}
-		err = yaml.Unmarshal(dubboConfByte, &defaultServerConfig)
+		err = yaml.Unmarshal(gettyServerConfigBytes, &defaultServerConfig)
 		if err != nil {
 			panic(err)
 		}
diff --git a/remoting/getty/pool.go b/remoting/getty/pool.go
index 8b091a4..e30bafe 100644
--- a/remoting/getty/pool.go
+++ b/remoting/getty/pool.go
@@ -66,8 +66,8 @@ func newGettyRPCClientConn(rpcClient *Client, addr string) (*gettyRPCClient, err
 		clientOpts = append(clientOpts, getty.WithClientSslEnabled(sslEnabled), getty.WithClientTlsConfigBuilder(config.GetClientTlsConfigBuilder()))
 	}
 
-	if clientGrpool != nil {
-		clientOpts = append(clientOpts, getty.WithClientTaskPool(clientGrpool))
+	if clientGrPool != nil {
+		clientOpts = append(clientOpts, getty.WithClientTaskPool(clientGrPool))
 	}
 
 	gettyClient = getty.NewTCPClient(clientOpts...)