From 8d453e62a8c45c2944dc2f08b34f9423d8b5ccd1 Mon Sep 17 00:00:00 2001 From: nkorange Date: Tue, 23 Jul 2019 16:36:55 +0800 Subject: [PATCH 1/2] Fix #1591 --- .../ephemeral/distro/DistroConsistencyServiceImpl.java | 5 +++++ .../java/com/alibaba/nacos/naming/core/ServiceManager.java | 3 +++ 2 files changed, 8 insertions(+) diff --git a/naming/src/main/java/com/alibaba/nacos/naming/consistency/ephemeral/distro/DistroConsistencyServiceImpl.java b/naming/src/main/java/com/alibaba/nacos/naming/consistency/ephemeral/distro/DistroConsistencyServiceImpl.java index 65448e8a0d4..145ee6b5e15 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/consistency/ephemeral/distro/DistroConsistencyServiceImpl.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/consistency/ephemeral/distro/DistroConsistencyServiceImpl.java @@ -322,6 +322,11 @@ public void listen(String key, RecordListener listener) throws NacosException { if (!listeners.containsKey(key)) { listeners.put(key, new CopyOnWriteArrayList<>()); } + + if (listeners.get(key).contains(listener)) { + return; + } + listeners.get(key).add(listener); } diff --git a/naming/src/main/java/com/alibaba/nacos/naming/core/ServiceManager.java b/naming/src/main/java/com/alibaba/nacos/naming/core/ServiceManager.java index e45ec2b1282..7daaf5a2735 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/core/ServiceManager.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/core/ServiceManager.java @@ -143,6 +143,9 @@ public void onChange(String key, Service service) throws Exception { if (oldDom != null) { oldDom.update(service); + // re-listen to handle the situation when the underlying listener is removed: + consistencyService.listen(KeyBuilder.buildInstanceListKey(service.getNamespaceId(), service.getName(), true), oldDom); + consistencyService.listen(KeyBuilder.buildInstanceListKey(service.getNamespaceId(), service.getName(), false), oldDom); } else { putService(service); service.init(); From e5d0d6649212d4f7495f45318811e87abeebe336 Mon Sep 17 00:00:00 2001 From: nkorange Date: Fri, 26 Jul 2019 17:10:02 +0800 Subject: [PATCH 2/2] Fix #1591 --- .../ephemeral/distro/DistroConsistencyServiceImpl.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/naming/src/main/java/com/alibaba/nacos/naming/consistency/ephemeral/distro/DistroConsistencyServiceImpl.java b/naming/src/main/java/com/alibaba/nacos/naming/consistency/ephemeral/distro/DistroConsistencyServiceImpl.java index 145ee6b5e15..9024addcbe3 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/consistency/ephemeral/distro/DistroConsistencyServiceImpl.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/consistency/ephemeral/distro/DistroConsistencyServiceImpl.java @@ -104,7 +104,7 @@ public Thread newThread(Runnable r) { private Map syncChecksumTasks = new ConcurrentHashMap<>(16); @PostConstruct - public void init() throws Exception { + public void init() { GlobalExecutor.submit(new Runnable() { @Override public void run() { @@ -154,6 +154,7 @@ public void put(String key, Record value) throws NacosException { @Override public void remove(String key) throws NacosException { onRemove(key); + listeners.remove(key); } @Override @@ -186,8 +187,6 @@ public void onRemove(String key) { return; } - listeners.remove(key); - notifier.addTask(key, ApplyAction.DELETE); }