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