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();
     }

Reply via email to