You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by me...@apache.org on 2022/06/08 13:51:27 UTC
[shardingsphere] branch master updated: Add LockStateContext for distributed lock (#18245)
This is an automated email from the ASF dual-hosted git repository.
menghaoran 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 8758e3fd651 Add LockStateContext for distributed lock (#18245)
8758e3fd651 is described below
commit 8758e3fd651e149cb1d132c3548701c5b15a2526
Author: gin <ja...@163.com>
AuthorDate: Wed Jun 8 21:51:20 2022 +0800
Add LockStateContext for distributed lock (#18245)
---
.../cluster/coordinator/RegistryCenter.java | 2 +-
.../lock/AbstractDistributedLockNodeService.java | 59 --------------
.../coordinator/lock/DistributedLockContext.java | 5 ++
.../cluster/coordinator/lock/LockNodeService.java | 50 +++++++++---
.../ShardingSphereDistributedDatabaseLock.java | 29 +++++--
.../database/node/DatabaseLockNodeService.java | 11 +--
.../watcher/DatabaseLockChangedWatcher.java | 2 +-
.../distributed/ShardingSphereDistributedLock.java | 24 +++---
.../node/DistributedLockNodeService.java | 11 +--
.../watcher/DistributedLockChangedWatcher.java | 5 +-
...a => ShardingSphereDistributedLockManager.java} | 19 +++--
.../lock/manager/state/LockStateContext.java | 91 ++++++++++++++++++++++
.../manager/state/LockStateContextFactory.java} | 33 ++++----
.../state/ShardingSphereLockStateContext.java | 76 ++++++++++++++++++
.../coordinator/lock/mutex/InterMutexLock.java | 2 +-
.../mutex/ShardingSphereInterMutexLockHolder.java | 68 +++++++++-------
.../lock/{ => service}/LockNodeServiceFactory.java | 3 +-
.../lock/{ => service}/LockRegistryService.java | 2 +-
.../lock/service/MutexLockRegistryService.java | 1 -
.../coordinator/lock/util/LockNodeUtil.java | 10 +++
...rdinator.lock.manager.ShardingSphereLockManager | 2 +-
...oordinator.lock.manager.state.LockStateContext} | 2 +-
.../database/node/DatabaseLockNodeServiceTest.java | 5 --
.../node/DistributedLockNodeServiceTest.java | 5 --
... ShardingSphereDistributedLockManagerTest.java} | 22 +++---
.../{ => service}/LockNodeServiceFactoryTest.java | 6 +-
.../LockNodeServiceTest.java} | 13 +++-
.../lock/service/MutexLockRegistryServiceTest.java | 1 -
.../coordinator/lock/util/LockNodeUtilTest.java | 10 ++-
29 files changed, 377 insertions(+), 192 deletions(-)
diff --git a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/RegistryCenter.java b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/RegistryCenter.java
index 3d4b07c61d4..30b027b300a 100644
--- a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/RegistryCenter.java
+++ b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/RegistryCenter.java
@@ -19,7 +19,7 @@ package org.apache.shardingsphere.mode.manager.cluster.coordinator;
import lombok.Getter;
import org.apache.shardingsphere.infra.instance.ComputeNodeInstance;
-import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.LockRegistryService;
+import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.service.LockRegistryService;
import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.service.MutexLockRegistryService;
import org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.GovernanceWatcherFactory;
import org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.cache.subscriber.ScalingRegistrySubscriber;
diff --git a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/AbstractDistributedLockNodeService.java b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/AbstractDistributedLockNodeService.java
deleted file mode 100644
index 8eb668f2386..00000000000
--- a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/AbstractDistributedLockNodeService.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.mode.manager.cluster.coordinator.lock;
-
-import java.util.Optional;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-/**
- * Abstract distributed lock node service.
- */
-public abstract class AbstractDistributedLockNodeService implements LockNodeService {
-
- @Override
- public String getLocksNodePath() {
- return PATH_DELIMITER + LOCK_ROOT + PATH_DELIMITER + getLockTypeName() + PATH_DELIMITER + LOCKS_NODE;
- }
-
- @Override
- public String generateLocksName(final String locksName) {
- return getLocksNodePath() + "/" + locksName;
- }
-
- @Override
- public String generateAckLockName(final String lockName, final String lockedInstanceId) {
- return getLocksNodePath() + "/" + lockName + "/" + LOCKED_ACK_NODE + "/" + lockedInstanceId;
- }
-
- @Override
- public Optional<String> parseLocksNodePath(final String nodePath) {
- Pattern pattern = Pattern.compile(getLocksNodePath() + "/" + "(.+)/leases/(.+)$", Pattern.CASE_INSENSITIVE);
- Matcher matcher = pattern.matcher(nodePath);
- return matcher.find() ? Optional.of(matcher.group(1)) : Optional.empty();
- }
-
- @Override
- public Optional<String> parseLocksAckNodePath(final String nodePath) {
- Pattern pattern = Pattern.compile(getLocksNodePath() + "/" + "(.+)/ack/(.+)$", Pattern.CASE_INSENSITIVE);
- Matcher matcher = pattern.matcher(nodePath);
- return matcher.find() ? Optional.of(matcher.group(1) + "#@#" + matcher.group(2)) : Optional.empty();
- }
-
- protected abstract String getLockTypeName();
-}
diff --git a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/DistributedLockContext.java b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/DistributedLockContext.java
index 87399fd5862..7af5951853b 100644
--- a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/DistributedLockContext.java
+++ b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/DistributedLockContext.java
@@ -93,4 +93,9 @@ public final class DistributedLockContext implements LockContext {
public boolean isLocked(final String databaseName) {
return lockManager.isLocked(databaseName);
}
+
+ @Override
+ public boolean isLocked(final String databaseName, final String schemaName) {
+ return lockManager.isLocked(databaseName, schemaName);
+ }
}
diff --git a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/LockNodeService.java b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/LockNodeService.java
index 6be188982f7..b25f69eb9c0 100644
--- a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/LockNodeService.java
+++ b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/LockNodeService.java
@@ -20,6 +20,8 @@ package org.apache.shardingsphere.mode.manager.cluster.coordinator.lock;
import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.util.LockNodeType;
import java.util.Optional;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
/**
* Lock node service.
@@ -34,19 +36,14 @@ public interface LockNodeService {
String LOCKED_ACK_NODE = "ack";
- /**
- * Get sequence node path.
- *
- * @return sequence node path
- */
- String getSequenceNodePath();
-
/**
* Get locks node path.
*
* @return locks node path
*/
- String getLocksNodePath();
+ default String getLocksNodePath() {
+ return PATH_DELIMITER + LOCK_ROOT + PATH_DELIMITER + getLockTypeName() + PATH_DELIMITER + LOCKS_NODE;
+ }
/**
* Generate locks name.
@@ -54,7 +51,19 @@ public interface LockNodeService {
* @param locksName locks name
* @return locks name
*/
- String generateLocksName(String locksName);
+ default String generateLocksName(String locksName) {
+ return getLocksNodePath() + "/" + locksName;
+ }
+
+ /**
+ * Generate freeze lock name.
+ *
+ * @param lockName lock name
+ * @return freeze lock name
+ */
+ default String generateFreezeLockName(String lockName) {
+ return getLocksNodePath() + "/" + lockName + "/freeze";
+ }
/**
* Generate ack lock name.
@@ -63,7 +72,9 @@ public interface LockNodeService {
* @param lockedInstanceId locked instance id
* @return ack lock name
*/
- String generateAckLockName(String lockName, String lockedInstanceId);
+ default String generateAckLockName(String lockName, String lockedInstanceId) {
+ return getLocksNodePath() + "/" + lockName + "/" + LOCKED_ACK_NODE + "/" + lockedInstanceId;
+ }
/**
* Parse Locks node path.
@@ -71,7 +82,11 @@ public interface LockNodeService {
* @param nodePath locks node path
* @return locked node path
*/
- Optional<String> parseLocksNodePath(String nodePath);
+ default Optional<String> parseLocksNodePath(String nodePath) {
+ Pattern pattern = Pattern.compile(getLocksNodePath() + "/" + "(.+)/leases/(.+)$", Pattern.CASE_INSENSITIVE);
+ Matcher matcher = pattern.matcher(nodePath);
+ return matcher.find() ? Optional.of(matcher.group(1)) : Optional.empty();
+ }
/**
* Parse locks ack node path.
@@ -79,7 +94,11 @@ public interface LockNodeService {
* @param nodePath node path
* @return locks ack node path
*/
- Optional<String> parseLocksAckNodePath(String nodePath);
+ default Optional<String> parseLocksAckNodePath(String nodePath) {
+ Pattern pattern = Pattern.compile(getLocksNodePath() + "/" + "(.+)/ack/(.+)$", Pattern.CASE_INSENSITIVE);
+ Matcher matcher = pattern.matcher(nodePath);
+ return matcher.find() ? Optional.of(matcher.group(1) + "#@#" + matcher.group(2)) : Optional.empty();
+ }
/**
* Get type.
@@ -87,4 +106,11 @@ public interface LockNodeService {
* @return lock node type
*/
LockNodeType getType();
+
+ /**
+ * Get lock type name.
+ *
+ * @return type name
+ */
+ String getLockTypeName();
}
diff --git a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/database/ShardingSphereDistributedDatabaseLock.java b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/database/ShardingSphereDistributedDatabaseLock.java
index 00e8e927cd7..a7d70f1edac 100644
--- a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/database/ShardingSphereDistributedDatabaseLock.java
+++ b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/database/ShardingSphereDistributedDatabaseLock.java
@@ -21,7 +21,8 @@ import com.google.common.eventbus.Subscribe;
import org.apache.shardingsphere.infra.eventbus.ShardingSphereEventBus;
import org.apache.shardingsphere.infra.lock.ShardingSphereLock;
import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.LockNodeService;
-import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.LockNodeServiceFactory;
+import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.manager.state.LockStateContext;
+import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.service.LockNodeServiceFactory;
import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.database.event.DatabaseAckLockReleasedEvent;
import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.database.event.DatabaseAckLockedEvent;
import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.database.event.DatabaseLockReleasedEvent;
@@ -42,10 +43,13 @@ public final class ShardingSphereDistributedDatabaseLock implements ShardingSphe
private final ShardingSphereInterMutexLockHolder lockHolder;
- public ShardingSphereDistributedDatabaseLock(final ShardingSphereInterMutexLockHolder lockHolder) {
+ private final LockStateContext lockStateContext;
+
+ public ShardingSphereDistributedDatabaseLock(final ShardingSphereInterMutexLockHolder lockHolder, final LockStateContext lockStateContext) {
this.lockHolder = lockHolder;
+ this.lockStateContext = lockStateContext;
ShardingSphereEventBus.getInstance().register(this);
- lockHolder.synchronizeMutexLock(lockNodeService);
+ lockHolder.synchronizeLock(lockNodeService);
}
@Override
@@ -59,7 +63,11 @@ public final class ShardingSphereDistributedDatabaseLock implements ShardingSphe
}
private boolean innerTryLock(final String lockName, final long timeoutMillis) {
- return lockHolder.getOrCreateInterMutexLock(lockNodeService.generateLocksName(lockName)).tryLock(timeoutMillis);
+ if (lockHolder.getOrCreateInterMutexLock(lockNodeService.generateLocksName(lockName)).tryLock(timeoutMillis)) {
+ lockStateContext.register(lockName);
+ return true;
+ }
+ return false;
}
private Optional<InterMutexLock> getInterMutexLock(final String lockName) {
@@ -68,7 +76,11 @@ public final class ShardingSphereDistributedDatabaseLock implements ShardingSphe
@Override
public void releaseLock(final String lockName) {
- getInterMutexLock(lockName).ifPresent(InterMutexLock::unlock);
+ Optional<InterMutexLock> interMutexLock = getInterMutexLock(lockName);
+ if (interMutexLock.isPresent()) {
+ interMutexLock.get().unlock();
+ lockStateContext.unregister(lockName);
+ }
}
@Override
@@ -87,6 +99,7 @@ public final class ShardingSphereDistributedDatabaseLock implements ShardingSphe
String lockedInstanceId = lockHolder.getCurrentInstanceId();
InterMutexLock interMutexLock = lockHolder.getOrCreateInterMutexLock(lockNodeService.generateLocksName(database));
interMutexLock.ackLock(lockNodeService.generateAckLockName(database, lockedInstanceId), lockedInstanceId);
+ lockStateContext.register(database);
}
/**
@@ -98,7 +111,11 @@ public final class ShardingSphereDistributedDatabaseLock implements ShardingSphe
public synchronized void lockReleased(final DatabaseLockReleasedEvent event) {
String database = event.getDatabase();
String lockedInstanceId = lockHolder.getCurrentInstanceId();
- getInterMutexLock(database).ifPresent(mutexLock -> mutexLock.releaseAckLock(lockNodeService.generateAckLockName(database, lockedInstanceId), lockedInstanceId));
+ Optional<InterMutexLock> interMutexLock = getInterMutexLock(database);
+ if (interMutexLock.isPresent()) {
+ interMutexLock.get().releaseAckLock(lockNodeService.generateAckLockName(database, lockedInstanceId), lockedInstanceId);
+ lockStateContext.unregister(database);
+ }
}
/**
diff --git a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/database/node/DatabaseLockNodeService.java b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/database/node/DatabaseLockNodeService.java
index b16904ba6c8..24afa280b8d 100644
--- a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/database/node/DatabaseLockNodeService.java
+++ b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/database/node/DatabaseLockNodeService.java
@@ -17,21 +17,16 @@
package org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.database.node;
-import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.AbstractDistributedLockNodeService;
+import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.LockNodeService;
import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.util.LockNodeType;
/**
* Database lock node service.
*/
-public final class DatabaseLockNodeService extends AbstractDistributedLockNodeService {
+public final class DatabaseLockNodeService implements LockNodeService {
@Override
- public String getSequenceNodePath() {
- return PATH_DELIMITER + LOCK_ROOT + PATH_DELIMITER + getLockTypeName() + PATH_DELIMITER + "sequence";
- }
-
- @Override
- protected String getLockTypeName() {
+ public String getLockTypeName() {
return "database";
}
diff --git a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/database/watcher/DatabaseLockChangedWatcher.java b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/database/watcher/DatabaseLockChangedWatcher.java
index f2f8df1b679..ccc33f3c0c3 100644
--- a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/database/watcher/DatabaseLockChangedWatcher.java
+++ b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/database/watcher/DatabaseLockChangedWatcher.java
@@ -18,7 +18,7 @@
package org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.database.watcher;
import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.LockNodeService;
-import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.LockNodeServiceFactory;
+import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.service.LockNodeServiceFactory;
import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.database.event.DatabaseAckLockReleasedEvent;
import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.database.event.DatabaseAckLockedEvent;
import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.database.event.DatabaseLockReleasedEvent;
diff --git a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/distributed/ShardingSphereDistributedLock.java b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/distributed/ShardingSphereDistributedLock.java
index 053fd620464..02fed75e65c 100644
--- a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/distributed/ShardingSphereDistributedLock.java
+++ b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/distributed/ShardingSphereDistributedLock.java
@@ -22,7 +22,7 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.shardingsphere.infra.eventbus.ShardingSphereEventBus;
import org.apache.shardingsphere.infra.lock.ShardingSphereLock;
import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.LockNodeService;
-import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.LockNodeServiceFactory;
+import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.service.LockNodeServiceFactory;
import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.mutex.InterMutexLock;
import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.mutex.ShardingSphereInterMutexLockHolder;
import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.distributed.event.DistributedAckLockReleasedEvent;
@@ -47,11 +47,11 @@ public final class ShardingSphereDistributedLock implements ShardingSphereLock {
public ShardingSphereDistributedLock(final ShardingSphereInterMutexLockHolder lockHolder) {
this.lockHolder = lockHolder;
ShardingSphereEventBus.getInstance().register(this);
- syncMutexLockStatus();
+ syncDistributedLockStatus();
}
- private void syncMutexLockStatus() {
- lockHolder.synchronizeMutexLock(lockNodeService);
+ private void syncDistributedLockStatus() {
+ lockHolder.synchronizeLock(lockNodeService);
}
@Override
@@ -83,9 +83,9 @@ public final class ShardingSphereDistributedLock implements ShardingSphereLock {
}
/**
- * Mutex locked.
+ * Distributed locked.
*
- * @param event mutex locked event
+ * @param event distributed locked event
*/
@Subscribe
public synchronized void locked(final DistributedLockedEvent event) {
@@ -96,9 +96,9 @@ public final class ShardingSphereDistributedLock implements ShardingSphereLock {
}
/**
- * Mutex lock released.
+ * Distributed lock released.
*
- * @param event mutex lock released event
+ * @param event distributed lock released event
*/
@Subscribe
public synchronized void lockReleased(final DistributedLockReleasedEvent event) {
@@ -108,9 +108,9 @@ public final class ShardingSphereDistributedLock implements ShardingSphereLock {
}
/**
- * Mutex ack locked.
+ * Distributed ack locked.
*
- * @param event mutex ack locked event
+ * @param event distributed ack locked event
*/
@Subscribe
public synchronized void ackLocked(final DistributedAckLockedEvent event) {
@@ -118,9 +118,9 @@ public final class ShardingSphereDistributedLock implements ShardingSphereLock {
}
/**
- * Mutex ack lock released.
+ * Distributed ack lock released.
*
- * @param event mutex ack lock released event
+ * @param event distributed ack lock released event
*/
@Subscribe
public synchronized void ackLockReleased(final DistributedAckLockReleasedEvent event) {
diff --git a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/distributed/node/DistributedLockNodeService.java b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/distributed/node/DistributedLockNodeService.java
index 20c1f4212dc..0f0c10600eb 100644
--- a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/distributed/node/DistributedLockNodeService.java
+++ b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/distributed/node/DistributedLockNodeService.java
@@ -17,21 +17,16 @@
package org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.distributed.node;
-import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.AbstractDistributedLockNodeService;
+import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.LockNodeService;
import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.util.LockNodeType;
/**
* Distributed lock node service.
*/
-public final class DistributedLockNodeService extends AbstractDistributedLockNodeService {
+public final class DistributedLockNodeService implements LockNodeService {
@Override
- public String getSequenceNodePath() {
- return PATH_DELIMITER + LOCK_ROOT + PATH_DELIMITER + getLockTypeName() + PATH_DELIMITER + "sequence";
- }
-
- @Override
- protected String getLockTypeName() {
+ public String getLockTypeName() {
return "distributed";
}
diff --git a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/distributed/watcher/DistributedLockChangedWatcher.java b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/distributed/watcher/DistributedLockChangedWatcher.java
index 43bcca30126..541c6e7f9b6 100644
--- a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/distributed/watcher/DistributedLockChangedWatcher.java
+++ b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/distributed/watcher/DistributedLockChangedWatcher.java
@@ -18,7 +18,7 @@
package org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.distributed.watcher;
import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.LockNodeService;
-import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.LockNodeServiceFactory;
+import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.service.LockNodeServiceFactory;
import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.distributed.event.DistributedAckLockReleasedEvent;
import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.distributed.event.DistributedAckLockedEvent;
import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.distributed.event.DistributedLockReleasedEvent;
@@ -34,6 +34,9 @@ import java.util.Collection;
import java.util.Collections;
import java.util.Optional;
+/**
+ * Distributed lock changed watcher.
+ */
public final class DistributedLockChangedWatcher implements GovernanceWatcher<GovernanceEvent> {
private final LockNodeService lockNode = LockNodeServiceFactory.getInstance().getLockNodeService(LockNodeType.DISTRIBUTED);
diff --git a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/manager/DistributedLockManager.java b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/manager/ShardingSphereDistributedLockManager.java
similarity index 82%
rename from shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/manager/DistributedLockManager.java
rename to shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/manager/ShardingSphereDistributedLockManager.java
index 049c2fdd096..012dc6ece1f 100644
--- a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/manager/DistributedLockManager.java
+++ b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/manager/ShardingSphereDistributedLockManager.java
@@ -23,6 +23,7 @@ import org.apache.shardingsphere.infra.lock.LockMode;
import org.apache.shardingsphere.infra.lock.ShardingSphereLock;
import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.database.ShardingSphereDistributedDatabaseLock;
import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.distributed.ShardingSphereDistributedLock;
+import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.manager.state.LockStateContextFactory;
import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.mutex.ShardingSphereInterMutexLockHolder;
import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.util.TimeoutMilliseconds;
@@ -30,16 +31,16 @@ import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.util.Time
* Distribute lock manager.
*/
@Slf4j
-public final class DistributedLockManager implements ShardingSphereLockManager {
+public final class ShardingSphereDistributedLockManager implements ShardingSphereLockManager {
- private ShardingSphereDistributedLock distributedLock;
+ private ShardingSphereLock distributedLock;
- private ShardingSphereDistributedDatabaseLock databaseLock;
+ private ShardingSphereLock databaseLock;
@Override
public void init(final ShardingSphereInterMutexLockHolder lockHolder) {
distributedLock = new ShardingSphereDistributedLock(lockHolder);
- databaseLock = new ShardingSphereDistributedDatabaseLock(lockHolder);
+ databaseLock = new ShardingSphereDistributedDatabaseLock(lockHolder, LockStateContextFactory.getLockStateContext());
}
@Override
@@ -58,6 +59,7 @@ public final class DistributedLockManager implements ShardingSphereLockManager {
}
private synchronized boolean innerTryLock(final String databaseName, final LockMode lockMode, final long timeoutMilliseconds) {
+ Preconditions.checkNotNull(databaseName, "Try Lock write for database args database name can not be null.");
switch (lockMode) {
case READ:
return innerDatabaseTryLock(databaseName, timeoutMilliseconds);
@@ -68,9 +70,12 @@ public final class DistributedLockManager implements ShardingSphereLockManager {
}
private boolean innerDatabaseTryLock(final String databaseName, final long timeoutMilliseconds) {
- Preconditions.checkNotNull(databaseName, "Try Lock write for database args database name can not be null.");
- log.debug("Distribute database lock acquire sequenced success, database name: {}", databaseName);
- return databaseLock.tryLock(databaseName, timeoutMilliseconds - TimeoutMilliseconds.DEFAULT_REGISTRY);
+ if (databaseLock.tryLock(databaseName, timeoutMilliseconds - TimeoutMilliseconds.DEFAULT_REGISTRY)) {
+ log.debug("Distribute database lock acquire sequenced success, database name: {}", databaseName);
+ return true;
+ }
+ log.debug("Distribute database lock acquire sequenced failed, database name: {}", databaseName);
+ return false;
}
@Override
diff --git a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/manager/state/LockStateContext.java b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/manager/state/LockStateContext.java
new file mode 100644
index 00000000000..f41a69b3d7d
--- /dev/null
+++ b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/manager/state/LockStateContext.java
@@ -0,0 +1,91 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.manager.state;
+
+import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.mutex.ShardingSphereInterMutexLockHolder;
+import org.apache.shardingsphere.spi.annotation.SingletonSPI;
+import org.apache.shardingsphere.spi.type.required.RequiredSPI;
+
+/**
+ * Lock state context.
+ */
+@SingletonSPI
+public interface LockStateContext extends RequiredSPI {
+
+ /**
+ * Init lock state context.
+ *
+ * @param lockHolder lock holder
+ */
+ default void init(ShardingSphereInterMutexLockHolder lockHolder) {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * Register lock state.
+ *
+ * @param databaseName database name
+ */
+ void register(String databaseName);
+
+ /**
+ * Register lock state.
+ *
+ * @param databaseName database name
+ * @param schemaName schema name
+ */
+ default void register(String databaseName, String schemaName) {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * Un register lock state.
+ *
+ * @param databaseName database name
+ */
+ void unregister(String databaseName);
+
+ /**
+ * Un-register lock state.
+ *
+ * @param databaseName database name
+ * @param schemaName schema name
+ */
+ default void unregister(String databaseName, String schemaName) {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * Is locked.
+ *
+ * @param databaseName database name
+ * @return is locked or not
+ */
+ boolean isLocked(String databaseName);
+
+ /**
+ * Is locked.
+ *
+ * @param databaseName database name
+ * @param schemaName schema name
+ * @return is locked or not
+ */
+ default boolean isLocked(String databaseName, String schemaName) {
+ throw new UnsupportedOperationException();
+ }
+}
diff --git a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/distributed/node/DistributedLockNodeServiceTest.java b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/manager/state/LockStateContextFactory.java
similarity index 57%
copy from shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/distributed/node/DistributedLockNodeServiceTest.java
copy to shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/manager/state/LockStateContextFactory.java
index 1c9cf9aac58..4ff543de147 100644
--- a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/distributed/node/DistributedLockNodeServiceTest.java
+++ b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/manager/state/LockStateContextFactory.java
@@ -15,24 +15,29 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.distributed.node;
+package org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.manager.state;
-import org.junit.Test;
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.spi.ShardingSphereServiceLoader;
+import org.apache.shardingsphere.spi.type.required.RequiredSPIRegistry;
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-
-public final class DistributedLockNodeServiceTest {
-
- private static final DistributedLockNodeService SERVICE = new DistributedLockNodeService();
+/**
+ * Lock state context factory.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class LockStateContextFactory {
- @Test
- public void assertGetSequenceNodePath() {
- assertThat(SERVICE.getSequenceNodePath(), is("/lock/distributed/sequence"));
+ static {
+ ShardingSphereServiceLoader.register(LockStateContext.class);
}
- @Test
- public void assertGetLockLevel() {
- assertThat(SERVICE.getLockTypeName(), is("distributed"));
+ /**
+ * Get lock state context.
+ *
+ * @return lock state context
+ */
+ public static LockStateContext getLockStateContext() {
+ return RequiredSPIRegistry.getRegisteredService(LockStateContext.class);
}
}
diff --git a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/manager/state/ShardingSphereLockStateContext.java b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/manager/state/ShardingSphereLockStateContext.java
new file mode 100644
index 00000000000..b6337294570
--- /dev/null
+++ b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/manager/state/ShardingSphereLockStateContext.java
@@ -0,0 +1,76 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.manager.state;
+
+import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.locks.ReadWriteLock;
+import java.util.concurrent.locks.ReentrantReadWriteLock;
+
+/**
+ * Lock state context.
+ */
+public final class ShardingSphereLockStateContext implements LockStateContext {
+
+ private final ReadWriteLock lock = new ReentrantReadWriteLock();
+
+ private final AtomicInteger lockCounter = new AtomicInteger(0);
+
+ private final Map<String, Set<String>> lockStates = new LinkedHashMap<>();
+
+ @Override
+ public void register(final String databaseName) {
+ lock.writeLock().lock();
+ try {
+ if (lockStates.computeIfAbsent(databaseName, locks -> new LinkedHashSet<>()).add("@all")) {
+ lockCounter.incrementAndGet();
+ }
+ } finally {
+ lock.writeLock().unlock();
+ }
+ }
+
+ @Override
+ public void unregister(final String databaseName) {
+ lock.writeLock().lock();
+ try {
+ if (lockStates.get(databaseName).remove("@all")) {
+ lockCounter.decrementAndGet();
+ }
+ } finally {
+ lock.writeLock().unlock();
+ }
+ }
+
+ @Override
+ public boolean isLocked(final String databaseName) {
+ if (0 == lockCounter.get()) {
+ return false;
+ }
+ lock.readLock().lock();
+ try {
+ Set<String> locks = lockStates.get(databaseName);
+ return null != locks && !locks.isEmpty();
+ } finally {
+ lock.readLock().unlock();
+ }
+ }
+}
diff --git a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/mutex/InterMutexLock.java b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/mutex/InterMutexLock.java
index 38c6b18b8ab..229fa30c561 100644
--- a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/mutex/InterMutexLock.java
+++ b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/mutex/InterMutexLock.java
@@ -21,7 +21,7 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.shardingsphere.infra.instance.ComputeNodeInstance;
import org.apache.shardingsphere.infra.lock.LockState;
-import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.LockRegistryService;
+import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.service.LockRegistryService;
import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.util.LockNodeUtil;
import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.util.TimeoutMilliseconds;
diff --git a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/mutex/ShardingSphereInterMutexLockHolder.java b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/mutex/ShardingSphereInterMutexLockHolder.java
index bb1a868de99..a589aad21d0 100644
--- a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/mutex/ShardingSphereInterMutexLockHolder.java
+++ b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/mutex/ShardingSphereInterMutexLockHolder.java
@@ -19,9 +19,10 @@ package org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.mutex;
import org.apache.shardingsphere.infra.instance.ComputeNodeInstance;
import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.LockNodeService;
-import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.LockRegistryService;
+import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.service.LockRegistryService;
import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.service.MutexLockRegistryService;
import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.util.LockNodeType;
+import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.util.LockNodeUtil;
import org.apache.shardingsphere.mode.repository.cluster.ClusterPersistRepository;
import java.util.Collection;
@@ -34,23 +35,21 @@ import java.util.Optional;
*/
public final class ShardingSphereInterMutexLockHolder {
- private final Map<String, InterMutexLock> interMutexLocks = new LinkedHashMap<>();
+ private final Map<String, MutexLock> mutexLocks = new LinkedHashMap<>();
- private final Map<String, InterReentrantMutexLock> interReentrantMutexLocks = new LinkedHashMap<>();
-
- private final ClusterPersistRepository repository;
-
- private final LockRegistryService mutexLockRegistryService;
+ private final ClusterPersistRepository clusterRepository;
private final ComputeNodeInstance currentInstance;
private final Collection<ComputeNodeInstance> computeNodeInstances;
+ private final LockRegistryService mutexLockRegistryService;
+
public ShardingSphereInterMutexLockHolder(final ClusterPersistRepository repository, final ComputeNodeInstance instance, final Collection<ComputeNodeInstance> nodeInstances) {
- this.repository = repository;
- mutexLockRegistryService = new MutexLockRegistryService(repository);
+ clusterRepository = repository;
currentInstance = instance;
computeNodeInstances = nodeInstances;
+ mutexLockRegistryService = new MutexLockRegistryService(clusterRepository);
}
/**
@@ -60,19 +59,23 @@ public final class ShardingSphereInterMutexLockHolder {
* @return inter mutex lock
*/
public synchronized InterMutexLock getOrCreateInterMutexLock(final String locksName) {
- InterMutexLock result = interMutexLocks.get(locksName);
+ MutexLock result = mutexLocks.get(locksName);
if (null == result) {
result = createInterMutexLock(locksName);
- interMutexLocks.put(locksName, result);
+ mutexLocks.put(locksName, result);
}
- return result;
+ return (InterMutexLock) result;
}
private InterMutexLock createInterMutexLock(final String locksName) {
- InterReentrantMutexLock interReentrantMutexLock = getInterReentrantMutexLock(locksName + "/sequence");
+ InterReentrantMutexLock interReentrantMutexLock = createInterReentrantMutexLock(LockNodeUtil.generateLockSequenceNodePath(locksName));
return new InterMutexLock(locksName, interReentrantMutexLock, mutexLockRegistryService, currentInstance, computeNodeInstances);
}
+ private InterReentrantMutexLock createInterReentrantMutexLock(final String lockNodePath) {
+ return new InterReentrantMutexLock(clusterRepository.getInternalReentrantMutexLock(lockNodePath));
+ }
+
/**
* Get inter mutex Lock.
*
@@ -80,44 +83,57 @@ public final class ShardingSphereInterMutexLockHolder {
* @return inter mutex lock
*/
public Optional<InterMutexLock> getInterMutexLock(final String locksName) {
- if (interMutexLocks.isEmpty()) {
+ if (mutexLocks.isEmpty()) {
return Optional.empty();
}
- return Optional.ofNullable(interMutexLocks.get(locksName));
+ return Optional.ofNullable((InterMutexLock) mutexLocks.get(locksName));
}
/**
- * Get inter reentrant mutex lock.
+ * Get or create inter reentrant mutex lock.
*
* @param locksName locks name
* @return inter reentrant mutex lock
*/
- public InterReentrantMutexLock getInterReentrantMutexLock(final String locksName) {
- InterReentrantMutexLock result = interReentrantMutexLocks.get(locksName);
+ public synchronized InterReentrantMutexLock getOrCreateInterReentrantMutexLock(final String locksName) {
+ MutexLock result = mutexLocks.get(locksName);
if (null == result) {
- result = new InterReentrantMutexLock(repository.getInternalReentrantMutexLock(locksName));
- interReentrantMutexLocks.put(locksName, result);
+ result = createInterReentrantMutexLock(locksName);
+ mutexLocks.put(locksName, result);
+ }
+ return (InterReentrantMutexLock) result;
+ }
+
+ /**
+ * Get inter reentrant mutex Lock.
+ *
+ * @param locksName locks name
+ * @return inter mutex lock
+ */
+ public Optional<InterReentrantMutexLock> getInterReentrantMutexLock(final String locksName) {
+ if (mutexLocks.isEmpty()) {
+ return Optional.empty();
}
- return result;
+ return Optional.ofNullable((InterReentrantMutexLock) mutexLocks.get(locksName));
}
/**
- * Synchronize mutex lock.
+ * Synchronize lock.
*
* @param lockNodeService lock node service
*/
- public void synchronizeMutexLock(final LockNodeService lockNodeService) {
- Collection<String> allGlobalLock = repository.getChildrenKeys(lockNodeService.getLocksNodePath());
+ public void synchronizeLock(final LockNodeService lockNodeService) {
+ Collection<String> allGlobalLock = clusterRepository.getChildrenKeys(lockNodeService.getLocksNodePath());
if (allGlobalLock.isEmpty()) {
if (LockNodeType.DISTRIBUTED == lockNodeService.getType()) {
return;
}
- repository.persist(lockNodeService.getLocksNodePath(), "");
+ clusterRepository.persist(lockNodeService.getLocksNodePath(), "");
return;
}
for (String each : allGlobalLock) {
Optional<String> generalLock = lockNodeService.parseLocksNodePath(each);
- generalLock.ifPresent(optional -> interMutexLocks.put(optional, createInterMutexLock(optional)));
+ generalLock.ifPresent(optional -> mutexLocks.put(optional, createInterMutexLock(optional)));
}
}
diff --git a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/LockNodeServiceFactory.java b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/service/LockNodeServiceFactory.java
similarity index 95%
rename from shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/LockNodeServiceFactory.java
rename to shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/service/LockNodeServiceFactory.java
index cf26d982837..6cd3d569e68 100644
--- a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/LockNodeServiceFactory.java
+++ b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/service/LockNodeServiceFactory.java
@@ -15,8 +15,9 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.mode.manager.cluster.coordinator.lock;
+package org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.service;
+import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.LockNodeService;
import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.util.LockNodeType;
import org.apache.shardingsphere.spi.ShardingSphereServiceLoader;
diff --git a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/LockRegistryService.java b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/service/LockRegistryService.java
similarity index 99%
rename from shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/LockRegistryService.java
rename to shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/service/LockRegistryService.java
index b024bd1359c..71f2f7d1469 100644
--- a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/LockRegistryService.java
+++ b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/service/LockRegistryService.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.mode.manager.cluster.coordinator.lock;
+package org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.service;
import java.util.Collection;
diff --git a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/service/MutexLockRegistryService.java b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/service/MutexLockRegistryService.java
index 9bc47988937..c3ae161c99a 100644
--- a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/service/MutexLockRegistryService.java
+++ b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/service/MutexLockRegistryService.java
@@ -18,7 +18,6 @@
package org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.service;
import lombok.RequiredArgsConstructor;
-import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.LockRegistryService;
import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.util.LockNodeUtil;
import org.apache.shardingsphere.mode.repository.cluster.ClusterPersistRepository;
diff --git a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/util/LockNodeUtil.java b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/util/LockNodeUtil.java
index 73fb752e45c..378f484c656 100644
--- a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/util/LockNodeUtil.java
+++ b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/util/LockNodeUtil.java
@@ -38,6 +38,16 @@ public final class LockNodeUtil {
return lockName + "/leases";
}
+ /**
+ * Generate Lock sequence node path.
+ *
+ * @param lockName lock name
+ * @return lock leases
+ */
+ public static String generateLockSequenceNodePath(final String lockName) {
+ return lockName + "/sequence";
+ }
+
/**
* generate ack path name.
*
diff --git a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/resources/META-INF/services/org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.manager.ShardingSphereLockManager b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/resources/META-INF/services/org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.manager.ShardingSphereLockManager
index cef0a9c6f82..3de4a915271 100644
--- a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/resources/META-INF/services/org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.manager.ShardingSphereLockManager
+++ b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/resources/META-INF/services/org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.manager.ShardingSphereLockManager
@@ -15,4 +15,4 @@
# limitations under the License.
#
-org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.manager.DistributedLockManager
+org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.manager.ShardingSphereDistributedLockManager
diff --git a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/resources/META-INF/services/org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.manager.ShardingSphereLockManager b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/resources/META-INF/services/org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.manager.state.LockStateContext
similarity index 94%
copy from shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/resources/META-INF/services/org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.manager.ShardingSphereLockManager
copy to shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/resources/META-INF/services/org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.manager.state.LockStateContext
index cef0a9c6f82..c1450fb446a 100644
--- a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/resources/META-INF/services/org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.manager.ShardingSphereLockManager
+++ b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/resources/META-INF/services/org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.manager.state.LockStateContext
@@ -15,4 +15,4 @@
# limitations under the License.
#
-org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.manager.DistributedLockManager
+org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.manager.state.ShardingSphereLockStateContext
diff --git a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/database/node/DatabaseLockNodeServiceTest.java b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/database/node/DatabaseLockNodeServiceTest.java
index b7f24c91b09..21d219c6251 100644
--- a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/database/node/DatabaseLockNodeServiceTest.java
+++ b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/database/node/DatabaseLockNodeServiceTest.java
@@ -26,11 +26,6 @@ public final class DatabaseLockNodeServiceTest {
private static final DatabaseLockNodeService SERVICE = new DatabaseLockNodeService();
- @Test
- public void assertGetSequenceNodePath() {
- assertThat(SERVICE.getSequenceNodePath(), is("/lock/database/sequence"));
- }
-
@Test
public void assertGetLockLevel() {
assertThat(SERVICE.getLockTypeName(), is("database"));
diff --git a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/distributed/node/DistributedLockNodeServiceTest.java b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/distributed/node/DistributedLockNodeServiceTest.java
index 1c9cf9aac58..70003c4cb01 100644
--- a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/distributed/node/DistributedLockNodeServiceTest.java
+++ b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/distributed/node/DistributedLockNodeServiceTest.java
@@ -26,11 +26,6 @@ public final class DistributedLockNodeServiceTest {
private static final DistributedLockNodeService SERVICE = new DistributedLockNodeService();
- @Test
- public void assertGetSequenceNodePath() {
- assertThat(SERVICE.getSequenceNodePath(), is("/lock/distributed/sequence"));
- }
-
@Test
public void assertGetLockLevel() {
assertThat(SERVICE.getLockTypeName(), is("distributed"));
diff --git a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/manager/DistributedLockManagerTest.java b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/manager/ShardingSphereDistributedLockManagerTest.java
similarity index 69%
rename from shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/manager/DistributedLockManagerTest.java
rename to shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/manager/ShardingSphereDistributedLockManagerTest.java
index 363344e9421..ad934f2f891 100644
--- a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/manager/DistributedLockManagerTest.java
+++ b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/manager/ShardingSphereDistributedLockManagerTest.java
@@ -32,45 +32,45 @@ import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
-public final class DistributedLockManagerTest {
+public final class ShardingSphereDistributedLockManagerTest {
- private final DistributedLockManager distributedLockManager = new DistributedLockManager();
+ private final ShardingSphereDistributedLockManager shardingSphereDistributedLockManager = new ShardingSphereDistributedLockManager();
@Before
public void init() throws ReflectiveOperationException {
ShardingSphereDistributedLock distributedLock = mock(ShardingSphereDistributedLock.class);
- Field distributedLockField = distributedLockManager.getClass().getDeclaredField("distributedLock");
+ Field distributedLockField = shardingSphereDistributedLockManager.getClass().getDeclaredField("distributedLock");
distributedLockField.setAccessible(true);
- distributedLockField.set(distributedLockManager, distributedLock);
+ distributedLockField.set(shardingSphereDistributedLockManager, distributedLock);
ShardingSphereDistributedDatabaseLock databaseLock = mock(ShardingSphereDistributedDatabaseLock.class);
when(databaseLock.tryLock("databaseName", 3000L - TimeoutMilliseconds.DEFAULT_REGISTRY)).thenReturn(true);
- Field databaseLockField = distributedLockManager.getClass().getDeclaredField("databaseLock");
+ Field databaseLockField = shardingSphereDistributedLockManager.getClass().getDeclaredField("databaseLock");
databaseLockField.setAccessible(true);
- databaseLockField.set(distributedLockManager, databaseLock);
+ databaseLockField.set(shardingSphereDistributedLockManager, databaseLock);
}
@Test
public void assertGetDistributedLock() {
- assertNotNull(distributedLockManager.getDistributedLock());
+ assertNotNull(shardingSphereDistributedLockManager.getDistributedLock());
}
@Test
public void assertTryReadLock() {
- assertTrue(distributedLockManager.tryLock("databaseName", LockMode.READ, 3000L));
+ assertTrue(shardingSphereDistributedLockManager.tryLock("databaseName", LockMode.READ, 3000L));
}
@Test(expected = UnsupportedOperationException.class)
public void assertTryWriteLock() {
- distributedLockManager.tryLock("databaseName", LockMode.WRITE, 3000L);
+ shardingSphereDistributedLockManager.tryLock("databaseName", LockMode.WRITE, 3000L);
}
@Test
public void assertReleaseLock() {
- distributedLockManager.releaseLock("databaseName");
+ shardingSphereDistributedLockManager.releaseLock("databaseName");
}
@Test
public void assertIsLocked() {
- assertFalse(distributedLockManager.isLocked("databaseName"));
+ assertFalse(shardingSphereDistributedLockManager.isLocked("databaseName"));
}
}
diff --git a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/LockNodeServiceFactoryTest.java b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/service/LockNodeServiceFactoryTest.java
similarity index 89%
rename from shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/LockNodeServiceFactoryTest.java
rename to shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/service/LockNodeServiceFactoryTest.java
index fc7c1ac2b76..3ae70c7a769 100644
--- a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/LockNodeServiceFactoryTest.java
+++ b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/service/LockNodeServiceFactoryTest.java
@@ -15,15 +15,15 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.mode.manager.cluster.coordinator.lock;
+package org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.service;
+import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.LockNodeService;
import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.database.node.DatabaseLockNodeService;
import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.distributed.node.DistributedLockNodeService;
import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.util.LockNodeType;
import org.junit.Test;
import static org.hamcrest.CoreMatchers.instanceOf;
-import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertThat;
public final class LockNodeServiceFactoryTest {
@@ -34,7 +34,5 @@ public final class LockNodeServiceFactoryTest {
assertThat(distributedLockNodeService, instanceOf(DistributedLockNodeService.class));
LockNodeService databaseLockNodeService = LockNodeServiceFactory.getInstance().getLockNodeService(LockNodeType.DATABASE);
assertThat(databaseLockNodeService, instanceOf(DatabaseLockNodeService.class));
- LockNodeService schemaLockNodeService = LockNodeServiceFactory.getInstance().getLockNodeService(LockNodeType.SCHEMA);
- assertNull(schemaLockNodeService);
}
}
diff --git a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/AbstractDistributedLockNodeServiceTest.java b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/service/LockNodeServiceTest.java
similarity index 84%
rename from shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/AbstractDistributedLockNodeServiceTest.java
rename to shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/service/LockNodeServiceTest.java
index e6ba1f9fd65..64c8dd8cf6e 100644
--- a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/AbstractDistributedLockNodeServiceTest.java
+++ b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/service/LockNodeServiceTest.java
@@ -15,8 +15,9 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.mode.manager.cluster.coordinator.lock;
+package org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.service;
+import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.LockNodeService;
import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.distributed.node.DistributedLockNodeService;
import org.junit.Test;
@@ -26,9 +27,9 @@ import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
-public final class AbstractDistributedLockNodeServiceTest {
+public final class LockNodeServiceTest {
- private static final AbstractDistributedLockNodeService SERVICE = new DistributedLockNodeService();
+ private static final LockNodeService SERVICE = new DistributedLockNodeService();
@Test
public void assertGetLocksNodePath() {
@@ -42,6 +43,12 @@ public final class AbstractDistributedLockNodeServiceTest {
assertThat(locksName, is("/lock/distributed/locks/sharding_db"));
}
+ @Test
+ public void assertGenerateFreezeLockName() {
+ String locksName = SERVICE.generateFreezeLockName("sharding_db");
+ assertThat(locksName, is("/lock/distributed/locks/sharding_db/freeze"));
+ }
+
@Test
public void assertGenerateAckLockName() {
String globalLockedAckNodePath = SERVICE.generateAckLockName("locksName", "127.0.0.1@3307");
diff --git a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/service/MutexLockRegistryServiceTest.java b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/service/MutexLockRegistryServiceTest.java
index 23c00db9da2..107489b7e78 100644
--- a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/service/MutexLockRegistryServiceTest.java
+++ b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/service/MutexLockRegistryServiceTest.java
@@ -17,7 +17,6 @@
package org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.service;
-import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.LockRegistryService;
import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.util.LockNodeUtil;
import org.apache.shardingsphere.mode.repository.cluster.ClusterPersistRepository;
import org.junit.Before;
diff --git a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/util/LockNodeUtilTest.java b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/util/LockNodeUtilTest.java
index 26455787b26..b7d9191342e 100644
--- a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/util/LockNodeUtilTest.java
+++ b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/util/LockNodeUtilTest.java
@@ -26,8 +26,14 @@ public final class LockNodeUtilTest {
@Test
public void assertGenerateLockLeasesNodePath() {
- String lockName = "/lock/mutex/locks/sharding_db";
- assertThat(LockNodeUtil.generateLockLeasesNodePath(lockName), is("/lock/mutex/locks/sharding_db/leases"));
+ String lockName = "/lock/distributed/locks/sharding_db";
+ assertThat(LockNodeUtil.generateLockLeasesNodePath(lockName), is("/lock/distributed/locks/sharding_db/leases"));
+ }
+
+ @Test
+ public void assertGenerateLockSequenceNodePath() {
+ String lockName = "/lock/distributed/locks/sharding_db";
+ assertThat(LockNodeUtil.generateLockSequenceNodePath(lockName), is("/lock/distributed/locks/sharding_db/sequence"));
}
@Test