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

Reply via email to