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);