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 c25770e0a3f Add protocolType for ShardingSphereMetaData and refactor 
ShardingSphereDatabasesFactory (#37795)
c25770e0a3f is described below

commit c25770e0a3f7d4a13a312f3c1dc76f0d8a3172fe
Author: Haoran Meng <[email protected]>
AuthorDate: Wed Jan 21 14:05:27 2026 +0800

    Add protocolType for ShardingSphereMetaData and refactor 
ShardingSphereDatabasesFactory (#37795)
---
 .../infra/metadata/ShardingSphereMetaData.java         |  5 +++++
 .../database/ShardingSphereDatabasesFactory.java       | 15 ++++++++-------
 .../database/ShardingSphereDatabasesFactoryTest.java   | 10 ++++++++--
 .../LocalConfigurationMetaDataContextsInitFactory.java |  5 ++++-
 .../RegisterCenterMetaDataContextsInitFactory.java     |  4 ++--
 .../metadata/factory/MetaDataContextsFactoryTest.java  |  5 +++--
 ...alConfigurationMetaDataContextsInitFactoryTest.java |  6 ++++--
 .../RegisterCenterMetaDataContextsInitFactoryTest.java |  4 ++--
 .../manager/rule/GlobalConfigurationManagerTest.java   | 18 +++++++++++++-----
 9 files changed, 49 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 22e48f830c6..67a2becf39b 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
@@ -23,6 +23,7 @@ import lombok.SneakyThrows;
 import org.apache.shardingsphere.database.connector.core.type.DatabaseType;
 import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
 import 
org.apache.shardingsphere.infra.config.props.temporary.TemporaryConfigurationProperties;
+import org.apache.shardingsphere.infra.database.DatabaseTypeEngine;
 import 
org.apache.shardingsphere.infra.datasource.pool.destroyer.DataSourcePoolDestroyer;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabaseFactory;
@@ -35,6 +36,7 @@ import org.apache.shardingsphere.infra.rule.scope.GlobalRule;
 import 
org.apache.shardingsphere.infra.rule.scope.GlobalRule.GlobalRuleChangedType;
 
 import java.util.Collection;
+import java.util.Collections;
 import java.util.LinkedList;
 import java.util.Map;
 import java.util.Optional;
@@ -58,6 +60,8 @@ public final class ShardingSphereMetaData implements 
AutoCloseable {
     
     private final TemporaryConfigurationProperties temporaryProps;
     
+    private final DatabaseType protocolType;
+    
     public ShardingSphereMetaData(final Collection<ShardingSphereDatabase> 
databases, final ResourceMetaData globalResourceMetaData,
                                   final RuleMetaData globalRuleMetaData, final 
ConfigurationProperties props) {
         this.databases = new 
ConcurrentHashMap<>(databases.stream().collect(Collectors.toMap(each -> new 
ShardingSphereIdentifier(each.getName()), each -> each)));
@@ -65,6 +69,7 @@ public final class ShardingSphereMetaData implements 
AutoCloseable {
         this.globalRuleMetaData = globalRuleMetaData;
         this.props = props;
         temporaryProps = new 
TemporaryConfigurationProperties(props.getProps());
+        protocolType = databases.isEmpty() ? 
DatabaseTypeEngine.getProtocolType(Collections.emptyMap(), props) : 
databases.iterator().next().getProtocolType();
     }
     
     /**
diff --git 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabasesFactory.java
 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabasesFactory.java
index 1bb4de1bf01..1f6cc152128 100644
--- 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabasesFactory.java
+++ 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabasesFactory.java
@@ -19,11 +19,10 @@ package org.apache.shardingsphere.infra.metadata.database;
 
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
-import org.apache.shardingsphere.infra.config.database.DatabaseConfiguration;
-import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
-import org.apache.shardingsphere.infra.database.DatabaseTypeEngine;
 import 
org.apache.shardingsphere.database.connector.core.metadata.database.system.SystemDatabase;
 import org.apache.shardingsphere.database.connector.core.type.DatabaseType;
+import org.apache.shardingsphere.infra.config.database.DatabaseConfiguration;
+import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
 import org.apache.shardingsphere.infra.instance.ComputeNodeInstanceContext;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
 
@@ -48,12 +47,13 @@ public final class ShardingSphereDatabasesFactory {
      * @param schemas schemas
      * @param props properties
      * @param instanceContext compute node instance context
+     * @param protocolType protocol type
      * @return created databases
      */
     public static Collection<ShardingSphereDatabase> create(final Map<String, 
DatabaseConfiguration> databaseConfigMap,
                                                             final Map<String, 
Collection<ShardingSphereSchema>> schemas,
-                                                            final 
ConfigurationProperties props, final ComputeNodeInstanceContext 
instanceContext) {
-        DatabaseType protocolType = 
DatabaseTypeEngine.getProtocolType(databaseConfigMap, props);
+                                                            final 
ConfigurationProperties props, final ComputeNodeInstanceContext instanceContext,
+                                                            final DatabaseType 
protocolType) {
         return databaseConfigMap.entrySet().stream()
                 .map(entry -> create(entry.getKey(), entry.getValue(), 
protocolType, schemas.get(entry.getKey()), props, 
instanceContext)).collect(Collectors.toList());
     }
@@ -72,12 +72,13 @@ public final class ShardingSphereDatabasesFactory {
      * @param databaseConfigMap database configuration map
      * @param props properties
      * @param instanceContext compute node instance context
+     * @param protocolType protocol type
      * @return created databases
      * @throws SQLException SQL exception
      */
     public static Collection<ShardingSphereDatabase> create(final Map<String, 
DatabaseConfiguration> databaseConfigMap,
-                                                            final 
ConfigurationProperties props, final ComputeNodeInstanceContext 
instanceContext) throws SQLException {
-        DatabaseType protocolType = 
DatabaseTypeEngine.getProtocolType(databaseConfigMap, props);
+                                                            final 
ConfigurationProperties props, final ComputeNodeInstanceContext instanceContext,
+                                                            final DatabaseType 
protocolType) throws SQLException {
         SystemDatabase systemDatabase = new SystemDatabase(protocolType);
         Collection<ShardingSphereDatabase> result = new LinkedList<>();
         result.addAll(createGenericDatabases(databaseConfigMap, protocolType, 
systemDatabase, props, instanceContext));
diff --git 
a/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabasesFactoryTest.java
 
b/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabasesFactoryTest.java
index 1b5a9cff2c4..3a84196919b 100644
--- 
a/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabasesFactoryTest.java
+++ 
b/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabasesFactoryTest.java
@@ -17,9 +17,11 @@
 
 package org.apache.shardingsphere.infra.metadata.database;
 
+import org.apache.shardingsphere.database.connector.core.type.DatabaseType;
 import org.apache.shardingsphere.infra.config.database.DatabaseConfiguration;
 import 
org.apache.shardingsphere.infra.config.database.impl.DataSourceProvidedDatabaseConfiguration;
 import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
+import org.apache.shardingsphere.infra.database.DatabaseTypeEngine;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
 import org.apache.shardingsphere.test.infra.fixture.jdbc.MockedDataSource;
 import org.junit.jupiter.api.Test;
@@ -51,7 +53,9 @@ class ShardingSphereDatabasesFactoryTest {
         Map<String, Collection<ShardingSphereSchema>> schemas = new 
LinkedHashMap<>(2, 1F);
         schemas.put("empty_db", Collections.singleton(new 
ShardingSphereSchema("empty_schema")));
         schemas.put("foo_db", Collections.singleton(new 
ShardingSphereSchema("foo_schema")));
-        Collection<ShardingSphereDatabase> actual = 
ShardingSphereDatabasesFactory.create(databaseConfigs, schemas, new 
ConfigurationProperties(new Properties()), mock());
+        ConfigurationProperties props = new ConfigurationProperties(new 
Properties());
+        DatabaseType protocolType = 
DatabaseTypeEngine.getProtocolType(databaseConfigs, props);
+        Collection<ShardingSphereDatabase> actual = 
ShardingSphereDatabasesFactory.create(databaseConfigs, schemas, props, mock(), 
protocolType);
         assertThat(actual.size(), is(2));
         assertTrue(actual.stream().anyMatch(each -> 
"empty_db".equals(each.getName())));
         assertTrue(actual.stream().anyMatch(each -> 
"foo_db".equals(each.getName())));
@@ -67,7 +71,9 @@ class ShardingSphereDatabasesFactoryTest {
         databaseConfigs.put("bar_db", new 
DataSourceProvidedDatabaseConfiguration(Collections.singletonMap("foo_ds", 
mockedDataSource), Collections.emptyList()));
         databaseConfigs.put("sys", new 
DataSourceProvidedDatabaseConfiguration(Collections.emptyMap(), 
Collections.emptyList()));
         databaseConfigs.put("shardingsphere", new 
DataSourceProvidedDatabaseConfiguration(Collections.singletonMap("foo_ds", 
mockedDataSource), Collections.emptyList()));
-        Collection<ShardingSphereDatabase> actual = 
ShardingSphereDatabasesFactory.create(databaseConfigs, new 
ConfigurationProperties(new Properties()), mock());
+        ConfigurationProperties props = new ConfigurationProperties(new 
Properties());
+        DatabaseType protocolType = 
DatabaseTypeEngine.getProtocolType(databaseConfigs, props);
+        Collection<ShardingSphereDatabase> actual = 
ShardingSphereDatabasesFactory.create(databaseConfigs, props, mock(), 
protocolType);
         assertThat(actual.size(), is(7));
         assertTrue(actual.stream().anyMatch(each -> 
"foo_db".equals(each.getName())));
         assertTrue(actual.stream().anyMatch(each -> 
"bar_db".equals(each.getName())));
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/factory/init/type/LocalConfigurationMetaDataContextsInitFactory.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/factory/init/type/LocalConfigurationMetaDataContextsInitFactory.java
index 87e26a58e02..53b557d4aef 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/factory/init/type/LocalConfigurationMetaDataContextsInitFactory.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/factory/init/type/LocalConfigurationMetaDataContextsInitFactory.java
@@ -17,10 +17,12 @@
 
 package org.apache.shardingsphere.mode.metadata.factory.init.type;
 
+import org.apache.shardingsphere.database.connector.core.type.DatabaseType;
 import org.apache.shardingsphere.infra.config.database.DatabaseConfiguration;
 import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
 import org.apache.shardingsphere.infra.config.props.ConfigurationPropertyKey;
 import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
+import org.apache.shardingsphere.infra.database.DatabaseTypeEngine;
 import org.apache.shardingsphere.infra.instance.ComputeNodeInstanceContext;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabasesFactory;
@@ -61,7 +63,8 @@ public final class 
LocalConfigurationMetaDataContextsInitFactory extends MetaDat
     @Override
     public MetaDataContexts create(final ContextManagerBuilderParameter param) 
throws SQLException {
         ConfigurationProperties props = new 
ConfigurationProperties(param.getProps());
-        Collection<ShardingSphereDatabase> databases = 
ShardingSphereDatabasesFactory.create(param.getDatabaseConfigs(), props, 
instanceContext);
+        DatabaseType protocolType = 
DatabaseTypeEngine.getProtocolType(param.getDatabaseConfigs(), props);
+        Collection<ShardingSphereDatabase> databases = 
ShardingSphereDatabasesFactory.create(param.getDatabaseConfigs(), props, 
instanceContext, protocolType);
         MetaDataContexts result = create(param.getGlobalRuleConfigs(), 
param.getGlobalDataSources(), databases, props, persistFacade);
         persistDatabaseConfigurations(result, param);
         persistMetaData(result);
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/factory/init/type/RegisterCenterMetaDataContextsInitFactory.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/factory/init/type/RegisterCenterMetaDataContextsInitFactory.java
index 27c2d980ffb..cc3e8ddeabe 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/factory/init/type/RegisterCenterMetaDataContextsInitFactory.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/factory/init/type/RegisterCenterMetaDataContextsInitFactory.java
@@ -89,9 +89,9 @@ public final class RegisterCenterMetaDataContextsInitFactory 
extends MetaDataCon
         Collection<ShardingSphereDatabase> databases;
         if (persistSchemasEnabled) {
             // TODO merge schemas with local
-            databases = 
ShardingSphereDatabasesFactory.create(effectiveDatabaseConfigs, schemas, props, 
instanceContext);
+            databases = 
ShardingSphereDatabasesFactory.create(effectiveDatabaseConfigs, schemas, props, 
instanceContext, protocolType);
         } else {
-            databases = 
ShardingSphereDatabasesFactory.create(effectiveDatabaseConfigs, props, 
instanceContext);
+            databases = 
ShardingSphereDatabasesFactory.create(effectiveDatabaseConfigs, props, 
instanceContext, protocolType);
             databases.stream().filter(database -> 
schemas.containsKey(database.getName()))
                     .forEach(database -> 
schemas.get(database.getName()).stream()
                             .filter(schema -> 
database.containsSchema(schema.getName()))
diff --git 
a/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/factory/MetaDataContextsFactoryTest.java
 
b/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/factory/MetaDataContextsFactoryTest.java
index 78fb17ab4ed..0d09fcdcbe4 100644
--- 
a/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/factory/MetaDataContextsFactoryTest.java
+++ 
b/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/factory/MetaDataContextsFactoryTest.java
@@ -104,8 +104,9 @@ class MetaDataContextsFactoryTest {
     void setUp() throws SQLException {
         ShardingSphereDatabase database = new ShardingSphereDatabase("foo_db",
                 databaseType, new ResourceMetaData(Collections.emptyMap(), 
Collections.emptyMap()), new RuleMetaData(Collections.emptyList()), 
Collections.emptyList());
-        when(ShardingSphereDatabasesFactory.create(anyMap(), anyMap(), any(), 
any())).thenReturn(Collections.singleton(database));
-        when(ShardingSphereDatabasesFactory.create(anyMap(), 
any(ConfigurationProperties.class), 
any(ComputeNodeInstanceContext.class))).thenReturn(Collections.singleton(database));
+        when(ShardingSphereDatabasesFactory.create(anyMap(), anyMap(), any(), 
any(), any())).thenReturn(Collections.singleton(database));
+        when(ShardingSphereDatabasesFactory.create(anyMap(), 
any(ConfigurationProperties.class), any(ComputeNodeInstanceContext.class),
+                
any(DatabaseType.class))).thenReturn(Collections.singleton(database));
         when(ShardingSphereDatabaseFactory.create(anyString(), 
any(DatabaseType.class), any(DatabaseConfiguration.class), 
any(ConfigurationProperties.class), any(ComputeNodeInstanceContext.class)))
                 .thenAnswer(invocation -> 
createDatabaseFromConfiguration(invocation.getArgument(0), 
invocation.getArgument(1), invocation.getArgument(2), Collections.emptyList()));
         when(GlobalRulesBuilder.buildRules(anyCollection(), anyCollection(), 
any(ConfigurationProperties.class))).thenReturn(Collections.singleton(new 
MockedRule()));
diff --git 
a/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/factory/init/type/LocalConfigurationMetaDataContextsInitFactoryTest.java
 
b/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/factory/init/type/LocalConfigurationMetaDataContextsInitFactoryTest.java
index 38234fa0a51..55d8aa3194e 100644
--- 
a/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/factory/init/type/LocalConfigurationMetaDataContextsInitFactoryTest.java
+++ 
b/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/factory/init/type/LocalConfigurationMetaDataContextsInitFactoryTest.java
@@ -90,7 +90,8 @@ class LocalConfigurationMetaDataContextsInitFactoryTest {
                 Collections.singleton(new 
ShardingSphereSchema("empty_schema")), storageUnits, 
Collections.singletonList(mock(ShardingSphereRule.class)));
         ShardingSphereStatistics statistics = createStatistics("foo_db", 
"empty_schema");
         ComputeNodeInstanceContext instanceContext = 
mock(ComputeNodeInstanceContext.class, RETURNS_DEEP_STUBS);
-        when(ShardingSphereDatabasesFactory.create(eq(databaseConfigs), 
any(ConfigurationProperties.class), 
eq(instanceContext))).thenReturn(Collections.singletonList(database));
+        when(ShardingSphereDatabasesFactory.create(eq(databaseConfigs), 
any(ConfigurationProperties.class), eq(instanceContext), 
any(DatabaseType.class)))
+                .thenReturn(Collections.singletonList(database));
         when(GlobalRulesBuilder.buildRules(anyCollection(), anyCollection(), 
any(ConfigurationProperties.class))).thenReturn(Collections.emptyList());
         when(ShardingSphereStatisticsFactory.create(any(), 
any())).thenReturn(statistics);
         Properties props = PropertiesBuilder.build(new 
Property(ConfigurationPropertyKey.PERSIST_SCHEMAS_TO_REPOSITORY_ENABLED.getKey(),
 Boolean.TRUE.toString()));
@@ -117,7 +118,8 @@ class LocalConfigurationMetaDataContextsInitFactoryTest {
                 Collections.emptyList(), Collections.emptyList(), 
Collections.emptyList())), Collections.emptyList());
         ShardingSphereDatabase database = createDatabase("foo_db", 
Collections.singleton(schema), Collections.emptyMap(), Collections.emptyList());
         ComputeNodeInstanceContext instanceContext = 
mock(ComputeNodeInstanceContext.class, RETURNS_DEEP_STUBS);
-        when(ShardingSphereDatabasesFactory.create(eq(databaseConfigs), 
any(ConfigurationProperties.class), 
eq(instanceContext))).thenReturn(Collections.singletonList(database));
+        when(ShardingSphereDatabasesFactory.create(eq(databaseConfigs), 
any(ConfigurationProperties.class), eq(instanceContext), 
any(DatabaseType.class)))
+                .thenReturn(Collections.singletonList(database));
         when(GlobalRulesBuilder.buildRules(anyCollection(), anyCollection(), 
any(ConfigurationProperties.class))).thenReturn(Collections.emptyList());
         when(ShardingSphereStatisticsFactory.create(any(), 
any())).thenReturn(new ShardingSphereStatistics());
         Properties props = PropertiesBuilder.build(new 
Property(ConfigurationPropertyKey.PERSIST_SCHEMAS_TO_REPOSITORY_ENABLED.getKey(),
 Boolean.FALSE.toString()));
diff --git 
a/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/factory/init/type/RegisterCenterMetaDataContextsInitFactoryTest.java
 
b/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/factory/init/type/RegisterCenterMetaDataContextsInitFactoryTest.java
index b14252c1072..a1f922d3152 100644
--- 
a/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/factory/init/type/RegisterCenterMetaDataContextsInitFactoryTest.java
+++ 
b/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/factory/init/type/RegisterCenterMetaDataContextsInitFactoryTest.java
@@ -90,7 +90,7 @@ class RegisterCenterMetaDataContextsInitFactoryTest {
         when(GlobalRulesBuilder.buildRules(anyCollection(), anyCollection(), 
any(ConfigurationProperties.class))).thenReturn(Collections.emptyList());
         when(ShardingSphereStatisticsFactory.create(any(), 
any())).thenReturn(new ShardingSphereStatistics());
         ComputeNodeInstanceContext instanceContext = 
mockComputeNodeInstanceContext(mock(ProxyInstanceMetaData.class));
-        when(ShardingSphereDatabasesFactory.create(anyMap(), anyMap(), 
any(ConfigurationProperties.class), eq(instanceContext))).thenReturn(
+        when(ShardingSphereDatabasesFactory.create(anyMap(), anyMap(), 
any(ConfigurationProperties.class), eq(instanceContext), 
any(DatabaseType.class))).thenReturn(
                 Arrays.asList(createDatabase("with_units", 
Collections.emptyList()), createDatabase("without_units", 
Collections.emptyList())));
         Map<String, DatabaseConfiguration> databaseConfigs = 
createDatabaseConfigsWithAndWithoutStorageUnits();
         Collection<String> databaseNames = Arrays.asList("with_units", 
"without_units", "missing_config");
@@ -119,7 +119,7 @@ class RegisterCenterMetaDataContextsInitFactoryTest {
                 Collections.singleton(new ShardingSphereSchema("foo_schema", 
Collections.emptyList(), Collections.singleton(new 
ShardingSphereView("local_view", "select 1")))));
         ShardingSphereDatabase barDatabase = createDatabase("bar_db", 
Collections.emptyList());
         ComputeNodeInstanceContext instanceContext = 
mockComputeNodeInstanceContext(mock(JDBCInstanceMetaData.class));
-        when(ShardingSphereDatabasesFactory.create(anyMap(), 
any(ConfigurationProperties.class), 
eq(instanceContext))).thenReturn(Arrays.asList(fooDatabase, barDatabase));
+        when(ShardingSphereDatabasesFactory.create(anyMap(), 
any(ConfigurationProperties.class), eq(instanceContext), 
any(DatabaseType.class))).thenReturn(Arrays.asList(fooDatabase, barDatabase));
         Map<String, DatabaseConfiguration> databaseConfigs = 
createDatabaseConfigsWithoutStorageUnits();
         Properties props = PropertiesBuilder.build(new 
Property(ConfigurationPropertyKey.PERSIST_SCHEMAS_TO_REPOSITORY_ENABLED.getKey(),
 Boolean.FALSE.toString()));
         Collection<ShardingSphereSchema> persistedSchemas = Arrays.asList(
diff --git 
a/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/manager/rule/GlobalConfigurationManagerTest.java
 
b/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/manager/rule/GlobalConfigurationManagerTest.java
index bbe2a321b6f..52cc9865ab0 100644
--- 
a/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/manager/rule/GlobalConfigurationManagerTest.java
+++ 
b/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/manager/rule/GlobalConfigurationManagerTest.java
@@ -17,11 +17,13 @@
 
 package org.apache.shardingsphere.mode.metadata.manager.rule;
 
+import org.apache.shardingsphere.database.connector.core.type.DatabaseType;
 import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
 import 
org.apache.shardingsphere.infra.config.props.temporary.TemporaryConfigurationProperties;
 import 
org.apache.shardingsphere.infra.config.props.temporary.TemporaryConfigurationPropertyKey;
 import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
 import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
+import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.infra.metadata.database.resource.ResourceMetaData;
 import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
 import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
@@ -50,6 +52,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
+import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.doThrow;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.never;
@@ -76,9 +79,9 @@ class GlobalConfigurationManagerTest {
         
when(closableRule.getConfiguration()).thenReturn(mock(RuleConfiguration.class, 
withSettings().extraInterfaces(Serializable.class)));
         ShardingSphereRule remainedRule = mock(ShardingSphereRule.class);
         
when(remainedRule.getConfiguration()).thenReturn(mock(RuleConfiguration.class, 
withSettings().extraInterfaces(Cloneable.class)));
+        ShardingSphereMetaData metaData = createMetaData(new RuleMetaData(new 
LinkedList<>(Arrays.asList(closableRule, remainedRule))), new 
TemporaryConfigurationProperties(new Properties()));
         MetaDataContexts metaDataContexts = mock(MetaDataContexts.class);
-        when(metaDataContexts.getMetaData()).thenReturn(
-                createMetaData(new RuleMetaData(new 
LinkedList<>(Arrays.asList(closableRule, remainedRule))), new 
TemporaryConfigurationProperties(new Properties())));
+        when(metaDataContexts.getMetaData()).thenReturn(metaData);
         ShardingSphereRule builtRule = mock(ShardingSphereRule.class);
         when(GlobalRulesBuilder.buildSingleRules(eq(newConfig), any(), 
any(ConfigurationProperties.class))).thenReturn(Collections.singleton(builtRule));
         GlobalConfigurationManager manager = new 
GlobalConfigurationManager(metaDataContexts, mock(MetaDataPersistFacade.class));
@@ -112,8 +115,9 @@ class GlobalConfigurationManagerTest {
         when(closableRule.getConfiguration()).thenReturn(newConfig);
         doThrow(Exception.class).when((AutoCloseable) closableRule).close();
         RuleMetaData globalRuleMetaData = new RuleMetaData(new 
LinkedList<>(Collections.singleton(closableRule)));
+        ShardingSphereMetaData metaData = createMetaData(globalRuleMetaData, 
new TemporaryConfigurationProperties(new Properties()));
         MetaDataContexts metaDataContexts = mock(MetaDataContexts.class, 
RETURNS_DEEP_STUBS);
-        
when(metaDataContexts.getMetaData()).thenReturn(createMetaData(globalRuleMetaData,
 new TemporaryConfigurationProperties(new Properties())));
+        when(metaDataContexts.getMetaData()).thenReturn(metaData);
         when(GlobalRulesBuilder.buildSingleRules(eq(newConfig), any(), 
any(ConfigurationProperties.class))).thenReturn(Collections.emptyList());
         assertThrows(Exception.class, () -> new 
GlobalConfigurationManager(metaDataContexts, 
mock(MetaDataPersistFacade.class)).alterGlobalRuleConfiguration(newConfig));
     }
@@ -136,7 +140,9 @@ class GlobalConfigurationManagerTest {
     void assertAlterPropertiesWithoutCronChange() {
         MetaDataContexts metaDataContexts = mock(MetaDataContexts.class, 
RETURNS_DEEP_STUBS);
         
when(metaDataContexts.getMetaData().getTemporaryProps().getValue(TemporaryConfigurationPropertyKey.PROXY_META_DATA_COLLECTOR_CRON)).thenReturn("0/10
 * * * * ?");
-        
when(metaDataContexts.getMetaData().getAllDatabases()).thenReturn(Collections.emptyList());
+        ShardingSphereDatabase database = mock(ShardingSphereDatabase.class);
+        when(database.getProtocolType()).thenReturn(mock(DatabaseType.class));
+        
when(metaDataContexts.getMetaData().getAllDatabases()).thenReturn(Collections.singleton(database));
         
when(metaDataContexts.getMetaData().getGlobalRuleMetaData()).thenReturn(new 
RuleMetaData(Collections.emptyList()));
         when(metaDataContexts.getMetaData().getProps()).thenReturn(new 
ConfigurationProperties(new Properties()));
         GlobalConfigurationManager manager = new 
GlobalConfigurationManager(metaDataContexts, mock(MetaDataPersistFacade.class));
@@ -145,7 +151,9 @@ class GlobalConfigurationManagerTest {
     }
     
     private ShardingSphereMetaData createMetaData(final RuleMetaData 
globalRuleMetaData, final TemporaryConfigurationProperties temporaryProps) {
-        ShardingSphereMetaData result = new 
ShardingSphereMetaData(Collections.emptyList(), mock(ResourceMetaData.class), 
globalRuleMetaData, new ConfigurationProperties(new Properties()));
+        ShardingSphereDatabase database = mock(ShardingSphereDatabase.class);
+        doReturn(mock(DatabaseType.class)).when(database).getProtocolType();
+        ShardingSphereMetaData result = new 
ShardingSphereMetaData(Collections.singleton(database), 
mock(ResourceMetaData.class), globalRuleMetaData, new 
ConfigurationProperties(new Properties()));
         
result.getTemporaryProps().getProps().putAll(temporaryProps.getProps());
         return result;
     }

Reply via email to