From 5e9362d7209f4934ba6a3c7bfe1325d67cbf45aa Mon Sep 17 00:00:00 2001 From: "vito.he" <hxmhlt@163.com> Date: Sun, 16 Feb 2020 16:07:48 +0800 Subject: [PATCH] Mod:cancel listener dir when zkpath end of providers/ & consumers/ --- common/constant/default.go | 1 + config/config_loader.go | 12 ++++++------ config/config_loader_test.go | 24 ++++++++++++------------ remoting/zookeeper/listener.go | 14 ++++++++++---- 4 files changed, 29 insertions(+), 22 deletions(-) diff --git a/common/constant/default.go b/common/constant/default.go index 992fc3274..8ed645e84 100644 --- a/common/constant/default.go +++ b/common/constant/default.go @@ -66,6 +66,7 @@ const ( DYNAMIC_CONFIGURATORS_CATEGORY = "dynamicconfigurators" APP_DYNAMIC_CONFIGURATORS_CATEGORY = "appdynamicconfigurators" PROVIDER_CATEGORY = "providers" + CONSUMER_CATEGORY = "consumers" ) const ( diff --git a/config/config_loader.go b/config/config_loader.go index 875d1f6dd..d6be98b67 100644 --- a/config/config_loader.go +++ b/config/config_loader.go @@ -195,20 +195,20 @@ func GetApplicationConfig() *ApplicationConfig { // GetProviderConfig find the provider config // if not found, create new one -func GetProviderConfig() ProviderConfig { +func GetProviderConfig() *ProviderConfig { if providerConfig == nil { logger.Warnf("providerConfig is nil!") - return ProviderConfig{} + return &ProviderConfig{} } - return *providerConfig + return providerConfig } // GetConsumerConfig find the consumer config // if not found, create new one -func GetConsumerConfig() ConsumerConfig { +func GetConsumerConfig() *ConsumerConfig { if consumerConfig == nil { logger.Warnf("consumerConfig is nil!") - return ConsumerConfig{} + return &ConsumerConfig{} } - return *consumerConfig + return consumerConfig } diff --git a/config/config_loader_test.go b/config/config_loader_test.go index 498f82678..a25cccec4 100644 --- a/config/config_loader_test.go +++ b/config/config_loader_test.go @@ -43,9 +43,9 @@ func TestConfigLoader(t *testing.T) { assert.NoError(t, err) assert.Nil(t, consumerConfig) - assert.Equal(t, ConsumerConfig{}, GetConsumerConfig()) + assert.Equal(t, &ConsumerConfig{}, GetConsumerConfig()) assert.Nil(t, providerConfig) - assert.Equal(t, ProviderConfig{}, GetProviderConfig()) + assert.Equal(t, &ProviderConfig{}, GetProviderConfig()) err = ConsumerInit(conPath) assert.NoError(t, err) @@ -53,9 +53,9 @@ func TestConfigLoader(t *testing.T) { assert.NoError(t, err) assert.NotNil(t, consumerConfig) - assert.NotEqual(t, ConsumerConfig{}, GetConsumerConfig()) + assert.NotEqual(t, &ConsumerConfig{}, GetConsumerConfig()) assert.NotNil(t, providerConfig) - assert.NotEqual(t, ProviderConfig{}, GetProviderConfig()) + assert.NotEqual(t, &ProviderConfig{}, GetProviderConfig()) assert.Equal(t, "soa.com.ikurento.user.UserProvider", GetConsumerConfig().References["UserProvider"].Params["serviceid"]) } @@ -155,9 +155,9 @@ func TestConfigLoaderWithConfigCenter(t *testing.T) { assert.NoError(t, err) assert.Nil(t, consumerConfig) - assert.Equal(t, ConsumerConfig{}, GetConsumerConfig()) + assert.Equal(t, &ConsumerConfig{}, GetConsumerConfig()) assert.Nil(t, providerConfig) - assert.Equal(t, ProviderConfig{}, GetProviderConfig()) + assert.Equal(t, &ProviderConfig{}, GetProviderConfig()) err = ConsumerInit(conPath) configCenterRefreshConsumer() @@ -167,9 +167,9 @@ func TestConfigLoaderWithConfigCenter(t *testing.T) { assert.NoError(t, err) assert.NotNil(t, consumerConfig) - assert.NotEqual(t, ConsumerConfig{}, GetConsumerConfig()) + assert.NotEqual(t, &ConsumerConfig{}, GetConsumerConfig()) assert.NotNil(t, providerConfig) - assert.NotEqual(t, ProviderConfig{}, GetProviderConfig()) + assert.NotEqual(t, &ProviderConfig{}, GetProviderConfig()) assert.Equal(t, "BDTService", consumerConfig.ApplicationConfig.Name) assert.Equal(t, "127.0.0.1:2181", consumerConfig.Registries["hangzhouzk"].Address) @@ -208,9 +208,9 @@ func TestConfigLoaderWithConfigCenterSingleRegistry(t *testing.T) { assert.NoError(t, err) assert.Nil(t, consumerConfig) - assert.Equal(t, ConsumerConfig{}, GetConsumerConfig()) + assert.Equal(t, &ConsumerConfig{}, GetConsumerConfig()) assert.Nil(t, providerConfig) - assert.Equal(t, ProviderConfig{}, GetProviderConfig()) + assert.Equal(t, &ProviderConfig{}, GetProviderConfig()) err = ConsumerInit(conPath) checkApplicationName(consumerConfig.ApplicationConfig) @@ -224,9 +224,9 @@ func TestConfigLoaderWithConfigCenterSingleRegistry(t *testing.T) { assert.NoError(t, err) assert.NotNil(t, consumerConfig) - assert.NotEqual(t, ConsumerConfig{}, GetConsumerConfig()) + assert.NotEqual(t, &ConsumerConfig{}, GetConsumerConfig()) assert.NotNil(t, providerConfig) - assert.NotEqual(t, ProviderConfig{}, GetProviderConfig()) + assert.NotEqual(t, &ProviderConfig{}, GetProviderConfig()) assert.Equal(t, "BDTService", consumerConfig.ApplicationConfig.Name) assert.Equal(t, "mock://127.0.0.1:2182", consumerConfig.Registries[constant.DEFAULT_KEY].Address) diff --git a/remoting/zookeeper/listener.go b/remoting/zookeeper/listener.go index 4493c06dc..9032e1bd0 100644 --- a/remoting/zookeeper/listener.go +++ b/remoting/zookeeper/listener.go @@ -18,7 +18,9 @@ package zookeeper import ( + "github.com/apache/dubbo-go/common/constant" "path" + "strings" "sync" "time" ) @@ -256,10 +258,14 @@ func (l *ZkEventListener) listenDirEvent(zkPath string, listener remoting.DataLi }(dubboPath, listener) //listen sub path recursive - go func(zkPath string, listener remoting.DataListener) { - l.listenDirEvent(zkPath, listener) - logger.Warnf("listenDirEvent(zkPath{%s}) goroutine exit now", zkPath) - }(dubboPath, listener) + //if zkPath is end of "providers/ & consumers/" we do not listen children dir + if strings.LastIndex(zkPath, constant.PROVIDER_CATEGORY) == -1 && + strings.LastIndex(zkPath, constant.CONSUMER_CATEGORY) == -1 { + go func(zkPath string, listener remoting.DataListener) { + l.listenDirEvent(zkPath, listener) + logger.Warnf("listenDirEvent(zkPath{%s}) goroutine exit now", zkPath) + }(dubboPath, listener) + } } select { case zkEvent = <-childEventCh: -- GitLab