You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by wu...@apache.org on 2021/05/30 09:56:59 UTC

[shardingsphere] branch master updated: Refactor EtcdRepository (#10553)

This is an automated email from the ASF dual-hosted git repository.

wuweijie pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git


The following commit(s) were added to refs/heads/master by this push:
     new d7ee0f2  Refactor EtcdRepository (#10553)
d7ee0f2 is described below

commit d7ee0f2df9852555b8cbdfc7e4cb2e70037c01b2
Author: Haoran Meng <me...@gmail.com>
AuthorDate: Sun May 30 17:56:13 2021 +0800

    Refactor EtcdRepository (#10553)
    
    * Refactor EtcdRepository
    
    * Refactor EtcdRepository
---
 .../governance/repository/etcd/EtcdRepository.java |  8 ++++--
 .../repository/etcd/EtcdRepositoryTest.java        | 31 +++++++++++-----------
 2 files changed, 21 insertions(+), 18 deletions(-)

diff --git a/shardingsphere-governance/shardingsphere-governance-repository/shardingsphere-governance-repository-provider/shardingsphere-governance-repository-etcd/src/main/java/org/apache/shardingsphere/governance/repository/etcd/EtcdRepository.java b/shardingsphere-governance/shardingsphere-governance-repository/shardingsphere-governance-repository-provider/shardingsphere-governance-repository-etcd/src/main/java/org/apache/shardingsphere/governance/repository/etcd/EtcdRepository.java
index 3513c30..0f38bf5 100644
--- a/shardingsphere-governance/shardingsphere-governance-repository/shardingsphere-governance-repository-provider/shardingsphere-governance-repository-etcd/src/main/java/org/apache/shardingsphere/governance/repository/etcd/EtcdRepository.java
+++ b/shardingsphere-governance/shardingsphere-governance-repository/shardingsphere-governance-repository-provider/shardingsphere-governance-repository-etcd/src/main/java/org/apache/shardingsphere/governance/repository/etcd/EtcdRepository.java
@@ -24,8 +24,10 @@ import io.etcd.jetcd.KeyValue;
 import io.etcd.jetcd.Observers;
 import io.etcd.jetcd.Util;
 import io.etcd.jetcd.Watch;
+import io.etcd.jetcd.options.DeleteOption;
 import io.etcd.jetcd.options.GetOption;
 import io.etcd.jetcd.options.PutOption;
+import io.etcd.jetcd.options.WatchOption;
 import io.etcd.jetcd.watch.WatchEvent;
 import lombok.Getter;
 import lombok.Setter;
@@ -104,7 +106,8 @@ public final class EtcdRepository implements RegistryCenterRepository {
 
     @Override
     public void delete(final String key) {
-        client.getKVClient().delete(ByteSequence.from(key, StandardCharsets.UTF_8));
+        client.getKVClient().delete(ByteSequence.from(key, StandardCharsets.UTF_8),
+                DeleteOption.newBuilder().withPrefix(ByteSequence.from(key, StandardCharsets.UTF_8)).build());
     }
     
     @Override
@@ -118,7 +121,8 @@ public final class EtcdRepository implements RegistryCenterRepository {
                 }
             }
         });
-        client.getWatchClient().watch(ByteSequence.from(key, StandardCharsets.UTF_8), listener);
+        client.getWatchClient().watch(ByteSequence.from(key, StandardCharsets.UTF_8),
+                WatchOption.newBuilder().withPrefix(ByteSequence.from(key, StandardCharsets.UTF_8)).build(), listener);
     }
     
     private Type getEventChangedType(final WatchEvent event) {
diff --git a/shardingsphere-governance/shardingsphere-governance-repository/shardingsphere-governance-repository-provider/shardingsphere-governance-repository-etcd/src/test/java/org/apache/shardingsphere/governance/repository/etcd/EtcdRepositoryTest.java b/shardingsphere-governance/shardingsphere-governance-repository/shardingsphere-governance-repository-provider/shardingsphere-governance-repository-etcd/src/test/java/org/apache/shardingsphere/governance/repository/etcd/EtcdRepositoryTest.java
index 60cb6b3..9615d93 100644
--- a/shardingsphere-governance/shardingsphere-governance-repository/shardingsphere-governance-repository-provider/shardingsphere-governance-repository-etcd/src/test/java/org/apache/shardingsphere/governance/repository/etcd/EtcdRepositoryTest.java
+++ b/shardingsphere-governance/shardingsphere-governance-repository/shardingsphere-governance-repository-provider/shardingsphere-governance-repository-etcd/src/test/java/org/apache/shardingsphere/governance/repository/etcd/EtcdRepositoryTest.java
@@ -17,20 +17,20 @@
 
 package org.apache.shardingsphere.governance.repository.etcd;
 
-import java.nio.charset.StandardCharsets;
 import com.google.protobuf.ByteString;
 import io.etcd.jetcd.ByteSequence;
 import io.etcd.jetcd.Client;
 import io.etcd.jetcd.KV;
 import io.etcd.jetcd.KeyValue;
 import io.etcd.jetcd.Lease;
-import io.etcd.jetcd.Watch;
 import io.etcd.jetcd.Lock;
+import io.etcd.jetcd.Watch;
 import io.etcd.jetcd.kv.GetResponse;
 import io.etcd.jetcd.lease.LeaseGrantResponse;
-import io.etcd.jetcd.lock.LockResponse;
+import io.etcd.jetcd.options.DeleteOption;
 import io.etcd.jetcd.options.GetOption;
 import io.etcd.jetcd.options.PutOption;
+import io.etcd.jetcd.options.WatchOption;
 import io.etcd.jetcd.watch.WatchEvent;
 import io.etcd.jetcd.watch.WatchResponse;
 import io.grpc.stub.StreamObserver;
@@ -43,6 +43,7 @@ import org.mockito.Mock;
 import org.mockito.internal.util.reflection.FieldSetter;
 import org.mockito.junit.MockitoJUnitRunner;
 
+import java.nio.charset.StandardCharsets;
 import java.util.Arrays;
 import java.util.Iterator;
 import java.util.LinkedList;
@@ -100,9 +101,6 @@ public final class EtcdRepositoryTest {
 
     @Mock
     private Lock etcdLock;
-
-    @Mock
-    private LockResponse lockResponse;
     
     private final EtcdRepository repository = new EtcdRepository();
     
@@ -139,6 +137,7 @@ public final class EtcdRepositoryTest {
         when(leaseGrantResponse.getID()).thenReturn(123L);
         when(client.getWatchClient()).thenReturn(watch);
         when(etcdLock.lock(any(ByteSequence.class), anyLong())).thenReturn(lockFuture);
+        when(etcdLock.unlock(any(ByteSequence.class))).thenReturn(lockFuture);
         return client;
     }
     
@@ -179,43 +178,43 @@ public final class EtcdRepositoryTest {
     @Test
     public void assertWatchUpdate() {
         doAnswer(invocationOnMock -> {
-            Watch.Listener listener = (Watch.Listener) invocationOnMock.getArguments()[1];
+            Watch.Listener listener = (Watch.Listener) invocationOnMock.getArguments()[2];
             listener.onNext(buildWatchResponse(WatchEvent.EventType.PUT));
             return mock(Watch.Watcher.class);
-        }).when(watch).watch(any(ByteSequence.class), any(Watch.Listener.class));
+        }).when(watch).watch(any(ByteSequence.class), any(WatchOption.class), any(Watch.Listener.class));
         repository.watch("key1", dataChangedEvent -> {
         });
-        verify(watch).watch(any(ByteSequence.class), any(Watch.Listener.class));
+        verify(watch).watch(any(ByteSequence.class), any(WatchOption.class), any(Watch.Listener.class));
     }
     
     @Test
     public void assertWatchDelete() {
         doAnswer(invocationOnMock -> {
-            Watch.Listener listener = (Watch.Listener) invocationOnMock.getArguments()[1];
+            Watch.Listener listener = (Watch.Listener) invocationOnMock.getArguments()[2];
             listener.onNext(buildWatchResponse(WatchEvent.EventType.DELETE));
             return mock(Watch.Watcher.class);
-        }).when(watch).watch(any(ByteSequence.class), any(Watch.Listener.class));
+        }).when(watch).watch(any(ByteSequence.class), any(WatchOption.class), any(Watch.Listener.class));
         repository.watch("key1", dataChangedEvent -> {
         });
-        verify(watch).watch(any(ByteSequence.class), any(Watch.Listener.class));
+        verify(watch).watch(any(ByteSequence.class), any(WatchOption.class), any(Watch.Listener.class));
     }
     
     @Test
     public void assertWatchIgnored() {
         doAnswer(invocationOnMock -> {
-            Watch.Listener listener = (Watch.Listener) invocationOnMock.getArguments()[1];
+            Watch.Listener listener = (Watch.Listener) invocationOnMock.getArguments()[2];
             listener.onNext(buildWatchResponse(WatchEvent.EventType.UNRECOGNIZED));
             return mock(Watch.Watcher.class);
-        }).when(watch).watch(any(ByteSequence.class), any(Watch.Listener.class));
+        }).when(watch).watch(any(ByteSequence.class), any(WatchOption.class), any(Watch.Listener.class));
         repository.watch("key1", dataChangedEvent -> {
         });
-        verify(watch).watch(any(ByteSequence.class), any(Watch.Listener.class));
+        verify(watch).watch(any(ByteSequence.class), any(WatchOption.class), any(Watch.Listener.class));
     }
     
     @Test
     public void assertDelete() {
         repository.delete("key");
-        verify(kv).delete(ByteSequence.from("key", StandardCharsets.UTF_8));
+        verify(kv).delete(any(ByteSequence.class), any(DeleteOption.class));
     }
     
     @Test