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

yx9o 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 a3a0d3db8d4 Add ShardingSphereDatabase.reloadRules (#18742)
a3a0d3db8d4 is described below

commit a3a0d3db8d419dd45cc1e0c33c64d7f81edc0655
Author: Liang Zhang <[email protected]>
AuthorDate: Thu Jun 30 22:04:30 2022 +0800

    Add ShardingSphereDatabase.reloadRules (#18742)
---
 .../infra/metadata/database/ShardingSphereDatabase.java   |  9 +++++++++
 .../shardingsphere/mode/manager/ContextManager.java       | 15 +++------------
 2 files changed, 12 insertions(+), 12 deletions(-)

diff --git 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabase.java
 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabase.java
index 279a95ea9ae..c43123d8fa5 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabase.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabase.java
@@ -118,4 +118,13 @@ public final class ShardingSphereDatabase {
     public boolean hasDataSource() {
         return !resource.getDataSources().isEmpty();
     }
+    
+    /**
+     * Reload rules.
+     */
+    public synchronized void reloadRules() {
+        Collection<ShardingSphereRule> databaseRules = 
DatabaseRulesBuilder.build(name, new 
DataSourceProvidedDatabaseConfiguration(resource.getDataSources(), 
ruleMetaData.getConfigurations()));
+        ruleMetaData.getRules().clear();
+        ruleMetaData.getRules().addAll(databaseRules);
+    }
 }
diff --git 
a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
 
b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
index f944c1f3e6b..ec52ad11eea 100644
--- 
a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
+++ 
b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
@@ -43,9 +43,7 @@ import 
org.apache.shardingsphere.infra.metadata.database.schema.builder.GenericS
 import 
org.apache.shardingsphere.infra.metadata.database.schema.builder.SystemSchemaBuilder;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.decorator.model.ShardingSphereSchema;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.decorator.model.ShardingSphereTable;
-import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
 import org.apache.shardingsphere.infra.rule.builder.global.GlobalRulesBuilder;
-import 
org.apache.shardingsphere.infra.rule.builder.schema.DatabaseRulesBuilder;
 import org.apache.shardingsphere.infra.rule.identifier.type.InstanceAwareRule;
 import 
org.apache.shardingsphere.infra.rule.identifier.type.MutableDataNodeRule;
 import org.apache.shardingsphere.infra.rule.identifier.type.ResourceHeldRule;
@@ -175,7 +173,7 @@ public final class ContextManager implements AutoCloseable {
     
     private void alterTable(final ShardingSphereDatabase database, final 
String schemaName, final ShardingSphereTable beBoChangedTable) {
         if (containsMutableDataNodeRule(database, schemaName, 
beBoChangedTable.getName())) {
-            refreshRules(database);
+            database.reloadRules();
         }
         database.getSchemas().get(schemaName).put(beBoChangedTable.getName(), 
beBoChangedTable);
     }
@@ -191,13 +189,6 @@ public final class ContextManager implements AutoCloseable 
{
         }
     }
     
-    private void refreshRules(final ShardingSphereDatabase database) {
-        Collection<ShardingSphereRule> databaseRules = 
DatabaseRulesBuilder.build(
-                database.getName(), new 
DataSourceProvidedDatabaseConfiguration(database.getResource().getDataSources(),
 database.getRuleMetaData().getConfigurations()));
-        database.getRuleMetaData().getRules().clear();
-        database.getRuleMetaData().getRules().addAll(databaseRules);
-    }
-    
     /**
      * Drop schema.
      *
@@ -390,7 +381,7 @@ public final class ContextManager implements AutoCloseable {
     public void reloadSchemaMetaData(final String databaseName, final String 
schemaName, final String dataSourceName) {
         try {
             ShardingSphereDatabase database = 
metaDataContexts.getMetaData().getDatabases().get(databaseName);
-            refreshRules(database);
+            database.reloadRules();
             GenericSchemaBuilderMaterials materials = new 
GenericSchemaBuilderMaterials(database.getProtocolType(), 
database.getResource().getDatabaseType(),
                     Collections.singletonMap(dataSourceName, 
database.getResource().getDataSources().get(dataSourceName)),
                     database.getRuleMetaData().getRules(), 
metaDataContexts.getMetaData().getProps(), schemaName);
@@ -445,7 +436,7 @@ public final class ContextManager implements AutoCloseable {
     private Map<String, ShardingSphereSchema> loadActualSchema(final String 
databaseName) throws SQLException {
         ShardingSphereDatabase database = 
metaDataContexts.getMetaData().getDatabases().get(databaseName);
         Map<String, DataSource> dataSourceMap = 
database.getResource().getDataSources();
-        refreshRules(database);
+        database.reloadRules();
         DatabaseType databaseType = 
DatabaseTypeEngine.getDatabaseType(dataSourceMap.values());
         Map<String, ShardingSphereSchema> result = new ConcurrentHashMap<>();
         GenericSchemaBuilderMaterials materials = new 
GenericSchemaBuilderMaterials(database.getProtocolType(),

Reply via email to