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