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

menghaoran 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 721174e3ce3 Load and persist default schema (#37045)
721174e3ce3 is described below

commit 721174e3ce325c1a2a98de4155c3f760339f1aae
Author: Haoran Meng <[email protected]>
AuthorDate: Sun Nov 9 06:45:15 2025 +0800

    Load and persist default schema (#37045)
---
 .../infra/metadata/ShardingSphereMetaData.java          | 17 -----------------
 .../database/ShardingSphereDatabaseFactory.java         |  7 ++++++-
 .../persist/metadata/DatabaseMetaDataPersistFacade.java | 15 +++++++++++++++
 .../service/ClusterMetaDataManagerPersistService.java   |  2 +-
 .../StandaloneMetaDataManagerPersistService.java        |  4 +---
 .../StandaloneMetaDataManagerPersistServiceTest.java    |  2 +-
 6 files changed, 24 insertions(+), 23 deletions(-)

diff --git 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/ShardingSphereMetaData.java
 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/ShardingSphereMetaData.java
index 083cc539130..d387a0179ee 100644
--- 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/ShardingSphereMetaData.java
+++ 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/ShardingSphereMetaData.java
@@ -17,12 +17,10 @@
 
 package org.apache.shardingsphere.infra.metadata;
 
-import com.google.common.collect.Maps;
 import lombok.AccessLevel;
 import lombok.Getter;
 import lombok.SneakyThrows;
 import org.apache.shardingsphere.database.connector.core.type.DatabaseType;
-import 
org.apache.shardingsphere.database.connector.core.type.DatabaseTypeRegistry;
 import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
 import 
org.apache.shardingsphere.infra.config.props.temporary.TemporaryConfigurationProperties;
 import 
org.apache.shardingsphere.infra.datasource.pool.destroyer.DataSourcePoolDestroyer;
@@ -30,16 +28,12 @@ import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabaseFactory;
 import 
org.apache.shardingsphere.infra.metadata.database.resource.ResourceMetaData;
 import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
-import 
org.apache.shardingsphere.infra.metadata.database.schema.builder.GenericSchemaBuilder;
-import 
org.apache.shardingsphere.infra.metadata.database.schema.builder.GenericSchemaBuilderMaterial;
-import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
 import 
org.apache.shardingsphere.infra.metadata.identifier.ShardingSphereIdentifier;
 import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
 import 
org.apache.shardingsphere.infra.rule.attribute.datasource.StaticDataSourceRuleAttribute;
 import org.apache.shardingsphere.infra.rule.scope.GlobalRule;
 import 
org.apache.shardingsphere.infra.rule.scope.GlobalRule.GlobalRuleChangedType;
 
-import java.sql.SQLException;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.LinkedList;
@@ -117,21 +111,10 @@ public final class ShardingSphereMetaData implements 
AutoCloseable {
      */
     public void addDatabase(final String databaseName, final DatabaseType 
protocolType, final ConfigurationProperties props) {
         ShardingSphereDatabase database = 
ShardingSphereDatabaseFactory.create(databaseName, protocolType, props);
-        Map<String, ShardingSphereSchema> schemas = 
buildDefaultSchema(databaseName, protocolType, props);
-        schemas.entrySet().stream().filter(entry -> 
!database.containsSchema(entry.getKey())).forEach(entry -> 
database.addSchema(entry.getValue()));
         databases.put(new ShardingSphereIdentifier(database.getName()), 
database);
         globalRuleMetaData.getRules().forEach(each -> ((GlobalRule) 
each).refresh(databases.values(), GlobalRuleChangedType.DATABASE_CHANGED));
     }
     
-    private Map<String, ShardingSphereSchema> buildDefaultSchema(final String 
databaseName, final DatabaseType protocolType, final ConfigurationProperties 
props) {
-        try {
-            return new 
ConcurrentHashMap<>(GenericSchemaBuilder.build(protocolType,
-                    new GenericSchemaBuilderMaterial(Maps.newHashMap(), 
Collections.emptyList(), props, new 
DatabaseTypeRegistry(protocolType).getDefaultSchemaName(databaseName))));
-        } catch (final SQLException ignored) {
-        }
-        return Maps.newHashMap();
-    }
-    
     /**
      * Put database.
      *
diff --git 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabaseFactory.java
 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabaseFactory.java
index ed0e40ae925..4ca1be299d1 100644
--- 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabaseFactory.java
+++ 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabaseFactory.java
@@ -58,7 +58,12 @@ public final class ShardingSphereDatabaseFactory {
     public static ShardingSphereDatabase create(final String name, final 
DatabaseType protocolType, final ConfigurationProperties props) {
         DatabaseConfiguration databaseConfig = new 
DataSourceProvidedDatabaseConfiguration(new LinkedHashMap<>(), new 
LinkedList<>());
         ResourceMetaData resourceMetaData = new 
ResourceMetaData(databaseConfig.getDataSources(), 
databaseConfig.getStorageUnits());
-        return new ShardingSphereDatabase(name, protocolType, 
resourceMetaData, new RuleMetaData(new LinkedList<>()), 
SystemSchemaBuilder.build(name, protocolType, props).values());
+        Map<String, ShardingSphereSchema> systemSchemas = 
SystemSchemaBuilder.build(name, protocolType, props);
+        String defaultSchemaName = new 
DatabaseTypeRegistry(protocolType).getDefaultSchemaName(name);
+        if (!systemSchemas.containsKey(defaultSchemaName)) {
+            systemSchemas.put(defaultSchemaName, new 
ShardingSphereSchema(defaultSchemaName));
+        }
+        return new ShardingSphereDatabase(name, protocolType, 
resourceMetaData, new RuleMetaData(new LinkedList<>()), systemSchemas.values());
     }
     
     /**
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/metadata/DatabaseMetaDataPersistFacade.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/metadata/DatabaseMetaDataPersistFacade.java
index 32dc4fceb03..e3fb2dd45fa 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/metadata/DatabaseMetaDataPersistFacade.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/metadata/DatabaseMetaDataPersistFacade.java
@@ -149,4 +149,19 @@ public final class DatabaseMetaDataPersistFacade {
             throw new LoadTableMetaDataFailedException(databaseName, 
needReloadTables, ex);
         }
     }
+    
+    /**
+     * Persist created database schemas.
+     *
+     * @param database database
+     */
+    public void persistCreatedDatabaseSchemas(final ShardingSphereDatabase 
database) {
+        database.getAllSchemas().forEach(each -> {
+            if (each.isEmpty()) {
+                schema.add(database.getName(), each.getName());
+            } else {
+                table.persist(database.getName(), each.getName(), 
each.getAllTables());
+            }
+        });
+    }
 }
diff --git 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/persist/service/ClusterMetaDataManagerPersistService.java
 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/persist/service/ClusterMetaDataManagerPersistService.java
index b85ef469349..d5d4ac97335 100644
--- 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/persist/service/ClusterMetaDataManagerPersistService.java
+++ 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/persist/service/ClusterMetaDataManagerPersistService.java
@@ -71,7 +71,7 @@ public final class ClusterMetaDataManagerPersistService 
implements MetaDataManag
         
metaDataPersistFacade.getDatabaseMetaDataFacade().getDatabase().add(databaseName);
         clusterDatabaseListenerPersistCoordinator.persist(databaseName, 
ClusterDatabaseListenerCoordinatorType.CREATE);
         ShardingSphereDatabase reloadDatabase = 
getReloadedMetaDataContexts(originalMetaDataContexts).getMetaData().getDatabase(databaseName);
-        
metaDataPersistFacade.getDatabaseMetaDataFacade().getSchema().add(databaseName, 
reloadDatabase.getAllSchemas().iterator().next().getName());
+        
metaDataPersistFacade.getDatabaseMetaDataFacade().persistCreatedDatabaseSchemas(reloadDatabase);
     }
     
     @Override
diff --git 
a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistService.java
 
b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistService.java
index 6e56b85e5f0..e373f1acc41 100644
--- 
a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistService.java
+++ 
b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistService.java
@@ -68,11 +68,9 @@ public final class StandaloneMetaDataManagerPersistService 
implements MetaDataMa
     
     @Override
     public void createDatabase(final String databaseName) {
-        MetaDataContexts originalMetaDataContexts = new 
MetaDataContexts(metaDataContextManager.getMetaDataContexts().getMetaData(), 
metaDataContextManager.getMetaDataContexts().getStatistics());
         
metaDataPersistFacade.getDatabaseMetaDataFacade().getDatabase().add(databaseName);
         
metaDataContextManager.getDatabaseMetaDataManager().addDatabase(databaseName);
-        
metaDataPersistFacade.getDatabaseMetaDataFacade().persistReloadDatabase(databaseName,
 
metaDataContextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName),
-                
originalMetaDataContexts.getMetaData().getDatabase(databaseName));
+        
metaDataPersistFacade.getDatabaseMetaDataFacade().persistCreatedDatabaseSchemas(metaDataContextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName));
         OrderedServicesCache.clearCache();
     }
     
diff --git 
a/mode/type/standalone/core/src/test/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistServiceTest.java
 
b/mode/type/standalone/core/src/test/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistServiceTest.java
index 59ff721eae6..6ef650177bc 100644
--- 
a/mode/type/standalone/core/src/test/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistServiceTest.java
+++ 
b/mode/type/standalone/core/src/test/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistServiceTest.java
@@ -81,7 +81,7 @@ class StandaloneMetaDataManagerPersistServiceTest {
         metaDataManagerPersistService.createDatabase("foo_db");
         
verify(metaDataContextManager.getDatabaseMetaDataManager()).addDatabase("foo_db");
         
verify(metaDataPersistFacade.getDatabaseMetaDataFacade().getDatabase()).add("foo_db");
-        
verify(metaDataPersistFacade.getDatabaseMetaDataFacade()).persistReloadDatabase(eq("foo_db"),
 any(ShardingSphereDatabase.class), any(ShardingSphereDatabase.class));
+        
verify(metaDataPersistFacade.getDatabaseMetaDataFacade()).persistCreatedDatabaseSchemas(any(ShardingSphereDatabase.class));
     }
     
     @Test

Reply via email to