diff --git a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/QualifiedDataSourceChangedHandler.java b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/QualifiedDataSourceChangedHandler.java index 6c8ad363e40ea..f2bb401f99bc2 100644 --- a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/QualifiedDataSourceChangedHandler.java +++ b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/QualifiedDataSourceChangedHandler.java @@ -34,6 +34,7 @@ import java.util.Arrays; import java.util.Collection; +import java.util.Optional; /** * Qualified data source changed handler. @@ -52,13 +53,18 @@ public Collection getSubscribedTypes() { @Override public void handle(final ContextManager contextManager, final DataChangedEvent event) { - if (!Strings.isNullOrEmpty(event.getValue())) { - QualifiedDataSourceState state = new YamlQualifiedDataSourceStateSwapper().swapToObject(YamlEngine.unmarshal(event.getValue(), YamlQualifiedDataSourceState.class)); - QualifiedDataSourceNode.extractQualifiedDataSource(event.getKey()).ifPresent(optional -> handle(contextManager.getMetaDataContexts().getMetaData(), optional, state)); + if (Strings.isNullOrEmpty(event.getValue())) { + return; } + Optional qualifiedDataSource = QualifiedDataSourceNode.extractQualifiedDataSource(event.getKey()); + if (!qualifiedDataSource.isPresent()) { + return; + } + QualifiedDataSourceState state = new YamlQualifiedDataSourceStateSwapper().swapToObject(YamlEngine.unmarshal(event.getValue(), YamlQualifiedDataSourceState.class)); + handleQualifiedDataSourceStateChanged(contextManager.getMetaDataContexts().getMetaData(), qualifiedDataSource.get(), state); } - private void handle(final ShardingSphereMetaData metaData, final QualifiedDataSource qualifiedDataSource, final QualifiedDataSourceState state) { + private void handleQualifiedDataSourceStateChanged(final ShardingSphereMetaData metaData, final QualifiedDataSource qualifiedDataSource, final QualifiedDataSourceState state) { Preconditions.checkState(metaData.containsDatabase(qualifiedDataSource.getDatabaseName()), "No database '%s' exists.", qualifiedDataSource.getDatabaseName()); metaData.getDatabase(qualifiedDataSource.getDatabaseName()).getRuleMetaData().getAttributes(StaticDataSourceRuleAttribute.class) .forEach(each -> each.updateStatus(qualifiedDataSource, state.getState()));