You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by pa...@apache.org on 2021/04/28 00:21:59 UTC
[shardingsphere] branch master updated: Fixes#10209 refactor
governance lock for metadata refresh (#10210)
This is an automated email from the ASF dual-hosted git repository.
panjuan 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 db7a6dd Fixes#10209 refactor governance lock for metadata refresh (#10210)
db7a6dd is described below
commit db7a6dd50f7129d6ae627f812ac5b531e64ff554
Author: Haoran Meng <me...@gmail.com>
AuthorDate: Wed Apr 28 08:04:40 2021 +0800
Fixes#10209 refactor governance lock for metadata refresh (#10210)
* refactor governance lock for metadata refresh
* refactor governance lock for metadata refresh
---
.../metadata/GovernanceMetaDataContexts.java | 22 ++++++++++++++--------
.../governance/core/lock/GovernanceLock.java | 2 +-
.../governance/core/lock/node/LockAck.java | 2 +-
.../governance/core/registry/RegistryCenter.java | 11 ++++++++++-
.../core/registry/RegistryCenterTest.java | 7 +++++++
5 files changed, 33 insertions(+), 11 deletions(-)
diff --git a/shardingsphere-governance/shardingsphere-governance-context/src/main/java/org/apache/shardingsphere/governance/context/metadata/GovernanceMetaDataContexts.java b/shardingsphere-governance/shardingsphere-governance-context/src/main/java/org/apache/shardingsphere/governance/context/metadata/GovernanceMetaDataContexts.java
index 6e6fb68..c96d4bd 100644
--- a/shardingsphere-governance/shardingsphere-governance-context/src/main/java/org/apache/shardingsphere/governance/context/metadata/GovernanceMetaDataContexts.java
+++ b/shardingsphere-governance/shardingsphere-governance-context/src/main/java/org/apache/shardingsphere/governance/context/metadata/GovernanceMetaDataContexts.java
@@ -43,6 +43,8 @@ import org.apache.shardingsphere.infra.context.metadata.MetaDataContextsBuilder;
import org.apache.shardingsphere.infra.context.metadata.impl.StandardMetaDataContexts;
import org.apache.shardingsphere.infra.eventbus.ShardingSphereEventBus;
import org.apache.shardingsphere.infra.executor.kernel.ExecutorEngine;
+import org.apache.shardingsphere.infra.lock.InnerLockReleasedEvent;
+import org.apache.shardingsphere.infra.lock.LockNameUtil;
import org.apache.shardingsphere.infra.lock.ShardingSphereLock;
import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import org.apache.shardingsphere.infra.metadata.rule.ShardingSphereRuleMetaData;
@@ -236,15 +238,19 @@ public final class GovernanceMetaDataContexts implements MetaDataContexts {
*/
@Subscribe
public synchronized void renew(final SchemaChangedEvent event) {
- Map<String, ShardingSphereMetaData> newMetaDataMap = new HashMap<>(metaDataContexts.getMetaDataMap().size(), 1);
- for (Entry<String, ShardingSphereMetaData> entry : metaDataContexts.getMetaDataMap().entrySet()) {
- String schemaName = entry.getKey();
- ShardingSphereMetaData oldMetaData = entry.getValue();
- ShardingSphereMetaData newMetaData = event.getSchemaName().equals(schemaName) ? getChangedMetaData(oldMetaData, event.getSchema(), schemaName) : oldMetaData;
- newMetaDataMap.put(schemaName, newMetaData);
+ try {
+ Map<String, ShardingSphereMetaData> newMetaDataMap = new HashMap<>(metaDataContexts.getMetaDataMap().size(), 1);
+ for (Entry<String, ShardingSphereMetaData> entry : metaDataContexts.getMetaDataMap().entrySet()) {
+ String schemaName = entry.getKey();
+ ShardingSphereMetaData oldMetaData = entry.getValue();
+ ShardingSphereMetaData newMetaData = event.getSchemaName().equals(schemaName) ? getChangedMetaData(oldMetaData, event.getSchema(), schemaName) : oldMetaData;
+ newMetaDataMap.put(schemaName, newMetaData);
+ }
+ metaDataContexts = new StandardMetaDataContexts(
+ newMetaDataMap, metaDataContexts.getGlobalRuleMetaData(), metaDataContexts.getExecutorEngine(), metaDataContexts.getUsers(), metaDataContexts.getProps());
+ } finally {
+ ShardingSphereEventBus.getInstance().post(new InnerLockReleasedEvent(LockNameUtil.getMetadataRefreshLockName()));
}
- metaDataContexts = new StandardMetaDataContexts(
- newMetaDataMap, metaDataContexts.getGlobalRuleMetaData(), metaDataContexts.getExecutorEngine(), metaDataContexts.getUsers(), metaDataContexts.getProps());
}
/**
diff --git a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/lock/GovernanceLock.java b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/lock/GovernanceLock.java
index 303a963..fa76c26 100644
--- a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/lock/GovernanceLock.java
+++ b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/lock/GovernanceLock.java
@@ -132,7 +132,7 @@ public final class GovernanceLock implements ShardingSphereLock {
*/
@Subscribe
public void renew(final LockReleasedEvent event) {
- releaseInnerLock(event.getLockName());
+ registryCenter.deleteLockAck(event.getLockName());
}
/**
diff --git a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/lock/node/LockAck.java b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/lock/node/LockAck.java
index fb3ec75..b6cd476 100644
--- a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/lock/node/LockAck.java
+++ b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/lock/node/LockAck.java
@@ -10,7 +10,7 @@ import lombok.Getter;
@Getter
public enum LockAck {
- LOCKED("LOCKED"), UNLOCKED("");
+ LOCKED("LOCKED"), UNLOCKED("UNLOCKED");
private String value;
}
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 26b2d8f..8c1d08a 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
@@ -631,11 +631,20 @@ public final class RegistryCenter {
}
/**
- * ack unlock.
+ * Ack unlock.
*
* @param lockName lock name
*/
public void ackUnlock(final String lockName) {
+ repository.persistEphemeral(lockNode.getLockedAckNodePath(Joiner.on("-").join(instance.getInstanceId(), lockName)), LockAck.UNLOCKED.getValue());
+ }
+
+ /**
+ * Delete lock ack.
+ *
+ * @param lockName lock name
+ */
+ public void deleteLockAck(final String lockName) {
repository.delete(lockNode.getLockedAckNodePath(Joiner.on("-").join(instance.getInstanceId(), lockName)));
}
diff --git a/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/RegistryCenterTest.java b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/RegistryCenterTest.java
index 47c668b..3c53123 100644
--- a/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/RegistryCenterTest.java
+++ b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/RegistryCenterTest.java
@@ -684,4 +684,11 @@ public final class RegistryCenterTest {
registryCenter.renew(event);
verify(registryRepository).persist(startsWith("/metadata/sharding_db/datasource"), anyString());
}
+
+ @Test
+ public void assertDeleteLockAck() {
+ RegistryCenter registryCenter = new RegistryCenter(registryRepository);
+ registryCenter.deleteLockAck("test");
+ verify(registryRepository).delete(anyString());
+ }
}