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;
}