This is an automated email from the ASF dual-hosted git repository.

tuichenchuxin 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 1167fc4d151 Add NewYamlConfigurationSwapper for new metadata structure 
(#25886)
1167fc4d151 is described below

commit 1167fc4d151e3292ce8a6d6f6cb5c15feb2be013
Author: zhaojinchao <[email protected]>
AuthorDate: Mon May 29 18:31:44 2023 +0800

    Add NewYamlConfigurationSwapper for new metadata structure (#25886)
    
    * Add NewYamlConfigurationSwapper for new metadata structure
    
    * Add
    
    * Update
    
    * Update metadata feature
    
    * Fix checkstyle
    
    * Fix ci
    
    * Fix it
    
    * Fix unit test
    
    * Fix it
---
 .../api/ReadwriteSplittingRuleConfiguration.java   | 12 ++-
 ...ReadwriteSplittingRuleConfigurationSwapper.java | 76 +++++++++++++++++
 ...writeSplittingRuleConfigurationSwapperTest.java | 58 +++++++++++++
 .../rule/NewYamlRuleConfigurationSwapper.java      | 30 ++++---
 .../NewYamlRuleConfigurationSwapperEngine.java     | 69 ++++++++++++++++
 .../infra/util/yaml/datanode/YamlDataNode.java     | 20 ++---
 .../yaml/swapper/NewYamlConfigurationSwapper.java  | 31 ++++---
 .../persist/MetaDataBasedPersistService.java       |  3 +-
 .../metadata/persist/MetaDataPersistService.java   |  2 +-
 .../persist/NewMetaDataPersistService.java         |  2 +-
 .../persist/node/NewDatabaseMetaDataNode.java      | 10 +--
 .../ReadwriteSplittingNodeConverter.java           | 52 ++++++++++++
 .../DataSourcePathProcessor.java}                  |  6 +-
 .../database/DatabaseRulePersistService.java       | 21 +----
 ...ce.java => NewDatabaseBasedPersistService.java} | 24 +++---
 ...ava => NewDatabaseRuleBasedPersistService.java} |  3 +-
 .../database/NewDatabaseRulePersistService.java    | 94 ++++++++++++++++++++++
 .../manager/cluster/ClusterModeContextManager.java |  4 +-
 .../YamlDatabaseConfigurationImportExecutor.java   |  4 +-
 19 files changed, 423 insertions(+), 98 deletions(-)

diff --git 
a/features/readwrite-splitting/api/src/main/java/org/apache/shardingsphere/readwritesplitting/api/ReadwriteSplittingRuleConfiguration.java
 
b/features/readwrite-splitting/api/src/main/java/org/apache/shardingsphere/readwritesplitting/api/ReadwriteSplittingRuleConfiguration.java
index b921b4d8fac..ccd0c10f417 100644
--- 
a/features/readwrite-splitting/api/src/main/java/org/apache/shardingsphere/readwritesplitting/api/ReadwriteSplittingRuleConfiguration.java
+++ 
b/features/readwrite-splitting/api/src/main/java/org/apache/shardingsphere/readwritesplitting/api/ReadwriteSplittingRuleConfiguration.java
@@ -17,8 +17,10 @@
 
 package org.apache.shardingsphere.readwritesplitting.api;
 
+import lombok.AllArgsConstructor;
+import lombok.NoArgsConstructor;
 import lombok.Getter;
-import lombok.RequiredArgsConstructor;
+import lombok.Setter;
 import org.apache.shardingsphere.infra.config.algorithm.AlgorithmConfiguration;
 import 
org.apache.shardingsphere.infra.config.rule.function.DistributedRuleConfiguration;
 import 
org.apache.shardingsphere.infra.config.rule.scope.DatabaseRuleConfiguration;
@@ -30,11 +32,13 @@ import java.util.Map;
 /**
  * Readwrite-splitting rule configuration.
  */
-@RequiredArgsConstructor
+@AllArgsConstructor
+@NoArgsConstructor
 @Getter
+@Setter
 public final class ReadwriteSplittingRuleConfiguration implements 
DatabaseRuleConfiguration, DistributedRuleConfiguration {
     
-    private final Collection<ReadwriteSplittingDataSourceRuleConfiguration> 
dataSources;
+    private Collection<ReadwriteSplittingDataSourceRuleConfiguration> 
dataSources;
     
-    private final Map<String, AlgorithmConfiguration> loadBalancers;
+    private Map<String, AlgorithmConfiguration> loadBalancers;
 }
diff --git 
a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/yaml/swapper/NewYamlReadwriteSplittingRuleConfigurationSwapper.java
 
b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/yaml/swapper/NewYamlReadwriteSplittingRuleConfigurationSwapper.java
new file mode 100644
index 00000000000..3509b61a35e
--- /dev/null
+++ 
b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/yaml/swapper/NewYamlReadwriteSplittingRuleConfigurationSwapper.java
@@ -0,0 +1,76 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.readwritesplitting.yaml.swapper;
+
+import org.apache.shardingsphere.infra.config.algorithm.AlgorithmConfiguration;
+import org.apache.shardingsphere.infra.util.yaml.YamlEngine;
+import org.apache.shardingsphere.infra.util.yaml.datanode.YamlDataNode;
+import 
org.apache.shardingsphere.infra.yaml.config.swapper.rule.NewYamlRuleConfigurationSwapper;
+import 
org.apache.shardingsphere.metadata.persist.node.metadata.config.readwritesplitting.ReadwriteSplittingNodeConverter;
+import 
org.apache.shardingsphere.readwritesplitting.api.ReadwriteSplittingRuleConfiguration;
+import 
org.apache.shardingsphere.readwritesplitting.api.rule.ReadwriteSplittingDataSourceRuleConfiguration;
+import 
org.apache.shardingsphere.readwritesplitting.constant.ReadwriteSplittingOrder;
+
+import java.util.Collections;
+import java.util.Collection;
+import java.util.LinkedHashSet;
+import java.util.Map.Entry;
+
+// TODO Rename YamlReadwriteSplittingRuleConfigurationSwapper when metadata 
structure adjustment completed. #25485
+/**
+ * YAML readwrite-splitting rule configuration swapper.
+ */
+public final class NewYamlReadwriteSplittingRuleConfigurationSwapper
+        implements
+            
NewYamlRuleConfigurationSwapper<ReadwriteSplittingRuleConfiguration> {
+    
+    private final ReadwriteSplittingNodeConverter converter = new 
ReadwriteSplittingNodeConverter();
+    
+    @Override
+    public Collection<YamlDataNode> swapToDataNodes(final 
ReadwriteSplittingRuleConfiguration data) {
+        Collection<YamlDataNode> result = new LinkedHashSet<>();
+        for (ReadwriteSplittingDataSourceRuleConfiguration each : 
data.getDataSources()) {
+            result.add(new 
YamlDataNode(converter.getGroupNamePath(each.getName()), 
YamlEngine.marshal(each)));
+        }
+        for (Entry<String, AlgorithmConfiguration> entry : 
data.getLoadBalancers().entrySet()) {
+            result.add(new 
YamlDataNode(converter.getLoadBalancerPath(entry.getKey()), 
YamlEngine.marshal(entry.getValue())));
+        }
+        return result;
+    }
+    
+    @Override
+    public ReadwriteSplittingRuleConfiguration swapToObject(final 
Collection<YamlDataNode> dataNodes) {
+        // TODO
+        return new 
ReadwriteSplittingRuleConfiguration(Collections.emptyList(), 
Collections.emptyMap());
+    }
+    
+    @Override
+    public Class<ReadwriteSplittingRuleConfiguration> getTypeClass() {
+        return ReadwriteSplittingRuleConfiguration.class;
+    }
+    
+    @Override
+    public String getRuleTagName() {
+        return "READWRITE_SPLITTING";
+    }
+    
+    @Override
+    public int getOrder() {
+        return ReadwriteSplittingOrder.ORDER;
+    }
+}
diff --git 
a/features/readwrite-splitting/core/src/test/java/org/apache/shardingsphere/readwritesplitting/yaml/swapper/NewYamlReadwriteSplittingRuleConfigurationSwapperTest.java
 
b/features/readwrite-splitting/core/src/test/java/org/apache/shardingsphere/readwritesplitting/yaml/swapper/NewYamlReadwriteSplittingRuleConfigurationSwapperTest.java
new file mode 100644
index 00000000000..c8156c806db
--- /dev/null
+++ 
b/features/readwrite-splitting/core/src/test/java/org/apache/shardingsphere/readwritesplitting/yaml/swapper/NewYamlReadwriteSplittingRuleConfigurationSwapperTest.java
@@ -0,0 +1,58 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.readwritesplitting.yaml.swapper;
+
+import org.apache.shardingsphere.infra.config.algorithm.AlgorithmConfiguration;
+import org.apache.shardingsphere.infra.util.yaml.datanode.YamlDataNode;
+import 
org.apache.shardingsphere.readwritesplitting.api.ReadwriteSplittingRuleConfiguration;
+import 
org.apache.shardingsphere.readwritesplitting.api.rule.ReadwriteSplittingDataSourceRuleConfiguration;
+import org.junit.jupiter.api.Test;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.Properties;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.CoreMatchers.is;
+
+class NewYamlReadwriteSplittingRuleConfigurationSwapperTest {
+    
+    private final NewYamlReadwriteSplittingRuleConfigurationSwapper swapper = 
new NewYamlReadwriteSplittingRuleConfigurationSwapper();
+    
+    @Test
+    void assertSwapToDataNodesLoadBalancersEmpty() {
+        ReadwriteSplittingRuleConfiguration config = new 
ReadwriteSplittingRuleConfiguration(Collections.singleton(new 
ReadwriteSplittingDataSourceRuleConfiguration("group_0",
+                "write_ds", Arrays.asList("read_ds_0", "read_ds_1"), null)), 
Collections.emptyMap());
+        Collection<YamlDataNode> result = swapper.swapToDataNodes(config);
+        assertThat(result.size(), is(1));
+        assertThat(result.iterator().next().getKey(), is("/group_0"));
+    }
+    
+    @Test
+    void assertSwapToDataNodesLoadBalancers() {
+        ReadwriteSplittingRuleConfiguration config = new 
ReadwriteSplittingRuleConfiguration(Collections.singleton(new 
ReadwriteSplittingDataSourceRuleConfiguration("group_0",
+                "write_ds", Arrays.asList("read_ds_0", "read_ds_1"), null)), 
Collections.singletonMap("random", new AlgorithmConfiguration("random", new 
Properties())));
+        Collection<YamlDataNode> result = swapper.swapToDataNodes(config);
+        assertThat(result.size(), is(2));
+        Iterator<YamlDataNode> iterator = result.iterator();
+        assertThat(iterator.next().getKey(), is("/group_0"));
+        assertThat(iterator.next().getKey(), is("/load_balancers/random"));
+    }
+}
diff --git 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/DatabaseRuleBasedPersistService.java
 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/yaml/config/swapper/rule/NewYamlRuleConfigurationSwapper.java
similarity index 51%
copy from 
kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/DatabaseRuleBasedPersistService.java
copy to 
infra/common/src/main/java/org/apache/shardingsphere/infra/yaml/config/swapper/rule/NewYamlRuleConfigurationSwapper.java
index ee2c7257b1d..4bb47425804 100644
--- 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/DatabaseRuleBasedPersistService.java
+++ 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/yaml/config/swapper/rule/NewYamlRuleConfigurationSwapper.java
@@ -15,28 +15,26 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.metadata.persist.service.config.database;
+package org.apache.shardingsphere.infra.yaml.config.swapper.rule;
 
-import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
-
-import javax.sql.DataSource;
-import java.util.Collection;
-import java.util.Map;
+import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
+import org.apache.shardingsphere.infra.util.spi.annotation.SingletonSPI;
+import org.apache.shardingsphere.infra.util.spi.type.ordered.OrderedSPI;
+import 
org.apache.shardingsphere.infra.util.yaml.swapper.NewYamlConfigurationSwapper;
 
 /**
- * Database rule based persist service.
+ * TODO Rename YamlRuleConfigurationSwapper when metadata structure adjustment 
completed. #25485
+ * YAML rule configuration swapper.
  *
- * @param <T> type of configuration
+ * @param <T> type of rule configuration
  */
-public interface DatabaseRuleBasedPersistService<T> extends 
DatabaseBasedPersistService<T> {
+@SingletonSPI
+public interface NewYamlRuleConfigurationSwapper<T extends RuleConfiguration> 
extends NewYamlConfigurationSwapper<T>, OrderedSPI<T> {
     
     /**
-     * Persist configurations.
-     *
-     * @param databaseName database name
-     * @param dataSources data sources
-     * @param rules rules
-     * @param configs configurations
+     * Get YAML rule tag name.
+     * 
+     * @return YAML rule tag name
      */
-    void persist(String databaseName, Map<String, DataSource> dataSources, 
Collection<ShardingSphereRule> rules, T configs);
+    String getRuleTagName();
 }
diff --git 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/yaml/config/swapper/rule/NewYamlRuleConfigurationSwapperEngine.java
 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/yaml/config/swapper/rule/NewYamlRuleConfigurationSwapperEngine.java
new file mode 100644
index 00000000000..ce3cfbe45ed
--- /dev/null
+++ 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/yaml/config/swapper/rule/NewYamlRuleConfigurationSwapperEngine.java
@@ -0,0 +1,69 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.infra.yaml.config.swapper.rule;
+
+import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
+import org.apache.shardingsphere.infra.util.spi.type.ordered.OrderedSPILoader;
+import 
org.apache.shardingsphere.infra.yaml.config.pojo.rule.YamlRuleConfiguration;
+
+import java.util.Collection;
+import java.util.LinkedList;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.stream.Collectors;
+
+/**
+ * TODO Rename YamlRuleConfigurationSwapper when metadata structure adjustment 
completed. #25485
+ * YAML rule configuration swapper engine.
+ */
+public final class NewYamlRuleConfigurationSwapperEngine {
+    
+    /**
+     * Swap to YAML rule configurations.
+     *
+     * @param ruleConfigs rule configurations
+     * @return YAML rule configurations
+     */
+    @SuppressWarnings("rawtypes")
+    public Map<RuleConfiguration, NewYamlRuleConfigurationSwapper> 
swapToYamlRuleConfigurations(final Collection<RuleConfiguration> ruleConfigs) {
+        return 
OrderedSPILoader.getServices(NewYamlRuleConfigurationSwapper.class, 
ruleConfigs);
+    }
+    
+    /**
+     * Swap from YAML rule configurations to rule configurations.
+     *
+     * @param yamlRuleConfigs YAML rule configurations
+     * @return rule configurations
+     */
+    @SuppressWarnings("rawtypes")
+    public Collection<RuleConfiguration> swapToRuleConfigurations(final 
Collection<YamlRuleConfiguration> yamlRuleConfigs) {
+        Collection<RuleConfiguration> result = new LinkedList<>();
+        Collection<Class<?>> ruleConfigTypes = 
yamlRuleConfigs.stream().map(YamlRuleConfiguration::getRuleConfigurationType).collect(Collectors.toList());
+        for (Entry<Class<?>, YamlRuleConfigurationSwapper> entry : 
OrderedSPILoader.getServicesByClass(YamlRuleConfigurationSwapper.class, 
ruleConfigTypes).entrySet()) {
+            result.addAll(swapToRuleConfigurations(yamlRuleConfigs, 
entry.getKey(), entry.getValue()));
+        }
+        return result;
+    }
+    
+    @SuppressWarnings({"unchecked", "rawtypes"})
+    private Collection<RuleConfiguration> swapToRuleConfigurations(final 
Collection<YamlRuleConfiguration> yamlRuleConfigs,
+                                                                   final 
Class<?> ruleConfigType, final YamlRuleConfigurationSwapper swapper) {
+        return yamlRuleConfigs.stream()
+                .filter(each -> 
each.getRuleConfigurationType().equals(ruleConfigType)).map(each -> 
(RuleConfiguration) swapper.swapToObject(each)).collect(Collectors.toList());
+    }
+}
diff --git 
a/features/readwrite-splitting/api/src/main/java/org/apache/shardingsphere/readwritesplitting/api/ReadwriteSplittingRuleConfiguration.java
 
b/infra/util/src/main/java/org/apache/shardingsphere/infra/util/yaml/datanode/YamlDataNode.java
similarity index 53%
copy from 
features/readwrite-splitting/api/src/main/java/org/apache/shardingsphere/readwritesplitting/api/ReadwriteSplittingRuleConfiguration.java
copy to 
infra/util/src/main/java/org/apache/shardingsphere/infra/util/yaml/datanode/YamlDataNode.java
index b921b4d8fac..a8e90577f20 100644
--- 
a/features/readwrite-splitting/api/src/main/java/org/apache/shardingsphere/readwritesplitting/api/ReadwriteSplittingRuleConfiguration.java
+++ 
b/infra/util/src/main/java/org/apache/shardingsphere/infra/util/yaml/datanode/YamlDataNode.java
@@ -15,26 +15,16 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.readwritesplitting.api;
+package org.apache.shardingsphere.infra.util.yaml.datanode;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
-import org.apache.shardingsphere.infra.config.algorithm.AlgorithmConfiguration;
-import 
org.apache.shardingsphere.infra.config.rule.function.DistributedRuleConfiguration;
-import 
org.apache.shardingsphere.infra.config.rule.scope.DatabaseRuleConfiguration;
-import 
org.apache.shardingsphere.readwritesplitting.api.rule.ReadwriteSplittingDataSourceRuleConfiguration;
 
-import java.util.Collection;
-import java.util.Map;
-
-/**
- * Readwrite-splitting rule configuration.
- */
-@RequiredArgsConstructor
 @Getter
-public final class ReadwriteSplittingRuleConfiguration implements 
DatabaseRuleConfiguration, DistributedRuleConfiguration {
+@RequiredArgsConstructor
+public final class YamlDataNode {
     
-    private final Collection<ReadwriteSplittingDataSourceRuleConfiguration> 
dataSources;
+    private final String key;
     
-    private final Map<String, AlgorithmConfiguration> loadBalancers;
+    private final String value;
 }
diff --git 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/DatabaseRuleBasedPersistService.java
 
b/infra/util/src/main/java/org/apache/shardingsphere/infra/util/yaml/swapper/NewYamlConfigurationSwapper.java
similarity index 56%
copy from 
kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/DatabaseRuleBasedPersistService.java
copy to 
infra/util/src/main/java/org/apache/shardingsphere/infra/util/yaml/swapper/NewYamlConfigurationSwapper.java
index ee2c7257b1d..abc29a5f9ea 100644
--- 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/DatabaseRuleBasedPersistService.java
+++ 
b/infra/util/src/main/java/org/apache/shardingsphere/infra/util/yaml/swapper/NewYamlConfigurationSwapper.java
@@ -15,28 +15,33 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.metadata.persist.service.config.database;
+package org.apache.shardingsphere.infra.util.yaml.swapper;
 
-import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
+import org.apache.shardingsphere.infra.util.yaml.datanode.YamlDataNode;
 
-import javax.sql.DataSource;
 import java.util.Collection;
-import java.util.Map;
 
+// TODO Rename YamlConfigurationSwapper when metadata structure adjustment 
completed. #25485
 /**
- * Database rule based persist service.
+ * YAML configuration swapper.
  *
- * @param <T> type of configuration
+ * @param <T> type of swapped object
  */
-public interface DatabaseRuleBasedPersistService<T> extends 
DatabaseBasedPersistService<T> {
+public interface NewYamlConfigurationSwapper<T> {
     
     /**
-     * Persist configurations.
+    * Swap to YAML data node.
+    *
+    * @param data data to be swapped
+    * @return YAML data nodes
+    */
+    Collection<YamlDataNode> swapToDataNodes(T data);
+    
+    /**
+     * Swap from data node to object.
      *
-     * @param databaseName database name
-     * @param dataSources data sources
-     * @param rules rules
-     * @param configs configurations
+     * @param dataNodes data nodes
+     * @return swapped object
      */
-    void persist(String databaseName, Map<String, DataSource> dataSources, 
Collection<ShardingSphereRule> rules, T configs);
+    T swapToObject(Collection<YamlDataNode> dataNodes);
 }
diff --git 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/MetaDataBasedPersistService.java
 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/MetaDataBasedPersistService.java
index 388b2a29f55..38e449ca16f 100644
--- 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/MetaDataBasedPersistService.java
+++ 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/MetaDataBasedPersistService.java
@@ -23,7 +23,6 @@ import 
org.apache.shardingsphere.infra.datasource.props.DataSourceProperties;
 import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
 import 
org.apache.shardingsphere.metadata.persist.data.ShardingSphereDataBasedPersistService;
 import 
org.apache.shardingsphere.metadata.persist.service.config.database.DatabaseBasedPersistService;
-import 
org.apache.shardingsphere.metadata.persist.service.config.database.DatabaseRuleBasedPersistService;
 import 
org.apache.shardingsphere.metadata.persist.service.config.global.GlobalPersistService;
 import 
org.apache.shardingsphere.metadata.persist.service.database.DatabaseMetaDataBasedPersistService;
 import 
org.apache.shardingsphere.metadata.persist.service.version.MetaDataVersionBasedPersistService;
@@ -66,7 +65,7 @@ public interface MetaDataBasedPersistService {
      * 
      * @return persist service
      */
-    DatabaseRuleBasedPersistService<Collection<RuleConfiguration>> 
getDatabaseRulePersistService();
+    DatabaseBasedPersistService<Collection<RuleConfiguration>> 
getDatabaseRulePersistService();
     
     /**
      * Get global rule service.
diff --git 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/MetaDataPersistService.java
 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/MetaDataPersistService.java
index 73256ad23be..4bc180856fa 100644
--- 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/MetaDataPersistService.java
+++ 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/MetaDataPersistService.java
@@ -102,7 +102,7 @@ public final class MetaDataPersistService implements 
MetaDataBasedPersistService
             databaseMetaDataService.addDatabase(databaseName);
         } else {
             dataSourceService.persist(databaseName, 
getDataSourcePropertiesMap(databaseConfigs.getDataSources()));
-            databaseRulePersistService.persist(databaseName, dataSources, 
rules, databaseConfigs.getRuleConfigurations());
+            databaseRulePersistService.persist(databaseName, 
databaseConfigs.getRuleConfigurations());
         }
     }
     
diff --git 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/NewMetaDataPersistService.java
 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/NewMetaDataPersistService.java
index b731e2e5a27..373b3722943 100644
--- 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/NewMetaDataPersistService.java
+++ 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/NewMetaDataPersistService.java
@@ -104,7 +104,7 @@ public final class NewMetaDataPersistService implements 
MetaDataBasedPersistServ
             databaseMetaDataService.addDatabase(databaseName);
         } else {
             dataSourceService.persist(databaseName, 
getDataSourcePropertiesMap(databaseConfigs.getDataSources()));
-            databaseRulePersistService.persist(databaseName, dataSources, 
rules, databaseConfigs.getRuleConfigurations());
+            databaseRulePersistService.persist(databaseName, 
databaseConfigs.getRuleConfigurations());
         }
     }
     
diff --git 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/node/NewDatabaseMetaDataNode.java
 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/node/NewDatabaseMetaDataNode.java
index d2154f3562f..32d2b9ae2f7 100644
--- 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/node/NewDatabaseMetaDataNode.java
+++ 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/node/NewDatabaseMetaDataNode.java
@@ -19,10 +19,10 @@ package org.apache.shardingsphere.metadata.persist.node;
 
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
-import org.apache.shardingsphere.metadata.persist.node.metadata.DataSourceNode;
+import 
org.apache.shardingsphere.metadata.persist.node.metadata.datasource.DataSourcePathProcessor;
 
+// TODO Rename DatabaseMetaDataNode when metadata structure adjustment 
completed. #25485
 /**
- * TODO Rename DatabaseMetaDataNode when metadata structure adjustment 
completed. #25485
  * New database meta data node.
  */
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
@@ -37,7 +37,7 @@ public final class NewDatabaseMetaDataNode {
      * @return data sources path
      */
     public static String getDataSourcesPath(final String databaseName) {
-        return String.join("/", getMetaDataNodePath(), 
DataSourceNode.getDataSourcesPath(databaseName));
+        return String.join("/", getMetaDataNodePath(), 
DataSourcePathProcessor.getDataSourcesPath(databaseName));
     }
     
     /**
@@ -49,7 +49,7 @@ public final class NewDatabaseMetaDataNode {
      * @return data source path
      */
     public static String getDataSourcePath(final String databaseName, final 
String dataSourceName, final String version) {
-        return String.join("/", getMetaDataNodePath(), 
DataSourceNode.getDataSourcePath(databaseName, dataSourceName, version));
+        return String.join("/", getMetaDataNodePath(), 
DataSourcePathProcessor.getDataSourcePath(databaseName, dataSourceName, 
version));
     }
     
     /**
@@ -60,7 +60,7 @@ public final class NewDatabaseMetaDataNode {
      * @return data source active version path
      */
     public static String getDataSourceActiveVersionPath(final String 
databaseName, final String dataSourceName) {
-        return String.join("/", getMetaDataNodePath(), 
DataSourceNode.getActiveVersionPath(databaseName, dataSourceName));
+        return String.join("/", getMetaDataNodePath(), 
DataSourcePathProcessor.getActiveVersionPath(databaseName, dataSourceName));
     }
     
     /**
diff --git 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/node/metadata/config/readwritesplitting/ReadwriteSplittingNodeConverter.java
 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/node/metadata/config/readwritesplitting/ReadwriteSplittingNodeConverter.java
new file mode 100644
index 00000000000..90b01188618
--- /dev/null
+++ 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/node/metadata/config/readwritesplitting/ReadwriteSplittingNodeConverter.java
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package 
org.apache.shardingsphere.metadata.persist.node.metadata.config.readwritesplitting;
+
+/**
+ * Readwrite-splitting node converter.
+ */
+public final class ReadwriteSplittingNodeConverter {
+    
+    private static final String ROOT_NODE = "readwrite_splitting";
+    
+    private static final String ACTIVE_VERSION_NODE = "/active_version";
+    
+    private static final String VERSIONS_NODE = "/versions";
+    
+    private static final String LOAD_BALANCER_NODE = "load_balancers";
+    
+    /**
+     * Get group name path.
+     *
+     * @param groupName group name
+     * @return group name path
+     */
+    public String getGroupNamePath(final String groupName) {
+        return String.join("/", "", groupName);
+    }
+    
+    /**
+     * Get load balancer name.
+     *
+     * @param loadBalancerName load balancer name
+     * @return load balancer path
+     */
+    public String getLoadBalancerPath(final String loadBalancerName) {
+        return String.join("/", "", LOAD_BALANCER_NODE, loadBalancerName);
+    }
+}
diff --git 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/node/metadata/DataSourceNode.java
 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/node/metadata/datasource/DataSourcePathProcessor.java
similarity index 96%
rename from 
kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/node/metadata/DataSourceNode.java
rename to 
kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/node/metadata/datasource/DataSourcePathProcessor.java
index 660f932f894..5195f62eadb 100644
--- 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/node/metadata/DataSourceNode.java
+++ 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/node/metadata/datasource/DataSourcePathProcessor.java
@@ -15,16 +15,16 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.metadata.persist.node.metadata;
+package org.apache.shardingsphere.metadata.persist.node.metadata.datasource;
 
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
 
 /**
- * Database source node.
+ * Data source path processor.
  */
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
-public final class DataSourceNode {
+public final class DataSourcePathProcessor {
     
     private static final String ROOT_NODE = "data_sources";
     
diff --git 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/DatabaseRulePersistService.java
 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/DatabaseRulePersistService.java
index 8502e2df664..de93cf33088 100644
--- 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/DatabaseRulePersistService.java
+++ 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/DatabaseRulePersistService.java
@@ -20,38 +20,25 @@ package 
org.apache.shardingsphere.metadata.persist.service.config.database;
 import com.google.common.base.Strings;
 import lombok.RequiredArgsConstructor;
 import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
-import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
 import org.apache.shardingsphere.infra.util.yaml.YamlEngine;
 import 
org.apache.shardingsphere.infra.yaml.config.pojo.rule.YamlRuleConfiguration;
 import 
org.apache.shardingsphere.infra.yaml.config.swapper.rule.YamlRuleConfigurationSwapperEngine;
 import org.apache.shardingsphere.metadata.persist.node.DatabaseMetaDataNode;
 import org.apache.shardingsphere.mode.spi.PersistRepository;
 
-import javax.sql.DataSource;
 import java.util.Collection;
 import java.util.LinkedList;
-import java.util.Map;
 
 /**
  * Database rule persist service.
  */
 @RequiredArgsConstructor
-public final class DatabaseRulePersistService implements 
DatabaseRuleBasedPersistService<Collection<RuleConfiguration>> {
+public final class DatabaseRulePersistService implements 
DatabaseBasedPersistService<Collection<RuleConfiguration>> {
     
     private static final String DEFAULT_VERSION = "0";
     
     private final PersistRepository repository;
     
-    @Override
-    public void persist(final String databaseName, final Map<String, 
DataSource> dataSources,
-                        final Collection<ShardingSphereRule> rules, final 
Collection<RuleConfiguration> configs) {
-        if (Strings.isNullOrEmpty(getDatabaseActiveVersion(databaseName))) {
-            
repository.persist(DatabaseMetaDataNode.getActiveVersionPath(databaseName), 
DEFAULT_VERSION);
-        }
-        repository.persist(DatabaseMetaDataNode.getRulePath(databaseName, 
getDatabaseActiveVersion(databaseName)),
-                YamlEngine.marshal(createYamlRuleConfigurations(dataSources, 
rules, configs)));
-    }
-    
     @Override
     public void persist(final String databaseName, final 
Collection<RuleConfiguration> configs) {
         if (Strings.isNullOrEmpty(getDatabaseActiveVersion(databaseName))) {
@@ -65,12 +52,6 @@ public final class DatabaseRulePersistService implements 
DatabaseRuleBasedPersis
         return new 
YamlRuleConfigurationSwapperEngine().swapToYamlRuleConfigurations(ruleConfigs);
     }
     
-    // TODO Load single table refer to #22887
-    private Collection<YamlRuleConfiguration> 
createYamlRuleConfigurations(final Map<String, DataSource> dataSources, final 
Collection<ShardingSphereRule> rules,
-                                                                           
final Collection<RuleConfiguration> ruleConfigs) {
-        return new 
YamlRuleConfigurationSwapperEngine().swapToYamlRuleConfigurations(ruleConfigs);
-    }
-    
     @SuppressWarnings("unchecked")
     @Override
     public Collection<RuleConfiguration> load(final String databaseName) {
diff --git 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/DatabaseRuleBasedPersistService.java
 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/NewDatabaseBasedPersistService.java
similarity index 69%
copy from 
kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/DatabaseRuleBasedPersistService.java
copy to 
kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/NewDatabaseBasedPersistService.java
index ee2c7257b1d..868c34f9690 100644
--- 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/DatabaseRuleBasedPersistService.java
+++ 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/NewDatabaseBasedPersistService.java
@@ -17,26 +17,28 @@
 
 package org.apache.shardingsphere.metadata.persist.service.config.database;
 
-import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
-
-import javax.sql.DataSource;
-import java.util.Collection;
-import java.util.Map;
-
 /**
- * Database rule based persist service.
+ * TODO Rename DatabaseBasedPersistService when metadata structure adjustment 
completed. #25485
+ * Database based persist service.
  *
  * @param <T> type of configuration
  */
-public interface DatabaseRuleBasedPersistService<T> extends 
DatabaseBasedPersistService<T> {
+public interface NewDatabaseBasedPersistService<T> {
     
     /**
      * Persist configurations.
      *
      * @param databaseName database name
-     * @param dataSources data sources
-     * @param rules rules
      * @param configs configurations
      */
-    void persist(String databaseName, Map<String, DataSource> dataSources, 
Collection<ShardingSphereRule> rules, T configs);
+    void persist(String databaseName, T configs);
+    
+    /**
+     * Load configurations.
+     *
+     * @param databaseName database name
+     * @param ruleName rule name
+     * @return configurations
+     */
+    T load(String databaseName, String ruleName);
 }
diff --git 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/DatabaseRuleBasedPersistService.java
 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/NewDatabaseRuleBasedPersistService.java
similarity index 87%
rename from 
kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/DatabaseRuleBasedPersistService.java
rename to 
kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/NewDatabaseRuleBasedPersistService.java
index ee2c7257b1d..086ec06f705 100644
--- 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/DatabaseRuleBasedPersistService.java
+++ 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/NewDatabaseRuleBasedPersistService.java
@@ -24,11 +24,12 @@ import java.util.Collection;
 import java.util.Map;
 
 /**
+ * TODO Rename DatabaseRuleBasedPersistService when metadata structure 
adjustment completed. #25485
  * Database rule based persist service.
  *
  * @param <T> type of configuration
  */
-public interface DatabaseRuleBasedPersistService<T> extends 
DatabaseBasedPersistService<T> {
+public interface NewDatabaseRuleBasedPersistService<T> extends 
NewDatabaseBasedPersistService<T> {
     
     /**
      * Persist configurations.
diff --git 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/NewDatabaseRulePersistService.java
 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/NewDatabaseRulePersistService.java
new file mode 100644
index 00000000000..8877227a25c
--- /dev/null
+++ 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/NewDatabaseRulePersistService.java
@@ -0,0 +1,94 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.metadata.persist.service.config.database;
+
+import com.google.common.base.Strings;
+import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
+import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
+import org.apache.shardingsphere.infra.util.yaml.datanode.YamlDataNode;
+import 
org.apache.shardingsphere.infra.yaml.config.swapper.rule.NewYamlRuleConfigurationSwapper;
+import 
org.apache.shardingsphere.infra.yaml.config.swapper.rule.NewYamlRuleConfigurationSwapperEngine;
+import org.apache.shardingsphere.mode.spi.PersistRepository;
+
+import javax.sql.DataSource;
+import java.util.Collections;
+import java.util.List;
+import java.util.Collection;
+import java.util.Map;
+
+/**
+ * TODO Rename DatabaseRulePersistService when metadata structure adjustment 
completed. #25485
+ * Database rule persist service.
+ */
+@RequiredArgsConstructor
+public final class NewDatabaseRulePersistService implements 
NewDatabaseRuleBasedPersistService<Collection<RuleConfiguration>> {
+    
+    private static final String DEFAULT_VERSION = "0";
+    
+    private static final String ACTIVE_VERSION = "active_version";
+    
+    private static final String VERSIONS = "versions";
+    
+    private final PersistRepository repository;
+    
+    @Override
+    public void persist(final String databaseName, final Map<String, 
DataSource> dataSources,
+                        final Collection<ShardingSphereRule> rules, final 
Collection<RuleConfiguration> configs) {
+        // TODO Load single table refer to #22887
+    }
+    
+    @SuppressWarnings({"unchecked", "rawtypes"})
+    @Override
+    public void persist(final String databaseName, final 
Collection<RuleConfiguration> configs) {
+        Map<RuleConfiguration, NewYamlRuleConfigurationSwapper> yamlConfigs = 
new 
NewYamlRuleConfigurationSwapperEngine().swapToYamlRuleConfigurations(configs);
+        for (Map.Entry<RuleConfiguration, NewYamlRuleConfigurationSwapper> 
entry : yamlConfigs.entrySet()) {
+            Collection<YamlDataNode> dataNodes = 
entry.getValue().swapToDataNodes(entry.getKey());
+            if (dataNodes.isEmpty()) {
+                continue;
+            }
+            persistDataNodes(entry.getValue().getRuleTagName().toLowerCase(), 
dataNodes);
+        }
+    }
+    
+    private void persistDataNodes(final String ruleName, final 
Collection<YamlDataNode> dataNodes) {
+        for (YamlDataNode each : dataNodes) {
+            if (Strings.isNullOrEmpty(repository.getDirectly(each.getKey()))) {
+                repository.persist(appendActiveVersion(ruleName, 
each.getKey()), DEFAULT_VERSION);
+            }
+            List<String> versions = 
repository.getChildrenKeys(String.join("/", "", ruleName, each.getKey(), 
VERSIONS));
+            repository.persist(appendVersion(ruleName, each.getKey(), 
versions.isEmpty()
+                    ? DEFAULT_VERSION
+                    : String.valueOf(Integer.parseInt(versions.get(0)) + 1)), 
each.getValue());
+        }
+    }
+    
+    private String appendActiveVersion(final String ruleName, final String 
key) {
+        return String.join("/", "", ruleName, key, ACTIVE_VERSION);
+    }
+    
+    private String appendVersion(final String ruleName, final String key, 
final String nextVersion) {
+        return String.join("/", "", ruleName, key, VERSIONS, nextVersion);
+    }
+    
+    @Override
+    public Collection<RuleConfiguration> load(final String databaseName, final 
String ruleName) {
+        // TODO
+        return Collections.emptyList();
+    }
+}
diff --git 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterModeContextManager.java
 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterModeContextManager.java
index 44dc6bb02b4..e0d8e5a8cd7 100644
--- 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterModeContextManager.java
+++ 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterModeContextManager.java
@@ -108,9 +108,7 @@ public final class ClusterModeContextManager implements 
ModeContextManager, Cont
     
     @Override
     public void alterRuleConfiguration(final String databaseName, final 
Collection<RuleConfiguration> ruleConfigs) {
-        
contextManager.getMetaDataContexts().getPersistService().getDatabaseRulePersistService().persist(databaseName,
-                
contextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName).getResourceMetaData().getDataSources(),
-                
contextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName).getRuleMetaData().getRules(),
 ruleConfigs);
+        
contextManager.getMetaDataContexts().getPersistService().getDatabaseRulePersistService().persist(databaseName,
 ruleConfigs);
     }
     
     @Override
diff --git 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/util/YamlDatabaseConfigurationImportExecutor.java
 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/util/YamlDatabaseConfigurationImportExecutor.java
index a975025b013..e6e81da86c4 100644
--- 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/util/YamlDatabaseConfigurationImportExecutor.java
+++ 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/util/YamlDatabaseConfigurationImportExecutor.java
@@ -196,9 +196,7 @@ public final class YamlDatabaseConfigurationImportExecutor {
         }
         
ruleConfigsMap.keySet().stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList())
                 .forEach(each -> addRules(allRuleConfigs, 
ruleConfigsMap.get(each), database));
-        
metaDataContexts.getPersistService().getDatabaseRulePersistService().persist(metaDataContexts.getMetaData().getDatabase(databaseName).getName(),
-                
metaDataContexts.getMetaData().getDatabase(databaseName).getResourceMetaData().getDataSources(),
-                
metaDataContexts.getMetaData().getDatabase(databaseName).getRuleMetaData().getRules(),
 allRuleConfigs);
+        
metaDataContexts.getPersistService().getDatabaseRulePersistService().persist(metaDataContexts.getMetaData().getDatabase(databaseName).getName(),
 allRuleConfigs);
     }
     
     private void addRules(final Collection<RuleConfiguration> allRuleConfigs, 
final Collection<RuleConfiguration> ruleConfigs, final ShardingSphereDatabase 
database) {


Reply via email to