This is an automated email from the ASF dual-hosted git repository.
jianglongtao 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 970b6ec92f3 Refactor cluster lock (#24879)
970b6ec92f3 is described below
commit 970b6ec92f3ea89c9a080d32b82c371dbe9d0522
Author: ChenJiaHao <[email protected]>
AuthorDate: Tue Mar 28 19:10:41 2023 +0800
Refactor cluster lock (#24879)
---
.../distsql/ral/updatable/LockClusterUpdater.java | 15 ++++++++++++++-
.../distsql/ral/updatable/UnlockClusterUpdater.java | 1 +
.../backend/lock/impl/ClusterReadWriteLockStrategy.java | 16 +---------------
.../backend/lock/impl/ClusterWriteLockStrategy.java | 17 +----------------
4 files changed, 17 insertions(+), 32 deletions(-)
diff --git
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/LockClusterUpdater.java
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/LockClusterUpdater.java
index 2496a1a4a75..cf41c703d5d 100644
---
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/LockClusterUpdater.java
+++
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/LockClusterUpdater.java
@@ -22,10 +22,13 @@ import lombok.Setter;
import
org.apache.shardingsphere.distsql.handler.exception.algorithm.MissingRequiredAlgorithmException;
import org.apache.shardingsphere.distsql.handler.ral.update.RALUpdater;
import
org.apache.shardingsphere.distsql.parser.statement.ral.updatable.LockClusterStatement;
+import org.apache.shardingsphere.infra.lock.GlobalLockNames;
+import org.apache.shardingsphere.infra.lock.LockContext;
import org.apache.shardingsphere.infra.state.cluster.ClusterState;
import
org.apache.shardingsphere.infra.util.exception.ShardingSpherePreconditions;
import
org.apache.shardingsphere.infra.util.exception.external.sql.type.generic.UnsupportedSQLOperationException;
import org.apache.shardingsphere.infra.util.spi.type.typed.TypedSPILoader;
+import org.apache.shardingsphere.mode.lock.GlobalLockDefinition;
import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
import org.apache.shardingsphere.proxy.backend.lock.spi.ClusterLockStrategy;
@@ -37,11 +40,21 @@ import
org.apache.shardingsphere.proxy.backend.lock.spi.ClusterLockStrategy;
public final class LockClusterUpdater implements
RALUpdater<LockClusterStatement> {
@Override
+ @SuppressWarnings({"unchecked", "rawtypes"})
public void executeUpdate(final String databaseName, final
LockClusterStatement sqlStatement) {
checkMode();
checkState();
checkAlgorithm(sqlStatement);
- TypedSPILoader.getService(ClusterLockStrategy.class,
sqlStatement.getLockStrategy().getName()).lock();
+ LockContext lockContext =
ProxyContext.getInstance().getContextManager().getInstanceContext().getLockContext();
+ GlobalLockDefinition lockDefinition = new
GlobalLockDefinition(GlobalLockNames.CLUSTER_LOCK.getLockName());
+ if (lockContext.tryLock(lockDefinition, 3000L)) {
+ try {
+ checkState();
+ TypedSPILoader.getService(ClusterLockStrategy.class,
sqlStatement.getLockStrategy().getName()).lock();
+ } finally {
+ lockContext.unlock(lockDefinition);
+ }
+ }
}
private void checkMode() {
diff --git
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/UnlockClusterUpdater.java
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/UnlockClusterUpdater.java
index 0e84eec1cce..aeacae23975 100644
---
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/UnlockClusterUpdater.java
+++
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/UnlockClusterUpdater.java
@@ -46,6 +46,7 @@ public final class UnlockClusterUpdater implements
RALUpdater<UnlockClusterState
GlobalLockDefinition lockDefinition = new
GlobalLockDefinition(GlobalLockNames.CLUSTER_LOCK.getLockName());
if (lockContext.tryLock(lockDefinition, 3000L)) {
try {
+ checkState();
contextManager.getInstanceContext().getEventBusContext().post(new
ClusterStatusChangedEvent(ClusterState.OK));
// TODO unlock snapshot info if locked
} finally {
diff --git
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/lock/impl/ClusterReadWriteLockStrategy.java
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/lock/impl/ClusterReadWriteLockStrategy.java
index 4dc043a7e85..671c5f86864 100644
---
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/lock/impl/ClusterReadWriteLockStrategy.java
+++
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/lock/impl/ClusterReadWriteLockStrategy.java
@@ -17,11 +17,7 @@
package org.apache.shardingsphere.proxy.backend.lock.impl;
-import org.apache.shardingsphere.infra.lock.GlobalLockNames;
-import org.apache.shardingsphere.infra.lock.LockContext;
import org.apache.shardingsphere.infra.state.cluster.ClusterState;
-import org.apache.shardingsphere.mode.lock.GlobalLockDefinition;
-import org.apache.shardingsphere.mode.manager.ContextManager;
import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.status.cluster.event.ClusterStatusChangedEvent;
import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
import org.apache.shardingsphere.proxy.backend.lock.spi.ClusterLockStrategy;
@@ -32,18 +28,8 @@ import
org.apache.shardingsphere.proxy.backend.lock.spi.ClusterLockStrategy;
public class ClusterReadWriteLockStrategy implements ClusterLockStrategy {
@Override
- @SuppressWarnings({"unchecked", "rawtypes"})
public void lock() {
- ContextManager contextManager =
ProxyContext.getInstance().getContextManager();
- LockContext lockContext =
contextManager.getInstanceContext().getLockContext();
- GlobalLockDefinition lockDefinition = new
GlobalLockDefinition(GlobalLockNames.CLUSTER_LOCK.getLockName());
- if (lockContext.tryLock(lockDefinition, 3000L)) {
- try {
-
contextManager.getInstanceContext().getEventBusContext().post(new
ClusterStatusChangedEvent(ClusterState.UNAVAILABLE));
- } finally {
- lockContext.unlock(lockDefinition);
- }
- }
+
ProxyContext.getInstance().getContextManager().getInstanceContext().getEventBusContext().post(new
ClusterStatusChangedEvent(ClusterState.UNAVAILABLE));
}
@Override
diff --git
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/lock/impl/ClusterWriteLockStrategy.java
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/lock/impl/ClusterWriteLockStrategy.java
index 40d79ed1723..e0b56edaf8e 100644
---
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/lock/impl/ClusterWriteLockStrategy.java
+++
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/lock/impl/ClusterWriteLockStrategy.java
@@ -17,11 +17,7 @@
package org.apache.shardingsphere.proxy.backend.lock.impl;
-import org.apache.shardingsphere.infra.lock.GlobalLockNames;
-import org.apache.shardingsphere.infra.lock.LockContext;
import org.apache.shardingsphere.infra.state.cluster.ClusterState;
-import org.apache.shardingsphere.mode.lock.GlobalLockDefinition;
-import org.apache.shardingsphere.mode.manager.ContextManager;
import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.status.cluster.event.ClusterStatusChangedEvent;
import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
import org.apache.shardingsphere.proxy.backend.lock.spi.ClusterLockStrategy;
@@ -32,19 +28,8 @@ import
org.apache.shardingsphere.proxy.backend.lock.spi.ClusterLockStrategy;
public class ClusterWriteLockStrategy implements ClusterLockStrategy {
@Override
- @SuppressWarnings({"unchecked", "rawtypes"})
public void lock() {
- ContextManager contextManager =
ProxyContext.getInstance().getContextManager();
- LockContext lockContext =
contextManager.getInstanceContext().getLockContext();
- GlobalLockDefinition lockDefinition = new
GlobalLockDefinition(GlobalLockNames.CLUSTER_LOCK.getLockName());
- if (lockContext.tryLock(lockDefinition, 3000L)) {
- try {
-
contextManager.getInstanceContext().getEventBusContext().post(new
ClusterStatusChangedEvent(ClusterState.READ_ONLY));
- // TODO lock snapshot info
- } finally {
- lockContext.unlock(lockDefinition);
- }
- }
+
ProxyContext.getInstance().getContextManager().getInstanceContext().getEventBusContext().post(new
ClusterStatusChangedEvent(ClusterState.READ_ONLY));
}
@Override