This is an automated email from the ASF dual-hosted git repository.
kimmking 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 f477603 Realize global lock for zookeeper (#8342)
f477603 is described below
commit f477603699a1ce7c5283f31721cb34a393ae8f3d
Author: Haoran Meng <[email protected]>
AuthorDate: Wed Nov 25 22:07:00 2020 +0800
Realize global lock for zookeeper (#8342)
* Realize global lock for zookeeper
* Realize global lock for zookeeper
* Realize global lock for zookeeper
---
.../core/facade/fixture/TestAllRepository.java | 14 ++++++
.../facade/fixture/TestRegistryRepository.java | 14 ++++++
.../repository/api/RegistryRepository.java | 23 ++++++++++
.../governance/repository/etcd/EtcdRepository.java | 19 +++++++-
.../zookeeper/CuratorZookeeperRepository.java | 53 ++++++++++++++++++----
.../zookeeper/CuratorZookeeperRepositoryTest.java | 20 ++++++++
.../governance/fixture/TestRegistryRepository.java | 14 ++++++
.../registry/TestGovernanceRepository.java | 14 ++++++
.../registry/TestGovernanceRepository.java | 14 ++++++
.../proxy/fixture/FixtureRegistryRepository.java | 14 ++++++
.../core/fixture/FixtureRegistryRepository.java | 14 ++++++
11 files changed, 202 insertions(+), 11 deletions(-)
diff --git
a/shardingsphere-governance/shardingsphere-governance-core/shardingsphere-governance-core-facade/src/test/java/org/apache/shardingsphere/governance/core/facade/fixture/TestAllRepository.java
b/shardingsphere-governance/shardingsphere-governance-core/shardingsphere-governance-core-facade/src/test/java/org/apache/shardingsphere/governance/core/facade/fixture/TestAllRepository.java
index 83a0894..9dc58e2 100644
---
a/shardingsphere-governance/shardingsphere-governance-core/shardingsphere-governance-core-facade/src/test/java/org/apache/shardingsphere/governance/core/facade/fixture/TestAllRepository.java
+++
b/shardingsphere-governance/shardingsphere-governance-core/shardingsphere-governance-core-facade/src/test/java/org/apache/shardingsphere/governance/core/facade/fixture/TestAllRepository.java
@@ -27,6 +27,7 @@ import
org.apache.shardingsphere.governance.repository.api.listener.DataChangedE
import java.util.Collections;
import java.util.List;
import java.util.Properties;
+import java.util.concurrent.TimeUnit;
@Getter
@Setter
@@ -57,6 +58,19 @@ public final class TestAllRepository implements
RegistryRepository, Configuratio
}
@Override
+ public void initLock(final String key) {
+ }
+
+ @Override
+ public boolean tryLock(final long time, final TimeUnit unit) {
+ return false;
+ }
+
+ @Override
+ public void releaseLock() {
+ }
+
+ @Override
public void delete(final String key) {
}
diff --git
a/shardingsphere-governance/shardingsphere-governance-core/shardingsphere-governance-core-facade/src/test/java/org/apache/shardingsphere/governance/core/facade/fixture/TestRegistryRepository.java
b/shardingsphere-governance/shardingsphere-governance-core/shardingsphere-governance-core-facade/src/test/java/org/apache/shardingsphere/governance/core/facade/fixture/TestRegistryRepository.java
index 4e66e98..280cc4f 100644
---
a/shardingsphere-governance/shardingsphere-governance-core/shardingsphere-governance-core-facade/src/test/java/org/apache/shardingsphere/governance/core/facade/fixture/TestRegistryRepository.java
+++
b/shardingsphere-governance/shardingsphere-governance-core/shardingsphere-governance-core-facade/src/test/java/org/apache/shardingsphere/governance/core/facade/fixture/TestRegistryRepository.java
@@ -26,6 +26,7 @@ import
org.apache.shardingsphere.governance.repository.api.listener.DataChangedE
import java.util.Collections;
import java.util.List;
import java.util.Properties;
+import java.util.concurrent.TimeUnit;
@Getter
@Setter
@@ -56,6 +57,19 @@ public final class TestRegistryRepository implements
RegistryRepository {
}
@Override
+ public void initLock(final String key) {
+ }
+
+ @Override
+ public boolean tryLock(final long time, final TimeUnit unit) {
+ return false;
+ }
+
+ @Override
+ public void releaseLock() {
+ }
+
+ @Override
public void delete(final String key) {
}
diff --git
a/shardingsphere-governance/shardingsphere-governance-repository/shardingsphere-governance-repository-api/src/main/java/org/apache/shardingsphere/governance/repository/api/RegistryRepository.java
b/shardingsphere-governance/shardingsphere-governance-repository/shardingsphere-governance-repository-api/src/main/java/org/apache/shardingsphere/governance/repository/api/RegistryRepository.java
index e0ae88c..99fbf4a 100644
---
a/shardingsphere-governance/shardingsphere-governance-repository/shardingsphere-governance-repository-api/src/main/java/org/apache/shardingsphere/governance/repository/api/RegistryRepository.java
+++
b/shardingsphere-governance/shardingsphere-governance-repository/shardingsphere-governance-repository-api/src/main/java/org/apache/shardingsphere/governance/repository/api/RegistryRepository.java
@@ -17,6 +17,8 @@
package org.apache.shardingsphere.governance.repository.api;
+import java.util.concurrent.TimeUnit;
+
/**
* Registry repository.
*/
@@ -29,4 +31,25 @@ public interface RegistryRepository extends
GovernanceRepository {
* @param value value of data
*/
void persistEphemeral(String key, String value);
+
+ /**
+ * Initialize lock.
+ *
+ * @param key the key for lock
+ */
+ void initLock(String key);
+
+ /**
+ * Try to get lock.
+ *
+ * @param time time to wait
+ * @param unit time unit
+ * @return true if get the lock, false if not
+ */
+ boolean tryLock(long time, TimeUnit unit);
+
+ /**
+ * Release lock.
+ */
+ void releaseLock();
}
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 afbf1f1..8508265 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
@@ -17,7 +17,6 @@
package org.apache.shardingsphere.governance.repository.etcd;
-import java.nio.charset.StandardCharsets;
import com.google.common.base.Splitter;
import io.etcd.jetcd.ByteSequence;
import io.etcd.jetcd.Client;
@@ -38,9 +37,11 @@ import
org.apache.shardingsphere.governance.repository.api.listener.DataChangedE
import
org.apache.shardingsphere.governance.repository.api.listener.DataChangedEvent.Type;
import
org.apache.shardingsphere.governance.repository.api.listener.DataChangedEventListener;
+import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.Properties;
import java.util.concurrent.ExecutionException;
+import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
/**
@@ -99,6 +100,22 @@ public final class EtcdRepository implements
ConfigurationRepository, RegistryRe
}
@Override
+ public void initLock(final String key) {
+ // TODO
+ }
+
+ @Override
+ public boolean tryLock(final long time, final TimeUnit unit) {
+ // TODO
+ return false;
+ }
+
+ @Override
+ public void releaseLock() {
+ // TODO
+ }
+
+ @Override
public void delete(final String key) {
client.getKVClient().delete(ByteSequence.from(key,
StandardCharsets.UTF_8));
}
diff --git
a/shardingsphere-governance/shardingsphere-governance-repository/shardingsphere-governance-repository-provider/shardingsphere-governance-repository-zookeeper-curator/src/main/java/org/apache/shardingsphere/governance/repository/zookeeper/CuratorZookeeperRepository.java
b/shardingsphere-governance/shardingsphere-governance-repository/shardingsphere-governance-repository-provider/shardingsphere-governance-repository-zookeeper-curator/src/main/java/org/apache/shardingsphere/govern
[...]
index 228fdb2..ab042d1 100644
---
a/shardingsphere-governance/shardingsphere-governance-repository/shardingsphere-governance-repository-provider/shardingsphere-governance-repository-zookeeper-curator/src/main/java/org/apache/shardingsphere/governance/repository/zookeeper/CuratorZookeeperRepository.java
+++
b/shardingsphere-governance/shardingsphere-governance-repository/shardingsphere-governance-repository-provider/shardingsphere-governance-repository-zookeeper-curator/src/main/java/org/apache/shardingsphere/governance/repository/zookeeper/CuratorZookeeperRepository.java
@@ -18,16 +18,6 @@
package org.apache.shardingsphere.governance.repository.zookeeper;
import com.google.common.base.Strings;
-import java.nio.charset.StandardCharsets;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Optional;
-import java.util.Properties;
-import java.util.concurrent.TimeUnit;
import lombok.Getter;
import lombok.Setter;
import org.apache.curator.framework.CuratorFramework;
@@ -37,6 +27,8 @@ import
org.apache.curator.framework.api.transaction.TransactionOp;
import org.apache.curator.framework.recipes.cache.ChildData;
import org.apache.curator.framework.recipes.cache.CuratorCache;
import org.apache.curator.framework.recipes.cache.CuratorCacheListener;
+import org.apache.curator.framework.recipes.locks.InterProcessLock;
+import org.apache.curator.framework.recipes.locks.InterProcessMutex;
import org.apache.curator.retry.ExponentialBackoffRetry;
import org.apache.curator.utils.CloseableUtils;
import
org.apache.shardingsphere.governance.repository.api.ConfigurationRepository;
@@ -51,6 +43,17 @@ import
org.apache.zookeeper.KeeperException.OperationTimeoutException;
import org.apache.zookeeper.ZooDefs;
import org.apache.zookeeper.data.ACL;
+import java.nio.charset.StandardCharsets;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Optional;
+import java.util.Properties;
+import java.util.concurrent.TimeUnit;
+
/**
* Governance repository of ZooKeeper.
*/
@@ -60,6 +63,8 @@ public final class CuratorZookeeperRepository implements
ConfigurationRepository
private CuratorFramework client;
+ private InterProcessLock interProcessLock;
+
@Getter
@Setter
private Properties props = new Properties();
@@ -213,6 +218,34 @@ public final class CuratorZookeeperRepository implements
ConfigurationRepository
}
@Override
+ public void initLock(final String key) {
+ interProcessLock = new InterProcessMutex(client, key);
+ }
+
+ @Override
+ public boolean tryLock(final long time, final TimeUnit unit) {
+ try {
+ return interProcessLock.acquire(time, unit);
+ // CHECKSTYLE:OFF
+ } catch (final Exception e) {
+ // CHECKSTYLE:ON
+ CuratorZookeeperExceptionHandler.handleException(e);
+ return false;
+ }
+ }
+
+ @Override
+ public void releaseLock() {
+ try {
+ interProcessLock.release();
+ // CHECKSTYLE:OFF
+ } catch (final Exception e) {
+ // CHECKSTYLE:ON
+ CuratorZookeeperExceptionHandler.handleException(e);
+ }
+ }
+
+ @Override
public void delete(final String key) {
try {
if (isExisted(key)) {
diff --git
a/shardingsphere-governance/shardingsphere-governance-repository/shardingsphere-governance-repository-provider/shardingsphere-governance-repository-zookeeper-curator/src/test/java/org/apache/shardingsphere/governance/repository/zookeeper/CuratorZookeeperRepositoryTest.java
b/shardingsphere-governance/shardingsphere-governance-repository/shardingsphere-governance-repository-provider/shardingsphere-governance-repository-zookeeper-curator/src/test/java/org/apache/shardingsphere/go
[...]
index f29c4d4..6b842cf 100644
---
a/shardingsphere-governance/shardingsphere-governance-repository/shardingsphere-governance-repository-provider/shardingsphere-governance-repository-zookeeper-curator/src/test/java/org/apache/shardingsphere/governance/repository/zookeeper/CuratorZookeeperRepositoryTest.java
+++
b/shardingsphere-governance/shardingsphere-governance-repository/shardingsphere-governance-repository-provider/shardingsphere-governance-repository-zookeeper-curator/src/test/java/org/apache/shardingsphere/governance/repository/zookeeper/CuratorZookeeperRepositoryTest.java
@@ -17,6 +17,7 @@
package org.apache.shardingsphere.governance.repository.zookeeper;
+import lombok.SneakyThrows;
import org.apache.curator.framework.CuratorFramework;
import
org.apache.shardingsphere.governance.repository.api.config.GovernanceCenterConfiguration;
import
org.apache.shardingsphere.governance.repository.api.exception.GovernanceException;
@@ -28,6 +29,8 @@ import org.junit.Test;
import java.lang.reflect.Field;
import java.util.List;
import java.util.Properties;
+import java.util.concurrent.FutureTask;
+import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicReference;
import static org.hamcrest.CoreMatchers.is;
@@ -48,6 +51,7 @@ public final class CuratorZookeeperRepositoryTest {
EmbedTestingServer.start();
serverLists = EmbedTestingServer.getTestingServerConnectionString();
REPOSITORY.init("governance", new
GovernanceCenterConfiguration(REPOSITORY.getType(), serverLists, new
Properties()));
+ REPOSITORY.initLock("/glock");
}
@Test
@@ -246,4 +250,20 @@ public final class CuratorZookeeperRepositoryTest {
assertTrue(ex instanceof GovernanceException);
}
}
+
+ @Test
+ public void assertTryLock() {
+ assertThat(REPOSITORY.tryLock(5, TimeUnit.SECONDS), is(true));
+ REPOSITORY.releaseLock();
+ }
+
+ @Test
+ @SneakyThrows
+ public void assertTryLockFailed() {
+ assertThat(REPOSITORY.tryLock(1, TimeUnit.SECONDS), is(true));
+ FutureTask<Boolean> task = new FutureTask(() -> REPOSITORY.tryLock(1,
TimeUnit.SECONDS));
+ new Thread(task).start();
+ assertThat(task.get(), is(false));
+ REPOSITORY.releaseLock();
+ }
}
diff --git
a/shardingsphere-jdbc/shardingsphere-jdbc-governance/src/test/java/org/apache/shardingsphere/driver/governance/fixture/TestRegistryRepository.java
b/shardingsphere-jdbc/shardingsphere-jdbc-governance/src/test/java/org/apache/shardingsphere/driver/governance/fixture/TestRegistryRepository.java
index b58ad06..3fb38b1 100644
---
a/shardingsphere-jdbc/shardingsphere-jdbc-governance/src/test/java/org/apache/shardingsphere/driver/governance/fixture/TestRegistryRepository.java
+++
b/shardingsphere-jdbc/shardingsphere-jdbc-governance/src/test/java/org/apache/shardingsphere/driver/governance/fixture/TestRegistryRepository.java
@@ -29,6 +29,7 @@ import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
+import java.util.concurrent.TimeUnit;
@Getter
@Setter
@@ -63,6 +64,19 @@ public final class TestRegistryRepository implements
RegistryRepository, Configu
}
@Override
+ public void initLock(final String key) {
+ }
+
+ @Override
+ public boolean tryLock(final long time, final TimeUnit unit) {
+ return false;
+ }
+
+ @Override
+ public void releaseLock() {
+ }
+
+ @Override
public void delete(final String key) {
}
diff --git
a/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-governance-spring/shardingsphere-jdbc-governance-spring-boot-starter/src/test/java/org/apache/shardingsphere/spring/boot/governance/registry/TestGovernanceRepository.java
b/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-governance-spring/shardingsphere-jdbc-governance-spring-boot-starter/src/test/java/org/apache/shardingsphere/spring/boot/governance/registry/TestGovernanceRepository.java
index 0094220..126154f 100644
---
a/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-governance-spring/shardingsphere-jdbc-governance-spring-boot-starter/src/test/java/org/apache/shardingsphere/spring/boot/governance/registry/TestGovernanceRepository.java
+++
b/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-governance-spring/shardingsphere-jdbc-governance-spring-boot-starter/src/test/java/org/apache/shardingsphere/spring/boot/governance/registry/TestGovernanceRepository.java
@@ -29,6 +29,7 @@ import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
+import java.util.concurrent.TimeUnit;
@Getter
@Setter
@@ -63,6 +64,19 @@ public final class TestGovernanceRepository implements
RegistryRepository, Confi
}
@Override
+ public void initLock(final String key) {
+ }
+
+ @Override
+ public boolean tryLock(final long time, final TimeUnit unit) {
+ return false;
+ }
+
+ @Override
+ public void releaseLock() {
+ }
+
+ @Override
public void delete(final String key) {
}
diff --git
a/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-governance-spring/shardingsphere-jdbc-governance-spring-namespace/src/test/java/org/apache/shardingsphere/spring/namespace/governance/registry/TestGovernanceRepository.java
b/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-governance-spring/shardingsphere-jdbc-governance-spring-namespace/src/test/java/org/apache/shardingsphere/spring/namespace/governance/registry/TestGovernanceRepository.java
index 1a0747e..564a4f1 100644
---
a/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-governance-spring/shardingsphere-jdbc-governance-spring-namespace/src/test/java/org/apache/shardingsphere/spring/namespace/governance/registry/TestGovernanceRepository.java
+++
b/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-governance-spring/shardingsphere-jdbc-governance-spring-namespace/src/test/java/org/apache/shardingsphere/spring/namespace/governance/registry/TestGovernanceRepository.java
@@ -27,6 +27,7 @@ import
org.apache.shardingsphere.governance.repository.api.listener.DataChangedE
import java.util.Collections;
import java.util.List;
import java.util.Properties;
+import java.util.concurrent.TimeUnit;
@Getter
@Setter
@@ -57,6 +58,19 @@ public final class TestGovernanceRepository implements
RegistryRepository, Confi
}
@Override
+ public void initLock(final String key) {
+ }
+
+ @Override
+ public boolean tryLock(final long time, final TimeUnit unit) {
+ return false;
+ }
+
+ @Override
+ public void releaseLock() {
+ }
+
+ @Override
public void delete(final String key) {
}
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/test/java/org/apache/shardingsphere/proxy/fixture/FixtureRegistryRepository.java
b/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/test/java/org/apache/shardingsphere/proxy/fixture/FixtureRegistryRepository.java
index 2f95d7b..b632cda 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/test/java/org/apache/shardingsphere/proxy/fixture/FixtureRegistryRepository.java
+++
b/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/test/java/org/apache/shardingsphere/proxy/fixture/FixtureRegistryRepository.java
@@ -29,6 +29,7 @@ import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
+import java.util.concurrent.TimeUnit;
@Getter
@Setter
@@ -63,6 +64,19 @@ public final class FixtureRegistryRepository implements
RegistryRepository, Conf
}
@Override
+ public void initLock(final String key) {
+ }
+
+ @Override
+ public boolean tryLock(final long time, final TimeUnit unit) {
+ return false;
+ }
+
+ @Override
+ public void releaseLock() {
+ }
+
+ @Override
public void delete(final String key) {
}
diff --git
a/shardingsphere-scaling/shardingsphere-scaling-core/src/test/java/org/apache/shardingsphere/scaling/core/fixture/FixtureRegistryRepository.java
b/shardingsphere-scaling/shardingsphere-scaling-core/src/test/java/org/apache/shardingsphere/scaling/core/fixture/FixtureRegistryRepository.java
index 22a5da1..e583e85 100644
---
a/shardingsphere-scaling/shardingsphere-scaling-core/src/test/java/org/apache/shardingsphere/scaling/core/fixture/FixtureRegistryRepository.java
+++
b/shardingsphere-scaling/shardingsphere-scaling-core/src/test/java/org/apache/shardingsphere/scaling/core/fixture/FixtureRegistryRepository.java
@@ -30,6 +30,7 @@ import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Properties;
+import java.util.concurrent.TimeUnit;
@Getter
@Setter
@@ -89,6 +90,19 @@ public final class FixtureRegistryRepository implements
RegistryRepository, Conf
}
@Override
+ public void initLock(final String key) {
+ }
+
+ @Override
+ public boolean tryLock(final long time, final TimeUnit unit) {
+ return false;
+ }
+
+ @Override
+ public void releaseLock() {
+ }
+
+ @Override
public void delete(final String key) {
}