From 25f366c794852ae1ab69104cde71b83e78b1044b Mon Sep 17 00:00:00 2001
From: scott <scottwangsxll@gmail.com>
Date: Sun, 15 Mar 2020 23:02:03 +0800
Subject: [PATCH] Fix listener slice -> map

---
 registry/etcdv3/listener.go     | 32 +++++++++++++++-----------------
 registry/kubernetes/listener.go | 12 +++---------
 registry/zookeeper/listener.go  | 32 +++++++++++++++-----------------
 3 files changed, 33 insertions(+), 43 deletions(-)

diff --git a/registry/etcdv3/listener.go b/registry/etcdv3/listener.go
index 61c71ee48..da6a46b15 100644
--- a/registry/etcdv3/listener.go
+++ b/registry/etcdv3/listener.go
@@ -34,20 +34,17 @@ import (
 )
 
 type dataListener struct {
-	interestedURL map[string]*common.URL
+	interestedURL []*common.URL
 	listener      config_center.ConfigurationListener
 }
 
 // NewRegistryDataListener ...
 func NewRegistryDataListener(listener config_center.ConfigurationListener) *dataListener {
-	return &dataListener{listener: listener, interestedURL: make(map[string]*common.URL, 16)}
+	return &dataListener{listener: listener, interestedURL: make([]*common.URL, 16)}
 }
 
 func (l *dataListener) AddInterestedURL(url *common.URL) {
-	if _, ok := l.interestedURL[url.String()]; ok {
-		return
-	}
-	l.interestedURL[url.String()] = url
+	l.interestedURL = append(l.interestedURL, url)
 }
 
 func (l *dataListener) DataChange(eventType remoting.Event) bool {
@@ -59,18 +56,19 @@ func (l *dataListener) DataChange(eventType remoting.Event) bool {
 		return false
 	}
 
-	if _, ok := l.interestedURL[serviceURL.String()]; !ok {
-		return false
+	for _, v := range l.interestedURL {
+		if serviceURL.URLEqual(*v) {
+			l.listener.Process(
+				&config_center.ConfigChangeEvent{
+					Key:        eventType.Path,
+					Value:      serviceURL,
+					ConfigType: eventType.Action,
+				},
+			)
+			return true
+		}
 	}
-
-	l.listener.Process(
-		&config_center.ConfigChangeEvent{
-			Key:        eventType.Path,
-			Value:      serviceURL,
-			ConfigType: eventType.Action,
-		},
-	)
-	return true
+	return false
 }
 
 type configurationListener struct {
diff --git a/registry/kubernetes/listener.go b/registry/kubernetes/listener.go
index d9164e714..b1593e6fc 100644
--- a/registry/kubernetes/listener.go
+++ b/registry/kubernetes/listener.go
@@ -34,23 +34,19 @@ import (
 )
 
 type dataListener struct {
-	interestedURL map[string]*common.URL
+	interestedURL []*common.URL
 	listener      config_center.ConfigurationListener
 }
 
 // NewRegistryDataListener
 // new the data  listener, the interest url default len 16
 func NewRegistryDataListener(listener config_center.ConfigurationListener) *dataListener {
-	return &dataListener{listener: listener, interestedURL: make(map[string]*common.URL, 16)}
+	return &dataListener{listener: listener, interestedURL: make([]*common.URL, 16)}
 }
 
 // AddInterestedURL
 func (l *dataListener) AddInterestedURL(url *common.URL) {
-
-	if _, ok := l.interestedURL[url.String()]; ok {
-		return
-	}
-	l.interestedURL[url.String()] = url
+	l.interestedURL = append(l.interestedURL, url)
 }
 
 // DataChange
@@ -65,9 +61,7 @@ func (l *dataListener) DataChange(eventType remoting.Event) bool {
 	}
 
 	for _, v := range l.interestedURL {
-
 		if serviceURL.URLEqual(*v) {
-
 			l.listener.Process(
 				&config_center.ConfigChangeEvent{
 					Key:        eventType.Path,
diff --git a/registry/zookeeper/listener.go b/registry/zookeeper/listener.go
index 0c46261b3..6b7f7aa0e 100644
--- a/registry/zookeeper/listener.go
+++ b/registry/zookeeper/listener.go
@@ -37,21 +37,18 @@ import (
 
 // RegistryDataListener ...
 type RegistryDataListener struct {
-	interestedURL map[string]*common.URL
+	interestedURL []*common.URL
 	listener      config_center.ConfigurationListener
 }
 
 // NewRegistryDataListener ...
 func NewRegistryDataListener(listener config_center.ConfigurationListener) *RegistryDataListener {
-	return &RegistryDataListener{listener: listener, interestedURL: make(map[string]*common.URL, 16)}
+	return &RegistryDataListener{listener: listener, interestedURL: make([]*common.URL, 16)}
 }
 
 // AddInterestedURL ...
 func (l *RegistryDataListener) AddInterestedURL(url *common.URL) {
-	if _, ok := l.interestedURL[url.String()]; ok {
-		return
-	}
-	l.interestedURL[url.String()] = url
+	l.interestedURL = append(l.interestedURL, url)
 }
 
 // DataChange ...
@@ -69,18 +66,19 @@ func (l *RegistryDataListener) DataChange(eventType remoting.Event) bool {
 		return false
 	}
 
-	if _, ok := l.interestedURL[serviceURL.String()]; !ok {
-		return false
+	for _, v := range l.interestedURL {
+		if serviceURL.URLEqual(*v) {
+			l.listener.Process(
+				&config_center.ConfigChangeEvent{
+					Key:        eventType.Path,
+					Value:      serviceURL,
+					ConfigType: eventType.Action,
+				},
+			)
+			return true
+		}
 	}
-
-	l.listener.Process(
-		&config_center.ConfigChangeEvent{
-			Key:        eventType.Path,
-			Value:      serviceURL,
-			ConfigType: eventType.Action,
-		},
-	)
-	return true
+	return false
 }
 
 // RegistryConfigurationListener ...
-- 
GitLab