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)) {