This is an automated email from the ASF dual-hosted git repository. jianglongtao pushed a commit to branch fix-33341 in repository https://gitbox.apache.org/repos/asf/shardingsphere.git
commit 45aa448b7733023f41d9def054316ee15d660aab Author: RaigorJiang <[email protected]> AuthorDate: Wed Jul 10 11:37:23 2024 +0800 Pick #31766, Avoid send mistake storge unit event --- .../registry/metadata/watcher/MetaDataChangedWatcher.java | 10 ++++++++-- .../coordinator/subscriber/ConfigurationChangedSubscriber.java | 6 +++--- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/metadata/watcher/MetaDataChangedWatcher.java b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/metadata/watcher/MetaDataChangedWatcher.java index 94b1728ab9b..0901b698fc2 100644 --- a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/metadata/watcher/MetaDataChangedWatcher.java +++ b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/metadata/watcher/MetaDataChangedWatcher.java @@ -164,7 +164,10 @@ public final class MetaDataChangedWatcher implements GovernanceWatcher<Governanc } } dataSourceUnitName = DataSourceMetaDataNode.getDataSourceNameByDataSourceUnitNode(event.getKey()); - return dataSourceUnitName.map(optional -> new UnregisterStorageUnitEvent(databaseName, optional)); + if (Type.DELETED == event.getType() && dataSourceUnitName.isPresent()) { + return Optional.of(new UnregisterStorageUnitEvent(databaseName, dataSourceUnitName.get())); + } + return Optional.empty(); } private Optional<GovernanceEvent> createStorageNodeChangedEvent(final String databaseName, final DataChangedEvent event) { @@ -178,6 +181,9 @@ public final class MetaDataChangedWatcher implements GovernanceWatcher<Governanc } } dataSourceNodeName = DataSourceMetaDataNode.getDataSourceNameByDataSourceNodeNode(event.getKey()); - return dataSourceNodeName.map(optional -> new UnregisterStorageNodeEvent(databaseName, optional)); + if (Type.DELETED == event.getType() && dataSourceNodeName.isPresent()) { + return Optional.of(new UnregisterStorageNodeEvent(databaseName, dataSourceNodeName.get())); + } + return Optional.empty(); } } diff --git a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/subscriber/ConfigurationChangedSubscriber.java b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/subscriber/ConfigurationChangedSubscriber.java index 562e469ab91..763d821fc5c 100644 --- a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/subscriber/ConfigurationChangedSubscriber.java +++ b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/subscriber/ConfigurationChangedSubscriber.java @@ -46,7 +46,7 @@ public final class ConfigurationChangedSubscriber { * @param event register storage unit event */ @Subscribe - public void renew(final RegisterStorageUnitEvent event) { + public synchronized void renew(final RegisterStorageUnitEvent event) { if (!event.getActiveVersion().equals(contextManager.getMetaDataContexts().getPersistService().getMetaDataVersionPersistService().getActiveVersionByFullPath(event.getActiveVersionKey()))) { return; } @@ -60,7 +60,7 @@ public final class ConfigurationChangedSubscriber { * @param event register storage unit event */ @Subscribe - public void renew(final AlterStorageUnitEvent event) { + public synchronized void renew(final AlterStorageUnitEvent event) { if (!event.getActiveVersion().equals(contextManager.getMetaDataContexts().getPersistService().getMetaDataVersionPersistService().getActiveVersionByFullPath(event.getActiveVersionKey()))) { return; } @@ -74,7 +74,7 @@ public final class ConfigurationChangedSubscriber { * @param event register storage unit event */ @Subscribe - public void renew(final UnregisterStorageUnitEvent event) { + public synchronized void renew(final UnregisterStorageUnitEvent event) { if (!contextManager.getMetaDataContexts().getMetaData().containsDatabase(event.getDatabaseName())) { return; }
