This is an automated email from the ASF dual-hosted git repository.
zhonghongsheng 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 5888408 Optimize lock context (#16360)
5888408 is described below
commit 588840832925d4e90c825c536e8573886f362871
Author: gin <[email protected]>
AuthorDate: Fri Mar 25 13:18:51 2022 +0800
Optimize lock context (#16360)
* Remove create schema lock
* Fix job API
* Fix get schema lock in job API
---
.../pipeline/core/api/impl/RuleAlteredJobAPIImpl.java | 2 +-
.../apache/shardingsphere/mode/lock/LockContext.java | 8 --------
.../future/lock/DistributeLockContext.java | 19 +++++++++----------
.../lock/ShardingSphereDistributeGlobalLock.java | 11 ++++-------
.../mode/manager/memory/lock/MemoryLockContext.java | 5 -----
.../standalone/lock/StandaloneLockContext.java | 5 -----
6 files changed, 14 insertions(+), 36 deletions(-)
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 4cc8948..4e75f5f 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
@@ -168,7 +168,7 @@ public final class RuleAlteredJobAPIImpl extends
AbstractPipelineJobAPIImpl impl
@Override
public void stopClusterWriteDB(final String schemaName, final String
jobId) {
LockContext lockContext =
PipelineContext.getContextManager().getLockContext();
- ShardingSphereLock lock =
lockContext.getSchemaLock(schemaName).orElse(lockContext.createSchemaLock(schemaName).orElse(null));
+ ShardingSphereLock lock =
lockContext.getSchemaLock(schemaName).orElse(null);
if (null == lock) {
log.info("stopClusterWriteDB, lock is null");
throw new RuntimeException("Stop source writing failed");
diff --git
a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/lock/LockContext.java
b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/lock/LockContext.java
index 2bef3d0..b6d2bb6 100644
---
a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/lock/LockContext.java
+++
b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/lock/LockContext.java
@@ -27,14 +27,6 @@ import java.util.Optional;
public interface LockContext {
/**
- * Create schema lock.
- *
- * @param schemaName schema name
- * @return schema lock
- */
- Optional<ShardingSphereLock> createSchemaLock(String schemaName);
-
- /**
* Get schema lock.
*
* @param schemaName schema name
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/future/lock/DistributeLockContext.java
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/future/lock/DistributeLockContext.java
index 4160794..2084b81 100644
---
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/future/lock/DistributeLockContext.java
+++
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/future/lock/DistributeLockContext.java
@@ -53,19 +53,17 @@ public final class DistributeLockContext implements
LockContext {
}
@Override
- public synchronized Optional<ShardingSphereLock> createSchemaLock(final
String schemaName) {
+ public synchronized Optional<ShardingSphereLock> getSchemaLock(final
String schemaName) {
ShardingSphereGlobalLock result = globalLocks.get(schemaName);
- if (null != result) {
- return Optional.empty();
+ if (null == result) {
+ result = createGlobalLock(schemaName);
+ globalLocks.put(schemaName, result);
}
- result = new ShardingSphereDistributeGlobalLock(instanceContext,
instanceContext.getInstance().getInstanceDefinition().getInstanceId().getId(),
globalLockService);
- globalLocks.put(schemaName, result);
return Optional.of(result);
}
- @Override
- public synchronized Optional<ShardingSphereLock> getSchemaLock(final
String schemaName) {
- return Optional.ofNullable(globalLocks.get(schemaName));
+ private ShardingSphereGlobalLock createGlobalLock(final String schemaName)
{
+ return new ShardingSphereDistributeGlobalLock(instanceContext,
instanceContext.getInstance().getInstanceDefinition().getInstanceId().getId(),
globalLockService);
}
@Override
@@ -111,8 +109,9 @@ public final class DistributeLockContext implements
LockContext {
if (isSameInstanceId(ownerInstanceId)) {
return;
}
- Optional<ShardingSphereLock> globalLock = createSchemaLock(schema);
- globalLock.ifPresent(shardingSphereLock -> ((ShardingSphereGlobalLock)
shardingSphereLock).ackLock(schema, getCurrentInstanceId()));
+ ShardingSphereGlobalLock globalLock = createGlobalLock(schema);
+ globalLocks.put(schema, globalLock);
+ globalLock.ackLock(schema, getCurrentInstanceId());
}
/**
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/future/lock/ShardingSphereDistributeGlobalLock.java
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/future/lock/ShardingSphereDistributeGlobalLock.java
index f62b4d5..0af3793 100644
---
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/future/lock/ShardingSphereDistributeGlobalLock.java
+++
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/future/lock/ShardingSphereDistributeGlobalLock.java
@@ -73,21 +73,18 @@ public final class ShardingSphereDistributeGlobalLock
implements ShardingSphereG
@Override
public boolean tryLock(final String lockName) {
- if (LockState.LOCKED == synchronizedLockState.get()) {
- return true;
- }
return innerTryLock(lockName, DEFAULT_REGISTRY_TIMEOUT_MILLISECONDS);
}
@Override
public boolean tryLock(final String lockName, final long timeout) {
- if (LockState.LOCKED == synchronizedLockState.get()) {
- return true;
- }
return innerTryLock(lockName, timeout);
}
private boolean innerTryLock(final String lockName, final long timeout) {
+ if (LockState.LOCKED == synchronizedLockState.get()) {
+ return false;
+ }
long count = 0;
do {
if
(lockService.tryLock(GlobalLockNode.generateSchemaLockName(lockName,
ownerInstanceId))) {
@@ -139,7 +136,7 @@ public final class ShardingSphereDistributeGlobalLock
implements ShardingSphereG
@Override
public boolean isLocked(final String lockName) {
- return LockState.UNLOCKED == synchronizedLockState.get();
+ return LockState.LOCKED == synchronizedLockState.get();
}
private boolean isAckCompleted() {
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 f0a370b..1d56593 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
@@ -28,11 +28,6 @@ import java.util.Optional;
public class MemoryLockContext implements LockContext {
@Override
- public Optional<ShardingSphereLock> createSchemaLock(final String
schemaName) {
- return Optional.empty();
- }
-
- @Override
public Optional<ShardingSphereLock> getSchemaLock(final String schemaName)
{
return Optional.empty();
}
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 3adc4e0..0af6f8a 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
@@ -28,11 +28,6 @@ import java.util.Optional;
public final class StandaloneLockContext implements LockContext {
@Override
- public Optional<ShardingSphereLock> createSchemaLock(final String
schemaName) {
- return Optional.empty();
- }
-
- @Override
public Optional<ShardingSphereLock> getSchemaLock(final String schemaName)
{
return Optional.empty();
}