You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by xi...@apache.org on 2021/01/20 12:19:29 UTC

[shardingsphere] branch master updated: Merge global lock get & check (#9107)

This is an automated email from the ASF dual-hosted git repository.

xiaoyu 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 9d4add3  Merge global lock get & check (#9107)
9d4add3 is described below

commit 9d4add3c7bdf650f0a175eb6b5d4adff9ac19ed0
Author: Haoran Meng <me...@gmail.com>
AuthorDate: Wed Jan 20 20:18:54 2021 +0800

    Merge global lock get & check (#9107)
---
 .../governance/core/lock/node/LockNode.java               | 15 ++++++++++++++-
 .../core/lock/strategy/GovernanceLockStrategy.java        |  5 -----
 .../governance/core/registry/RegistryCenter.java          |  9 ++-------
 .../governance/core/lock/node/LockNodeTest.java           |  9 +++++++--
 .../registry/listener/GlobalLockChangedListenerTest.java  |  2 +-
 .../apache/shardingsphere/infra/lock/LockStrategy.java    |  7 -------
 .../shardingsphere/infra/lock/StandardLockStrategy.java   |  5 -----
 .../infra/lock/fixture/FixtureLockStrategy.java           |  5 -----
 .../driver/executor/DriverJDBCExecutor.java               |  7 -------
 .../communication/DatabaseCommunicationEngine.java        |  7 -------
 .../scaling/elasticjob/job/FinishedCheckJob.java          |  2 +-
 11 files changed, 25 insertions(+), 48 deletions(-)

diff --git a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/lock/node/LockNode.java b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/lock/node/LockNode.java
index ca3c542..8fd72cd 100644
--- a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/lock/node/LockNode.java
+++ b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/lock/node/LockNode.java
@@ -24,14 +24,27 @@ import com.google.common.base.Joiner;
  */
 public final class LockNode {
     
+    private static final String LOCK_NODE_ROOT = "lock";
+    
     private static final String GLOBAL_LOCK_NODE = "glock";
     
+    private static final String RESOURCE_LOCK_NODE = "rlock";
+    
     /**
      * Get global lock node path.
      * 
      * @return global lock node path
      */
     public String getGlobalLockNodePath() {
-        return Joiner.on("/").join("", GLOBAL_LOCK_NODE);
+        return Joiner.on("/").join("", LOCK_NODE_ROOT, GLOBAL_LOCK_NODE);
+    }
+    
+    /**
+     * Get resource lock node path.
+     * 
+     * @return resource lock node path
+     */
+    public String getResourceLockNodePath() {
+        return Joiner.on("/").join("", LOCK_NODE_ROOT, RESOURCE_LOCK_NODE);
     }
 }
diff --git a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/lock/strategy/GovernanceLockStrategy.java b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/lock/strategy/GovernanceLockStrategy.java
index af3a6aa..c863864 100644
--- a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/lock/strategy/GovernanceLockStrategy.java
+++ b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/lock/strategy/GovernanceLockStrategy.java
@@ -58,11 +58,6 @@ public final class GovernanceLockStrategy implements LockStrategy {
     }
     
     @Override
-    public boolean checkLock() {
-        return registryCenter.checkLock();
-    }
-    
-    @Override
     public String getType() {
         return LockStrategyType.GOVERNANCE.name();
     }
diff --git a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/RegistryCenter.java b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/RegistryCenter.java
index 88d2102..4d6c6d3 100644
--- a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/RegistryCenter.java
+++ b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/RegistryCenter.java
@@ -162,7 +162,7 @@ public final class RegistryCenter {
      * @return true if get the lock, false if not
      */
     public boolean tryGlobalLock(final long timeout, final TimeUnit timeUnit) {
-        return repository.tryLock(timeout, timeUnit);
+        return repository.tryLock(timeout, timeUnit) && checkLock();
     }
     
     /**
@@ -173,12 +173,7 @@ public final class RegistryCenter {
         repository.delete(lockNode.getGlobalLockNodePath());
     }
     
-    /**
-     * Check lock state.
-     *
-     * @return true if all instances were locked, else false
-     */
-    public boolean checkLock() {
+    private boolean checkLock() {
         return checkOrRetry(this.loadAllInstances());
     }
     
diff --git a/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/lock/node/LockNodeTest.java b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/lock/node/LockNodeTest.java
index 61c7250..24e776b 100644
--- a/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/lock/node/LockNodeTest.java
+++ b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/lock/node/LockNodeTest.java
@@ -33,7 +33,12 @@ public final class LockNodeTest {
     }
     
     @Test
-    public void getGlobalLockNodePath() {
-        assertThat(lockNode.getGlobalLockNodePath(), is("/glock"));
+    public void assertGetGlobalLockNodePath() {
+        assertThat(lockNode.getGlobalLockNodePath(), is("/lock/glock"));
+    }
+    
+    @Test
+    public void assertGetResourceNodePath() {
+        assertThat(lockNode.getResourceLockNodePath(), is("/lock/rlock"));
     }
 }
diff --git a/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/listener/GlobalLockChangedListenerTest.java b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/listener/GlobalLockChangedListenerTest.java
index 889115a..2ebd98d 100644
--- a/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/listener/GlobalLockChangedListenerTest.java
+++ b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/listener/GlobalLockChangedListenerTest.java
@@ -47,7 +47,7 @@ public final class GlobalLockChangedListenerTest {
     
     @Test
     public void createEvent() {
-        Optional<GovernanceEvent> actual = globalLockChangedListener.createEvent(new DataChangedEvent("/glock", "", Type.ADDED));
+        Optional<GovernanceEvent> actual = globalLockChangedListener.createEvent(new DataChangedEvent("/lock/glock", "", Type.ADDED));
         assertTrue(actual.isPresent());
         assertTrue(actual.get() instanceof GlobalLockAddedEvent);
     }
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/lock/LockStrategy.java b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/lock/LockStrategy.java
index 9011b0c..076a199 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/lock/LockStrategy.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/lock/LockStrategy.java
@@ -39,11 +39,4 @@ public interface LockStrategy extends TypedSPI {
      * Release lock.
      */
     void releaseLock();
-    
-    /**
-     * Check lock state.
-     * 
-     * @return true if all instances were locked, else false
-     */
-    boolean checkLock();
 }
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/lock/StandardLockStrategy.java b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/lock/StandardLockStrategy.java
index b3a5019..2ad844d 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/lock/StandardLockStrategy.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/lock/StandardLockStrategy.java
@@ -53,11 +53,6 @@ public final class StandardLockStrategy implements LockStrategy {
     }
     
     @Override
-    public boolean checkLock() {
-        return StateContext.getCurrentState() == StateType.LOCK;
-    }
-    
-    @Override
     public String getType() {
         return LockStrategyType.STANDARD.name();
     }
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/lock/fixture/FixtureLockStrategy.java b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/lock/fixture/FixtureLockStrategy.java
index 8c8619d..e2ce3a2 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/lock/fixture/FixtureLockStrategy.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/lock/fixture/FixtureLockStrategy.java
@@ -34,11 +34,6 @@ public final class FixtureLockStrategy implements LockStrategy {
     }
     
     @Override
-    public boolean checkLock() {
-        return false;
-    }
-    
-    @Override
     public String getType() {
         return LockStrategyType.STANDARD.name();
     }
diff --git a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/DriverJDBCExecutor.java b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/DriverJDBCExecutor.java
index 1a8db30..5ee0186 100644
--- a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/DriverJDBCExecutor.java
+++ b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/DriverJDBCExecutor.java
@@ -144,7 +144,6 @@ public final class DriverJDBCExecutor {
             if (!LockContext.getLockStrategy().tryLock(lockTimeoutMilliseconds, TimeUnit.MILLISECONDS)) {
                 throw new ShardingSphereException("Service lock wait timeout of %s ms exceeded", lockTimeoutMilliseconds);
             }
-            checkLock(lockTimeoutMilliseconds);
             return true;
         }
         return false;
@@ -154,12 +153,6 @@ public final class DriverJDBCExecutor {
         return SchemaRefresherFactory.newInstance(sqlStatement).isPresent();
     }
     
-    private void checkLock(final long lockTimeoutMilliseconds) {
-        if (!LockContext.getLockStrategy().checkLock()) {
-            throw new ShardingSphereException("Service lock wait timeout of %s ms exceeded", lockTimeoutMilliseconds);
-        }
-    }
-    
     @SuppressWarnings({"unchecked", "rawtypes"})
     private void refreshSchema(final ShardingSphereMetaData metaData, final SQLStatement sqlStatement, final Collection<RouteUnit> routeUnits) throws SQLException {
         Optional<SchemaRefresher> schemaRefresher = SchemaRefresherFactory.newInstance(sqlStatement);
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/DatabaseCommunicationEngine.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/DatabaseCommunicationEngine.java
index 05defd9..1870d4a 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/DatabaseCommunicationEngine.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/DatabaseCommunicationEngine.java
@@ -132,7 +132,6 @@ public final class DatabaseCommunicationEngine {
             if (!LockContext.getLockStrategy().tryLock(lockTimeoutMilliseconds, TimeUnit.MILLISECONDS)) {
                 throw new LockWaitTimeoutException(lockTimeoutMilliseconds);
             }
-            checkLock(lockTimeoutMilliseconds);
             return true;
         }
         return false;
@@ -142,12 +141,6 @@ public final class DatabaseCommunicationEngine {
         return SchemaRefresherFactory.newInstance(executionContext.getSqlStatementContext().getSqlStatement()).isPresent();
     }
     
-    private void checkLock(final Long lockTimeoutMilliseconds) {
-        if (!LockContext.getLockStrategy().checkLock()) {
-            throw new LockWaitTimeoutException(lockTimeoutMilliseconds);
-        }
-    }
-    
     private void releaseLock() {
         LockContext.getLockStrategy().releaseLock();
     }
diff --git a/shardingsphere-scaling/shardingsphere-scaling-elasticjob/src/main/java/org/apache/shardingsphere/scaling/elasticjob/job/FinishedCheckJob.java b/shardingsphere-scaling/shardingsphere-scaling-elasticjob/src/main/java/org/apache/shardingsphere/scaling/elasticjob/job/FinishedCheckJob.java
index 844096a..90edb7b 100644
--- a/shardingsphere-scaling/shardingsphere-scaling-elasticjob/src/main/java/org/apache/shardingsphere/scaling/elasticjob/job/FinishedCheckJob.java
+++ b/shardingsphere-scaling/shardingsphere-scaling-elasticjob/src/main/java/org/apache/shardingsphere/scaling/elasticjob/job/FinishedCheckJob.java
@@ -67,7 +67,7 @@ public final class FinishedCheckJob implements SimpleJob {
     }
     
     private void trySwitch(final long jobId, final WorkflowConfiguration workflowConfig) {
-        if (LockContext.getLockStrategy().tryLock(30L, TimeUnit.SECONDS) && LockContext.getLockStrategy().checkLock()) {
+        if (LockContext.getLockStrategy().tryLock(30L, TimeUnit.SECONDS)) {
             try {
                 ThreadUtil.sleep(10 * 1000L);
                 if (ScalingServiceHolder.getInstance().checkScalingResult(jobId)) {