You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by du...@apache.org on 2022/05/16 15:54:59 UTC
[shardingsphere] branch master updated: private MetaDataContextsBuilder.addDatabase and addSystemDatabases (#17716)
This is an automated email from the ASF dual-hosted git repository.
duanzhengqiang 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 929f090b3c1 private MetaDataContextsBuilder.addDatabase and addSystemDatabases (#17716)
929f090b3c1 is described below
commit 929f090b3c169e23fef01fb6ec2cbd02bb7cbba8
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Mon May 16 23:54:53 2022 +0800
private MetaDataContextsBuilder.addDatabase and addSystemDatabases (#17716)
* Refactor MetaDataContextsBuilder
* Refactor ContextManagerBuilder
* private MetaDataContextsBuilder.addDatabase
* private MetaDataContextsBuilder.addDatabase
* private MetaDataContextsBuilder.addSystemDatabases
* Refactor MetaDataContextsBuilder
---
.../mode/manager/ContextManager.java | 59 ++++++++++------------
.../metadata/DatabaseMetaDataContextsBuilder.java | 50 ++++++++++++++++++
.../mode/metadata/MetaDataContextsBuilder.java | 41 ++++++---------
.../mode/manager/ContextManagerTest.java | 4 --
.../mode/metadata/MetaDataContextsBuilderTest.java | 17 +++----
.../cluster/ClusterContextManagerBuilder.java | 38 +++++---------
.../memory/MemoryContextManagerBuilder.java | 19 +++----
.../StandaloneContextManagerBuilder.java | 19 ++-----
8 files changed, 123 insertions(+), 124 deletions(-)
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 b131d6632ab..9406237c677 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
@@ -529,55 +529,53 @@ public final class ContextManager implements AutoCloseable {
DatabaseConfiguration databaseConfig = new DataSourceProvidedDatabaseConfiguration(dataSourceMap, originalMetaData.getRuleMetaData().getConfigurations());
Optional<MetaDataPersistService> metaDataPersistService = metaDataContexts.getMetaDataPersistService();
metaDataPersistService.ifPresent(optional -> persistTransactionConfiguration(databaseConfig, optional));
- MetaDataContextsBuilder metaDataContextsBuilder = new MetaDataContextsBuilder(metaDataContexts.getGlobalRuleMetaData().getConfigurations(), metaDataContexts.getProps());
- metaDataContextsBuilder.addDatabase(originalMetaData.getDatabaseName(), originalMetaData.getFrontendDatabaseType(), originalMetaData.getResource().getDatabaseType(), databaseConfig);
+ MetaDataContextsBuilder builder = new MetaDataContextsBuilder(
+ Collections.singletonMap(originalMetaData.getDatabaseName(), databaseConfig), metaDataContexts.getGlobalRuleMetaData().getConfigurations(), metaDataContexts.getProps());
metaDataContexts.getMetaDataPersistService().ifPresent(optional -> optional.getSchemaMetaDataService()
- .persistTables(originalMetaData.getDatabaseName(), originalMetaData.getDatabaseName(), metaDataContextsBuilder.getSchemaMap(originalMetaData.getDatabaseName())));
- return metaDataContextsBuilder.build(metaDataContexts.getMetaDataPersistService().orElse(null));
+ .persistTables(originalMetaData.getDatabaseName(), originalMetaData.getDatabaseName(), builder.getSchemaMap(originalMetaData.getDatabaseName())));
+ return builder.build(metaDataContexts.getMetaDataPersistService().orElse(null));
}
private void persistTransactionConfiguration(final DatabaseConfiguration databaseConfig, final MetaDataPersistService metaDataPersistService) {
Optional<TransactionConfigurationFileGenerator> fileGenerator = TransactionConfigurationFileGeneratorFactory.findInstance(getTransactionRule().getProviderType());
- if (fileGenerator.isPresent()) {
- Properties transactionProps = fileGenerator.get().getTransactionProps(getTransactionRule().getProps(), databaseConfig, instanceContext.getModeConfiguration().getType());
- metaDataPersistService.persistTransactionRule(transactionProps, true);
- }
+ fileGenerator.ifPresent(optional -> metaDataPersistService.persistTransactionRule(
+ optional.getTransactionProps(getTransactionRule().getProps(), databaseConfig, instanceContext.getModeConfiguration().getType()), true));
}
private MetaDataContexts buildChangedMetaDataContext(final ShardingSphereMetaData originalMetaData, final Collection<RuleConfiguration> ruleConfigs) throws SQLException {
- MetaDataContextsBuilder metaDataContextsBuilder = new MetaDataContextsBuilder(metaDataContexts.getGlobalRuleMetaData().getConfigurations(), metaDataContexts.getProps());
- metaDataContextsBuilder.addDatabase(originalMetaData.getDatabaseName(), originalMetaData.getFrontendDatabaseType(), originalMetaData.getResource().getDatabaseType(),
- new DataSourceProvidedDatabaseConfiguration(originalMetaData.getResource().getDataSources(), ruleConfigs));
+ MetaDataContextsBuilder builder = new MetaDataContextsBuilder(
+ Collections.singletonMap(originalMetaData.getDatabaseName(), new DataSourceProvidedDatabaseConfiguration(originalMetaData.getResource().getDataSources(), ruleConfigs)),
+ metaDataContexts.getGlobalRuleMetaData().getConfigurations(), metaDataContexts.getProps());
metaDataContexts.getMetaDataPersistService().ifPresent(optional -> optional.getSchemaMetaDataService()
- .persistTables(originalMetaData.getDatabaseName(), originalMetaData.getDatabaseName(), metaDataContextsBuilder.getSchemaMap(originalMetaData.getDatabaseName())));
- return metaDataContextsBuilder.build(metaDataContexts.getMetaDataPersistService().orElse(null));
+ .persistTables(originalMetaData.getDatabaseName(), originalMetaData.getDatabaseName(), builder.getSchemaMap(originalMetaData.getDatabaseName())));
+ return builder.build(metaDataContexts.getMetaDataPersistService().orElse(null));
}
private MetaDataContexts buildChangedMetaDataContextWithChangedDataSource(final ShardingSphereMetaData originalMetaData,
final Map<String, DataSourceProperties> newDataSourceProps) throws SQLException {
Collection<String> deletedDataSources = getDeletedDataSources(originalMetaData, newDataSourceProps).keySet();
Map<String, DataSource> changedDataSources = buildChangedDataSources(originalMetaData, newDataSourceProps);
- MetaDataContextsBuilder metaDataContextsBuilder = new MetaDataContextsBuilder(metaDataContexts.getGlobalRuleMetaData().getConfigurations(), metaDataContexts.getProps());
- metaDataContextsBuilder.addDatabase(originalMetaData.getDatabaseName(), originalMetaData.getFrontendDatabaseType(), originalMetaData.getResource().getDatabaseType(),
- new DataSourceProvidedDatabaseConfiguration(
- getNewDataSources(originalMetaData.getResource().getDataSources(), getAddedDataSources(originalMetaData, newDataSourceProps), changedDataSources, deletedDataSources),
- originalMetaData.getRuleMetaData().getConfigurations()));
+ DatabaseConfiguration databaseConfig = new DataSourceProvidedDatabaseConfiguration(
+ getNewDataSources(originalMetaData.getResource().getDataSources(), getAddedDataSources(originalMetaData, newDataSourceProps), changedDataSources, deletedDataSources),
+ originalMetaData.getRuleMetaData().getConfigurations());
+ MetaDataContextsBuilder builder = new MetaDataContextsBuilder(Collections.singletonMap(originalMetaData.getDatabaseName(), databaseConfig),
+ metaDataContexts.getGlobalRuleMetaData().getConfigurations(), metaDataContexts.getProps());
metaDataContexts.getMetaDataPersistService().ifPresent(optional -> optional.getSchemaMetaDataService()
- .persistTables(originalMetaData.getDatabaseName(), originalMetaData.getDatabaseName(), metaDataContextsBuilder.getSchemaMap(originalMetaData.getDatabaseName())));
- return metaDataContextsBuilder.build(metaDataContexts.getMetaDataPersistService().orElse(null));
+ .persistTables(originalMetaData.getDatabaseName(), originalMetaData.getDatabaseName(), builder.getSchemaMap(originalMetaData.getDatabaseName())));
+ return builder.build(metaDataContexts.getMetaDataPersistService().orElse(null));
}
private MetaDataContexts buildChangedMetaDataContextWithChangedDataSourceAndRule(final ShardingSphereMetaData originalMetaData, final Map<String, DataSourceProperties> newDataSourceProps,
final Collection<RuleConfiguration> ruleConfigs) throws SQLException {
Collection<String> deletedDataSources = getDeletedDataSources(originalMetaData, newDataSourceProps).keySet();
Map<String, DataSource> changedDataSources = buildChangedDataSources(originalMetaData, newDataSourceProps);
- MetaDataContextsBuilder metaDataContextsBuilder = new MetaDataContextsBuilder(metaDataContexts.getGlobalRuleMetaData().getConfigurations(), metaDataContexts.getProps());
- metaDataContextsBuilder.addDatabase(originalMetaData.getDatabaseName(), originalMetaData.getFrontendDatabaseType(), originalMetaData.getResource().getDatabaseType(),
- new DataSourceProvidedDatabaseConfiguration(getNewDataSources(originalMetaData.getResource().getDataSources(),
- getAddedDataSources(originalMetaData, newDataSourceProps), changedDataSources, deletedDataSources), ruleConfigs));
+ DatabaseConfiguration databaseConfig = new DataSourceProvidedDatabaseConfiguration(getNewDataSources(originalMetaData.getResource().getDataSources(),
+ getAddedDataSources(originalMetaData, newDataSourceProps), changedDataSources, deletedDataSources), ruleConfigs);
+ MetaDataContextsBuilder builder = new MetaDataContextsBuilder(
+ Collections.singletonMap(originalMetaData.getDatabaseName(), databaseConfig), metaDataContexts.getGlobalRuleMetaData().getConfigurations(), metaDataContexts.getProps());
metaDataContexts.getMetaDataPersistService().ifPresent(optional -> optional.getSchemaMetaDataService()
- .persistTables(originalMetaData.getDatabaseName(), originalMetaData.getDatabaseName(), metaDataContextsBuilder.getSchemaMap(originalMetaData.getDatabaseName())));
- return metaDataContextsBuilder.build(metaDataContexts.getMetaDataPersistService().orElse(null));
+ .persistTables(originalMetaData.getDatabaseName(), originalMetaData.getDatabaseName(), builder.getSchemaMap(originalMetaData.getDatabaseName())));
+ return builder.build(metaDataContexts.getMetaDataPersistService().orElse(null));
}
private Map<String, DataSource> getNewDataSources(final Map<String, DataSource> originalDataSources,
@@ -629,11 +627,10 @@ public final class ContextManager implements AutoCloseable {
}
private MetaDataContexts buildNewMetaDataContext(final String databaseName) throws SQLException {
- MetaDataContextsBuilder metaDataContextsBuilder = new MetaDataContextsBuilder(metaDataContexts.getGlobalRuleMetaData().getConfigurations(), metaDataContexts.getProps());
- DatabaseType frontendDatabaseType = DatabaseTypeEngine.getFrontendDatabaseType(Collections.emptyMap(), metaDataContexts.getProps());
- DatabaseType backendDatabaseType = DatabaseTypeEngine.getBackendDatabaseType(Collections.emptyMap());
- metaDataContextsBuilder.addDatabase(databaseName, frontendDatabaseType, backendDatabaseType, new DataSourceProvidedDatabaseConfiguration(new HashMap<>(), new LinkedList<>()));
- return metaDataContextsBuilder.build(metaDataContexts.getMetaDataPersistService().orElse(null));
+ MetaDataContextsBuilder builder = new MetaDataContextsBuilder(
+ Collections.singletonMap(databaseName, new DataSourceProvidedDatabaseConfiguration(new HashMap<>(), new LinkedList<>())),
+ metaDataContexts.getGlobalRuleMetaData().getConfigurations(), metaDataContexts.getProps());
+ return builder.build(metaDataContexts.getMetaDataPersistService().orElse(null));
}
private void closeDataSources(final ShardingSphereMetaData removeMetaData) {
diff --git a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/DatabaseMetaDataContextsBuilder.java b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/DatabaseMetaDataContextsBuilder.java
new file mode 100644
index 00000000000..874876075c6
--- /dev/null
+++ b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/DatabaseMetaDataContextsBuilder.java
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.mode.metadata;
+
+import lombok.Getter;
+import org.apache.shardingsphere.infra.config.database.DatabaseConfiguration;
+import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
+import org.apache.shardingsphere.infra.database.type.DatabaseType;
+import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
+import org.apache.shardingsphere.infra.metadata.database.loader.DatabaseLoader;
+import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
+import org.apache.shardingsphere.infra.rule.builder.schema.SchemaRulesBuilder;
+
+import java.sql.SQLException;
+import java.util.Collection;
+
+/**
+ * Database Meta data contexts builder.
+ */
+@Getter
+public final class DatabaseMetaDataContextsBuilder {
+
+ private final DatabaseConfiguration databaseConfig;
+
+ private final Collection<ShardingSphereRule> databaseRules;
+
+ private final ShardingSphereDatabase database;
+
+ public DatabaseMetaDataContextsBuilder(final String databaseName, final DatabaseType frontendDatabaseType, final DatabaseType backendDatabaseType,
+ final DatabaseConfiguration databaseConfig, final ConfigurationProperties props) throws SQLException {
+ this.databaseConfig = databaseConfig;
+ databaseRules = SchemaRulesBuilder.buildRules(databaseName, databaseConfig, props);
+ database = DatabaseLoader.load(databaseName, frontendDatabaseType, backendDatabaseType, databaseConfig.getDataSources(), databaseRules, props);
+ }
+}
diff --git a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsBuilder.java b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsBuilder.java
index 8d48f17416a..efa9c4fc80d 100644
--- a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsBuilder.java
+++ b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsBuilder.java
@@ -61,38 +61,30 @@ public final class MetaDataContextsBuilder {
private final ConfigurationProperties props;
- private final ExecutorEngine executorEngine;
-
- public MetaDataContextsBuilder(final Collection<RuleConfiguration> globalRuleConfigs, final ConfigurationProperties props) {
+ public MetaDataContextsBuilder(final Map<String, ? extends DatabaseConfiguration> databaseConfigMap,
+ final Collection<RuleConfiguration> globalRuleConfigs, final ConfigurationProperties props) throws SQLException {
this.globalRuleConfigs = globalRuleConfigs;
this.props = props;
- executorEngine = ExecutorEngine.createExecutorEngineWithSize(this.props.<Integer>getValue(ConfigurationPropertyKey.KERNEL_EXECUTOR_SIZE));
+ DatabaseType frontendDatabaseType = DatabaseTypeEngine.getFrontendDatabaseType(databaseConfigMap, props);
+ DatabaseType backendDatabaseType = DatabaseTypeEngine.getBackendDatabaseType(databaseConfigMap);
+ for (Entry<String, ? extends DatabaseConfiguration> entry : databaseConfigMap.entrySet()) {
+ if (!frontendDatabaseType.getSystemSchemas().contains(entry.getKey())) {
+ addDatabase(entry.getKey(), frontendDatabaseType, backendDatabaseType, entry.getValue());
+ }
+ }
+ addSystemDatabases(frontendDatabaseType);
}
- /**
- * Add database information.
- *
- * @param databaseName schema name
- * @param frontendDatabaseType frontend database type
- * @param backendDatabaseType backend database type
- * @param databaseConfig database configuration
- * @throws SQLException SQL exception
- */
- public void addDatabase(final String databaseName, final DatabaseType frontendDatabaseType, final DatabaseType backendDatabaseType,
- final DatabaseConfiguration databaseConfig) throws SQLException {
- Collection<ShardingSphereRule> databaseRules = getDatabaseRules(databaseName, databaseConfig);
+ private void addDatabase(final String databaseName, final DatabaseType frontendDatabaseType, final DatabaseType backendDatabaseType,
+ final DatabaseConfiguration databaseConfig) throws SQLException {
+ Collection<ShardingSphereRule> databaseRules = SchemaRulesBuilder.buildRules(databaseName, databaseConfig, props);
ShardingSphereDatabase database = DatabaseLoader.load(databaseName, frontendDatabaseType, backendDatabaseType, databaseConfig.getDataSources(), databaseRules, props);
databaseConfigMap.put(databaseName, databaseConfig);
databaseRulesMap.put(databaseName, databaseRules);
databaseMap.put(databaseName, database);
}
- /**
- * Add system databases.
- *
- * @param frontendDatabaseType frontend database type
- */
- public void addSystemDatabases(final DatabaseType frontendDatabaseType) {
+ private void addSystemDatabases(final DatabaseType frontendDatabaseType) {
for (String each : frontendDatabaseType.getSystemDatabaseSchemaMap().keySet()) {
if (!databaseMap.containsKey(each)) {
databaseMap.put(each, DatabaseLoader.load(each, frontendDatabaseType));
@@ -100,10 +92,6 @@ public final class MetaDataContextsBuilder {
}
}
- private Collection<ShardingSphereRule> getDatabaseRules(final String databaseName, final DatabaseConfiguration databaseConfig) {
- return SchemaRulesBuilder.buildRules(databaseName, databaseConfig, props);
- }
-
/**
* Build meta data contexts.
*
@@ -114,6 +102,7 @@ public final class MetaDataContextsBuilder {
public MetaDataContexts build(final MetaDataPersistService metaDataPersistService) throws SQLException {
Map<String, ShardingSphereMetaData> metaDataMap = getMetaDataMap();
ShardingSphereRuleMetaData globalMetaData = new ShardingSphereRuleMetaData(globalRuleConfigs, GlobalRulesBuilder.buildRules(globalRuleConfigs, metaDataMap));
+ ExecutorEngine executorEngine = ExecutorEngine.createExecutorEngineWithSize(props.<Integer>getValue(ConfigurationPropertyKey.KERNEL_EXECUTOR_SIZE));
return new MetaDataContexts(metaDataPersistService, metaDataMap, globalMetaData, executorEngine, OptimizerContextFactory.create(metaDataMap, globalMetaData), props);
}
diff --git a/shardingsphere-mode/shardingsphere-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/ContextManagerTest.java b/shardingsphere-mode/shardingsphere-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/ContextManagerTest.java
index 18eb4d846e5..481ab6229de 100644
--- a/shardingsphere-mode/shardingsphere-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/ContextManagerTest.java
+++ b/shardingsphere-mode/shardingsphere-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/ContextManagerTest.java
@@ -146,7 +146,6 @@ public final class ContextManagerTest {
@Test
public void assertAddResource() throws SQLException {
ShardingSphereResource resource = mock(ShardingSphereResource.class);
- when(resource.getDatabaseType()).thenReturn(new MySQLDatabaseType());
when(metaDataContexts.getMetaDataMap()).thenReturn(new HashMap<>(Collections.singletonMap("foo_db", new ShardingSphereMetaData(
"foo_db", new MySQLDatabaseType(), resource, new ShardingSphereRuleMetaData(new LinkedList<>(), new LinkedList<>()), Collections.emptyMap()))));
contextManager.addResource("foo_db", createToBeAddedDataSourceProperties());
@@ -183,7 +182,6 @@ public final class ContextManagerTest {
private ShardingSphereMetaData createOriginalMetaData() {
ShardingSphereResource resource = mock(ShardingSphereResource.class);
when(resource.getDataSources()).thenReturn(Collections.singletonMap("foo_db", new MockedDataSource()));
- when(resource.getDatabaseType()).thenReturn(new MySQLDatabaseType());
ShardingSphereRuleMetaData ruleMetaData = mock(ShardingSphereRuleMetaData.class);
when(ruleMetaData.getConfigurations()).thenReturn(new LinkedList<>());
return new ShardingSphereMetaData("foo_db", new MySQLDatabaseType(), resource, ruleMetaData, Collections.emptyMap());
@@ -205,7 +203,6 @@ public final class ContextManagerTest {
@Test
public void assertAlterRuleConfiguration() {
ShardingSphereResource resource = mock(ShardingSphereResource.class);
- when(resource.getDatabaseType()).thenReturn(new MySQLDatabaseType());
when(metaDataContexts.getMetaDataMap()).thenReturn(Collections.singletonMap("foo_db",
new ShardingSphereMetaData("foo_db", new MySQLDatabaseType(), resource, mock(ShardingSphereRuleMetaData.class), Collections.emptyMap())));
when(metaDataContexts.getMetaDataPersistService()).thenReturn(Optional.of(mock(MetaDataPersistService.class, RETURNS_DEEP_STUBS)));
@@ -230,7 +227,6 @@ public final class ContextManagerTest {
originalDataSources.put("ds_1", new MockedDataSource());
originalDataSources.put("ds_2", new MockedDataSource());
when(result.getDataSources()).thenReturn(originalDataSources);
- when(result.getDatabaseType()).thenReturn(new MySQLDatabaseType());
return result;
}
diff --git a/shardingsphere-mode/shardingsphere-mode-core/src/test/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsBuilderTest.java b/shardingsphere-mode/shardingsphere-mode-core/src/test/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsBuilderTest.java
index b5f67a1bb7d..9e30005ebcd 100644
--- a/shardingsphere-mode/shardingsphere-mode-core/src/test/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsBuilderTest.java
+++ b/shardingsphere-mode/shardingsphere-mode-core/src/test/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsBuilderTest.java
@@ -20,11 +20,10 @@ package org.apache.shardingsphere.mode.metadata;
import org.apache.shardingsphere.authority.config.AuthorityRuleConfiguration;
import org.apache.shardingsphere.authority.rule.AuthorityRule;
import org.apache.shardingsphere.infra.config.algorithm.ShardingSphereAlgorithmConfiguration;
+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.config.props.ConfigurationPropertyKey;
-import org.apache.shardingsphere.infra.config.database.impl.DataSourceProvidedDatabaseConfiguration;
-import org.apache.shardingsphere.infra.database.type.DatabaseTypeEngine;
-import org.apache.shardingsphere.infra.database.type.dialect.MySQLDatabaseType;
import org.apache.shardingsphere.infra.metadata.user.ShardingSphereUser;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import org.apache.shardingsphere.mode.metadata.fixture.FixtureRule;
@@ -56,9 +55,9 @@ public final class MetaDataContextsBuilderTest {
ShardingSphereUser user = new ShardingSphereUser("root", "root", "");
AuthorityRuleConfiguration authorityRuleConfig = new AuthorityRuleConfiguration(Collections.singleton(user),
new ShardingSphereAlgorithmConfiguration("ALL_PERMITTED", new Properties()));
- MetaDataContextsBuilder builder = new MetaDataContextsBuilder(Collections.singleton(authorityRuleConfig), new ConfigurationProperties(props));
- builder.addDatabase("logic_db", DatabaseTypeEngine.getDatabaseType("MySQL"), DatabaseTypeEngine.getDatabaseType("MySQL"),
- new DataSourceProvidedDatabaseConfiguration(Collections.emptyMap(), Collections.singletonList(new FixtureRuleConfiguration())));
+ DatabaseConfiguration databaseConfig = new DataSourceProvidedDatabaseConfiguration(Collections.emptyMap(), Collections.singletonList(new FixtureRuleConfiguration()));
+ MetaDataContextsBuilder builder = new MetaDataContextsBuilder(
+ Collections.singletonMap("logic_db", databaseConfig), Collections.singleton(authorityRuleConfig), new ConfigurationProperties(props));
MetaDataContexts actual = builder.build(mock(MetaDataPersistService.class));
assertRules(actual);
assertTrue(actual.getMetaData("logic_db").getResource().getDataSources().isEmpty());
@@ -68,7 +67,8 @@ public final class MetaDataContextsBuilderTest {
@Test
public void assertBuildWithoutGlobalRuleConfigurations() throws SQLException {
- MetaDataContexts actual = new MetaDataContextsBuilder(Collections.emptyList(), new ConfigurationProperties(new Properties())).build(mock(MetaDataPersistService.class));
+ MetaDataContexts actual = new MetaDataContextsBuilder(
+ Collections.emptyMap(), Collections.emptyList(), new ConfigurationProperties(new Properties())).build(mock(MetaDataPersistService.class));
assertThat(actual.getGlobalRuleMetaData().getRules().size(), is(4));
assertThat(actual.getGlobalRuleMetaData().getRules().stream().filter(each -> each instanceof AuthorityRule).count(), is(1L));
assertThat(actual.getGlobalRuleMetaData().getRules().stream().filter(each -> each instanceof TransactionRule).count(), is(1L));
@@ -78,8 +78,7 @@ public final class MetaDataContextsBuilderTest {
@Test
public void assertBuildWithEmptyRuleConfigurations() throws SQLException {
- MetaDataContextsBuilder builder = new MetaDataContextsBuilder(Collections.emptyList(), new ConfigurationProperties(new Properties()));
- builder.addSystemDatabases(new MySQLDatabaseType());
+ MetaDataContextsBuilder builder = new MetaDataContextsBuilder(Collections.emptyMap(), Collections.emptyList(), new ConfigurationProperties(new Properties()));
MetaDataContexts actual = builder.build(mock(MetaDataPersistService.class));
assertThat(actual.getMetaDataMap().size(), is(4));
assertTrue(actual.getMetaDataMap().containsKey("information_schema"));
diff --git a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterContextManagerBuilder.java b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterContextManagerBuilder.java
index bf992b85764..389ab7e8386 100644
--- a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterContextManagerBuilder.java
+++ b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterContextManagerBuilder.java
@@ -23,8 +23,6 @@ import org.apache.shardingsphere.infra.config.database.DatabaseConfiguration;
import org.apache.shardingsphere.infra.config.database.impl.DataSourceProvidedDatabaseConfiguration;
import org.apache.shardingsphere.infra.config.mode.ModeConfiguration;
import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
-import org.apache.shardingsphere.infra.database.type.DatabaseType;
-import org.apache.shardingsphere.infra.database.type.DatabaseTypeEngine;
import org.apache.shardingsphere.infra.instance.ComputeNodeInstance;
import org.apache.shardingsphere.infra.instance.InstanceContext;
import org.apache.shardingsphere.infra.instance.definition.InstanceDefinition;
@@ -58,7 +56,6 @@ import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
-import java.util.Map.Entry;
import java.util.Optional;
import java.util.Properties;
@@ -74,10 +71,10 @@ public final class ClusterContextManagerBuilder implements ContextManagerBuilder
MetaDataPersistService metaDataPersistService = new MetaDataPersistService(repository);
persistConfigurations(metaDataPersistService, parameter);
RegistryCenter registryCenter = new RegistryCenter(repository);
- MetaDataContextsBuilder metaDataContextsBuilder = createMetaDataContextsBuilder(metaDataPersistService, parameter);
- Map<String, ShardingSphereDatabase> databaseMap = metaDataContextsBuilder.getDatabaseMap().isEmpty() ? Collections.emptyMap() : metaDataContextsBuilder.getDatabaseMap();
+ MetaDataContextsBuilder builder = createMetaDataContextsBuilder(metaDataPersistService, parameter);
+ Map<String, ShardingSphereDatabase> databaseMap = builder.getDatabaseMap().isEmpty() ? Collections.emptyMap() : builder.getDatabaseMap();
persistMetaData(metaDataPersistService, databaseMap);
- MetaDataContexts metaDataContexts = metaDataContextsBuilder.build(metaDataPersistService);
+ MetaDataContexts metaDataContexts = builder.build(metaDataPersistService);
Properties transactionProps = getTransactionProperties(metaDataContexts);
persistTransactionConfiguration(parameter, metaDataPersistService, transactionProps);
ContextManager result = createContextManager(repository, metaDataPersistService, parameter.getInstanceDefinition(), metaDataContexts, transactionProps, parameter.getModeConfig());
@@ -93,6 +90,16 @@ public final class ClusterContextManagerBuilder implements ContextManagerBuilder
metaDataPersistService.persistInstanceLabels(parameter.getInstanceDefinition().getInstanceId().getId(), parameter.getLabels(), isOverwrite);
}
+ private MetaDataContextsBuilder createMetaDataContextsBuilder(final MetaDataPersistService metaDataPersistService, final ContextManagerBuilderParameter parameter) throws SQLException {
+ Collection<String> databaseNames = InstanceType.JDBC == parameter.getInstanceDefinition().getInstanceType()
+ ? parameter.getDatabaseConfigs().keySet()
+ : metaDataPersistService.getSchemaMetaDataService().loadAllDatabaseNames();
+ Collection<RuleConfiguration> globalRuleConfigs = metaDataPersistService.getGlobalRuleService().load();
+ ConfigurationProperties props = new ConfigurationProperties(metaDataPersistService.getPropsService().load());
+ Map<String, ? extends DatabaseConfiguration> databaseConfigMap = getDatabaseConfigMap(databaseNames, metaDataPersistService, parameter);
+ return new MetaDataContextsBuilder(databaseConfigMap, globalRuleConfigs, props);
+ }
+
private Properties getTransactionProperties(final MetaDataContexts metaDataContexts) {
Optional<String> databaseName = metaDataContexts.getAllDatabaseNames().stream().findFirst();
Optional<TransactionRule> transactionRule =
@@ -125,25 +132,6 @@ public final class ClusterContextManagerBuilder implements ContextManagerBuilder
}
}
- private MetaDataContextsBuilder createMetaDataContextsBuilder(final MetaDataPersistService metaDataPersistService, final ContextManagerBuilderParameter parameter) throws SQLException {
- Collection<String> databaseNames = InstanceType.JDBC == parameter.getInstanceDefinition().getInstanceType()
- ? parameter.getDatabaseConfigs().keySet()
- : metaDataPersistService.getSchemaMetaDataService().loadAllDatabaseNames();
- Collection<RuleConfiguration> globalRuleConfigs = metaDataPersistService.getGlobalRuleService().load();
- ConfigurationProperties props = new ConfigurationProperties(metaDataPersistService.getPropsService().load());
- MetaDataContextsBuilder result = new MetaDataContextsBuilder(globalRuleConfigs, props);
- Map<String, ? extends DatabaseConfiguration> databaseConfigMap = getDatabaseConfigMap(databaseNames, metaDataPersistService, parameter);
- DatabaseType frontendDatabaseType = DatabaseTypeEngine.getFrontendDatabaseType(databaseConfigMap, props);
- DatabaseType backendDatabaseType = DatabaseTypeEngine.getBackendDatabaseType(databaseConfigMap);
- for (Entry<String, ? extends DatabaseConfiguration> entry : databaseConfigMap.entrySet()) {
- if (!frontendDatabaseType.getSystemSchemas().contains(entry.getKey())) {
- result.addDatabase(entry.getKey(), frontendDatabaseType, backendDatabaseType, entry.getValue());
- }
- }
- result.addSystemDatabases(frontendDatabaseType);
- return result;
- }
-
private Map<String, DatabaseConfiguration> getDatabaseConfigMap(final Collection<String> databaseNames, final MetaDataPersistService metaDataPersistService,
final ContextManagerBuilderParameter parameter) {
Map<String, DatabaseConfiguration> result = new HashMap<>(databaseNames.size(), 1);
diff --git a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-memory-mode/shardingsphere-memory-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/memory/MemoryContextManagerBuilder.java b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-memory-mode/shardingsphere-memory-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/memory/MemoryContextManagerBuilder.java
index c6e5645465f..339be07bb80 100644
--- a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-memory-mode/shardingsphere-memory-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/memory/MemoryContextManagerBuilder.java
+++ b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-memory-mode/shardingsphere-memory-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/memory/MemoryContextManagerBuilder.java
@@ -17,11 +17,8 @@
package org.apache.shardingsphere.mode.manager.memory;
-import org.apache.shardingsphere.infra.config.database.DatabaseConfiguration;
import org.apache.shardingsphere.infra.config.mode.ModeConfiguration;
import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
-import org.apache.shardingsphere.infra.database.type.DatabaseType;
-import org.apache.shardingsphere.infra.database.type.DatabaseTypeEngine;
import org.apache.shardingsphere.infra.instance.ComputeNodeInstance;
import org.apache.shardingsphere.infra.instance.InstanceContext;
import org.apache.shardingsphere.infra.rule.identifier.type.InstanceAwareRule;
@@ -39,7 +36,6 @@ import org.apache.shardingsphere.transaction.spi.TransactionConfigurationFileGen
import org.apache.shardingsphere.transaction.spi.TransactionConfigurationFileGeneratorFactory;
import java.sql.SQLException;
-import java.util.Map.Entry;
import java.util.Optional;
/**
@@ -49,15 +45,7 @@ public final class MemoryContextManagerBuilder implements ContextManagerBuilder
@Override
public ContextManager build(final ContextManagerBuilderParameter parameter) throws SQLException {
- ConfigurationProperties props = new ConfigurationProperties(parameter.getProps());
- MetaDataContextsBuilder metaDataContextsBuilder = new MetaDataContextsBuilder(parameter.getGlobalRuleConfigs(), props);
- DatabaseType frontendDatabaseType = DatabaseTypeEngine.getFrontendDatabaseType(parameter.getDatabaseConfigs(), props);
- DatabaseType backendDatabaseType = DatabaseTypeEngine.getBackendDatabaseType(parameter.getDatabaseConfigs());
- for (Entry<String, ? extends DatabaseConfiguration> entry : parameter.getDatabaseConfigs().entrySet()) {
- metaDataContextsBuilder.addDatabase(entry.getKey(), frontendDatabaseType, backendDatabaseType, entry.getValue());
- }
- metaDataContextsBuilder.addSystemDatabases(frontendDatabaseType);
- MetaDataContexts metaDataContexts = metaDataContextsBuilder.build(null);
+ MetaDataContexts metaDataContexts = createMetaDataContextsBuilder(parameter).build(null);
InstanceContext instanceContext = buildInstanceContext(parameter);
generateTransactionConfigurationFile(instanceContext, metaDataContexts);
TransactionContexts transactionContexts = new TransactionContextsBuilder(metaDataContexts.getMetaDataMap(), metaDataContexts.getGlobalRuleMetaData().getRules()).build();
@@ -67,6 +55,11 @@ public final class MemoryContextManagerBuilder implements ContextManagerBuilder
return result;
}
+ private MetaDataContextsBuilder createMetaDataContextsBuilder(final ContextManagerBuilderParameter parameter) throws SQLException {
+ ConfigurationProperties props = new ConfigurationProperties(parameter.getProps());
+ return new MetaDataContextsBuilder(parameter.getDatabaseConfigs(), parameter.getGlobalRuleConfigs(), props);
+ }
+
private InstanceContext buildInstanceContext(final ContextManagerBuilderParameter parameter) {
ComputeNodeInstance instance = new ComputeNodeInstance(parameter.getInstanceDefinition());
instance.setLabels(parameter.getLabels());
diff --git a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-standalone-mode/shardingsphere-standalone-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneContextManagerBuilder.java b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-standalone-mode/shardingsphere-standalone-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneContextManagerBuilder.java
index 60608607942..626aa0ebaf1 100644
--- a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-standalone-mode/shardingsphere-standalone-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneContextManagerBuilder.java
+++ b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-standalone-mode/shardingsphere-standalone-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneContextManagerBuilder.java
@@ -21,8 +21,6 @@ import org.apache.shardingsphere.infra.config.RuleConfiguration;
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.type.DatabaseType;
-import org.apache.shardingsphere.infra.database.type.DatabaseTypeEngine;
import org.apache.shardingsphere.infra.instance.InstanceContext;
import org.apache.shardingsphere.infra.instance.definition.InstanceType;
import org.apache.shardingsphere.infra.rule.identifier.type.InstanceAwareRule;
@@ -46,7 +44,6 @@ import java.sql.SQLException;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
-import java.util.Map.Entry;
import java.util.Optional;
/**
@@ -58,7 +55,7 @@ public final class StandaloneContextManagerBuilder implements ContextManagerBuil
public ContextManager build(final ContextManagerBuilderParameter parameter) throws SQLException {
MetaDataPersistService metaDataPersistService = new MetaDataPersistService(StandalonePersistRepositoryFactory.getInstance(parameter.getModeConfig().getRepository()));
persistConfigurations(metaDataPersistService, parameter);
- MetaDataContexts metaDataContexts = createMetaDataContexts(metaDataPersistService, parameter);
+ MetaDataContexts metaDataContexts = createMetaDataContextsBuilder(metaDataPersistService, parameter).build(metaDataPersistService);
return createContextManager(metaDataPersistService, parameter, metaDataContexts);
}
@@ -68,24 +65,14 @@ public final class StandaloneContextManagerBuilder implements ContextManagerBuil
}
}
- private MetaDataContexts createMetaDataContexts(final MetaDataPersistService metaDataPersistService, final ContextManagerBuilderParameter parameter) throws SQLException {
+ private MetaDataContextsBuilder createMetaDataContextsBuilder(final MetaDataPersistService metaDataPersistService, final ContextManagerBuilderParameter parameter) throws SQLException {
Collection<String> databaseNames = InstanceType.JDBC == parameter.getInstanceDefinition().getInstanceType()
? parameter.getDatabaseConfigs().keySet()
: metaDataPersistService.getSchemaMetaDataService().loadAllDatabaseNames();
Collection<RuleConfiguration> globalRuleConfigs = metaDataPersistService.getGlobalRuleService().load();
ConfigurationProperties props = new ConfigurationProperties(metaDataPersistService.getPropsService().load());
- MetaDataContextsBuilder builder = new MetaDataContextsBuilder(globalRuleConfigs, props);
Map<String, ? extends DatabaseConfiguration> databaseConfigMap = getDatabaseConfigMap(databaseNames, metaDataPersistService, parameter);
- DatabaseType frontendDatabaseType = DatabaseTypeEngine.getFrontendDatabaseType(databaseConfigMap, props);
- DatabaseType backendDatabaseType = DatabaseTypeEngine.getBackendDatabaseType(databaseConfigMap);
- for (Entry<String, ? extends DatabaseConfiguration> entry : databaseConfigMap.entrySet()) {
- if (frontendDatabaseType.getSystemSchemas().contains(entry.getKey())) {
- continue;
- }
- builder.addDatabase(entry.getKey(), frontendDatabaseType, backendDatabaseType, entry.getValue());
- }
- builder.addSystemDatabases(frontendDatabaseType);
- return builder.build(metaDataPersistService);
+ return new MetaDataContextsBuilder(databaseConfigMap, globalRuleConfigs, props);
}
private Map<String, DatabaseConfiguration> getDatabaseConfigMap(final Collection<String> databaseNames, final MetaDataPersistService metaDataPersistService,