You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by pa...@apache.org on 2021/01/22 04:37:01 UTC
[shardingsphere] branch master updated: Refactor governance lock
api (#9125)
This is an automated email from the ASF dual-hosted git repository.
panjuan 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 3183934 Refactor governance lock api (#9125)
3183934 is described below
commit 3183934d84177dabccbc649936115a1c16b082ac
Author: Haoran Meng <me...@gmail.com>
AuthorDate: Fri Jan 22 12:36:19 2021 +0800
Refactor governance lock api (#9125)
---
.../governance/core/registry/RegistryCenter.java | 5 ++-
.../core/facade/fixture/TestAllRepository.java | 9 ++----
.../facade/fixture/TestRegistryRepository.java | 8 ++---
.../core/registry/RegistryCenterTest.java | 6 ++--
.../repository/api/RegistryRepository.java | 16 ++++------
.../governance/repository/etcd/EtcdRepository.java | 9 ++----
.../zookeeper/CuratorZookeeperRepository.java | 37 ++++++++++++++--------
.../zookeeper/CuratorZookeeperRepositoryTest.java | 11 +++----
.../governance/fixture/TestRegistryRepository.java | 8 ++---
.../registry/TestGovernanceRepository.java | 8 ++---
.../registry/TestGovernanceRepository.java | 9 ++----
.../proxy/fixture/FixtureRegistryRepository.java | 8 ++---
.../core/fixture/FixtureRegistryRepository.java | 8 ++---
13 files changed, 58 insertions(+), 84 deletions(-)
diff --git a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/RegistryCenter.java b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/RegistryCenter.java
index 0e892bf..173d24f 100644
--- a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/RegistryCenter.java
+++ b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/RegistryCenter.java
@@ -52,7 +52,6 @@ public final class RegistryCenter {
repository = registryRepository;
instance = GovernanceInstance.getInstance();
lockNode = new LockNode();
- registryRepository.initLock(lockNode.getGlobalLockNodePath());
ShardingSphereEventBus.getInstance().register(this);
}
@@ -162,14 +161,14 @@ public final class RegistryCenter {
* @return true if get the lock, false if not
*/
public boolean tryGlobalLock(final long timeout, final TimeUnit timeUnit) {
- return repository.tryLock(timeout, timeUnit) && checkLock();
+ return repository.tryLock(lockNode.getGlobalLockNodePath(), timeout, timeUnit) && checkLock();
}
/**
* Release global lock.
*/
public void releaseGlobalLock() {
- repository.releaseLock();
+ repository.releaseLock(lockNode.getGlobalLockNodePath());
repository.delete(lockNode.getGlobalLockNodePath());
}
diff --git a/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/facade/fixture/TestAllRepository.java b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/facade/fixture/TestAllRepository.java
index d22c3bb..9480bc8 100644
--- a/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/facade/fixture/TestAllRepository.java
+++ b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/facade/fixture/TestAllRepository.java
@@ -51,16 +51,13 @@ public final class TestAllRepository implements RegistryRepository, Configuratio
}
@Override
- public void initLock(final String key) {
- }
-
- @Override
- public boolean tryLock(final long time, final TimeUnit unit) {
+ public boolean tryLock(final String key, final long time, final TimeUnit unit) {
return false;
}
@Override
- public void releaseLock() {
+ public void releaseLock(final String key) {
+
}
@Override
diff --git a/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/facade/fixture/TestRegistryRepository.java b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/facade/fixture/TestRegistryRepository.java
index 5a06f5b..f903eb7 100644
--- a/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/facade/fixture/TestRegistryRepository.java
+++ b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/facade/fixture/TestRegistryRepository.java
@@ -50,16 +50,12 @@ public final class TestRegistryRepository implements RegistryRepository {
}
@Override
- public void initLock(final String key) {
- }
-
- @Override
- public boolean tryLock(final long time, final TimeUnit unit) {
+ public boolean tryLock(final String key, final long time, final TimeUnit unit) {
return false;
}
@Override
- public void releaseLock() {
+ public void releaseLock(final String key) {
}
@Override
diff --git a/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/RegistryCenterTest.java b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/RegistryCenterTest.java
index ae9b92f..9bb1714 100644
--- a/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/RegistryCenterTest.java
+++ b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/RegistryCenterTest.java
@@ -17,6 +17,7 @@
package org.apache.shardingsphere.governance.core.registry;
+import org.apache.shardingsphere.governance.core.lock.node.LockNode;
import org.apache.shardingsphere.governance.repository.api.RegistryRepository;
import org.junit.Before;
import org.junit.Test;
@@ -86,12 +87,13 @@ public final class RegistryCenterTest {
@Test
public void assertTryGlobalLock() {
registryCenter.tryGlobalLock(50L, TimeUnit.MILLISECONDS);
- verify(registryRepository).tryLock(eq(50L), eq(TimeUnit.MILLISECONDS));
+ verify(registryRepository).tryLock(eq(new LockNode().getGlobalLockNodePath()), eq(50L), eq(TimeUnit.MILLISECONDS));
}
@Test
public void assertReleaseGlobalLock() {
registryCenter.releaseGlobalLock();
- verify(registryRepository).releaseLock();
+ verify(registryRepository).releaseLock(eq(new LockNode().getGlobalLockNodePath()));
+ verify(registryRepository).delete(eq(new LockNode().getGlobalLockNodePath()));
}
}
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 99fbf4a..dd49657 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
@@ -33,23 +33,19 @@ public interface RegistryRepository extends GovernanceRepository {
void persistEphemeral(String key, String value);
/**
- * Initialize lock.
- *
- * @param key the key for lock
- */
- void initLock(String key);
-
- /**
- * Try to get lock.
+ * Try to get lock under the lock key.
*
+ * @param key lock key
* @param time time to wait
* @param unit time unit
* @return true if get the lock, false if not
*/
- boolean tryLock(long time, TimeUnit unit);
+ boolean tryLock(String key, long time, TimeUnit unit);
/**
* Release lock.
+ *
+ * @param key lock key
*/
- void releaseLock();
+ void releaseLock(String key);
}
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 ce31f32..0cbe3d0 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
@@ -100,18 +100,13 @@ 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) {
+ public boolean tryLock(final String key, final long time, final TimeUnit unit) {
// TODO
return false;
}
@Override
- public void releaseLock() {
+ public void releaseLock(final String key) {
// TODO
}
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 0bdce67..364a741 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
@@ -47,13 +47,13 @@ import java.nio.charset.StandardCharsets;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
-import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
+import java.util.Objects;
import java.util.Optional;
import java.util.Properties;
-import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.TimeUnit;
/**
@@ -63,11 +63,9 @@ public final class CuratorZookeeperRepository implements ConfigurationRepository
private final Map<String, CuratorCache> caches = new HashMap<>();
- private final Set<String> watchedKeys = new HashSet<>();
-
private CuratorFramework client;
- private InterProcessLock lock;
+ private final Map<String, InterProcessLock> locks = new ConcurrentHashMap<>();
@Getter
@Setter
@@ -277,14 +275,9 @@ public final class CuratorZookeeperRepository implements ConfigurationRepository
}
@Override
- public void initLock(final String key) {
- lock = new InterProcessMutex(client, key);
- }
-
- @Override
- public boolean tryLock(final long time, final TimeUnit unit) {
+ public boolean tryLock(final String key, final long time, final TimeUnit unit) {
try {
- return lock.acquire(time, unit);
+ return getLock(key).acquire(time, unit);
// CHECKSTYLE:OFF
} catch (final Exception ex) {
// CHECKSTYLE:ON
@@ -294,9 +287,12 @@ public final class CuratorZookeeperRepository implements ConfigurationRepository
}
@Override
- public void releaseLock() {
+ public void releaseLock(final String key) {
try {
- lock.release();
+ if (availableLock(key)) {
+ locks.get(key).release();
+ locks.remove(key);
+ }
// CHECKSTYLE:OFF
} catch (final Exception ex) {
// CHECKSTYLE:ON
@@ -304,6 +300,19 @@ public final class CuratorZookeeperRepository implements ConfigurationRepository
}
}
+ private InterProcessLock getLock(final String key) {
+ if (availableLock(key)) {
+ return locks.get(key);
+ }
+ InterProcessLock lock = new InterProcessMutex(client, key);
+ locks.put(key, lock);
+ return lock;
+ }
+
+ private boolean availableLock(final String key) {
+ return Objects.nonNull(locks.get(key));
+ }
+
@Override
public void close() {
caches.values().forEach(CuratorCache::close);
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 23495ec..e755ff3 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
@@ -74,7 +74,6 @@ public final class CuratorZookeeperRepositoryTest {
EmbedTestingServer.start();
serverLists = EmbedTestingServer.getTestingServerConnectionString();
REPOSITORY.init("governance", new GovernanceCenterConfiguration(REPOSITORY.getType(), serverLists, new Properties()));
- REPOSITORY.initLock("/glock");
}
@Test
@@ -289,17 +288,17 @@ public final class CuratorZookeeperRepositoryTest {
@Test
public void assertTryLock() {
- assertThat(REPOSITORY.tryLock(5, TimeUnit.SECONDS), is(true));
- REPOSITORY.releaseLock();
+ assertThat(REPOSITORY.tryLock("/lock/glock", 5, TimeUnit.SECONDS), is(true));
+ REPOSITORY.releaseLock("/lock/glock");
}
@Test
@SneakyThrows
public void assertTryLockFailed() {
- assertThat(REPOSITORY.tryLock(1, TimeUnit.SECONDS), is(true));
- FutureTask<Boolean> task = new FutureTask(() -> REPOSITORY.tryLock(1, TimeUnit.SECONDS));
+ assertThat(REPOSITORY.tryLock("/lock/glock", 1, TimeUnit.SECONDS), is(true));
+ FutureTask<Boolean> task = new FutureTask(() -> REPOSITORY.tryLock("/lock/glock", 1, TimeUnit.SECONDS));
new Thread(task).start();
assertThat(task.get(), is(false));
- REPOSITORY.releaseLock();
+ REPOSITORY.releaseLock("/lock/glock");
}
}
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 c7ed68e..3525dea 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
@@ -57,16 +57,12 @@ public final class TestRegistryRepository implements RegistryRepository, Configu
}
@Override
- public void initLock(final String key) {
- }
-
- @Override
- public boolean tryLock(final long time, final TimeUnit unit) {
+ public boolean tryLock(final String key, final long time, final TimeUnit unit) {
return false;
}
@Override
- public void releaseLock() {
+ public void releaseLock(final String key) {
}
@Override
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 f175bd7..9e3442d 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
@@ -57,16 +57,12 @@ public final class TestGovernanceRepository implements RegistryRepository, Confi
}
@Override
- public void initLock(final String key) {
- }
-
- @Override
- public boolean tryLock(final long time, final TimeUnit unit) {
+ public boolean tryLock(final String key, final long time, final TimeUnit unit) {
return false;
}
@Override
- public void releaseLock() {
+ public void releaseLock(final String key) {
}
@Override
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 33a8bc8..c181cf9 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
@@ -51,16 +51,13 @@ public final class TestGovernanceRepository implements RegistryRepository, Confi
}
@Override
- public void initLock(final String key) {
- }
-
- @Override
- public boolean tryLock(final long time, final TimeUnit unit) {
+ public boolean tryLock(final String key, final long time, final TimeUnit unit) {
return false;
}
@Override
- public void releaseLock() {
+ public void releaseLock(final String key) {
+
}
@Override
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 a32b848..a19996a 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
@@ -57,16 +57,12 @@ public final class FixtureRegistryRepository implements RegistryRepository, Conf
}
@Override
- public void initLock(final String key) {
- }
-
- @Override
- public boolean tryLock(final long time, final TimeUnit unit) {
+ public boolean tryLock(final String key, final long time, final TimeUnit unit) {
return false;
}
@Override
- public void releaseLock() {
+ public void releaseLock(final String key) {
}
@Override
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 bd80fa9..bab5023 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
@@ -85,16 +85,12 @@ public final class FixtureRegistryRepository implements RegistryRepository, Conf
}
@Override
- public void initLock(final String key) {
- }
-
- @Override
- public boolean tryLock(final long time, final TimeUnit unit) {
+ public boolean tryLock(final String key, final long time, final TimeUnit unit) {
return false;
}
@Override
- public void releaseLock() {
+ public void releaseLock(final String key) {
}
@Override