You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by zh...@apache.org on 2022/06/26 07:19:31 UTC
[shardingsphere] branch master updated: Add ShardingSphereDatabasesFactory (#18605)
This is an automated email from the ASF dual-hosted git repository.
zhonghongsheng 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 cbb9e81675b Add ShardingSphereDatabasesFactory (#18605)
cbb9e81675b is described below
commit cbb9e81675bd3c76f290cc46d09dee0752c928b7
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Sun Jun 26 15:19:25 2022 +0800
Add ShardingSphereDatabasesFactory (#18605)
---
.../database/ShardingSphereDatabasesFactory.java | 49 ++++++---------------
.../ShardingSphereDatabasesFactoryTest.java | 50 ++++++++++++++++++++++
.../mode/metadata/MetaDataContextsBuilder.java | 37 +---------------
.../mode/metadata/MetaDataContextsBuilderTest.java | 2 +-
...eateDefaultSingleTableRuleStatementUpdater.java | 2 +-
.../rdl/rule/RuleDefinitionBackendHandler.java | 14 +++---
6 files changed, 75 insertions(+), 79 deletions(-)
diff --git a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsBuilder.java b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabasesFactory.java
similarity index 54%
copy from shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsBuilder.java
copy to shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabasesFactory.java
index c4d5a31dd44..6c26047e96f 100644
--- a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsBuilder.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabasesFactory.java
@@ -15,63 +15,42 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.mode.metadata;
+package org.apache.shardingsphere.infra.metadata.database;
-import lombok.RequiredArgsConstructor;
-import org.apache.shardingsphere.infra.config.RuleConfiguration;
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.database.type.DatabaseTypeEngine;
-import org.apache.shardingsphere.infra.federation.optimizer.context.OptimizerContextFactory;
-import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
-import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
-import org.apache.shardingsphere.infra.metadata.database.rule.ShardingSphereRuleMetaData;
-import org.apache.shardingsphere.infra.rule.builder.global.GlobalRulesBuilder;
-import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
import java.sql.SQLException;
-import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
/**
- * Meta data contexts builder.
+ * ShardingSphere databases factory.
*/
-@RequiredArgsConstructor
-public final class MetaDataContextsBuilder {
-
- private final Map<String, DatabaseConfiguration> databaseConfigMap;
-
- private final Collection<RuleConfiguration> globalRuleConfigs;
-
- private final ConfigurationProperties props;
+public final class ShardingSphereDatabasesFactory {
/**
- * Build meta data contexts.
+ * Create databases.
*
- * @param persistService meta data persist service
- * @exception SQLException SQL exception
- * @return meta data contexts
+ * @param databaseConfigMap database configuration map
+ * @param props properties
+ * @return databases
+ * @throws SQLException SQL exception
*/
- public MetaDataContexts build(final MetaDataPersistService persistService) throws SQLException {
- Map<String, ShardingSphereDatabase> databases = createDatabases();
- ShardingSphereRuleMetaData globalMetaData = new ShardingSphereRuleMetaData(GlobalRulesBuilder.buildRules(globalRuleConfigs, databases));
- ShardingSphereMetaData metaData = new ShardingSphereMetaData(databases, globalMetaData, props);
- return new MetaDataContexts(persistService, metaData, OptimizerContextFactory.create(databases, globalMetaData));
- }
-
- private Map<String, ShardingSphereDatabase> createDatabases() throws SQLException {
+ public static Map<String, ShardingSphereDatabase> create(final Map<String, DatabaseConfiguration> databaseConfigMap, final ConfigurationProperties props) throws SQLException {
DatabaseType protocolType = DatabaseTypeEngine.getProtocolType(databaseConfigMap, props);
DatabaseType storageType = DatabaseTypeEngine.getStorageType(databaseConfigMap);
Map<String, ShardingSphereDatabase> result = new HashMap<>(databaseConfigMap.size() + protocolType.getSystemDatabaseSchemaMap().size(), 1);
- result.putAll(createGenericDatabases(protocolType, storageType));
- result.putAll(createSystemDatabases(protocolType));
+ result.putAll(createGenericDatabases(databaseConfigMap, protocolType, storageType, props));
+ result.putAll(createSystemDatabases(databaseConfigMap, protocolType));
return result;
}
- private Map<String, ShardingSphereDatabase> createGenericDatabases(final DatabaseType protocolType, final DatabaseType storageType) throws SQLException {
+ private static Map<String, ShardingSphereDatabase> createGenericDatabases(final Map<String, DatabaseConfiguration> databaseConfigMap, final DatabaseType protocolType,
+ final DatabaseType storageType, final ConfigurationProperties props) throws SQLException {
Map<String, ShardingSphereDatabase> result = new HashMap<>(databaseConfigMap.size(), 1);
for (Entry<String, DatabaseConfiguration> entry : databaseConfigMap.entrySet()) {
String databaseName = entry.getKey();
@@ -82,7 +61,7 @@ public final class MetaDataContextsBuilder {
return result;
}
- private Map<String, ShardingSphereDatabase> createSystemDatabases(final DatabaseType protocolType) throws SQLException {
+ private static Map<String, ShardingSphereDatabase> createSystemDatabases(final Map<String, DatabaseConfiguration> databaseConfigMap, final DatabaseType protocolType) throws SQLException {
Map<String, ShardingSphereDatabase> result = new HashMap<>(protocolType.getSystemDatabaseSchemaMap().size(), 1);
for (String each : protocolType.getSystemDatabaseSchemaMap().keySet()) {
if (!databaseConfigMap.containsKey(each) || databaseConfigMap.get(each).getDataSources().isEmpty()) {
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabasesFactoryTest.java b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabasesFactoryTest.java
new file mode 100644
index 00000000000..0e494df6646
--- /dev/null
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabasesFactoryTest.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.infra.metadata.database;
+
+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.fixture.FixtureRuleConfiguration;
+import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
+import org.apache.shardingsphere.infra.rule.builder.fixture.FixtureDatabaseRule;
+import org.junit.Test;
+
+import java.sql.SQLException;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Map;
+import java.util.Properties;
+
+import static org.hamcrest.CoreMatchers.instanceOf;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+import static org.junit.Assert.assertTrue;
+
+public final class ShardingSphereDatabasesFactoryTest {
+
+ @Test
+ public void assertCreate() throws SQLException {
+ DatabaseConfiguration databaseConfig = new DataSourceProvidedDatabaseConfiguration(Collections.emptyMap(), Collections.singleton(new FixtureRuleConfiguration()));
+ Map<String, ShardingSphereDatabase> actual = ShardingSphereDatabasesFactory.create(Collections.singletonMap("logic_db", databaseConfig), new ConfigurationProperties(new Properties()));
+ Collection<ShardingSphereRule> rules = actual.get("logic_db").getRuleMetaData().getRules();
+ assertThat(rules.size(), is(1));
+ assertThat(rules.iterator().next(), instanceOf(FixtureDatabaseRule.class));
+ assertTrue(actual.get("logic_db").getResource().getDataSources().isEmpty());
+ }
+}
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 c4d5a31dd44..0489c7e37fc 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
@@ -21,20 +21,17 @@ import lombok.RequiredArgsConstructor;
import org.apache.shardingsphere.infra.config.RuleConfiguration;
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.database.type.DatabaseTypeEngine;
import org.apache.shardingsphere.infra.federation.optimizer.context.OptimizerContextFactory;
import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
+import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabasesFactory;
import org.apache.shardingsphere.infra.metadata.database.rule.ShardingSphereRuleMetaData;
import org.apache.shardingsphere.infra.rule.builder.global.GlobalRulesBuilder;
import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
import java.sql.SQLException;
import java.util.Collection;
-import java.util.HashMap;
import java.util.Map;
-import java.util.Map.Entry;
/**
* Meta data contexts builder.
@@ -56,39 +53,9 @@ public final class MetaDataContextsBuilder {
* @return meta data contexts
*/
public MetaDataContexts build(final MetaDataPersistService persistService) throws SQLException {
- Map<String, ShardingSphereDatabase> databases = createDatabases();
+ Map<String, ShardingSphereDatabase> databases = ShardingSphereDatabasesFactory.create(databaseConfigMap, props);
ShardingSphereRuleMetaData globalMetaData = new ShardingSphereRuleMetaData(GlobalRulesBuilder.buildRules(globalRuleConfigs, databases));
ShardingSphereMetaData metaData = new ShardingSphereMetaData(databases, globalMetaData, props);
return new MetaDataContexts(persistService, metaData, OptimizerContextFactory.create(databases, globalMetaData));
}
-
- private Map<String, ShardingSphereDatabase> createDatabases() throws SQLException {
- DatabaseType protocolType = DatabaseTypeEngine.getProtocolType(databaseConfigMap, props);
- DatabaseType storageType = DatabaseTypeEngine.getStorageType(databaseConfigMap);
- Map<String, ShardingSphereDatabase> result = new HashMap<>(databaseConfigMap.size() + protocolType.getSystemDatabaseSchemaMap().size(), 1);
- result.putAll(createGenericDatabases(protocolType, storageType));
- result.putAll(createSystemDatabases(protocolType));
- return result;
- }
-
- private Map<String, ShardingSphereDatabase> createGenericDatabases(final DatabaseType protocolType, final DatabaseType storageType) throws SQLException {
- Map<String, ShardingSphereDatabase> result = new HashMap<>(databaseConfigMap.size(), 1);
- for (Entry<String, DatabaseConfiguration> entry : databaseConfigMap.entrySet()) {
- String databaseName = entry.getKey();
- if (!entry.getValue().getDataSources().isEmpty() || !protocolType.getSystemSchemas().contains(databaseName)) {
- result.put(databaseName, ShardingSphereDatabase.create(databaseName, protocolType, storageType, entry.getValue(), props));
- }
- }
- return result;
- }
-
- private Map<String, ShardingSphereDatabase> createSystemDatabases(final DatabaseType protocolType) throws SQLException {
- Map<String, ShardingSphereDatabase> result = new HashMap<>(protocolType.getSystemDatabaseSchemaMap().size(), 1);
- for (String each : protocolType.getSystemDatabaseSchemaMap().keySet()) {
- if (!databaseConfigMap.containsKey(each) || databaseConfigMap.get(each).getDataSources().isEmpty()) {
- result.put(each, ShardingSphereDatabase.create(each, protocolType));
- }
- }
- 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 88217cea2c3..be00f8456b9 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
@@ -54,7 +54,7 @@ public final class MetaDataContextsBuilderTest {
ShardingSphereUser user = new ShardingSphereUser("root", "root", "");
AuthorityRuleConfiguration authorityRuleConfig = new AuthorityRuleConfiguration(Collections.singleton(user),
new ShardingSphereAlgorithmConfiguration("ALL_PERMITTED", new Properties()));
- DatabaseConfiguration databaseConfig = new DataSourceProvidedDatabaseConfiguration(Collections.emptyMap(), Collections.singletonList(new FixtureRuleConfiguration()));
+ DatabaseConfiguration databaseConfig = new DataSourceProvidedDatabaseConfiguration(Collections.emptyMap(), Collections.singleton(new FixtureRuleConfiguration()));
MetaDataContexts actual = new MetaDataContextsBuilder(
Collections.singletonMap("logic_db", databaseConfig), Collections.singleton(authorityRuleConfig), new ConfigurationProperties(props)).build(mock(MetaDataPersistService.class));
assertRules(actual);
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/rule/CreateDefaultSingleTableRuleStatementUpdater.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/rule/CreateDefaultSingleTableRuleStatementUpdater.java
index 74f31c07572..21b85567756 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/rule/CreateDefaultSingleTableRuleStatementUpdater.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/rule/CreateDefaultSingleTableRuleStatementUpdater.java
@@ -61,7 +61,7 @@ public final class CreateDefaultSingleTableRuleStatementUpdater implements RuleD
@Override
public void updateCurrentRuleConfiguration(final SingleTableRuleConfiguration currentRuleConfig, final SingleTableRuleConfiguration toBeCreatedRuleConfig) {
- currentRuleConfig.setDefaultDataSource(toBeCreatedRuleConfig.getDefaultDataSource().get());
+ currentRuleConfig.setDefaultDataSource(toBeCreatedRuleConfig.getDefaultDataSource().orElse(null));
}
@Override
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/rule/RuleDefinitionBackendHandler.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/rule/RuleDefinitionBackendHandler.java
index 11cd9939a6e..19440280bbd 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/rule/RuleDefinitionBackendHandler.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/rule/RuleDefinitionBackendHandler.java
@@ -134,9 +134,9 @@ public final class RuleDefinitionBackendHandler<T extends RuleDefinitionStatemen
@SuppressWarnings({"rawtypes", "unchecked"})
private RuleConfiguration processAlter(final T sqlStatement, final RuleDefinitionAlterUpdater updater, final RuleConfiguration currentRuleConfig) {
- RuleConfiguration toBeAlteredRuleConfig = updater.buildToBeAlteredRuleConfiguration(sqlStatement);
- updater.updateCurrentRuleConfiguration(currentRuleConfig, toBeAlteredRuleConfig);
- return toBeAlteredRuleConfig;
+ RuleConfiguration result = updater.buildToBeAlteredRuleConfiguration(sqlStatement);
+ updater.updateCurrentRuleConfiguration(currentRuleConfig, result);
+ return result;
}
@SuppressWarnings({"rawtypes", "unchecked"})
@@ -149,7 +149,7 @@ public final class RuleDefinitionBackendHandler<T extends RuleDefinitionStatemen
}
}
- private void prepareScaling(final ShardingSphereDatabase database, final T sqlStatement, final RuleDefinitionAlterUpdater updater, final RuleConfiguration currentRuleConfig,
+ private void prepareScaling(final ShardingSphereDatabase database, final T sqlStatement, final RuleDefinitionAlterUpdater<?, ?> updater, final RuleConfiguration currentRuleConfig,
final RuleDefinitionAlterPreprocessor<?> preprocessor) {
Optional<MetaDataPersistService> metaDataPersistService = ProxyContext.getInstance().getContextManager().getMetaDataContexts().getPersistService();
if (metaDataPersistService.isPresent()) {
@@ -174,15 +174,15 @@ public final class RuleDefinitionBackendHandler<T extends RuleDefinitionStatemen
ProxyContext.getInstance().getContextManager().getMetaDataContexts().getPersistService().ifPresent(optional -> optional.getDatabaseRulePersistService().persist(databaseName, alteredConfigs));
}
- private RuleConfiguration getAlteredRuleConfig(final T sqlStatement, final RuleDefinitionAlterUpdater updater, final RuleConfiguration currentRuleConfig,
- final RuleDefinitionAlterPreprocessor preprocessor) {
+ private RuleConfiguration getAlteredRuleConfig(final T sqlStatement, final RuleDefinitionAlterUpdater updater,
+ final RuleConfiguration currentRuleConfig, final RuleDefinitionAlterPreprocessor preprocessor) {
RuleConfiguration toBeAlteredRuleConfig = updater.buildToBeAlteredRuleConfiguration(sqlStatement);
RuleConfiguration result = preprocessor.preprocess(currentRuleConfig, toBeAlteredRuleConfig);
updater.updateCurrentRuleConfiguration(result, toBeAlteredRuleConfig);
return result;
}
- private boolean getRefreshStatus(final SQLStatement sqlStatement, final RuleConfiguration currentRuleConfig, final RuleDefinitionUpdater updater) {
+ private boolean getRefreshStatus(final SQLStatement sqlStatement, final RuleConfiguration currentRuleConfig, final RuleDefinitionUpdater<?, ?> updater) {
if (updater instanceof RuleDefinitionDropUpdater) {
return ((RuleDefinitionDropUpdater) updater).hasAnyOneToBeDropped(sqlStatement, currentRuleConfig);
}