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 <jacky7...@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); } }