[Improvement-14658][etcd] Distinguish between add and update by using pre kv (#14659)

Co-authored-by: eye <eye.gu@aloudata.com>
This commit is contained in:
eye-gu 2023-08-28 09:28:52 +08:00 committed by GitHub
parent d223d654cc
commit 3148dba7a5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 7 additions and 2 deletions

View File

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