You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by zh...@apache.org on 2022/06/21 03:57:50 UTC
[shardingsphere] branch master updated: fix add resource cannot be synchronized with cluster mode (#18479)
This is an automated email from the ASF dual-hosted git repository.
zhaojinchao 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 1bd68a49168 fix add resource cannot be synchronized with cluster mode (#18479)
1bd68a49168 is described below
commit 1bd68a4916864bbdafe041383567664b0ed6dc66
Author: Haoran Meng <me...@gmail.com>
AuthorDate: Tue Jun 21 11:57:42 2022 +0800
fix add resource cannot be synchronized with cluster mode (#18479)
---
.../metadata/watcher/MetaDataChangedWatcher.java | 17 +++++++++--------
.../metadata/watcher/MetaDataChangedWatcherTest.java | 15 +++++++++++++++
2 files changed, 24 insertions(+), 8 deletions(-)
diff --git a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/metadata/watcher/MetaDataChangedWatcher.java b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/metadata/watcher/MetaDataChangedWatcher.java
index f3826e806a1..90fd7734704 100644
--- a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/metadata/watcher/MetaDataChangedWatcher.java
+++ b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/metadata/watcher/MetaDataChangedWatcher.java
@@ -80,10 +80,7 @@ public final class MetaDataChangedWatcher implements GovernanceWatcher<Governanc
if (isTableMetaDataChanged(event)) {
return createSchemaChangedEvent(event);
}
- if (Type.UPDATED == event.getType()) {
- return createUpdateGovernanceEvent(event);
- }
- return Optional.empty();
+ return createRuleAndDataSourceChangedEvent(event);
}
private boolean isLogicDatabaseChanged(final DataChangedEvent event) {
@@ -128,19 +125,23 @@ public final class MetaDataChangedWatcher implements GovernanceWatcher<Governanc
return Optional.empty();
}
- private Optional<GovernanceEvent> createUpdateGovernanceEvent(final DataChangedEvent event) {
+ private Optional<GovernanceEvent> createRuleAndDataSourceChangedEvent(final DataChangedEvent event) {
Optional<String> databaseName = DatabaseMetaDataNode.getDatabaseNameByDatabasePath(event.getKey());
if (!databaseName.isPresent() || Strings.isNullOrEmpty(event.getValue())) {
return Optional.empty();
}
- if (event.getKey().equals(DatabaseMetaDataNode.getActiveVersionPath(databaseName.get()))) {
+ if (event.getType() == Type.UPDATED && event.getKey().equals(DatabaseMetaDataNode.getActiveVersionPath(databaseName.get()))) {
return Optional.of(new DatabaseVersionChangedEvent(databaseName.get(), event.getValue()));
}
Optional<String> databaseVersion = DatabaseMetaDataNode.getVersionByDataSourcesPath(event.getKey());
- if (databaseVersion.isPresent()) {
+ if (databaseVersion.isPresent() && event.getType() != Type.DELETED) {
return Optional.of(createDataSourceChangedEvent(databaseName.get(), databaseVersion.get(), event));
}
- return DatabaseMetaDataNode.getVersionByRulesPath(event.getKey()).map(optional -> new RuleConfigurationsChangedEvent(databaseName.get(), optional, getRuleConfigurations(event.getValue())));
+ databaseVersion = DatabaseMetaDataNode.getVersionByRulesPath(event.getKey());
+ if (databaseVersion.isPresent() && event.getType() != Type.DELETED) {
+ return Optional.of(new RuleConfigurationsChangedEvent(databaseName.get(), databaseVersion.get(), getRuleConfigurations(event.getValue())));
+ }
+ return Optional.empty();
}
@SuppressWarnings("unchecked")
diff --git a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/metadata/watcher/MetaDataChangedWatcherTest.java b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/metadata/watcher/MetaDataChangedWatcherTest.java
index 4407b02707b..3fda06df10f 100644
--- a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/metadata/watcher/MetaDataChangedWatcherTest.java
+++ b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/metadata/watcher/MetaDataChangedWatcherTest.java
@@ -81,6 +81,14 @@ public final class MetaDataChangedWatcherTest {
assertTrue(actual.isPresent());
}
+ @Test
+ public void assertCreateDataSourceChangedEventWithAddEvent() {
+ String key = "/metadata/sharding_db/versions/0/dataSources";
+ String value = "{}";
+ Optional<GovernanceEvent> actual = createEvent(key, value, Type.ADDED);
+ assertTrue(actual.isPresent());
+ }
+
@Test
public void assertCreateRuleChangedEvent() {
String key = "/metadata/sharding_db/versions/0/rules";
@@ -88,6 +96,13 @@ public final class MetaDataChangedWatcherTest {
assertTrue(actual.isPresent());
}
+ @Test
+ public void assertCreateRuleChangedEventWithAddEvent() {
+ String key = "/metadata/sharding_db/versions/0/rules";
+ Optional<GovernanceEvent> actual = createEvent(key, "[]", Type.ADDED);
+ assertTrue(actual.isPresent());
+ }
+
@Test
public void assertCreateTableSchemaChangedEvent() {
String key = "/metadata/sharding_db/schemas/sharding_schema/tables/t_order";