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 f848c0b  Fix is locked schema NPE (#16523)
f848c0b is described below

commit f848c0b63fc3da641d91273c0602fc8da296844c
Author: gin <[email protected]>
AuthorDate: Thu Mar 31 20:35:40 2022 +0800

    Fix is locked schema NPE (#16523)
---
 .../cluster/coordinator/future/lock/DistributeLockContext.java    | 8 +++++---
 .../future/lock/ShardingSphereDistributeGlobalLock.java           | 7 ++-----
 .../cluster/coordinator/future/lock/service/LockState.java        | 2 +-
 .../mode/manager/memory/lock/MemoryLockContext.java               | 5 +++++
 .../mode/manager/standalone/lock/StandaloneLockContext.java       | 5 +++++
 5 files changed, 18 insertions(+), 9 deletions(-)

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 26a8b0c..eda90d8 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
@@ -17,6 +17,7 @@
 
 package org.apache.shardingsphere.mode.manager.cluster.coordinator.future.lock;
 
+import com.google.common.base.Preconditions;
 import com.google.common.eventbus.Subscribe;
 import org.apache.shardingsphere.infra.eventbus.ShardingSphereEventBus;
 import org.apache.shardingsphere.infra.instance.InstanceContext;
@@ -54,9 +55,7 @@ public final class DistributeLockContext implements 
LockContext {
     
     @Override
     public synchronized ShardingSphereLock getOrCreateSchemaLock(final String 
schemaName) {
-        if (null == schemaName) {
-            throw new IllegalArgumentException("schemaName is null");
-        }
+        Preconditions.checkNotNull(schemaName, "Get or create schema lock args 
schema name can not be null.");
         ShardingSphereGlobalLock result = globalLocks.get(schemaName);
         if (null != result) {
             return result;
@@ -77,6 +76,9 @@ public final class DistributeLockContext implements 
LockContext {
     
     @Override
     public synchronized boolean isLockedSchema(final String schemaName) {
+        if (null == schemaName) {
+            return false;
+        }
         return getGlobalLock(schemaName).map(shardingSphereGlobalLock -> 
shardingSphereGlobalLock.isLocked(schemaName)).orElse(false);
     }
     
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 4545203..70bf17b 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
@@ -41,7 +41,6 @@ public final class ShardingSphereDistributeGlobalLock 
implements ShardingSphereG
     
     private static final long DEFAULT_TRY_LOCK_TIMEOUT_MILLISECONDS = 3 * 60 * 
1000;
     
-    // TODO it's less than CHECK_ACK_INTERVAL_MILLISECONDS, is it OK?
     private static final long DEFAULT_REGISTRY_TIMEOUT_MILLISECONDS = 2 * 100;
     
     private final InstanceContext instanceContext;
@@ -58,7 +57,7 @@ public final class ShardingSphereDistributeGlobalLock 
implements ShardingSphereG
         this.instanceContext = instanceContext;
         this.ownerInstanceId = ownerInstanceId;
         this.lockService = lockService;
-        synchronizedLockState = new 
AtomicReference<>(isOwnerInstanceId(getCurrentInstanceId()) ? 
LockState.INITIALIZATION : LockState.LOCKED);
+        synchronizedLockState = new 
AtomicReference<>(isOwnerInstanceId(getCurrentInstanceId()) ? 
LockState.UNLOCKED : LockState.LOCKED);
         initLockedInstances(instanceContext);
     }
     
@@ -93,7 +92,7 @@ public final class ShardingSphereDistributeGlobalLock 
implements ShardingSphereG
         do {
             if 
(lockService.tryLock(GlobalLockNode.generateSchemaLockName(lockName, 
ownerInstanceId))) {
                 if (isAckOK(timeout - count)) {
-                    boolean result = 
synchronizedLockState.compareAndSet(LockState.INITIALIZATION, LockState.LOCKED);
+                    boolean result = 
synchronizedLockState.compareAndSet(LockState.UNLOCKED, LockState.LOCKED);
                     log.info("innerTryLock, result={}, lockName={}, 
lockState={}, globalLock.hashCode={}", result, lockName, 
synchronizedLockState.get(), hashCode());
                     return result;
                 }
@@ -101,8 +100,6 @@ public final class ShardingSphereDistributeGlobalLock 
implements ShardingSphereG
             sleepInterval();
             count += CHECK_ACK_INTERVAL_MILLISECONDS;
         } while (timeout > count);
-        // TODO if lock state set to UNLOCKED, the next CAS in tryLock might 
be failed
-        synchronizedLockState.compareAndSet(LockState.INITIALIZATION, 
LockState.UNLOCKED);
         log.info("innerTryLock timeout, lockName={}", lockName);
         return false;
     }
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/service/LockState.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/service/LockState.java
index 63470ba..31cddf1 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/service/LockState.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/service/LockState.java
@@ -22,5 +22,5 @@ package 
org.apache.shardingsphere.mode.manager.cluster.coordinator.future.lock.s
  */
 public enum LockState {
     
-    INITIALIZATION, LOCKED, UNLOCKED
+    LOCKED, UNLOCKED
 }
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 0b74956..80f6f6b 100644
--- 
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-memory-mode/shardingsphere-memory-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/memory/lock/MemoryLockContext.java
+++ 
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-memory-mode/shardingsphere-memory-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/memory/lock/MemoryLockContext.java
@@ -17,6 +17,7 @@
 
 package org.apache.shardingsphere.mode.manager.memory.lock;
 
+import com.google.common.base.Preconditions;
 import org.apache.shardingsphere.infra.lock.ShardingSphereLock;
 import org.apache.shardingsphere.mode.lock.LockContext;
 
@@ -34,6 +35,7 @@ public final class MemoryLockContext implements LockContext {
     
     @Override
     public ShardingSphereLock getOrCreateSchemaLock(final String schemaName) {
+        Preconditions.checkNotNull(schemaName, "Get or create schema lock args 
schema name can not be null.");
         ShardingSphereLock result = locks.get(schemaName);
         if (null != result) {
             return result;
@@ -56,6 +58,9 @@ public final class MemoryLockContext implements LockContext {
     
     @Override
     public boolean isLockedSchema(final String schemaName) {
+        if (null == schemaName) {
+            return false;
+        }
         ShardingSphereLock shardingSphereLock = locks.get(schemaName);
         return null != shardingSphereLock && 
shardingSphereLock.isLocked(schemaName);
     }
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 ea7cb1a..0f6212e 100644
--- 
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-standalone-mode/shardingsphere-standalone-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/lock/StandaloneLockContext.java
+++ 
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-standalone-mode/shardingsphere-standalone-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/lock/StandaloneLockContext.java
@@ -17,6 +17,7 @@
 
 package org.apache.shardingsphere.mode.manager.standalone.lock;
 
+import com.google.common.base.Preconditions;
 import org.apache.shardingsphere.infra.lock.ShardingSphereLock;
 import org.apache.shardingsphere.mode.lock.LockContext;
 
@@ -34,6 +35,7 @@ public final class StandaloneLockContext implements 
LockContext {
     
     @Override
     public ShardingSphereLock getOrCreateSchemaLock(final String schemaName) {
+        Preconditions.checkNotNull(schemaName, "Get or create schema lock args 
schema name can not be null.");
         ShardingSphereLock result = locks.get(schemaName);
         if (null != result) {
             return result;
@@ -56,6 +58,9 @@ public final class StandaloneLockContext implements 
LockContext {
     
     @Override
     public boolean isLockedSchema(final String schemaName) {
+        if (null == schemaName) {
+            return false;
+        }
         ShardingSphereLock shardingSphereLock = locks.get(schemaName);
         return null != shardingSphereLock && 
shardingSphereLock.isLocked(schemaName);
     }

Reply via email to