You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by du...@apache.org on 2023/04/12 02:22:49 UTC

[shardingsphere] branch master updated: Add DatabaseRuleBasedPersistService to prepare load single table #22887 (#25112)

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

duanzhengqiang 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 5a2c7e27ea9 Add DatabaseRuleBasedPersistService to prepare load single table #22887 (#25112)
5a2c7e27ea9 is described below

commit 5a2c7e27ea95acb7ed90a55bbef91f980ddd84e7
Author: zhaojinchao <zh...@apache.org>
AuthorDate: Wed Apr 12 10:22:43 2023 +0800

    Add DatabaseRuleBasedPersistService to prepare load single table #22887 (#25112)
---
 .../metadata/persist/MetaDataPersistService.java   |  2 +-
 .../config/database/DataSourcePersistService.java  |  7 +---
 .../database/DatabaseBasedPersistService.java      |  6 +--
 ...e.java => DatabaseRuleBasedPersistService.java} | 44 ++--------------------
 .../database/DatabaseRulePersistService.java       | 16 +++++++-
 .../manager/cluster/ClusterModeContextManager.java |  2 -
 .../standalone/StandaloneModeContextManager.java   |  7 +---
 7 files changed, 24 insertions(+), 60 deletions(-)

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 82f3f512957..3b941bc66d9 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
@@ -99,7 +99,7 @@ public final class MetaDataPersistService {
         if (dataSourcePropertiesMap.isEmpty() && databaseConfigs.getRuleConfigurations().isEmpty()) {
             databaseMetaDataService.addDatabase(databaseName);
         } else {
-            dataSourceService.persist(databaseName, dataSources, rules, getDataSourcePropertiesMap(databaseConfigs.getDataSources()));
+            dataSourceService.persist(databaseName, getDataSourcePropertiesMap(databaseConfigs.getDataSources()));
             databaseRulePersistService.persist(databaseName, dataSources, rules, databaseConfigs.getRuleConfigurations());
         }
     }
diff --git a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/DataSourcePersistService.java b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/DataSourcePersistService.java
index d2a536b3a63..4dada011424 100644
--- a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/DataSourcePersistService.java
+++ b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/DataSourcePersistService.java
@@ -44,12 +44,7 @@ public final class DataSourcePersistService implements DatabaseBasedPersistServi
     private final PersistRepository repository;
     
     @Override
-    public void persist(final String databaseName, final Map<String, DataSource> dataSources, final Collection<ShardingSphereRule> rules,
-                        final Map<String, DataSourceProperties> dataSourcePropsMap) {
-        persist(databaseName, dataSourcePropsMap);
-    }
-    
-    private void persist(final String databaseName, final Map<String, DataSourceProperties> dataSourceConfigs) {
+    public void persist(final String databaseName, final Map<String, DataSourceProperties> dataSourceConfigs) {
         if (Strings.isNullOrEmpty(getDatabaseActiveVersion(databaseName))) {
             repository.persist(DatabaseMetaDataNode.getActiveVersionPath(databaseName), DEFAULT_VERSION);
         }
diff --git a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/DatabaseBasedPersistService.java b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/DatabaseBasedPersistService.java
index 3a3deb0270e..2f4de995d8c 100644
--- a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/DatabaseBasedPersistService.java
+++ b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/DatabaseBasedPersistService.java
@@ -24,7 +24,7 @@ import java.util.Map;
 import java.util.Collection;
 
 /**
- * Schema based persist service.
+ * Database based persist service.
  * 
  * @param <T> type of configuration
  */
@@ -34,11 +34,9 @@ public interface DatabaseBasedPersistService<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);
     
     /**
      * Persist version configurations.
diff --git a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/DatabaseBasedPersistService.java b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/DatabaseRuleBasedPersistService.java
similarity index 56%
copy from kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/DatabaseBasedPersistService.java
copy to kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/DatabaseRuleBasedPersistService.java
index 3a3deb0270e..ee2c7257b1d 100644
--- a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/DatabaseBasedPersistService.java
+++ b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/DatabaseRuleBasedPersistService.java
@@ -20,15 +20,15 @@ package org.apache.shardingsphere.metadata.persist.service.config.database;
 import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
 
 import javax.sql.DataSource;
-import java.util.Map;
 import java.util.Collection;
+import java.util.Map;
 
 /**
- * Schema based persist service.
- * 
+ * Database rule based persist service.
+ *
  * @param <T> type of configuration
  */
-public interface DatabaseBasedPersistService<T> {
+public interface DatabaseRuleBasedPersistService<T> extends DatabaseBasedPersistService<T> {
     
     /**
      * Persist configurations.
@@ -39,40 +39,4 @@ public interface DatabaseBasedPersistService<T> {
      * @param configs configurations
      */
     void persist(String databaseName, Map<String, DataSource> dataSources, Collection<ShardingSphereRule> rules, T configs);
-    
-    /**
-     * Persist version configurations.
-     * 
-     * @param databaseName database name
-     * @param version version
-     * @param dataSources data sources
-     * @param rules rules
-     * @param configs configurations
-     */
-    void persist(String databaseName, String version, Map<String, DataSource> dataSources, Collection<ShardingSphereRule> rules, T configs);
-    
-    /**
-     * Load configurations.
-     *
-     * @param databaseName database name
-     * @return configurations
-     */
-    T load(String databaseName);
-    
-    /**
-     * Load configurations based version.
-     * 
-     * @param databaseName database name
-     * @param version version
-     * @return configurations
-     */
-    T load(String databaseName, String version);
-    
-    /**
-     * Judge whether schema configuration existed.
-     *
-     * @param databaseName database name
-     * @return configuration existed or not
-     */
-    boolean isExisted(String databaseName);
 }
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 1a63ca4de62..1de8ac02629 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
@@ -36,7 +36,7 @@ import java.util.Map;
  * Database rule persist service.
  */
 @RequiredArgsConstructor
-public final class DatabaseRulePersistService implements DatabaseBasedPersistService<Collection<RuleConfiguration>> {
+public final class DatabaseRulePersistService implements DatabaseRuleBasedPersistService<Collection<RuleConfiguration>> {
     
     private static final String DEFAULT_VERSION = "0";
     
@@ -52,12 +52,26 @@ public final class DatabaseRulePersistService implements DatabaseBasedPersistSer
                 YamlEngine.marshal(createYamlRuleConfigurations(dataSources, rules, configs)));
     }
     
+    @Override
+    public void persist(final String databaseName, 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(configs)));
+    }
+    
     @Override
     public void persist(final String databaseName, final String version, final Map<String, DataSource> dataSources,
                         final Collection<ShardingSphereRule> rules, final Collection<RuleConfiguration> configs) {
         repository.persist(DatabaseMetaDataNode.getRulePath(databaseName, version), YamlEngine.marshal(createYamlRuleConfigurations(dataSources, rules, configs)));
     }
     
+    private Collection<YamlRuleConfiguration> createYamlRuleConfigurations(final Collection<RuleConfiguration> ruleConfigs) {
+        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);
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 0f1815ff005..81212bd8ece 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
@@ -99,8 +99,6 @@ public final class ClusterModeContextManager implements ModeContextManager, Cont
     @Override
     public void unregisterStorageUnits(final String databaseName, final Collection<String> toBeDroppedStorageUnitNames) {
         contextManager.getMetaDataContexts().getPersistService().getDataSourceService().persist(databaseName,
-                contextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName).getResourceMetaData().getDataSources(),
-                contextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName).getRuleMetaData().getRules(),
                 getToBeReversedDataSourcePropsMap(contextManager.getMetaDataContexts().getPersistService().getDataSourceService().load(databaseName), toBeDroppedStorageUnitNames));
     }
     
diff --git a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneModeContextManager.java b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneModeContextManager.java
index 2fcf620cd92..7754978fc55 100644
--- a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneModeContextManager.java
+++ b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneModeContextManager.java
@@ -237,8 +237,6 @@ public final class StandaloneModeContextManager implements ModeContextManager, C
         contextManager.renewMetaDataContexts(reloadMetaDataContexts);
         Map<String, DataSourceProperties> toBeReversedDataSourcePropsMap = getToBeReversedDataSourcePropsMap(dataSourcePropsMap, toBeDroppedStorageUnitNames);
         contextManager.getMetaDataContexts().getPersistService().getDataSourceService().persist(contextManager.getMetaDataContexts().getMetaData().getActualDatabaseName(databaseName),
-                contextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName).getResourceMetaData().getDataSources(),
-                contextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName).getRuleMetaData().getRules(),
                 toBeReversedDataSourcePropsMap);
         switchingResource.closeStaleDataSources();
         clearServiceCache();
@@ -256,10 +254,7 @@ public final class StandaloneModeContextManager implements ModeContextManager, C
     public void alterRuleConfiguration(final String databaseName, final Collection<RuleConfiguration> ruleConfigs) {
         contextManager.alterRuleConfiguration(databaseName, ruleConfigs);
         contextManager.getMetaDataContexts().getPersistService()
-                .getDatabaseRulePersistService().persist(contextManager.getMetaDataContexts().getMetaData().getActualDatabaseName(databaseName),
-                        contextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName).getResourceMetaData().getDataSources(),
-                        contextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName).getRuleMetaData().getRules(),
-                        ruleConfigs);
+                .getDatabaseRulePersistService().persist(contextManager.getMetaDataContexts().getMetaData().getActualDatabaseName(databaseName), ruleConfigs);
         clearServiceCache();
     }