From 3148dba7a52f7917ca5c8eecd01157ab5b62c585 Mon Sep 17 00:00:00 2001 From: eye-gu <734164350@qq.com> Date: Mon, 28 Aug 2023 09:28:52 +0800 Subject: [PATCH] [Improvement-14658][etcd] Distinguish between add and update by using pre kv (#14659) Co-authored-by: eye --- .../plugin/registry/etcd/EtcdRegistry.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/dolphinscheduler-registry/dolphinscheduler-registry-plugins/dolphinscheduler-registry-etcd/src/main/java/org/apache/dolphinscheduler/plugin/registry/etcd/EtcdRegistry.java b/dolphinscheduler-registry/dolphinscheduler-registry-plugins/dolphinscheduler-registry-etcd/src/main/java/org/apache/dolphinscheduler/plugin/registry/etcd/EtcdRegistry.java index 21e9253529..57a17c6519 100644 --- a/dolphinscheduler-registry/dolphinscheduler-registry-plugins/dolphinscheduler-registry-etcd/src/main/java/org/apache/dolphinscheduler/plugin/registry/etcd/EtcdRegistry.java +++ b/dolphinscheduler-registry/dolphinscheduler-registry-plugins/dolphinscheduler-registry-etcd/src/main/java/org/apache/dolphinscheduler/plugin/registry/etcd/EtcdRegistry.java @@ -151,7 +151,8 @@ public class EtcdRegistry implements Registry { public boolean subscribe(String path, SubscribeListener listener) { try { ByteSequence watchKey = byteSequence(path); - WatchOption watchOption = WatchOption.newBuilder().isPrefix(true).build(); + WatchOption watchOption = + WatchOption.newBuilder().withPrevKV(true).isPrefix(true).build(); watcherMap.computeIfAbsent(path, $ -> client.getWatchClient().watch(watchKey, watchOption, watchResponse -> { for (WatchEvent event : watchResponse.getEvents()) { @@ -352,7 +353,11 @@ public class EtcdRegistry implements Registry { switch (event.getEventType()) { case PUT: - type(Type.ADD); + if (event.getPrevKV().getKey().isEmpty()) { + type(Type.ADD); + } else { + type(Type.UPDATE); + } break; case DELETE: type(Type.REMOVE);