From 0dea341edcc4aa8c8b7646f0ba3ead79ee0e8a56 Mon Sep 17 00:00:00 2001
From: Joe Zou <yixian.zou@gmail.com>
Date: Mon, 18 May 2020 18:19:30 +0800
Subject: [PATCH] fix review comments

---
 registry/base_registry.go | 37 +++++++++++++++++++++++++++----------
 registry/mock_registry.go |  1 -
 2 files changed, 27 insertions(+), 11 deletions(-)

diff --git a/registry/base_registry.go b/registry/base_registry.go
index 3a9569740..8c62062cd 100644
--- a/registry/base_registry.go
+++ b/registry/base_registry.go
@@ -380,9 +380,32 @@ func (r *BaseRegistry) Subscribe(url *common.URL, notifyListener NotifyListener)
 	n := 0
 	for {
 		n++
-		err := r.processNotify(url, notifyListener, r.facadeBasedRegistry.DoSubscribe)
-		if err == nil {
-			return nil
+		if !r.IsAvailable() {
+			logger.Warnf("event listener game over.")
+			return perrors.New("nacosRegistry is not available.")
+		}
+
+		listener, err := r.facadeBasedRegistry.DoSubscribe(url)
+		if err != nil {
+			if !r.IsAvailable() {
+				logger.Warnf("event listener game over.")
+				return err
+			}
+			logger.Warnf("getListener() = err:%v", perrors.WithStack(err))
+			time.Sleep(time.Duration(RegistryConnDelay) * time.Second)
+			continue
+		}
+
+		for {
+			if serviceEvent, err := listener.Next(); err != nil {
+				logger.Warnf("Selector.watch() = error{%v}", perrors.WithStack(err))
+				listener.Close()
+				break
+			} else {
+				logger.Infof("update begin, service event: %v", serviceEvent.String())
+				notifyListener.Notify(serviceEvent)
+			}
+
 		}
 		sleepWait(n)
 	}
@@ -390,18 +413,12 @@ func (r *BaseRegistry) Subscribe(url *common.URL, notifyListener NotifyListener)
 
 // UnSubscribe :UnSubscribeURL
 func (r *BaseRegistry) UnSubscribe(url *common.URL, notifyListener NotifyListener) error {
-	return r.processNotify(url, notifyListener, r.facadeBasedRegistry.DoUnsubscribe)
-}
-
-// processNotify can process notify listener when Subscribe or UnSubscribe
-func (r *BaseRegistry) processNotify(url *common.URL, notifyListener NotifyListener, f func(conf *common.URL) (Listener, error)) error {
-
 	if !r.IsAvailable() {
 		logger.Warnf("event listener game over.")
 		return nil
 	}
 
-	listener, err := f(url)
+	listener, err := r.facadeBasedRegistry.DoUnsubscribe(url)
 	if err != nil {
 		if !r.IsAvailable() {
 			logger.Warnf("event listener game over.")
diff --git a/registry/mock_registry.go b/registry/mock_registry.go
index ddf445ac8..f39490a26 100644
--- a/registry/mock_registry.go
+++ b/registry/mock_registry.go
@@ -53,7 +53,6 @@ func (*MockRegistry) Register(url common.URL) error {
 
 // UnRegister
 func (r *MockRegistry) UnRegister(conf common.URL) error {
-
 	return nil
 }
 
-- 
GitLab