From 035d7d919be112eb74f64941522557b7676efe2c Mon Sep 17 00:00:00 2001
From: flycash <mingflycash@gmail.com>
Date: Sun, 31 May 2020 15:55:44 +0800
Subject: [PATCH] Fix bug: using EventPublishServiceDiscovery

---
 config/config_loader.go                                | 10 ----------
 metadata/report/delegate/delegate_report.go            |  2 +-
 .../servicediscovery/service_discovery_registry.go     |  8 +++++++-
 3 files changed, 8 insertions(+), 12 deletions(-)

diff --git a/config/config_loader.go b/config/config_loader.go
index b79c2e824..a4dc62ffb 100644
--- a/config/config_loader.go
+++ b/config/config_loader.go
@@ -276,16 +276,10 @@ func GetApplicationConfig() *ApplicationConfig {
 
 // GetProviderConfig find the provider config
 // if not found, create new one
-// we use double-check to reduce race condition
-// In general, it will be locked 0 or 1 time.
-// So you don't need to worry about the race condition
 func GetProviderConfig() ProviderConfig {
 	if providerConfig == nil {
 		logger.Warnf("providerConfig is nil! we will try to create one")
-		configAccessMutex.Lock()
-		defer configAccessMutex.Unlock()
 		if providerConfig == nil {
-			logger.Warnf("creating empty provider config. You should see this log only once.")
 			return ProviderConfig{}
 		}
 	}
@@ -299,11 +293,7 @@ func GetProviderConfig() ProviderConfig {
 // So you don't need to worry about the race condition
 func GetConsumerConfig() ConsumerConfig {
 	if consumerConfig == nil {
-		logger.Warnf("consumerConfig is nil! we will try to create one")
-		configAccessMutex.Lock()
-		defer configAccessMutex.Unlock()
 		if consumerConfig == nil {
-			logger.Warnf("creating empty consumer config. You should see this log only once.")
 			return ConsumerConfig{}
 		}
 	}
diff --git a/metadata/report/delegate/delegate_report.go b/metadata/report/delegate/delegate_report.go
index 4bc781a7f..1ab7e4e7c 100644
--- a/metadata/report/delegate/delegate_report.go
+++ b/metadata/report/delegate/delegate_report.go
@@ -130,7 +130,7 @@ func NewMetadataReport() (*MetadataReport, error) {
 		scheduler := gocron.NewScheduler(time.UTC)
 		_, err := scheduler.Every(1).Day().Do(
 			func() {
-				logger.Info("start to publish all metadata in metadata report %s.", url.String())
+				logger.Infof("start to publish all metadata in metadata report %s.", url.String())
 				bmr.allMetadataReportsLock.RLock()
 				bmr.doHandlerMetadataCollection(bmr.allMetadataReports)
 				bmr.allMetadataReportsLock.RUnlock()
diff --git a/registry/servicediscovery/service_discovery_registry.go b/registry/servicediscovery/service_discovery_registry.go
index 33d22e733..555513a44 100644
--- a/registry/servicediscovery/service_discovery_registry.go
+++ b/registry/servicediscovery/service_discovery_registry.go
@@ -38,6 +38,7 @@ import (
 	"github.com/apache/dubbo-go/metadata/service"
 	"github.com/apache/dubbo-go/metadata/service/remote"
 	"github.com/apache/dubbo-go/registry"
+	registryCommon "github.com/apache/dubbo-go/registry/common"
 	"github.com/apache/dubbo-go/registry/servicediscovery/proxy"
 	"github.com/apache/dubbo-go/registry/servicediscovery/synthesizer"
 	"github.com/apache/dubbo-go/remoting"
@@ -113,7 +114,11 @@ func creatServiceDiscovery(url *common.URL) (registry.ServiceDiscovery, error) {
 	if !ok {
 		return nil, perrors.Errorf("The service discovery with name: %s is not found", sdcName)
 	}
-	return extension.GetServiceDiscovery(sdc.Protocol, sdcName)
+	originServiceDiscovery, err := extension.GetServiceDiscovery(sdc.Protocol, sdcName)
+	if err != nil {
+		return nil, perrors.WithMessage(err, "Create service discovery fialed")
+	}
+	return registryCommon.NewEventPublishingServiceDiscovery(originServiceDiscovery), nil
 }
 
 func parseServices(literalServices string) *gxset.HashSet {
@@ -155,6 +160,7 @@ func (s *serviceDiscoveryRegistry) Register(url common.URL) error {
 		return nil
 	}
 	ok, err := s.metaDataService.ExportURL(url)
+	s.metaDataService.PublishServiceDefinition(url)
 	if err != nil {
 		logger.Errorf("The URL[%s] registry catch error:%s!", url.String(), err.Error())
 		return err
-- 
GitLab