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 93a596d  Init configuration node after schema created (#9290)
93a596d is described below

commit 93a596de4f5f1e0f6c2752d42248ba6418451737
Author: Haoran Meng <[email protected]>
AuthorDate: Wed Feb 3 14:54:12 2021 +0800

    Init configuration node after schema created (#9290)
---
 .../context/metadata/GovernanceMetaDataContexts.java     | 10 ++++++++--
 .../governance/core/config/ConfigCenter.java             | 16 ++++++++++++++--
 .../core/yaml/config/YamlConfigurationConverter.java     |  3 +++
 3 files changed, 25 insertions(+), 4 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 19990be..8e4d734 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
@@ -167,7 +167,7 @@ public final class GovernanceMetaDataContexts implements 
MetaDataContexts {
     @Subscribe
     public synchronized void renew(final MetaDataPersistedEvent event) throws 
SQLException {
         Map<String, ShardingSphereMetaData> metaDataMap = new 
HashMap<>(metaDataContexts.getMetaDataMap());
-        metaDataMap.put(event.getSchemaName(), createAddedMetaData(event));
+        metaDataMap.put(event.getSchemaName(), buildMetaData(event));
         metaDataContexts = new StandardMetaDataContexts(metaDataMap, 
metaDataContexts.getExecutorEngine(), metaDataContexts.getAuthentication(), 
metaDataContexts.getProps());
         
governanceFacade.getConfigCenter().persistSchema(event.getSchemaName(), 
metaDataContexts.getMetaDataMap().get(event.getSchemaName()).getSchema());
         ShardingSphereEventBus.getInstance().post(new 
DataSourceChangeCompletedEvent(event.getSchemaName(), 
@@ -298,8 +298,14 @@ public final class GovernanceMetaDataContexts implements 
MetaDataContexts {
         }
     }
     
-    private ShardingSphereMetaData createAddedMetaData(final 
MetaDataPersistedEvent event) throws SQLException {
+    private ShardingSphereMetaData buildMetaData(final MetaDataPersistedEvent 
event) throws SQLException {
         String schemaName = event.getSchemaName();
+        if 
(!governanceFacade.getConfigCenter().hasDataSourceConfiguration(schemaName)) {
+            
governanceFacade.getConfigCenter().persistDataSourceConfigurations(schemaName, 
new LinkedHashMap<>());
+        }
+        if 
(!governanceFacade.getConfigCenter().hasRuleConfiguration(schemaName)) {
+            
governanceFacade.getConfigCenter().persistRuleConfigurations(schemaName, new 
LinkedList<>());
+        }
         Map<String, Map<String, DataSource>> dataSourcesMap = 
createDataSourcesMap(Collections.singletonMap(schemaName, 
                 
governanceFacade.getConfigCenter().loadDataSourceConfigurations(schemaName)));
         MetaDataContextsBuilder metaDataContextsBuilder = new 
MetaDataContextsBuilder(dataSourcesMap, 
diff --git 
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/config/ConfigCenter.java
 
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/config/ConfigCenter.java
index 2c591fb..7f3ca07 100644
--- 
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/config/ConfigCenter.java
+++ 
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/config/ConfigCenter.java
@@ -215,7 +215,13 @@ public final class ConfigCenter {
         }
     }
     
-    private void persistDataSourceConfigurations(final String schemaName, 
final Map<String, DataSourceConfiguration> dataSourceConfigurations) {
+    /**
+     * Persist data source configurations.
+     *
+     * @param schemaName schema name
+     * @param dataSourceConfigurations data source configurations
+     */
+    public void persistDataSourceConfigurations(final String schemaName, final 
Map<String, DataSourceConfiguration> dataSourceConfigurations) {
         repository.persist(node.getDataSourcePath(schemaName), 
YamlEngine.marshal(createYamlDataSourceConfigurationWrap(dataSourceConfigurations)));
     }
     
@@ -239,7 +245,13 @@ public final class ConfigCenter {
         }
     }
     
-    private void persistRuleConfigurations(final String schemaName, final 
Collection<RuleConfiguration> ruleConfigurations) {
+    /**
+     * Persist rule configurations.
+     *
+     * @param schemaName schema name
+     * @param ruleConfigurations rule configurations
+     */
+    public void persistRuleConfigurations(final String schemaName, final 
Collection<RuleConfiguration> ruleConfigurations) {
         repository.persist(node.getRulePath(schemaName), 
YamlEngine.marshal(createYamlRootRuleConfigurations(schemaName, 
ruleConfigurations)));
     }
     
diff --git 
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/yaml/config/YamlConfigurationConverter.java
 
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/yaml/config/YamlConfigurationConverter.java
index 624647f..2ef20b2 100644
--- 
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/yaml/config/YamlConfigurationConverter.java
+++ 
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/yaml/config/YamlConfigurationConverter.java
@@ -46,6 +46,9 @@ public final class YamlConfigurationConverter {
      */
     public static Map<String, DataSourceConfiguration> 
convertDataSourceConfigurations(final String yamlContent) {
         YamlDataSourceConfigurationWrap result = 
YamlEngine.unmarshalWithFilter(yamlContent, 
YamlDataSourceConfigurationWrap.class);
+        if (null == result.getDataSources() || 
result.getDataSources().isEmpty()) {
+            return new LinkedHashMap<>();
+        }
         return 
result.getDataSources().entrySet().stream().collect(Collectors.toMap(Entry::getKey,
 entry -> new DataSourceConfigurationYamlSwapper()
                 .swapToObject(entry.getValue()), (oldValue, currentValue) -> 
oldValue, LinkedHashMap::new));
     }

Reply via email to