This is an automated email from the ASF dual-hosted git repository.
menghaoran pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git
The following commit(s) were added to refs/heads/master by this push:
new 11e1c25ed27 Optimize lock name definition (#19052)
11e1c25ed27 is described below
commit 11e1c25ed2700e733cf72fa14eee6efd10686684
Author: gin <[email protected]>
AuthorDate: Tue Jul 12 16:23:15 2022 +0800
Optimize lock name definition (#19052)
* Optimize lock definition remove lock level
* Optimize lock state context
* Simplify abstract lock context
* Optimize arg naming
* Fix CI
---
.../shardingsphere/infra/lock/LockContext.java | 16 +++---
.../lock/{LockLevel.java => LockDefinition.java} | 18 +++++-
.../infra/lock/LockNameDefinition.java | 12 ++--
.../core/api/impl/RuleAlteredJobAPIImpl.java | 16 +++---
.../mode/manager/lock/AbstractLockContext.java | 67 ++++++++--------------
.../lock/ShardingSphereLockJudgeEngine.java | 4 +-
...Definition.java => DatabaseLockDefinition.java} | 9 +--
.../definition/DatabaseLockNameDefinition.java | 13 ++---
...tionFactory.java => LockDefinitionFactory.java} | 15 +++--
.../coordinator/lock/DistributedLockContext.java | 18 +++---
.../ShardingSphereDistributedDatabaseLock.java | 19 +++---
.../event/DatabaseAckLockReleasedEvent.java | 5 +-
.../database/event/DatabaseAckLockedEvent.java | 5 +-
.../database/event/DatabaseLockReleasedEvent.java | 7 ++-
.../lock/database/event/DatabaseLockedEvent.java | 7 ++-
.../ShardingSphereDistributedLockManager.java | 38 ++++++------
.../lock/manager/ShardingSphereLockManager.java | 20 +++----
.../lock/manager/state/LockStateContext.java | 15 ++---
.../state/ShardingSphereLockStateContext.java | 30 ++++++----
.../lock/DistributedLockContextTest.java | 6 +-
.../watcher/DatabaseLockChangedWatcherTest.java | 8 +--
...dingSphereDistributedGlobalLockManagerTest.java | 15 +++--
.../manager/memory/lock/MemoryLockContext.java | 18 +++---
.../standalone/lock/StandaloneLockContext.java | 18 +++---
.../communication/DatabaseCommunicationEngine.java | 4 +-
...va => UnsupportedUpdateOperationException.java} | 6 +-
.../text/distsql/DistSQLBackendHandlerFactory.java | 8 +--
.../frontend/mysql/err/MySQLErrPacketFactory.java | 6 +-
.../postgresql/err/PostgreSQLErrPacketFactory.java | 6 +-
29 files changed, 224 insertions(+), 205 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 5184e7edcd5..c9f330b67bd 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
@@ -43,32 +43,32 @@ public interface LockContext {
/**
* Try lock.
*
- * @param lockNameDefinition lock name definition
+ * @param lockDefinition lock definition
* @return is locked or not
*/
- boolean tryLock(LockNameDefinition lockNameDefinition);
+ boolean tryLock(LockDefinition lockDefinition);
/**
* Try Lock.
*
- * @param lockNameDefinition lock name definition
+ * @param lockDefinition lock definition
* @param timeoutMilliseconds timeout milliseconds
* @return is locked or not
*/
- boolean tryLock(LockNameDefinition lockNameDefinition, long
timeoutMilliseconds);
+ boolean tryLock(LockDefinition lockDefinition, long timeoutMilliseconds);
/**
* Release lock.
*
- * @param lockNameDefinition lock name definition
+ * @param lockDefinition lock definition
*/
- void releaseLock(LockNameDefinition lockNameDefinition);
+ void releaseLock(LockDefinition lockDefinition);
/**
* Is locked.
*
- * @param lockNameDefinition lock name definition
+ * @param lockDefinition lock definition
* @return is locked or not
*/
- boolean isLocked(LockNameDefinition lockNameDefinition);
+ boolean isLocked(LockDefinition lockDefinition);
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/lock/LockLevel.java
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/lock/LockDefinition.java
similarity index 74%
rename from
shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/lock/LockLevel.java
rename to
shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/lock/LockDefinition.java
index 47eba392212..edd26835d19 100644
---
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/lock/LockLevel.java
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/lock/LockDefinition.java
@@ -18,9 +18,21 @@
package org.apache.shardingsphere.infra.lock;
/**
- * Lock level.
+ * Lock definition.
*/
-public enum LockLevel {
+public interface LockDefinition {
- DATABASE, SCHEMA, TABLE
+ /**
+ * Get lock mode.
+ *
+ * @return lock mode
+ */
+ LockMode getLockMode();
+
+ /**
+ * Get lock name definition.
+ *
+ * @return lock name definition
+ */
+ LockNameDefinition getLockNameDefinition();
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/lock/LockNameDefinition.java
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/lock/LockNameDefinition.java
index f06210fbeb6..86039d559f5 100644
---
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/lock/LockNameDefinition.java
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/lock/LockNameDefinition.java
@@ -23,16 +23,16 @@ package org.apache.shardingsphere.infra.lock;
public interface LockNameDefinition {
/**
- * Get lock mode.
+ * Get lock name.
*
- * @return lock mode
+ * @return lock name
*/
- LockMode getLockMode();
+ String getLockName();
/**
- * Get lock level.
+ * Get database name.
*
- * @return lock level
+ * @return database name
*/
- LockLevel getLockLevel();
+ String getDatabaseName();
}
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 66971f402a5..12bce83b1df 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
@@ -47,10 +47,10 @@ import
org.apache.shardingsphere.elasticjob.infra.pojo.JobConfigurationPOJO;
import org.apache.shardingsphere.elasticjob.lite.lifecycle.domain.JobBriefInfo;
import org.apache.shardingsphere.infra.config.mode.ModeConfiguration;
import org.apache.shardingsphere.infra.lock.LockContext;
-import org.apache.shardingsphere.infra.lock.LockNameDefinition;
+import org.apache.shardingsphere.infra.lock.LockDefinition;
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.mode.manager.lock.definition.LockDefinitionFactory;
import
org.apache.shardingsphere.scaling.core.job.environment.ScalingEnvironmentManager;
import java.sql.SQLException;
@@ -178,12 +178,12 @@ public final class RuleAlteredJobAPIImpl extends
AbstractPipelineJobAPIImpl impl
public void stopClusterWriteDB(final RuleAlteredJobConfiguration
jobConfig) {
String databaseName = jobConfig.getDatabaseName();
LockContext lockContext =
PipelineContext.getContextManager().getInstanceContext().getLockContext();
- LockNameDefinition lockNameDefinition =
LockNameDefinitionFactory.newDatabaseDefinition(databaseName);
- if (lockContext.isLocked(lockNameDefinition)) {
+ LockDefinition lockDefinition =
LockDefinitionFactory.newDatabaseLockDefinition(databaseName);
+ if (lockContext.isLocked(lockDefinition)) {
log.info("stopClusterWriteDB, already stopped");
return;
}
- if (lockContext.tryLock(lockNameDefinition)) {
+ if (lockContext.tryLock(lockDefinition)) {
log.info("stopClusterWriteDB, tryLockSuccess=true");
return;
}
@@ -204,10 +204,10 @@ public final class RuleAlteredJobAPIImpl extends
AbstractPipelineJobAPIImpl impl
public void restoreClusterWriteDB(final RuleAlteredJobConfiguration
jobConfig) {
String databaseName = jobConfig.getDatabaseName();
LockContext lockContext =
PipelineContext.getContextManager().getInstanceContext().getLockContext();
- LockNameDefinition lockNameDefinition =
LockNameDefinitionFactory.newDatabaseDefinition(databaseName);
- if (lockContext.isLocked(lockNameDefinition)) {
+ LockDefinition lockDefinition =
LockDefinitionFactory.newDatabaseLockDefinition(databaseName);
+ if (lockContext.isLocked(lockDefinition)) {
log.info("restoreClusterWriteDB, before releaseLock,
databaseName={}, jobId={}", databaseName, jobConfig.getJobId());
- lockContext.releaseLock(lockNameDefinition);
+ lockContext.releaseLock(lockDefinition);
return;
}
log.info("restoreClusterWriteDB, isLocked false, databaseName={}",
databaseName);
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
index 2fe250f9aee..84039765253 100644
---
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
@@ -18,9 +18,8 @@
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;
+import org.apache.shardingsphere.infra.lock.LockDefinition;
+import
org.apache.shardingsphere.mode.manager.lock.definition.DatabaseLockDefinition;
/**
* Abstract lock context.
@@ -28,63 +27,43 @@ import
org.apache.shardingsphere.mode.manager.lock.definition.DatabaseLockNameDe
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();
+ public boolean tryLock(final LockDefinition lockDefinition) {
+ if (lockDefinition instanceof DatabaseLockDefinition) {
+ return tryLock((DatabaseLockDefinition) lockDefinition);
}
+ throw new UnsupportedOperationException();
}
- protected abstract boolean tryLock(DatabaseLockNameDefinition
lockNameDefinition);
+ protected abstract boolean tryLock(DatabaseLockDefinition lockDefinition);
@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();
+ public boolean tryLock(final LockDefinition lockDefinition, final long
timeoutMilliseconds) {
+ if (lockDefinition instanceof DatabaseLockDefinition) {
+ return tryLock((DatabaseLockDefinition) lockDefinition,
timeoutMilliseconds);
}
+ throw new UnsupportedOperationException();
}
- protected abstract boolean tryLock(DatabaseLockNameDefinition
lockNameDefinition, long timeoutMilliseconds);
+ protected abstract boolean tryLock(DatabaseLockDefinition lockDefinition,
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();
+ public void releaseLock(final LockDefinition lockDefinition) {
+ if (lockDefinition instanceof DatabaseLockDefinition) {
+ releaseLock((DatabaseLockDefinition) lockDefinition);
+ return;
}
+ throw new UnsupportedOperationException();
}
- protected abstract void releaseLock(DatabaseLockNameDefinition
lockNameDefinition);
+ protected abstract void releaseLock(DatabaseLockDefinition lockDefinition);
@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();
+ public boolean isLocked(final LockDefinition lockDefinition) {
+ if (lockDefinition instanceof DatabaseLockDefinition) {
+ return isLocked((DatabaseLockDefinition) lockDefinition);
}
+ throw new UnsupportedOperationException();
}
- protected abstract boolean isLocked(DatabaseLockNameDefinition
lockNameDefinition);
+ protected abstract boolean isLocked(DatabaseLockDefinition lockDefinition);
}
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 23d1321955d..235af9c82a2 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,7 +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;
+import
org.apache.shardingsphere.mode.manager.lock.definition.LockDefinitionFactory;
/**
* Lock judge engine for ShardingSphere.
@@ -37,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(LockNameDefinitionFactory.newDatabaseDefinition(databaseName));
+ return
getLockContext().isLocked(LockDefinitionFactory.newDatabaseLockDefinition(databaseName));
}
return false;
}
diff --git
a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/lock/definition/DatabaseLockNameDefinition.java
b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/lock/definition/DatabaseLockDefinition.java
similarity index 79%
copy from
shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/lock/definition/DatabaseLockNameDefinition.java
copy to
shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/lock/definition/DatabaseLockDefinition.java
index 3e446f34ab3..deed8bfac69 100644
---
a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/lock/definition/DatabaseLockNameDefinition.java
+++
b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/lock/definition/DatabaseLockDefinition.java
@@ -19,20 +19,17 @@ 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;
+import org.apache.shardingsphere.infra.lock.LockDefinition;
/**
* Database lock name definition.
*/
@RequiredArgsConstructor
@Getter
-public final class DatabaseLockNameDefinition implements LockNameDefinition {
-
- private final String databaseName;
+public final class DatabaseLockDefinition implements LockDefinition {
private final LockMode lockMode;
- private final LockLevel lockLevel;
+ private final DatabaseLockNameDefinition lockNameDefinition;
}
diff --git
a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/lock/definition/DatabaseLockNameDefinition.java
b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/lock/definition/DatabaseLockNameDefinition.java
index 3e446f34ab3..921eb7f9462 100644
---
a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/lock/definition/DatabaseLockNameDefinition.java
+++
b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/lock/definition/DatabaseLockNameDefinition.java
@@ -18,21 +18,20 @@
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;
/**
* Database lock name definition.
*/
-@RequiredArgsConstructor
@Getter
public final class DatabaseLockNameDefinition implements LockNameDefinition {
- private final String databaseName;
+ private final String lockName;
- private final LockMode lockMode;
+ private final String databaseName;
- private final LockLevel lockLevel;
+ public DatabaseLockNameDefinition(final String databaseName) {
+ lockName = databaseName;
+ this.databaseName = databaseName;
+ }
}
diff --git
a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/lock/definition/LockNameDefinitionFactory.java
b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/lock/definition/LockDefinitionFactory.java
similarity index 72%
rename from
shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/lock/definition/LockNameDefinitionFactory.java
rename to
shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/lock/definition/LockDefinitionFactory.java
index b3f0d931762..38a4df328ea 100644
---
a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/lock/definition/LockNameDefinitionFactory.java
+++
b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/lock/definition/LockDefinitionFactory.java
@@ -19,23 +19,22 @@ package
org.apache.shardingsphere.mode.manager.lock.definition;
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;
+import org.apache.shardingsphere.infra.lock.LockDefinition;
/**
- * Lock name definition factory.
+ * Lock definition factory.
*/
@NoArgsConstructor(access = AccessLevel.PRIVATE)
-public final class LockNameDefinitionFactory {
+public final class LockDefinitionFactory {
/**
- * New database definition.
+ * New database lock definition.
*
* @param databaseName database name
- * @return database lock name definition
+ * @return database lock definition
*/
- public static LockNameDefinition newDatabaseDefinition(final String
databaseName) {
- return new DatabaseLockNameDefinition(databaseName, LockMode.READ,
LockLevel.DATABASE);
+ public static LockDefinition newDatabaseLockDefinition(final String
databaseName) {
+ return new DatabaseLockDefinition(LockMode.READ, new
DatabaseLockNameDefinition(databaseName));
}
}
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 10add65e07e..f7ed155258b 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
@@ -25,7 +25,7 @@ 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.manager.internal.ShardingSphereInternalLockHolder;
import org.apache.shardingsphere.mode.manager.lock.AbstractLockContext;
-import
org.apache.shardingsphere.mode.manager.lock.definition.DatabaseLockNameDefinition;
+import
org.apache.shardingsphere.mode.manager.lock.definition.DatabaseLockDefinition;
import
org.apache.shardingsphere.mode.repository.cluster.ClusterPersistRepository;
import org.apache.shardingsphere.spi.ShardingSphereServiceLoader;
import org.apache.shardingsphere.spi.type.required.RequiredSPIRegistry;
@@ -60,22 +60,22 @@ public final class DistributedLockContext extends
AbstractLockContext {
}
@Override
- protected boolean tryLock(final DatabaseLockNameDefinition
lockNameDefinition) {
- return lockManager.tryLock(lockNameDefinition);
+ protected boolean tryLock(final DatabaseLockDefinition lockDefinition) {
+ return lockManager.tryLock(lockDefinition);
}
@Override
- protected boolean tryLock(final DatabaseLockNameDefinition
lockNameDefinition, final long timeoutMilliseconds) {
- return lockManager.tryLock(lockNameDefinition, timeoutMilliseconds);
+ protected boolean tryLock(final DatabaseLockDefinition lockDefinition,
final long timeoutMilliseconds) {
+ return lockManager.tryLock(lockDefinition, timeoutMilliseconds);
}
@Override
- protected void releaseLock(final DatabaseLockNameDefinition
lockNameDefinition) {
- lockManager.releaseLock(lockNameDefinition);
+ protected void releaseLock(final DatabaseLockDefinition lockDefinition) {
+ lockManager.releaseLock(lockDefinition);
}
@Override
- protected boolean isLocked(final DatabaseLockNameDefinition
lockNameDefinition) {
- return lockManager.isLocked(lockNameDefinition);
+ protected boolean isLocked(final DatabaseLockDefinition lockDefinition) {
+ return lockManager.isLocked(lockDefinition);
}
}
diff --git
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/database/ShardingSphereDistributedDatabaseLock.java
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/database/ShardingSphereDistributedDatabaseLock.java
index 84e87761f83..d5f310568e5 100644
---
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/database/ShardingSphereDistributedDatabaseLock.java
+++
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/database/ShardingSphereDistributedDatabaseLock.java
@@ -31,6 +31,7 @@ import
org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.manager.s
import
org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.service.LockNodeServiceFactory;
import
org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.util.LockNodeType;
import
org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.util.TimeoutMilliseconds;
+import
org.apache.shardingsphere.mode.manager.lock.definition.DatabaseLockNameDefinition;
import java.util.Optional;
@@ -64,7 +65,7 @@ public final class ShardingSphereDistributedDatabaseLock
implements ShardingSphe
private boolean innerTryLock(final String lockName, final long
timeoutMillis) {
if
(lockHolder.getOrCreateInterMutexLock(lockNodeService.generateLocksName(lockName)).tryLock(timeoutMillis))
{
- lockStateContext.register(lockName);
+ lockStateContext.register(new
DatabaseLockNameDefinition(lockName));
return true;
}
return false;
@@ -79,13 +80,13 @@ public final class ShardingSphereDistributedDatabaseLock
implements ShardingSphe
Optional<ExclusiveInternalLock> interMutexLock =
getInterMutexLock(lockName);
if (interMutexLock.isPresent()) {
interMutexLock.get().unlock();
- lockStateContext.unregister(lockName);
+ lockStateContext.unregister(new
DatabaseLockNameDefinition(lockName));
}
}
@Override
public boolean isLocked(final String lockName) {
- return
getInterMutexLock(lockName).map(ExclusiveInternalLock::isLocked).orElse(false);
+ return lockStateContext.isLocked(new
DatabaseLockNameDefinition(lockName));
}
/**
@@ -95,11 +96,11 @@ public final class ShardingSphereDistributedDatabaseLock
implements ShardingSphe
*/
@Subscribe
public synchronized void locked(final DatabaseLockedEvent event) {
- String database = event.getDatabase();
+ String database = event.getLockNameDefinition().getDatabaseName();
String lockedInstanceId = lockHolder.getCurrentInstanceId();
ExclusiveInternalLock exclusiveLock =
lockHolder.getOrCreateInterMutexLock(lockNodeService.generateLocksName(database));
exclusiveLock.ackLock(lockNodeService.generateAckLockName(database,
lockedInstanceId), lockedInstanceId);
- lockStateContext.register(database);
+ lockStateContext.register(event.getLockNameDefinition());
}
/**
@@ -109,12 +110,12 @@ public final class ShardingSphereDistributedDatabaseLock
implements ShardingSphe
*/
@Subscribe
public synchronized void lockReleased(final DatabaseLockReleasedEvent
event) {
- String database = event.getDatabase();
+ String database = event.getLockNameDefinition().getDatabaseName();
String lockedInstanceId = lockHolder.getCurrentInstanceId();
Optional<ExclusiveInternalLock> interMutexLock =
getInterMutexLock(database);
if (interMutexLock.isPresent()) {
interMutexLock.get().releaseAckLock(lockNodeService.generateAckLockName(database,
lockedInstanceId), lockedInstanceId);
- lockStateContext.unregister(database);
+ lockStateContext.unregister(event.getLockNameDefinition());
}
}
@@ -125,7 +126,7 @@ public final class ShardingSphereDistributedDatabaseLock
implements ShardingSphe
*/
@Subscribe
public synchronized void ackLocked(final DatabaseAckLockedEvent event) {
- getInterMutexLock(event.getDatabase()).ifPresent(mutexLock ->
mutexLock.addLockedInstance(event.getLockedInstance()));
+
getInterMutexLock(event.getLockNameDefinition().getDatabaseName()).ifPresent(mutexLock
-> mutexLock.addLockedInstance(event.getLockedInstance()));
}
/**
@@ -135,6 +136,6 @@ public final class ShardingSphereDistributedDatabaseLock
implements ShardingSphe
*/
@Subscribe
public synchronized void ackLockReleased(final
DatabaseAckLockReleasedEvent event) {
- getInterMutexLock(event.getDatabase()).ifPresent(mutexLock ->
mutexLock.removeLockedInstance(event.getLockedInstance()));
+
getInterMutexLock(event.getLockNameDefinition().getDatabaseName()).ifPresent(mutexLock
-> mutexLock.removeLockedInstance(event.getLockedInstance()));
}
}
diff --git
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/database/event/DatabaseAckLockReleasedEvent.java
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/database/event/DatabaseAckLockReleasedEvent.java
index 96579a0f67d..480f0618eeb 100644
---
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/database/event/DatabaseAckLockReleasedEvent.java
+++
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/database/event/DatabaseAckLockReleasedEvent.java
@@ -20,6 +20,7 @@ package
org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.database
import lombok.Getter;
import
org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.util.LockNodeUtil;
import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.GovernanceEvent;
+import
org.apache.shardingsphere.mode.manager.lock.definition.DatabaseLockNameDefinition;
/**
* Database ack released Lock event.
@@ -27,13 +28,13 @@ import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.Gover
@Getter
public final class DatabaseAckLockReleasedEvent implements GovernanceEvent {
- private final String database;
+ private final DatabaseLockNameDefinition lockNameDefinition;
private final String lockedInstance;
public DatabaseAckLockReleasedEvent(final String ackLockedName) {
String[] databaseInstance =
LockNodeUtil.parseAckLockName(ackLockedName);
- this.database = databaseInstance[0];
+ lockNameDefinition = new
DatabaseLockNameDefinition(databaseInstance[0]);
this.lockedInstance = databaseInstance[1];
}
}
diff --git
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/database/event/DatabaseAckLockedEvent.java
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/database/event/DatabaseAckLockedEvent.java
index ed7b97eb0f0..e5c8524b92f 100644
---
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/database/event/DatabaseAckLockedEvent.java
+++
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/database/event/DatabaseAckLockedEvent.java
@@ -20,6 +20,7 @@ package
org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.database
import lombok.Getter;
import
org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.util.LockNodeUtil;
import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.GovernanceEvent;
+import
org.apache.shardingsphere.mode.manager.lock.definition.DatabaseLockNameDefinition;
/**
* Database ack locked event.
@@ -27,13 +28,13 @@ import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.Gover
@Getter
public final class DatabaseAckLockedEvent implements GovernanceEvent {
- private final String database;
+ private final DatabaseLockNameDefinition lockNameDefinition;
private final String lockedInstance;
public DatabaseAckLockedEvent(final String ackLockedName) {
String[] databaseInstance =
LockNodeUtil.parseAckLockName(ackLockedName);
- this.database = databaseInstance[0];
+ lockNameDefinition = new
DatabaseLockNameDefinition(databaseInstance[0]);
this.lockedInstance = databaseInstance[1];
}
}
diff --git
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/database/event/DatabaseLockReleasedEvent.java
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/database/event/DatabaseLockReleasedEvent.java
index 88d0b045f6f..f60e49a7e4b 100644
---
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/database/event/DatabaseLockReleasedEvent.java
+++
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/database/event/DatabaseLockReleasedEvent.java
@@ -20,6 +20,7 @@ package
org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.database
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.GovernanceEvent;
+import
org.apache.shardingsphere.mode.manager.lock.definition.DatabaseLockNameDefinition;
/**
* Database lock released event.
@@ -28,5 +29,9 @@ import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.Gover
@Getter
public final class DatabaseLockReleasedEvent implements GovernanceEvent {
- private final String database;
+ private final DatabaseLockNameDefinition lockNameDefinition;
+
+ public DatabaseLockReleasedEvent(final String lockedName) {
+ this.lockNameDefinition = new DatabaseLockNameDefinition(lockedName);
+ }
}
diff --git
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/database/event/DatabaseLockedEvent.java
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/database/event/DatabaseLockedEvent.java
index 4c6171a0f8d..dd75beb73bd 100644
---
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/database/event/DatabaseLockedEvent.java
+++
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/database/event/DatabaseLockedEvent.java
@@ -20,6 +20,7 @@ package
org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.database
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.GovernanceEvent;
+import
org.apache.shardingsphere.mode.manager.lock.definition.DatabaseLockNameDefinition;
/**
* Database locked event.
@@ -28,5 +29,9 @@ import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.Gover
@Getter
public final class DatabaseLockedEvent implements GovernanceEvent {
- private final String database;
+ private final DatabaseLockNameDefinition lockNameDefinition;
+
+ public DatabaseLockedEvent(final String lockedName) {
+ this.lockNameDefinition = new DatabaseLockNameDefinition(lockedName);
+ }
}
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/ShardingSphereDistributedLockManager.java
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/manager/ShardingSphereDistributedLockManager.java
index 24477f8113b..9f72375aeb0 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/ShardingSphereDistributedLockManager.java
+++
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/manager/ShardingSphereDistributedLockManager.java
@@ -21,14 +21,17 @@ import com.google.common.base.Preconditions;
import lombok.extern.slf4j.Slf4j;
import org.apache.shardingsphere.infra.eventbus.EventBusContext;
import org.apache.shardingsphere.infra.lock.LockMode;
+import org.apache.shardingsphere.infra.lock.LockNameDefinition;
import org.apache.shardingsphere.infra.lock.LockScope;
import org.apache.shardingsphere.infra.lock.ShardingSphereLock;
import
org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.database.ShardingSphereDistributedDatabaseLock;
import
org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.distributed.ShardingSphereDistributedGlobalLock;
import
org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.distributed.ShardingSphereDistributedStandardLock;
+import
org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.manager.state.LockStateContext;
import
org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.manager.state.LockStateContextFactory;
import
org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.manager.internal.ShardingSphereInternalLockHolder;
import
org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.util.TimeoutMilliseconds;
+import
org.apache.shardingsphere.mode.manager.lock.definition.DatabaseLockDefinition;
import
org.apache.shardingsphere.mode.manager.lock.definition.DatabaseLockNameDefinition;
/**
@@ -37,6 +40,8 @@ import
org.apache.shardingsphere.mode.manager.lock.definition.DatabaseLockNameDe
@Slf4j
public final class ShardingSphereDistributedLockManager implements
ShardingSphereLockManager {
+ private LockStateContext lockStateContext;
+
private ShardingSphereLock standardDistributedLock;
private ShardingSphereLock globalDistributedLock;
@@ -45,9 +50,10 @@ public final class ShardingSphereDistributedLockManager
implements ShardingSpher
@Override
public void init(final ShardingSphereInternalLockHolder lockHolder, final
EventBusContext eventBusContext) {
+ lockStateContext = LockStateContextFactory.getLockStateContext();
standardDistributedLock = new
ShardingSphereDistributedStandardLock(lockHolder);
globalDistributedLock = new
ShardingSphereDistributedGlobalLock(lockHolder, eventBusContext);
- databaseLock = new ShardingSphereDistributedDatabaseLock(lockHolder,
LockStateContextFactory.getLockStateContext(), eventBusContext);
+ databaseLock = new ShardingSphereDistributedDatabaseLock(lockHolder,
lockStateContext, eventBusContext);
}
@Override
@@ -63,23 +69,23 @@ public final class ShardingSphereDistributedLockManager
implements ShardingSpher
}
@Override
- public boolean tryLock(final DatabaseLockNameDefinition
lockNameDefinition) {
+ public boolean tryLock(final DatabaseLockDefinition lockNameDefinition) {
Preconditions.checkNotNull(lockNameDefinition, "Try Lock for database
arg lock name definition can not be null.");
return tryLock(lockNameDefinition, TimeoutMilliseconds.MAX_TRY_LOCK);
}
@Override
- public boolean tryLock(final DatabaseLockNameDefinition
lockNameDefinition, final long timeoutMilliseconds) {
- Preconditions.checkNotNull(lockNameDefinition, "Try Lock for database
arg lock name definition can not be null.");
- return innerTryLock(lockNameDefinition.getDatabaseName(),
lockNameDefinition.getLockMode(), timeoutMilliseconds);
+ public boolean tryLock(final DatabaseLockDefinition lockDefinition, final
long timeoutMilliseconds) {
+ Preconditions.checkNotNull(lockDefinition, "Try Lock for database arg
lock definition can not be null.");
+ return innerTryLock(lockDefinition.getLockMode(),
lockDefinition.getLockNameDefinition(), timeoutMilliseconds);
}
- private synchronized boolean innerTryLock(final String databaseName, final
LockMode lockMode, final long timeoutMilliseconds) {
- Preconditions.checkNotNull(databaseName, "Try Lock for database arg
database name can not be null.");
+ private synchronized boolean innerTryLock(final LockMode lockMode, final
DatabaseLockNameDefinition lockNameDefinition, final long timeoutMilliseconds) {
+ Preconditions.checkNotNull(lockNameDefinition, "Try Lock for database
arg database name can not be null.");
Preconditions.checkNotNull(lockMode, "Try Lock for database args lock
mode can not be null.");
switch (lockMode) {
case READ:
- return innerDatabaseTryLock(databaseName, timeoutMilliseconds);
+ return
innerDatabaseTryLock(lockNameDefinition.getDatabaseName(), timeoutMilliseconds);
case WRITE:
default:
throw new UnsupportedOperationException();
@@ -96,18 +102,18 @@ public final class ShardingSphereDistributedLockManager
implements ShardingSpher
}
@Override
- public void releaseLock(final DatabaseLockNameDefinition
lockNameDefinition) {
- Preconditions.checkNotNull(lockNameDefinition, "Try Lock for database
arg lock name definition can not be null.");
- String databaseName = lockNameDefinition.getDatabaseName();
+ public void releaseLock(final DatabaseLockDefinition lockDefinition) {
+ Preconditions.checkNotNull(lockDefinition, "Try Lock for database arg
lock definition can not be null.");
+ String databaseName =
lockDefinition.getLockNameDefinition().getDatabaseName();
Preconditions.checkNotNull(databaseName, "Release lock write args
database name can not be null.");
databaseLock.releaseLock(databaseName);
}
@Override
- public boolean isLocked(final DatabaseLockNameDefinition
lockNameDefinition) {
- Preconditions.checkNotNull(lockNameDefinition, "Try Lock for database
arg lock name definition can not be null.");
- String databaseName = lockNameDefinition.getDatabaseName();
- Preconditions.checkNotNull(databaseName, "Is locked database args
database name can not be null.");
- return databaseLock.isLocked(databaseName);
+ public boolean isLocked(final DatabaseLockDefinition lockDefinition) {
+ Preconditions.checkNotNull(lockDefinition, "Try Lock for database arg
lock definition can not be null.");
+ LockNameDefinition lockNameDefinition =
lockDefinition.getLockNameDefinition();
+ Preconditions.checkNotNull(lockNameDefinition, "Is locked database
args lock name definition can not be null.");
+ return lockStateContext.isLocked(lockNameDefinition);
}
}
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 db9106930e4..cc52ac4a73a 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
@@ -21,7 +21,7 @@ import
org.apache.shardingsphere.infra.eventbus.EventBusContext;
import org.apache.shardingsphere.infra.lock.LockScope;
import org.apache.shardingsphere.infra.lock.ShardingSphereLock;
import
org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.manager.internal.ShardingSphereInternalLockHolder;
-import
org.apache.shardingsphere.mode.manager.lock.definition.DatabaseLockNameDefinition;
+import
org.apache.shardingsphere.mode.manager.lock.definition.DatabaseLockDefinition;
import org.apache.shardingsphere.spi.annotation.SingletonSPI;
import org.apache.shardingsphere.spi.type.required.RequiredSPI;
@@ -50,32 +50,32 @@ public interface ShardingSphereLockManager extends
RequiredSPI {
/**
* Try lock for database.
*
- * @param lockNameDefinition lock name definition
+ * @param lockDefinition lock definition
* @return is locked or not
*/
- boolean tryLock(DatabaseLockNameDefinition lockNameDefinition);
+ boolean tryLock(DatabaseLockDefinition lockDefinition);
/**
- * Try lock write for database.
+ * Try lock for database.
*
- * @param lockNameDefinition lock name definition
+ * @param lockDefinition lock definition
* @param timeoutMilliseconds timeout milliseconds
* @return is locked or not
*/
- boolean tryLock(DatabaseLockNameDefinition lockNameDefinition, long
timeoutMilliseconds);
+ boolean tryLock(DatabaseLockDefinition lockDefinition, long
timeoutMilliseconds);
/**
* Release lock for database.
*
- * @param lockNameDefinition lock name definition
+ * @param lockDefinition lock definition
*/
- void releaseLock(DatabaseLockNameDefinition lockNameDefinition);
+ void releaseLock(DatabaseLockDefinition lockDefinition);
/**
* Is locked database.
*
- * @param lockNameDefinition lock name definition
+ * @param lockDefinition lock definition
* @return is locked or not
*/
- boolean isLocked(DatabaseLockNameDefinition lockNameDefinition);
+ boolean isLocked(DatabaseLockDefinition lockDefinition);
}
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 f45ce603e74..3956b769c14 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,6 +17,7 @@
package
org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.manager.state;
+import org.apache.shardingsphere.infra.lock.LockNameDefinition;
import org.apache.shardingsphere.spi.annotation.SingletonSPI;
import org.apache.shardingsphere.spi.type.required.RequiredSPI;
@@ -29,22 +30,22 @@ public interface LockStateContext extends RequiredSPI {
/**
* Register lock state.
*
- * @param databaseName database name
+ * @param lockName lock name definition
*/
- void register(String databaseName);
+ void register(LockNameDefinition lockName);
/**
- * Un register lock state.
+ * Un-register lock state.
*
- * @param databaseName database name
+ * @param lockName lock name definition
*/
- void unregister(String databaseName);
+ void unregister(LockNameDefinition lockName);
/**
* Is locked.
*
- * @param databaseName database name
+ * @param lockName lock name definition
* @return is locked or not
*/
- boolean isLocked(String databaseName);
+ boolean isLocked(LockNameDefinition lockName);
}
diff --git
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/manager/state/ShardingSphereLockStateContext.java
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/manager/state/ShardingSphereLockStateContext.java
index b6337294570..fb2bd79c7f4 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/ShardingSphereLockStateContext.java
+++
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/manager/state/ShardingSphereLockStateContext.java
@@ -17,10 +17,10 @@
package
org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.manager.state;
+import org.apache.shardingsphere.infra.lock.LockNameDefinition;
+
import java.util.LinkedHashMap;
-import java.util.LinkedHashSet;
import java.util.Map;
-import java.util.Set;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
@@ -34,13 +34,15 @@ public final class ShardingSphereLockStateContext
implements LockStateContext {
private final AtomicInteger lockCounter = new AtomicInteger(0);
- private final Map<String, Set<String>> lockStates = new LinkedHashMap<>();
+ private final Map<String, Boolean> lockStates = new LinkedHashMap<>();
@Override
- public void register(final String databaseName) {
+ public void register(final LockNameDefinition lockName) {
lock.writeLock().lock();
try {
- if (lockStates.computeIfAbsent(databaseName, locks -> new
LinkedHashSet<>()).add("@all")) {
+ Boolean isLocked = lockStates.get(lockName.getLockName());
+ if (null == isLocked || !isLocked) {
+ lockStates.put(lockName.getLockName(), true);
lockCounter.incrementAndGet();
}
} finally {
@@ -49,10 +51,12 @@ public final class ShardingSphereLockStateContext
implements LockStateContext {
}
@Override
- public void unregister(final String databaseName) {
+ public void unregister(final LockNameDefinition lockName) {
lock.writeLock().lock();
try {
- if (lockStates.get(databaseName).remove("@all")) {
+ Boolean isLocked = lockStates.get(lockName.getLockName());
+ if (null != isLocked && isLocked) {
+ lockStates.put(lockName.getLockName(), false);
lockCounter.decrementAndGet();
}
} finally {
@@ -61,16 +65,20 @@ public final class ShardingSphereLockStateContext
implements LockStateContext {
}
@Override
- public boolean isLocked(final String databaseName) {
- if (0 == lockCounter.get()) {
+ public boolean isLocked(final LockNameDefinition lockName) {
+ if (isExistLock()) {
return false;
}
lock.readLock().lock();
try {
- Set<String> locks = lockStates.get(databaseName);
- return null != locks && !locks.isEmpty();
+ Boolean isLocked = lockStates.get(lockName.getLockName());
+ return null != isLocked && isLocked;
} finally {
lock.readLock().unlock();
}
}
+
+ private boolean isExistLock() {
+ return 0 == lockCounter.get();
+ }
}
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 25b6b805ccf..2c05ab0c60c 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
@@ -25,7 +25,7 @@ import
org.apache.shardingsphere.infra.instance.metadata.proxy.ProxyInstanceMeta
import org.apache.shardingsphere.infra.instance.workerid.WorkerIdGenerator;
import org.apache.shardingsphere.infra.lock.LockScope;
import org.apache.shardingsphere.infra.lock.ShardingSphereLock;
-import
org.apache.shardingsphere.mode.manager.lock.definition.LockNameDefinitionFactory;
+import
org.apache.shardingsphere.mode.manager.lock.definition.LockDefinitionFactory;
import
org.apache.shardingsphere.mode.repository.cluster.ClusterPersistRepository;
import org.junit.Test;
@@ -60,7 +60,7 @@ public final class DistributedLockContextTest {
ComputeNodeInstance currentInstance = new ComputeNodeInstance(new
ProxyInstanceMetaData("1", 3307));
DistributedLockContext distributedLockContext = new
DistributedLockContext(mock(ClusterPersistRepository.class));
new InstanceContext(currentInstance, mock(WorkerIdGenerator.class),
mock(ModeConfiguration.class), distributedLockContext, eventBusContext);
-
distributedLockContext.releaseLock(LockNameDefinitionFactory.newDatabaseDefinition("database"));
+
distributedLockContext.releaseLock(LockDefinitionFactory.newDatabaseLockDefinition("database"));
}
@Test
@@ -68,6 +68,6 @@ public final class DistributedLockContextTest {
ComputeNodeInstance currentInstance = new ComputeNodeInstance(new
ProxyInstanceMetaData("1", 3307));
DistributedLockContext distributedLockContext = new
DistributedLockContext(mock(ClusterPersistRepository.class));
new InstanceContext(currentInstance, mock(WorkerIdGenerator.class),
mock(ModeConfiguration.class), distributedLockContext, eventBusContext);
-
assertFalse(distributedLockContext.isLocked(LockNameDefinitionFactory.newDatabaseDefinition("database")));
+
assertFalse(distributedLockContext.isLocked(LockDefinitionFactory.newDatabaseLockDefinition("database")));
}
}
diff --git
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/database/watcher/DatabaseLockChangedWatcherTest.java
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/database/watcher/DatabaseLockChangedWatcherTest.java
index 893645226e9..07ace734bd1 100644
---
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/database/watcher/DatabaseLockChangedWatcherTest.java
+++
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/database/watcher/DatabaseLockChangedWatcherTest.java
@@ -62,12 +62,12 @@ public final class DatabaseLockChangedWatcherTest {
Optional<GovernanceEvent> addGovernanceEvent =
watcher.createGovernanceEvent(addDataChangedEvent);
assertTrue(addGovernanceEvent.isPresent());
assertThat(addGovernanceEvent.get(),
instanceOf(DatabaseLockedEvent.class));
- assertThat(((DatabaseLockedEvent)
addGovernanceEvent.get()).getDatabase(), is("sharding_db"));
+ assertThat(((DatabaseLockedEvent)
addGovernanceEvent.get()).getLockNameDefinition().getDatabaseName(),
is("sharding_db"));
DataChangedEvent deleteDataChangedEvent = new
DataChangedEvent(eventKey, "127.0.0.1@3307", DataChangedEvent.Type.DELETED);
Optional<GovernanceEvent> deleteGovernanceEvent =
watcher.createGovernanceEvent(deleteDataChangedEvent);
assertTrue(deleteGovernanceEvent.isPresent());
assertThat(deleteGovernanceEvent.get(),
instanceOf(DatabaseLockReleasedEvent.class));
- assertThat(((DatabaseLockReleasedEvent)
deleteGovernanceEvent.get()).getDatabase(), is("sharding_db"));
+ assertThat(((DatabaseLockReleasedEvent)
deleteGovernanceEvent.get()).getLockNameDefinition().getDatabaseName(),
is("sharding_db"));
DataChangedEvent updateDataChangedEvent = new
DataChangedEvent(eventKey, "127.0.0.1@3307", DataChangedEvent.Type.UPDATED);
Optional<GovernanceEvent> updateGovernanceEvent =
watcher.createGovernanceEvent(updateDataChangedEvent);
assertFalse(updateGovernanceEvent.isPresent());
@@ -83,13 +83,13 @@ public final class DatabaseLockChangedWatcherTest {
Optional<GovernanceEvent> addGovernanceEvent =
watcher.createGovernanceEvent(addDataChangedEvent);
assertTrue(addGovernanceEvent.isPresent());
assertThat(addGovernanceEvent.get(),
instanceOf(DatabaseAckLockedEvent.class));
- assertThat(((DatabaseAckLockedEvent)
addGovernanceEvent.get()).getDatabase(), is("sharding_db"));
+ assertThat(((DatabaseAckLockedEvent)
addGovernanceEvent.get()).getLockNameDefinition().getDatabaseName(),
is("sharding_db"));
assertThat(((DatabaseAckLockedEvent)
addGovernanceEvent.get()).getLockedInstance(), is("127.0.0.1@3307"));
DataChangedEvent deleteDataChangedEvent = new
DataChangedEvent(eventKey, "127.0.0.1@3307", DataChangedEvent.Type.DELETED);
Optional<GovernanceEvent> deleteGovernanceEvent =
watcher.createGovernanceEvent(deleteDataChangedEvent);
assertTrue(deleteGovernanceEvent.isPresent());
assertThat(deleteGovernanceEvent.get(),
instanceOf(DatabaseAckLockReleasedEvent.class));
- assertThat(((DatabaseAckLockReleasedEvent)
deleteGovernanceEvent.get()).getDatabase(), is("sharding_db"));
+ assertThat(((DatabaseAckLockReleasedEvent)
deleteGovernanceEvent.get()).getLockNameDefinition().getDatabaseName(),
is("sharding_db"));
assertThat(((DatabaseAckLockReleasedEvent)
deleteGovernanceEvent.get()).getLockedInstance(), is("127.0.0.1@3307"));
DataChangedEvent updateDataChangedEvent = new
DataChangedEvent(eventKey, "127.0.0.1@3307", DataChangedEvent.Type.UPDATED);
Optional<GovernanceEvent> updateGovernanceEvent =
watcher.createGovernanceEvent(updateDataChangedEvent);
diff --git
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/manager/ShardingSphereDistributedGlobalLockManagerTest.java
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/manager/ShardingSphereDistributedGlobalLockManager
[...]
index e8c5da371fe..7d262938814 100644
---
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/manager/ShardingSphereDistributedGlobalLockManagerTest.java
+++
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/lock/manager/ShardingSphereDistributedGlobalLockManagerTest.java
@@ -17,12 +17,13 @@
package
org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.manager;
-import org.apache.shardingsphere.infra.lock.LockLevel;
import org.apache.shardingsphere.infra.lock.LockMode;
import org.apache.shardingsphere.infra.lock.LockScope;
import
org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.database.ShardingSphereDistributedDatabaseLock;
import
org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.distributed.ShardingSphereDistributedGlobalLock;
+import
org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.manager.state.ShardingSphereLockStateContext;
import
org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.util.TimeoutMilliseconds;
+import
org.apache.shardingsphere.mode.manager.lock.definition.DatabaseLockDefinition;
import
org.apache.shardingsphere.mode.manager.lock.definition.DatabaseLockNameDefinition;
import org.junit.Before;
import org.junit.Test;
@@ -41,6 +42,10 @@ public final class
ShardingSphereDistributedGlobalLockManagerTest {
@Before
public void init() throws ReflectiveOperationException {
+ ShardingSphereLockStateContext lockStateContext = new
ShardingSphereLockStateContext();
+ Field lockStateContextField =
shardingSphereDistributedLockManager.getClass().getDeclaredField("lockStateContext");
+ lockStateContextField.setAccessible(true);
+ lockStateContextField.set(shardingSphereDistributedLockManager,
lockStateContext);
ShardingSphereDistributedGlobalLock distributedLock =
mock(ShardingSphereDistributedGlobalLock.class);
Field distributedLockField =
shardingSphereDistributedLockManager.getClass().getDeclaredField("globalDistributedLock");
distributedLockField.setAccessible(true);
@@ -59,21 +64,21 @@ public final class
ShardingSphereDistributedGlobalLockManagerTest {
@Test
public void assertTryReadLock() {
- assertTrue(shardingSphereDistributedLockManager.tryLock(new
DatabaseLockNameDefinition("databaseName", LockMode.READ, LockLevel.DATABASE),
3000L));
+ assertTrue(shardingSphereDistributedLockManager.tryLock(new
DatabaseLockDefinition(LockMode.READ, new
DatabaseLockNameDefinition("databaseName")), 3000L));
}
@Test(expected = UnsupportedOperationException.class)
public void assertTryWriteLock() {
- shardingSphereDistributedLockManager.tryLock(new
DatabaseLockNameDefinition("databaseName", LockMode.WRITE, LockLevel.DATABASE),
3000L);
+ shardingSphereDistributedLockManager.tryLock(new
DatabaseLockDefinition(LockMode.WRITE, new
DatabaseLockNameDefinition("databaseName")), 3000L);
}
@Test
public void assertReleaseLock() {
- shardingSphereDistributedLockManager.releaseLock(new
DatabaseLockNameDefinition("databaseName", LockMode.READ, LockLevel.DATABASE));
+ shardingSphereDistributedLockManager.releaseLock(new
DatabaseLockDefinition(LockMode.READ, new
DatabaseLockNameDefinition("databaseName")));
}
@Test
public void assertIsLocked() {
- assertFalse(shardingSphereDistributedLockManager.isLocked(new
DatabaseLockNameDefinition("databaseName", LockMode.READ, LockLevel.DATABASE)));
+ assertFalse(shardingSphereDistributedLockManager.isLocked(new
DatabaseLockDefinition(LockMode.READ, new
DatabaseLockNameDefinition("databaseName"))));
}
}
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 632d63eea44..6872e673ba8 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
@@ -20,7 +20,7 @@ package org.apache.shardingsphere.mode.manager.memory.lock;
import org.apache.shardingsphere.infra.lock.LockScope;
import org.apache.shardingsphere.infra.lock.ShardingSphereLock;
import org.apache.shardingsphere.mode.manager.lock.AbstractLockContext;
-import
org.apache.shardingsphere.mode.manager.lock.definition.DatabaseLockNameDefinition;
+import
org.apache.shardingsphere.mode.manager.lock.definition.DatabaseLockDefinition;
/**
* Memory lock context.
@@ -35,22 +35,22 @@ public final class MemoryLockContext extends
AbstractLockContext {
}
@Override
- protected boolean tryLock(final DatabaseLockNameDefinition
lockNameDefinition) {
- return memoryLock.tryLock(lockNameDefinition.getDatabaseName());
+ protected boolean tryLock(final DatabaseLockDefinition lockDefinition) {
+ return
memoryLock.tryLock(lockDefinition.getLockNameDefinition().getDatabaseName());
}
@Override
- protected boolean tryLock(final DatabaseLockNameDefinition
lockNameDefinition, final long timeoutMilliseconds) {
- return memoryLock.tryLock(lockNameDefinition.getDatabaseName(),
timeoutMilliseconds);
+ protected boolean tryLock(final DatabaseLockDefinition lockDefinition,
final long timeoutMilliseconds) {
+ return
memoryLock.tryLock(lockDefinition.getLockNameDefinition().getDatabaseName(),
timeoutMilliseconds);
}
@Override
- protected void releaseLock(final DatabaseLockNameDefinition
lockNameDefinition) {
- memoryLock.releaseLock(lockNameDefinition.getDatabaseName());
+ protected void releaseLock(final DatabaseLockDefinition lockDefinition) {
+
memoryLock.releaseLock(lockDefinition.getLockNameDefinition().getDatabaseName());
}
@Override
- protected boolean isLocked(final DatabaseLockNameDefinition
lockNameDefinition) {
- return memoryLock.isLocked(lockNameDefinition.getDatabaseName());
+ protected boolean isLocked(final DatabaseLockDefinition lockDefinition) {
+ return
memoryLock.isLocked(lockDefinition.getLockNameDefinition().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 a0e0678f82e..3336e66ad6b 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
@@ -20,7 +20,7 @@ package
org.apache.shardingsphere.mode.manager.standalone.lock;
import org.apache.shardingsphere.infra.lock.LockScope;
import org.apache.shardingsphere.infra.lock.ShardingSphereLock;
import org.apache.shardingsphere.mode.manager.lock.AbstractLockContext;
-import
org.apache.shardingsphere.mode.manager.lock.definition.DatabaseLockNameDefinition;
+import
org.apache.shardingsphere.mode.manager.lock.definition.DatabaseLockDefinition;
/**
* Standalone lock context.
@@ -35,22 +35,22 @@ public final class StandaloneLockContext extends
AbstractLockContext {
}
@Override
- protected boolean tryLock(final DatabaseLockNameDefinition
lockNameDefinition) {
- return standaloneLock.tryLock(lockNameDefinition.getDatabaseName());
+ protected boolean tryLock(final DatabaseLockDefinition lockDefinition) {
+ return
standaloneLock.tryLock(lockDefinition.getLockNameDefinition().getDatabaseName());
}
@Override
- protected boolean tryLock(final DatabaseLockNameDefinition
lockNameDefinition, final long timeoutMilliseconds) {
- return standaloneLock.tryLock(lockNameDefinition.getDatabaseName(),
timeoutMilliseconds);
+ protected boolean tryLock(final DatabaseLockDefinition lockDefinition,
final long timeoutMilliseconds) {
+ return
standaloneLock.tryLock(lockDefinition.getLockNameDefinition().getDatabaseName(),
timeoutMilliseconds);
}
@Override
- protected void releaseLock(final DatabaseLockNameDefinition
lockNameDefinition) {
- standaloneLock.releaseLock(lockNameDefinition.getDatabaseName());
+ protected void releaseLock(final DatabaseLockDefinition lockDefinition) {
+
standaloneLock.releaseLock(lockDefinition.getLockNameDefinition().getDatabaseName());
}
@Override
- protected boolean isLocked(final DatabaseLockNameDefinition
lockNameDefinition) {
- return standaloneLock.isLocked(lockNameDefinition.getDatabaseName());
+ protected boolean isLocked(final DatabaseLockDefinition lockDefinition) {
+ return
standaloneLock.isLocked(lockDefinition.getLockNameDefinition().getDatabaseName());
}
}
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/DatabaseCommunicationEngine.java
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/DatabaseCommunicationEngine.java
index 7349d048844..0d2d22723a2 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/DatabaseCommunicationEngine.java
+++
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/DatabaseCommunicationEngine.java
@@ -38,7 +38,7 @@ import
org.apache.shardingsphere.infra.rule.identifier.type.DataNodeContainedRul
import org.apache.shardingsphere.mode.manager.lock.LockJudgeEngine;
import org.apache.shardingsphere.mode.manager.lock.LockJudgeEngineBuilder;
import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
-import
org.apache.shardingsphere.proxy.backend.exception.DatabaseLockedException;
+import
org.apache.shardingsphere.proxy.backend.exception.UnsupportedUpdateOperationException;
import org.apache.shardingsphere.proxy.backend.response.data.QueryResponseCell;
import org.apache.shardingsphere.proxy.backend.response.data.QueryResponseRow;
import
org.apache.shardingsphere.proxy.backend.response.header.query.QueryHeader;
@@ -198,7 +198,7 @@ public abstract class DatabaseCommunicationEngine<T> {
protected void checkLockedDatabase(final ExecutionContext
executionContext) {
if
(lockJudgeEngine.isLocked(backendConnection.getConnectionSession().getDatabaseName(),
executionContext.getSqlStatementContext())) {
- throw new
DatabaseLockedException(backendConnection.getConnectionSession().getDatabaseName());
+ throw new
UnsupportedUpdateOperationException(backendConnection.getConnectionSession().getDatabaseName());
}
}
}
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/exception/DatabaseLockedException.java
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/exception/UnsupportedUpdateOperationException.java
similarity index 85%
rename from
shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/exception/DatabaseLockedException.java
rename to
shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/exception/UnsupportedUpdateOperationException.java
index f9e7c21f5d5..2f49f27550e 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/exception/DatabaseLockedException.java
+++
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/exception/UnsupportedUpdateOperationException.java
@@ -21,11 +21,11 @@ import lombok.Getter;
import lombok.RequiredArgsConstructor;
/**
- * database locked exception.
+ * Unsupported update operation exception.
*/
@RequiredArgsConstructor
@Getter
-public final class DatabaseLockedException extends BackendException {
+public final class UnsupportedUpdateOperationException extends
BackendException {
private static final long serialVersionUID = -5409739222950362541L;
@@ -33,7 +33,7 @@ public final class DatabaseLockedException extends
BackendException {
private final String errorMessage;
- public DatabaseLockedException(final String databaseName) {
+ public UnsupportedUpdateOperationException(final String databaseName) {
this(databaseName, String.format("The database %s is read-only",
databaseName));
}
}
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 096e5afbbf8..3eab778d257 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
@@ -25,9 +25,9 @@ import
org.apache.shardingsphere.distsql.parser.statement.ral.UpdatableRALStatem
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.mode.manager.lock.definition.LockDefinitionFactory;
import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
-import
org.apache.shardingsphere.proxy.backend.exception.DatabaseLockedException;
+import
org.apache.shardingsphere.proxy.backend.exception.UnsupportedUpdateOperationException;
import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
import org.apache.shardingsphere.proxy.backend.text.TextProtocolBackendHandler;
import
org.apache.shardingsphere.proxy.backend.text.distsql.ral.RALBackendHandlerFactory;
@@ -73,8 +73,8 @@ public final class DistSQLBackendHandlerFactory {
return;
}
LockContext lockContext =
ProxyContext.getInstance().getContextManager().getInstanceContext().getLockContext();
- if
(lockContext.isLocked(LockNameDefinitionFactory.newDatabaseDefinition(databaseName)))
{
- throw new DatabaseLockedException(databaseName);
+ if
(lockContext.isLocked(LockDefinitionFactory.newDatabaseLockDefinition(databaseName)))
{
+ throw new UnsupportedUpdateOperationException(databaseName);
}
}
}
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/err/MySQLErrPacketFactory.java
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/err/MySQLErrPacketFactory.java
index c9080eb6efe..1b431f600c9 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/err/MySQLErrPacketFactory.java
+++
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/err/MySQLErrPacketFactory.java
@@ -29,7 +29,7 @@ import
org.apache.shardingsphere.infra.exception.DatabaseNotExistedException;
import org.apache.shardingsphere.proxy.backend.exception.CircuitBreakException;
import
org.apache.shardingsphere.proxy.backend.exception.DBCreateExistsException;
import
org.apache.shardingsphere.proxy.backend.exception.DBDropNotExistsException;
-import
org.apache.shardingsphere.proxy.backend.exception.DatabaseLockedException;
+import
org.apache.shardingsphere.proxy.backend.exception.UnsupportedUpdateOperationException;
import
org.apache.shardingsphere.proxy.backend.exception.NoDatabaseSelectedException;
import
org.apache.shardingsphere.proxy.backend.exception.ResourceNotExistedException;
import
org.apache.shardingsphere.proxy.backend.exception.RuleNotExistedException;
@@ -112,8 +112,8 @@ public final class MySQLErrPacketFactory {
if (cause instanceof RuleNotExistedException || cause instanceof
ResourceNotExistedException) {
return new MySQLErrPacket(1,
MySQLServerErrorCode.ER_SP_DOES_NOT_EXIST);
}
- if (cause instanceof DatabaseLockedException) {
- DatabaseLockedException exception = (DatabaseLockedException)
cause;
+ if (cause instanceof UnsupportedUpdateOperationException) {
+ UnsupportedUpdateOperationException exception =
(UnsupportedUpdateOperationException) cause;
return new MySQLErrPacket(1,
CommonErrorCode.DATABASE_WRITE_LOCKED, exception.getDatabaseName());
}
if (cause instanceof TableLockWaitTimeoutException) {
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/err/PostgreSQLErrPacketFactory.java
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/err/PostgreSQLErrPacketFactory.java
index a31720a3e34..88adb3ce263 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/err/PostgreSQLErrPacketFactory.java
+++
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/err/PostgreSQLErrPacketFactory.java
@@ -25,7 +25,7 @@ import
org.apache.shardingsphere.db.protocol.postgresql.constant.PostgreSQLMessa
import
org.apache.shardingsphere.db.protocol.postgresql.packet.generic.PostgreSQLErrorResponsePacket;
import
org.apache.shardingsphere.proxy.backend.exception.DBCreateExistsException;
import
org.apache.shardingsphere.proxy.backend.exception.InTransactionException;
-import
org.apache.shardingsphere.proxy.backend.exception.DatabaseLockedException;
+import
org.apache.shardingsphere.proxy.backend.exception.UnsupportedUpdateOperationException;
import
org.apache.shardingsphere.proxy.frontend.postgresql.authentication.exception.InvalidAuthorizationSpecificationException;
import
org.apache.shardingsphere.proxy.frontend.postgresql.authentication.exception.PostgreSQLAuthenticationException;
import
org.apache.shardingsphere.proxy.frontend.postgresql.authentication.exception.PostgreSQLProtocolViolationException;
@@ -78,8 +78,8 @@ public final class PostgreSQLErrPacketFactory {
return
PostgreSQLErrorResponsePacket.newBuilder(PostgreSQLMessageSeverityLevel.ERROR,
PostgreSQLErrorCode.DUPLICATE_DATABASE,
String.format(PostgreSQLErrorCode.DUPLICATE_DATABASE.getConditionName(),
((DBCreateExistsException) cause).getDatabaseName())).build();
}
- if (cause instanceof DatabaseLockedException) {
- DatabaseLockedException exception = (DatabaseLockedException)
cause;
+ if (cause instanceof UnsupportedUpdateOperationException) {
+ UnsupportedUpdateOperationException exception =
(UnsupportedUpdateOperationException) cause;
return
PostgreSQLErrorResponsePacket.newBuilder(PostgreSQLMessageSeverityLevel.ERROR,
PostgreSQLErrorCode.MODIFYING_SQL_DATA_NOT_PERMITTED,
exception.getErrorMessage()).build();
}
// TODO PostgreSQL need consider FrontendConnectionLimitException