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