You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by zh...@apache.org on 2022/06/21 04:53:14 UTC
[shardingsphere] branch master updated: Simplify distributed lock remove useless code (#18472)
This is an automated email from the ASF dual-hosted git repository.
zhaojinchao 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 edc55ad70fb Simplify distributed lock remove useless code (#18472)
edc55ad70fb is described below
commit edc55ad70fbdc31102a7ef0ec6ec645f30dcb5f7
Author: gin <ja...@163.com>
AuthorDate: Tue Jun 21 12:53:07 2022 +0800
Simplify distributed lock remove useless code (#18472)
* Simplify distributed lock code
* Add table lock node type
* Simplify lock context
---
.../shardingsphere/infra/lock/LockContext.java | 74 +++---------------
.../infra/lock/{LockType.java => LockLevel.java} | 6 +-
.../{LockType.java => LockNameDefinition.java} | 18 ++++-
.../core/api/impl/RuleAlteredJobAPIImpl.java | 13 ++--
.../scenario/rulealtered/RuleAlteredJobWorker.java | 7 +-
.../mode/manager/lock/AbstractLockContext.java | 90 ++++++++++++++++++++++
.../lock/ShardingSphereLockJudgeEngine.java | 3 +-
.../definition/DatabaseLockNameDefinition.java | 20 ++++-
.../LockNameDefinitionFactory.java} | 28 ++++---
.../manager/lock/AbstractLockJudgeEngineTest.java | 50 ++++++++++++
.../lock/ShardingSphereLockJudgeEngineTest.java | 84 --------------------
.../coordinator/lock/DistributedLockContext.java | 44 +++--------
.../lock/manager/ShardingSphereLockManager.java | 48 ------------
.../lock/manager/state/LockStateContext.java | 41 ----------
.../coordinator/lock/util/LockNodeType.java | 2 +-
.../lock/DistributedLockContextTest.java | 5 +-
.../manager/memory/lock/MemoryLockContext.java | 22 +++---
.../standalone/lock/StandaloneLockContext.java | 22 +++---
.../text/distsql/DistSQLBackendHandlerFactory.java | 5 +-
19 files changed, 255 insertions(+), 327 deletions(-)
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/lock/LockContext.java b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/lock/LockContext.java
index d22680e6d50..3ff0d405d08 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/lock/LockContext.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/lock/LockContext.java
@@ -19,8 +19,6 @@ package org.apache.shardingsphere.infra.lock;
import org.apache.shardingsphere.infra.instance.InstanceContext;
-import java.util.Set;
-
/**
* Lock context.
*/
@@ -42,82 +40,34 @@ public interface LockContext {
ShardingSphereLock getLock();
/**
- * Try lock for database.
- *
- * @param databaseName database name
- * @param lockMode lock mode
- * @return is locked or not
- */
- boolean tryLock(String databaseName, LockMode lockMode);
-
- /**
- * Try Lock write for database.
- *
- * @param databaseName database name
- * @param lockMode lock mode
- * @param timeoutMilliseconds timeout milliseconds
- * @return is locked or not
- */
- boolean tryLock(String databaseName, LockMode lockMode, long timeoutMilliseconds);
-
- /**
- * Try lock for schemas.
+ * Try lock.
*
- * @param databaseName database name
- * @param schemaNames schema names
- * @param lockMode lock mode
+ * @param lockNameDefinition lock name definition
* @return is locked or not
*/
- default boolean tryLock(String databaseName, Set<String> schemaNames, LockMode lockMode) {
- throw new UnsupportedOperationException();
- }
+ boolean tryLock(LockNameDefinition lockNameDefinition);
/**
- * Try lock for schemas.
+ * Try Lock.
*
- * @param databaseName database name
- * @param schemaNames schema names
- * @param lockMode lock mode
+ * @param lockNameDefinition lock name definition
* @param timeoutMilliseconds timeout milliseconds
* @return is locked or not
*/
- default boolean tryLock(String databaseName, Set<String> schemaNames, LockMode lockMode, long timeoutMilliseconds) {
- throw new UnsupportedOperationException();
- }
-
- /**
- * Release lock for database.
- *
- * @param databaseName database name
- */
- void releaseLock(String databaseName);
+ boolean tryLock(LockNameDefinition lockNameDefinition, long timeoutMilliseconds);
/**
- * Release lock write for schemas.
+ * Release lock.
*
- * @param databaseName database name
- * @param schemaName schema name
+ * @param lockNameDefinition lock name definition
*/
- default void releaseLock(String databaseName, String schemaName) {
- throw new UnsupportedOperationException();
- }
-
- /**
- * Is locked database.
- *
- * @param databaseName database name
- * @return is locked database or not
- */
- boolean isLocked(String databaseName);
+ void releaseLock(LockNameDefinition lockNameDefinition);
/**
- * Is locked schema.
+ * Is locked.
*
- * @param databaseName database name
- * @param schemaName schema name
+ * @param lockNameDefinition lock name definition
* @return is locked or not
*/
- default boolean isLocked(String databaseName, String schemaName) {
- throw new UnsupportedOperationException();
- }
+ boolean isLocked(LockNameDefinition lockNameDefinition);
}
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/lock/LockType.java b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/lock/LockLevel.java
similarity index 91%
copy from shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/lock/LockType.java
copy to shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/lock/LockLevel.java
index 94ec1a973a5..47eba392212 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/lock/LockType.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/lock/LockLevel.java
@@ -18,9 +18,9 @@
package org.apache.shardingsphere.infra.lock;
/**
- * Lock type.
+ * Lock level.
*/
-public enum LockType {
+public enum LockLevel {
- STANDARD, GENERAL, DATABASE, SCHEMA
+ DATABASE, SCHEMA, TABLE
}
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/lock/LockType.java b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/lock/LockNameDefinition.java
similarity index 76%
copy from shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/lock/LockType.java
copy to shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/lock/LockNameDefinition.java
index 94ec1a973a5..f06210fbeb6 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/lock/LockType.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/lock/LockNameDefinition.java
@@ -18,9 +18,21 @@
package org.apache.shardingsphere.infra.lock;
/**
- * Lock type.
+ * Lock name definition.
*/
-public enum LockType {
+public interface LockNameDefinition {
- STANDARD, GENERAL, DATABASE, SCHEMA
+ /**
+ * Get lock mode.
+ *
+ * @return lock mode
+ */
+ LockMode getLockMode();
+
+ /**
+ * Get lock level.
+ *
+ * @return lock level
+ */
+ LockLevel getLockLevel();
}
diff --git a/shardingsphere-kernel/shardingsphere-data-pipeline/shardingsphere-data-pipeline-core/src/main/java/org/apache/shardingsphere/data/pipeline/core/api/impl/RuleAlteredJobAPIImpl.java b/shardingsphere-kernel/shardingsphere-data-pipeline/shardingsphere-data-pipeline-core/src/main/java/org/apache/shardingsphere/data/pipeline/core/api/impl/RuleAlteredJobAPIImpl.java
index 13e9cb09742..03a755a9986 100644
--- a/shardingsphere-kernel/shardingsphere-data-pipeline/shardingsphere-data-pipeline-core/src/main/java/org/apache/shardingsphere/data/pipeline/core/api/impl/RuleAlteredJobAPIImpl.java
+++ b/shardingsphere-kernel/shardingsphere-data-pipeline/shardingsphere-data-pipeline-core/src/main/java/org/apache/shardingsphere/data/pipeline/core/api/impl/RuleAlteredJobAPIImpl.java
@@ -48,9 +48,10 @@ import org.apache.shardingsphere.elasticjob.lite.lifecycle.domain.JobBriefInfo;
import org.apache.shardingsphere.infra.config.mode.ModeConfiguration;
import org.apache.shardingsphere.infra.eventbus.ShardingSphereEventBus;
import org.apache.shardingsphere.infra.lock.LockContext;
-import org.apache.shardingsphere.infra.lock.LockMode;
+import org.apache.shardingsphere.infra.lock.LockNameDefinition;
import org.apache.shardingsphere.infra.yaml.engine.YamlEngine;
import org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.config.event.rule.ScalingTaskFinishedEvent;
+import org.apache.shardingsphere.mode.manager.lock.definition.LockNameDefinitionFactory;
import org.apache.shardingsphere.scaling.core.job.environment.ScalingEnvironmentManager;
import java.sql.SQLException;
@@ -178,11 +179,12 @@ public final class RuleAlteredJobAPIImpl extends AbstractPipelineJobAPIImpl impl
@Override
public void stopClusterWriteDB(final String databaseName, final String jobId) {
LockContext lockContext = PipelineContext.getContextManager().getInstanceContext().getLockContext();
- if (lockContext.isLocked(databaseName)) {
+ LockNameDefinition lockNameDefinition = LockNameDefinitionFactory.newDatabaseDefinition(databaseName);
+ if (lockContext.isLocked(lockNameDefinition)) {
log.info("stopClusterWriteDB, already stopped");
return;
}
- if (lockContext.tryLock(databaseName, LockMode.READ)) {
+ if (lockContext.tryLock(lockNameDefinition)) {
log.info("stopClusterWriteDB, tryLockSuccess=true");
return;
}
@@ -203,9 +205,10 @@ public final class RuleAlteredJobAPIImpl extends AbstractPipelineJobAPIImpl impl
@Override
public void restoreClusterWriteDB(final String databaseName, final String jobId) {
LockContext lockContext = PipelineContext.getContextManager().getInstanceContext().getLockContext();
- if (lockContext.isLocked(databaseName)) {
+ LockNameDefinition lockNameDefinition = LockNameDefinitionFactory.newDatabaseDefinition(databaseName);
+ if (lockContext.isLocked(lockNameDefinition)) {
log.info("restoreClusterWriteDB, before releaseLock, databaseName={}, jobId={}", databaseName, jobId);
- lockContext.releaseLock(databaseName);
+ lockContext.releaseLock(lockNameDefinition);
return;
}
log.info("restoreClusterWriteDB, isLocked false, databaseName={}", databaseName);
diff --git a/shardingsphere-kernel/shardingsphere-data-pipeline/shardingsphere-data-pipeline-core/src/main/java/org/apache/shardingsphere/data/pipeline/scenario/rulealtered/RuleAlteredJobWorker.java b/shardingsphere-kernel/shardingsphere-data-pipeline/shardingsphere-data-pipeline-core/src/main/java/org/apache/shardingsphere/data/pipeline/scenario/rulealtered/RuleAlteredJobWorker.java
index b2e779f2d45..094a0d07f05 100644
--- a/shardingsphere-kernel/shardingsphere-data-pipeline/shardingsphere-data-pipeline-core/src/main/java/org/apache/shardingsphere/data/pipeline/scenario/rulealtered/RuleAlteredJobWorker.java
+++ b/shardingsphere-kernel/shardingsphere-data-pipeline/shardingsphere-data-pipeline-core/src/main/java/org/apache/shardingsphere/data/pipeline/scenario/rulealtered/RuleAlteredJobWorker.java
@@ -44,6 +44,7 @@ import org.apache.shardingsphere.infra.config.RuleConfiguration;
import org.apache.shardingsphere.infra.config.rulealtered.OnRuleAlteredActionConfiguration;
import org.apache.shardingsphere.infra.eventbus.ShardingSphereEventBus;
import org.apache.shardingsphere.infra.lock.LockContext;
+import org.apache.shardingsphere.infra.lock.LockNameDefinition;
import org.apache.shardingsphere.infra.yaml.config.pojo.YamlRootConfiguration;
import org.apache.shardingsphere.infra.yaml.config.pojo.YamlRuleConfiguration;
import org.apache.shardingsphere.infra.yaml.config.swapper.YamlRuleConfigurationSwapperEngine;
@@ -51,6 +52,7 @@ import org.apache.shardingsphere.infra.yaml.engine.YamlEngine;
import org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.cache.event.StartScalingEvent;
import org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.config.event.rule.ScalingReleaseDatabaseLevelLockEvent;
import org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.config.event.rule.ScalingTaskFinishedEvent;
+import org.apache.shardingsphere.mode.manager.lock.definition.LockNameDefinitionFactory;
import java.util.Collection;
import java.util.HashMap;
@@ -296,9 +298,10 @@ public final class RuleAlteredJobWorker {
private void restoreSourceWriting(final String databaseName) {
log.info("restoreSourceWriting, databaseName={}", databaseName);
LockContext lockContext = PipelineContext.getContextManager().getInstanceContext().getLockContext();
- if (lockContext.isLocked(databaseName)) {
+ LockNameDefinition lockNameDefinition = LockNameDefinitionFactory.newDatabaseDefinition(databaseName);
+ if (lockContext.isLocked(lockNameDefinition)) {
log.info("Source writing is still stopped on database '{}', restore it now", databaseName);
- lockContext.releaseLock(databaseName);
+ lockContext.releaseLock(lockNameDefinition);
}
}
}
diff --git a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/lock/AbstractLockContext.java b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/lock/AbstractLockContext.java
new file mode 100644
index 00000000000..2fe250f9aee
--- /dev/null
+++ b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/lock/AbstractLockContext.java
@@ -0,0 +1,90 @@
+/*
+ * 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.lock;
+
+import org.apache.shardingsphere.infra.lock.LockContext;
+import org.apache.shardingsphere.infra.lock.LockLevel;
+import org.apache.shardingsphere.infra.lock.LockNameDefinition;
+import org.apache.shardingsphere.mode.manager.lock.definition.DatabaseLockNameDefinition;
+
+/**
+ * Abstract lock context.
+ */
+public abstract class AbstractLockContext implements LockContext {
+
+ @Override
+ public boolean tryLock(final LockNameDefinition lockNameDefinition) {
+ LockLevel lockLevel = lockNameDefinition.getLockLevel();
+ switch (lockLevel) {
+ case DATABASE:
+ return tryLock((DatabaseLockNameDefinition) lockNameDefinition);
+ case SCHEMA:
+ case TABLE:
+ default:
+ throw new UnsupportedOperationException();
+ }
+ }
+
+ protected abstract boolean tryLock(DatabaseLockNameDefinition lockNameDefinition);
+
+ @Override
+ public boolean tryLock(final LockNameDefinition lockNameDefinition, final long timeoutMilliseconds) {
+ LockLevel lockLevel = lockNameDefinition.getLockLevel();
+ switch (lockLevel) {
+ case DATABASE:
+ return tryLock((DatabaseLockNameDefinition) lockNameDefinition, timeoutMilliseconds);
+ case SCHEMA:
+ case TABLE:
+ default:
+ throw new UnsupportedOperationException();
+ }
+ }
+
+ protected abstract boolean tryLock(DatabaseLockNameDefinition lockNameDefinition, long timeoutMilliseconds);
+
+ @Override
+ public void releaseLock(final LockNameDefinition lockNameDefinition) {
+ LockLevel lockLevel = lockNameDefinition.getLockLevel();
+ switch (lockLevel) {
+ case DATABASE:
+ releaseLock((DatabaseLockNameDefinition) lockNameDefinition);
+ break;
+ case SCHEMA:
+ case TABLE:
+ default:
+ throw new UnsupportedOperationException();
+ }
+ }
+
+ protected abstract void releaseLock(DatabaseLockNameDefinition lockNameDefinition);
+
+ @Override
+ public boolean isLocked(final LockNameDefinition lockNameDefinition) {
+ LockLevel lockLevel = lockNameDefinition.getLockLevel();
+ switch (lockLevel) {
+ case DATABASE:
+ return isLocked((DatabaseLockNameDefinition) lockNameDefinition);
+ case SCHEMA:
+ case TABLE:
+ default:
+ throw new UnsupportedOperationException();
+ }
+ }
+
+ protected abstract boolean isLocked(DatabaseLockNameDefinition lockNameDefinition);
+}
diff --git a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/lock/ShardingSphereLockJudgeEngine.java b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/lock/ShardingSphereLockJudgeEngine.java
index a0ab6728759..23d1321955d 100644
--- a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/lock/ShardingSphereLockJudgeEngine.java
+++ b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/lock/ShardingSphereLockJudgeEngine.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.mode.manager.lock;
import lombok.RequiredArgsConstructor;
import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
+import org.apache.shardingsphere.mode.manager.lock.definition.LockNameDefinitionFactory;
/**
* Lock judge engine for ShardingSphere.
@@ -36,7 +37,7 @@ public final class ShardingSphereLockJudgeEngine extends AbstractLockJudgeEngine
@Override
public boolean isLocked(final String databaseName, final SQLStatementContext<?> sqlStatementContext) {
if (isWriteStatement(sqlStatementContext.getSqlStatement())) {
- return getLockContext().isLocked(databaseName);
+ return getLockContext().isLocked(LockNameDefinitionFactory.newDatabaseDefinition(databaseName));
}
return false;
}
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/lock/LockType.java b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/lock/definition/DatabaseLockNameDefinition.java
similarity index 59%
rename from shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/lock/LockType.java
rename to shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/lock/definition/DatabaseLockNameDefinition.java
index 94ec1a973a5..3e446f34ab3 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/lock/LockType.java
+++ b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/lock/definition/DatabaseLockNameDefinition.java
@@ -15,12 +15,24 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.infra.lock;
+package org.apache.shardingsphere.mode.manager.lock.definition;
+
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.infra.lock.LockLevel;
+import org.apache.shardingsphere.infra.lock.LockMode;
+import org.apache.shardingsphere.infra.lock.LockNameDefinition;
/**
- * Lock type.
+ * Database lock name definition.
*/
-public enum LockType {
+@RequiredArgsConstructor
+@Getter
+public final class DatabaseLockNameDefinition implements LockNameDefinition {
+
+ private final String databaseName;
+
+ private final LockMode lockMode;
- STANDARD, GENERAL, DATABASE, SCHEMA
+ private final LockLevel lockLevel;
}
diff --git a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/lock/ShardingSphereLockJudgeEngine.java b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/lock/definition/LockNameDefinitionFactory.java
similarity index 55%
copy from shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/lock/ShardingSphereLockJudgeEngine.java
copy to shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/lock/definition/LockNameDefinitionFactory.java
index a0ab6728759..b3f0d931762 100644
--- a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/lock/ShardingSphereLockJudgeEngine.java
+++ b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/lock/definition/LockNameDefinitionFactory.java
@@ -15,29 +15,27 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.mode.manager.lock;
+package org.apache.shardingsphere.mode.manager.lock.definition;
-import lombok.RequiredArgsConstructor;
-import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.infra.lock.LockLevel;
+import org.apache.shardingsphere.infra.lock.LockMode;
+import org.apache.shardingsphere.infra.lock.LockNameDefinition;
/**
- * Lock judge engine for ShardingSphere.
+ * Lock name definition factory.
*/
-@RequiredArgsConstructor
-public final class ShardingSphereLockJudgeEngine extends AbstractLockJudgeEngine {
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class LockNameDefinitionFactory {
/**
- * Is locked.
+ * New database definition.
*
* @param databaseName database name
- * @param sqlStatementContext sql statement context
- * @return is locked or not
+ * @return database lock name definition
*/
- @Override
- public boolean isLocked(final String databaseName, final SQLStatementContext<?> sqlStatementContext) {
- if (isWriteStatement(sqlStatementContext.getSqlStatement())) {
- return getLockContext().isLocked(databaseName);
- }
- return false;
+ public static LockNameDefinition newDatabaseDefinition(final String databaseName) {
+ return new DatabaseLockNameDefinition(databaseName, LockMode.READ, LockLevel.DATABASE);
}
}
diff --git a/shardingsphere-mode/shardingsphere-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/lock/AbstractLockJudgeEngineTest.java b/shardingsphere-mode/shardingsphere-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/lock/AbstractLockJudgeEngineTest.java
new file mode 100644
index 00000000000..cac9e41ff3b
--- /dev/null
+++ b/shardingsphere-mode/shardingsphere-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/lock/AbstractLockJudgeEngineTest.java
@@ -0,0 +1,50 @@
+/*
+ * 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.lock;
+
+import org.apache.shardingsphere.infra.lock.LockContext;
+import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.DDLStatement;
+import org.apache.shardingsphere.sql.parser.sql.common.statement.dml.DeleteStatement;
+import org.apache.shardingsphere.sql.parser.sql.common.statement.dml.InsertStatement;
+import org.apache.shardingsphere.sql.parser.sql.common.statement.dml.SelectStatement;
+import org.apache.shardingsphere.sql.parser.sql.common.statement.dml.UpdateStatement;
+import org.junit.Before;
+import org.junit.Test;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.mock;
+
+public final class AbstractLockJudgeEngineTest {
+
+ private AbstractLockJudgeEngine engine;
+
+ @Before
+ public void setUp() {
+ engine = (AbstractLockJudgeEngine) LockJudgeEngineBuilder.build(mock(LockContext.class));
+ }
+
+ @Test
+ public void assertIsWriteDDLStatement() {
+ assertTrue(engine.isWriteStatement(mock(DDLStatement.class)));
+ assertTrue(engine.isWriteStatement(mock(InsertStatement.class)));
+ assertTrue(engine.isWriteStatement(mock(UpdateStatement.class)));
+ assertTrue(engine.isWriteStatement(mock(DeleteStatement.class)));
+ assertFalse(engine.isWriteStatement(mock(SelectStatement.class)));
+ }
+}
diff --git a/shardingsphere-mode/shardingsphere-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/lock/ShardingSphereLockJudgeEngineTest.java b/shardingsphere-mode/shardingsphere-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/lock/ShardingSphereLockJudgeEngineTest.java
deleted file mode 100644
index f8a3ab3e31e..00000000000
--- a/shardingsphere-mode/shardingsphere-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/lock/ShardingSphereLockJudgeEngineTest.java
+++ /dev/null
@@ -1,84 +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.lock;
-
-import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
-import org.apache.shardingsphere.infra.binder.statement.dml.DeleteStatementContext;
-import org.apache.shardingsphere.infra.binder.statement.dml.InsertStatementContext;
-import org.apache.shardingsphere.infra.binder.statement.dml.SelectStatementContext;
-import org.apache.shardingsphere.infra.binder.statement.dml.UpdateStatementContext;
-import org.apache.shardingsphere.infra.lock.LockContext;
-import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.DDLStatement;
-import org.apache.shardingsphere.sql.parser.sql.common.statement.dml.DeleteStatement;
-import org.apache.shardingsphere.sql.parser.sql.common.statement.dml.InsertStatement;
-import org.apache.shardingsphere.sql.parser.sql.common.statement.dml.SelectStatement;
-import org.apache.shardingsphere.sql.parser.sql.common.statement.dml.UpdateStatement;
-import org.junit.Before;
-import org.junit.Test;
-
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
-public final class ShardingSphereLockJudgeEngineTest {
-
- private LockJudgeEngine engine;
-
- @Before
- public void setUp() {
- LockContext lockContext = mock(LockContext.class);
- when(lockContext.isLocked("databaseName")).thenReturn(true);
- engine = LockJudgeEngineBuilder.build(lockContext);
- }
-
- @Test
- public void assertDDLIsLocked() {
- SQLStatementContext<DDLStatement> sqlStatementContext = mock(SQLStatementContext.class);
- when(sqlStatementContext.getSqlStatement()).thenReturn(mock(DDLStatement.class));
- assertTrue(engine.isLocked("databaseName", sqlStatementContext));
- }
-
- @Test
- public void assertInsertIsLocked() {
- InsertStatementContext insertStatementContext = mock(InsertStatementContext.class);
- when(insertStatementContext.getSqlStatement()).thenReturn(mock(InsertStatement.class));
- assertTrue(engine.isLocked("databaseName", insertStatementContext));
- }
-
- @Test
- public void assertUpdateIsLocked() {
- UpdateStatementContext updateStatementContext = mock(UpdateStatementContext.class);
- when(updateStatementContext.getSqlStatement()).thenReturn(mock(UpdateStatement.class));
- assertTrue(engine.isLocked("databaseName", updateStatementContext));
- }
-
- @Test
- public void assertDeleteIsLocked() {
- DeleteStatementContext deleteStatementContext = mock(DeleteStatementContext.class);
- when(deleteStatementContext.getSqlStatement()).thenReturn(mock(DeleteStatement.class));
- assertTrue(engine.isLocked("databaseName", deleteStatementContext));
- }
-
- @Test
- public void assertSelectIsLocked() {
- SelectStatementContext selectStatementContext = mock(SelectStatementContext.class);
- when(selectStatementContext.getSqlStatement()).thenReturn(mock(SelectStatement.class));
- assertFalse(engine.isLocked("databaseName", selectStatementContext));
- }
-}
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 7af5951853b..44345bd127c 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
@@ -19,22 +19,20 @@ package org.apache.shardingsphere.mode.manager.cluster.coordinator.lock;
import lombok.RequiredArgsConstructor;
import org.apache.shardingsphere.infra.instance.InstanceContext;
-import org.apache.shardingsphere.infra.lock.LockContext;
-import org.apache.shardingsphere.infra.lock.LockMode;
import org.apache.shardingsphere.infra.lock.ShardingSphereLock;
import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.manager.ShardingSphereLockManager;
import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.mutex.ShardingSphereInterMutexLockHolder;
+import org.apache.shardingsphere.mode.manager.lock.AbstractLockContext;
+import org.apache.shardingsphere.mode.manager.lock.definition.DatabaseLockNameDefinition;
import org.apache.shardingsphere.mode.repository.cluster.ClusterPersistRepository;
import org.apache.shardingsphere.spi.ShardingSphereServiceLoader;
import org.apache.shardingsphere.spi.type.required.RequiredSPIRegistry;
-import java.util.Set;
-
/**
* Distributed lock context.
*/
@RequiredArgsConstructor
-public final class DistributedLockContext implements LockContext {
+public final class DistributedLockContext extends AbstractLockContext {
static {
ShardingSphereServiceLoader.register(ShardingSphereLockManager.class);
@@ -60,42 +58,22 @@ public final class DistributedLockContext implements LockContext {
}
@Override
- public boolean tryLock(final String databaseName, final LockMode lockMode) {
- return lockManager.tryLock(databaseName, lockMode);
- }
-
- @Override
- public boolean tryLock(final String databaseName, final Set<String> schemaNames, final LockMode lockMode) {
- return lockManager.tryLock(databaseName, schemaNames, lockMode);
- }
-
- @Override
- public boolean tryLock(final String databaseName, final LockMode lockMode, final long timeoutMilliseconds) {
- return lockManager.tryLock(databaseName, lockMode, timeoutMilliseconds);
- }
-
- @Override
- public boolean tryLock(final String databaseName, final Set<String> schemaNames, final LockMode lockMode, final long timeoutMilliseconds) {
- return lockManager.tryLock(databaseName, schemaNames, lockMode, timeoutMilliseconds);
- }
-
- @Override
- public void releaseLock(final String databaseName) {
- lockManager.releaseLock(databaseName);
+ protected boolean tryLock(final DatabaseLockNameDefinition lockNameDefinition) {
+ return lockManager.tryLock(lockNameDefinition.getDatabaseName(), lockNameDefinition.getLockMode());
}
@Override
- public void releaseLock(final String databaseName, final String schemaName) {
- lockManager.releaseLock(databaseName, schemaName);
+ protected boolean tryLock(final DatabaseLockNameDefinition lockNameDefinition, final long timeoutMilliseconds) {
+ return lockManager.tryLock(lockNameDefinition.getDatabaseName(), lockNameDefinition.getLockMode(), timeoutMilliseconds);
}
@Override
- public boolean isLocked(final String databaseName) {
- return lockManager.isLocked(databaseName);
+ protected void releaseLock(final DatabaseLockNameDefinition lockNameDefinition) {
+ lockManager.releaseLock(lockNameDefinition.getDatabaseName());
}
@Override
- public boolean isLocked(final String databaseName, final String schemaName) {
- return lockManager.isLocked(databaseName, schemaName);
+ protected boolean isLocked(final DatabaseLockNameDefinition lockNameDefinition) {
+ return lockManager.isLocked(lockNameDefinition.getDatabaseName());
}
}
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/ShardingSphereLockManager.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/ShardingSphereLockManager.java
index 61d74d8ed86..f7a11c46717 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/ShardingSphereLockManager.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/ShardingSphereLockManager.java
@@ -23,8 +23,6 @@ import org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.mutex.Sha
import org.apache.shardingsphere.spi.annotation.SingletonSPI;
import org.apache.shardingsphere.spi.type.required.RequiredSPI;
-import java.util.Set;
-
/**
* Lock manager of ShardingSphere.
*/
@@ -64,31 +62,6 @@ public interface ShardingSphereLockManager extends RequiredSPI {
*/
boolean tryLock(String databaseName, LockMode lockMode, long timeoutMilliseconds);
- /**
- * Try lock for schemas.
- *
- * @param databaseName database name
- * @param schemaNames schema names
- * @param lockMode lock mode
- * @return is locked or not
- */
- default boolean tryLock(String databaseName, Set<String> schemaNames, LockMode lockMode) {
- throw new UnsupportedOperationException();
- }
-
- /**
- * Try lock for schemas.
- *
- * @param databaseName database name
- * @param schemaNames schema names
- * @param lockMode lock mode
- * @param timeoutMilliseconds timeout milliseconds
- * @return is locked or not
- */
- default boolean tryLock(String databaseName, Set<String> schemaNames, LockMode lockMode, long timeoutMilliseconds) {
- throw new UnsupportedOperationException();
- }
-
/**
* Release lock for database.
*
@@ -96,16 +69,6 @@ public interface ShardingSphereLockManager extends RequiredSPI {
*/
void releaseLock(String databaseName);
- /**
- * Release lock for schemas.
- *
- * @param databaseName database name
- * @param schemaName schema name
- */
- default void releaseLock(String databaseName, String schemaName) {
- throw new UnsupportedOperationException();
- }
-
/**
* Is locked database.
*
@@ -113,15 +76,4 @@ public interface ShardingSphereLockManager extends RequiredSPI {
* @return is locked or not
*/
boolean isLocked(String databaseName);
-
- /**
- * Is locked schema.
- *
- * @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/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
index f41a69b3d7d..f45ce603e74 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/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
@@ -17,7 +17,6 @@
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;
@@ -27,15 +26,6 @@ import org.apache.shardingsphere.spi.type.required.RequiredSPI;
@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.
*
@@ -43,16 +33,6 @@ public interface LockStateContext extends RequiredSPI {
*/
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.
*
@@ -60,16 +40,6 @@ public interface LockStateContext extends RequiredSPI {
*/
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.
*
@@ -77,15 +47,4 @@ public interface LockStateContext extends RequiredSPI {
* @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/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/util/LockNodeType.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/LockNodeType.java
index 362343ef19b..51d4e6e340e 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/LockNodeType.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/LockNodeType.java
@@ -22,5 +22,5 @@ package org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.util;
*/
public enum LockNodeType {
- DISTRIBUTED, DATABASE, SCHEMA
+ DISTRIBUTED, DATABASE, SCHEMA, TABLE
}
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/DistributedLockContextTest.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/DistributedLockContextTest.java
index 6c184612fa5..d1d7ca62c95 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/DistributedLockContextTest.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/DistributedLockContextTest.java
@@ -24,6 +24,7 @@ import org.apache.shardingsphere.infra.instance.definition.InstanceDefinition;
import org.apache.shardingsphere.infra.instance.definition.InstanceType;
import org.apache.shardingsphere.infra.instance.workerid.WorkerIdGenerator;
import org.apache.shardingsphere.infra.lock.ShardingSphereLock;
+import org.apache.shardingsphere.mode.manager.lock.definition.LockNameDefinitionFactory;
import org.apache.shardingsphere.mode.repository.cluster.ClusterPersistRepository;
import org.junit.Test;
@@ -56,7 +57,7 @@ public final class DistributedLockContextTest {
ComputeNodeInstance currentInstance = new ComputeNodeInstance(new InstanceDefinition(InstanceType.PROXY, "127.0.0.1@3307"));
DistributedLockContext distributedLockContext = new DistributedLockContext(mock(ClusterPersistRepository.class));
new InstanceContext(currentInstance, mock(WorkerIdGenerator.class), mock(ModeConfiguration.class), distributedLockContext);
- distributedLockContext.releaseLock("database");
+ distributedLockContext.releaseLock(LockNameDefinitionFactory.newDatabaseDefinition("database"));
}
@Test
@@ -64,6 +65,6 @@ public final class DistributedLockContextTest {
ComputeNodeInstance currentInstance = new ComputeNodeInstance(new InstanceDefinition(InstanceType.PROXY, "127.0.0.1@3307"));
DistributedLockContext distributedLockContext = new DistributedLockContext(mock(ClusterPersistRepository.class));
new InstanceContext(currentInstance, mock(WorkerIdGenerator.class), mock(ModeConfiguration.class), distributedLockContext);
- assertFalse(distributedLockContext.isLocked("database"));
+ assertFalse(distributedLockContext.isLocked(LockNameDefinitionFactory.newDatabaseDefinition("database")));
}
}
diff --git a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-memory-mode/shardingsphere-memory-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/memory/lock/MemoryLockContext.java b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-memory-mode/shardingsphere-memory-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/memory/lock/MemoryLockContext.java
index 205a11a6110..0ac09ff9aea 100644
--- a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-memory-mode/shardingsphere-memory-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/memory/lock/MemoryLockContext.java
+++ b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-memory-mode/shardingsphere-memory-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/memory/lock/MemoryLockContext.java
@@ -17,14 +17,14 @@
package org.apache.shardingsphere.mode.manager.memory.lock;
-import org.apache.shardingsphere.infra.lock.LockContext;
-import org.apache.shardingsphere.infra.lock.LockMode;
import org.apache.shardingsphere.infra.lock.ShardingSphereLock;
+import org.apache.shardingsphere.mode.manager.lock.AbstractLockContext;
+import org.apache.shardingsphere.mode.manager.lock.definition.DatabaseLockNameDefinition;
/**
* Memory lock context.
*/
-public final class MemoryLockContext implements LockContext {
+public final class MemoryLockContext extends AbstractLockContext {
private final ShardingSphereLock memoryLock = new ShardingSphereMemoryLock();
@@ -34,22 +34,22 @@ public final class MemoryLockContext implements LockContext {
}
@Override
- public boolean tryLock(final String databaseName, final LockMode lockMode) {
- return memoryLock.tryLock(databaseName);
+ protected boolean tryLock(final DatabaseLockNameDefinition lockNameDefinition) {
+ return memoryLock.tryLock(lockNameDefinition.getDatabaseName());
}
@Override
- public boolean tryLock(final String databaseName, final LockMode lockMode, final long timeoutMilliseconds) {
- return memoryLock.tryLock(databaseName, timeoutMilliseconds);
+ protected boolean tryLock(final DatabaseLockNameDefinition lockNameDefinition, final long timeoutMilliseconds) {
+ return memoryLock.tryLock(lockNameDefinition.getDatabaseName(), timeoutMilliseconds);
}
@Override
- public void releaseLock(final String databaseName) {
- memoryLock.releaseLock(databaseName);
+ protected void releaseLock(final DatabaseLockNameDefinition lockNameDefinition) {
+ memoryLock.releaseLock(lockNameDefinition.getDatabaseName());
}
@Override
- public boolean isLocked(final String databaseName) {
- return memoryLock.isLocked(databaseName);
+ protected boolean isLocked(final DatabaseLockNameDefinition lockNameDefinition) {
+ return memoryLock.isLocked(lockNameDefinition.getDatabaseName());
}
}
diff --git a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-standalone-mode/shardingsphere-standalone-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/lock/StandaloneLockContext.java b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-standalone-mode/shardingsphere-standalone-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/lock/StandaloneLockContext.java
index 5c336e985c1..0f292fadc9d 100644
--- a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-standalone-mode/shardingsphere-standalone-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/lock/StandaloneLockContext.java
+++ b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-standalone-mode/shardingsphere-standalone-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/lock/StandaloneLockContext.java
@@ -17,14 +17,14 @@
package org.apache.shardingsphere.mode.manager.standalone.lock;
-import org.apache.shardingsphere.infra.lock.LockContext;
-import org.apache.shardingsphere.infra.lock.LockMode;
import org.apache.shardingsphere.infra.lock.ShardingSphereLock;
+import org.apache.shardingsphere.mode.manager.lock.AbstractLockContext;
+import org.apache.shardingsphere.mode.manager.lock.definition.DatabaseLockNameDefinition;
/**
* Standalone lock context.
*/
-public final class StandaloneLockContext implements LockContext {
+public final class StandaloneLockContext extends AbstractLockContext {
private final ShardingSphereLock standaloneLock = new ShardingSphereStandaloneLock();
@@ -34,22 +34,22 @@ public final class StandaloneLockContext implements LockContext {
}
@Override
- public boolean tryLock(final String databaseName, final LockMode lockMode) {
- return standaloneLock.tryLock(databaseName);
+ protected boolean tryLock(final DatabaseLockNameDefinition lockNameDefinition) {
+ return standaloneLock.tryLock(lockNameDefinition.getDatabaseName());
}
@Override
- public boolean tryLock(final String databaseName, final LockMode lockMode, final long timeoutMilliseconds) {
- return standaloneLock.tryLock(databaseName, timeoutMilliseconds);
+ protected boolean tryLock(final DatabaseLockNameDefinition lockNameDefinition, final long timeoutMilliseconds) {
+ return standaloneLock.tryLock(lockNameDefinition.getDatabaseName(), timeoutMilliseconds);
}
@Override
- public void releaseLock(final String databaseName) {
- standaloneLock.releaseLock(databaseName);
+ protected void releaseLock(final DatabaseLockNameDefinition lockNameDefinition) {
+ standaloneLock.releaseLock(lockNameDefinition.getDatabaseName());
}
@Override
- public boolean isLocked(final String databaseName) {
- return standaloneLock.isLocked(databaseName);
+ protected boolean isLocked(final DatabaseLockNameDefinition lockNameDefinition) {
+ return standaloneLock.isLocked(lockNameDefinition.getDatabaseName());
}
}
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/DistSQLBackendHandlerFactory.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/DistSQLBackendHandlerFactory.java
index 3150afccfd7..7e7f5ef64ba 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/DistSQLBackendHandlerFactory.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/DistSQLBackendHandlerFactory.java
@@ -27,6 +27,8 @@ import org.apache.shardingsphere.distsql.parser.statement.ral.scaling.QueryableS
import org.apache.shardingsphere.distsql.parser.statement.ral.scaling.UpdatableScalingRALStatement;
import org.apache.shardingsphere.distsql.parser.statement.rdl.RDLStatement;
import org.apache.shardingsphere.distsql.parser.statement.rql.RQLStatement;
+import org.apache.shardingsphere.infra.lock.LockContext;
+import org.apache.shardingsphere.mode.manager.lock.definition.LockNameDefinitionFactory;
import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
import org.apache.shardingsphere.proxy.backend.exception.DatabaseLockedException;
import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
@@ -75,7 +77,8 @@ public final class DistSQLBackendHandlerFactory {
if (null == databaseName) {
return;
}
- if (ProxyContext.getInstance().getContextManager().getInstanceContext().getLockContext().isLocked(databaseName)) {
+ LockContext lockContext = ProxyContext.getInstance().getContextManager().getInstanceContext().getLockContext();
+ if (lockContext.isLocked(LockNameDefinitionFactory.newDatabaseDefinition(databaseName))) {
throw new DatabaseLockedException(databaseName);
}
}