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/17 15:24:53 UTC
[shardingsphere] branch master updated: Refactor ShardingSphereMetaData (#17755)
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 b5bc761bdfa Refactor ShardingSphereMetaData (#17755)
b5bc761bdfa is described below
commit b5bc761bdfa6fd20ee70938df0c6515eace9b969
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Tue May 17 23:24:47 2022 +0800
Refactor ShardingSphereMetaData (#17755)
* Refactor ShardingSphereMetaData
* Refactor ShardingSphereMetaData
---
.../infra/metadata/ShardingSphereMetaData.java | 36 +++++++++++++++++++---
.../mode/metadata/MetaDataContextsBuilder.java | 24 ++-------------
.../mode/metadata/MetaDataContextsBuilderTest.java | 21 ++++++-------
.../cluster/ClusterContextManagerBuilder.java | 5 ++-
.../memory/MemoryContextManagerBuilder.java | 8 ++---
.../StandaloneContextManagerBuilder.java | 4 +--
6 files changed, 50 insertions(+), 48 deletions(-)
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/ShardingSphereMetaData.java b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/ShardingSphereMetaData.java
index 01d6b6a5538..88c4613c200 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/ShardingSphereMetaData.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/ShardingSphereMetaData.java
@@ -20,20 +20,26 @@ package org.apache.shardingsphere.infra.metadata;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
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.metadata.database.ShardingSphereDatabase;
+import org.apache.shardingsphere.infra.metadata.database.loader.DatabaseLoader;
import org.apache.shardingsphere.infra.metadata.resource.CachedDatabaseMetaData;
import org.apache.shardingsphere.infra.metadata.resource.DataSourcesMetaData;
import org.apache.shardingsphere.infra.metadata.resource.ShardingSphereResource;
import org.apache.shardingsphere.infra.metadata.rule.ShardingSphereRuleMetaData;
import org.apache.shardingsphere.infra.metadata.schema.ShardingSphereSchema;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
+import org.apache.shardingsphere.infra.rule.builder.schema.SchemaRulesBuilder;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Collection;
+import java.util.LinkedHashMap;
+import java.util.LinkedList;
import java.util.Map;
import java.util.Optional;
@@ -55,15 +61,37 @@ public final class ShardingSphereMetaData {
/**
* Create ShardingSphere meta data.
*
+ * @param databaseName database name
* @param frontendDatabaseType frontend database type
- * @param database database
+ * @param backendDatabaseType backend database type
* @param databaseConfig database configuration
- * @param rules rules
+ * @param props configuration properties
* @return ShardingSphere meta data
* @throws SQLException SQL exception
*/
- public static ShardingSphereMetaData create(final DatabaseType frontendDatabaseType, final ShardingSphereDatabase database,
- final DatabaseConfiguration databaseConfig, final Collection<ShardingSphereRule> rules) throws SQLException {
+ public static ShardingSphereMetaData create(final String databaseName, final DatabaseType frontendDatabaseType, final DatabaseType backendDatabaseType,
+ final DatabaseConfiguration databaseConfig, final ConfigurationProperties props) throws SQLException {
+ Collection<ShardingSphereRule> databaseRules = SchemaRulesBuilder.buildRules(databaseName, databaseConfig, props);
+ ShardingSphereDatabase database = DatabaseLoader.load(databaseName, frontendDatabaseType, backendDatabaseType, databaseConfig.getDataSources(), databaseRules, props);
+ return create(frontendDatabaseType, databaseConfig, databaseRules, database);
+ }
+
+ /**
+ * Create ShardingSphere meta data for system database.
+ *
+ * @param systemDatabaseName system database name
+ * @param frontendDatabaseType frontend database type
+ * @return ShardingSphere meta data
+ * @throws SQLException SQL exception
+ */
+ public static ShardingSphereMetaData create(final String systemDatabaseName, final DatabaseType frontendDatabaseType) throws SQLException {
+ ShardingSphereDatabase systemDatabase = DatabaseLoader.load(systemDatabaseName, frontendDatabaseType);
+ DatabaseConfiguration databaseConfig = new DataSourceProvidedDatabaseConfiguration(new LinkedHashMap<>(), new LinkedList<>());
+ return create(frontendDatabaseType, databaseConfig, new LinkedList<>(), systemDatabase);
+ }
+
+ private static ShardingSphereMetaData create(final DatabaseType frontendDatabaseType,
+ final DatabaseConfiguration databaseConfig, final Collection<ShardingSphereRule> rules, final ShardingSphereDatabase database) throws SQLException {
ShardingSphereResource resource = createResource(frontendDatabaseType, databaseConfig.getDataSources());
ShardingSphereRuleMetaData ruleMetaData = new ShardingSphereRuleMetaData(databaseConfig.getRuleConfigurations(), rules);
return new ShardingSphereMetaData(frontendDatabaseType, resource, ruleMetaData, database);
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 3c5e9774f0f..078eede9343 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
@@ -20,7 +20,6 @@ package org.apache.shardingsphere.mode.metadata;
import lombok.RequiredArgsConstructor;
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.config.props.ConfigurationPropertyKey;
import org.apache.shardingsphere.infra.database.type.DatabaseType;
@@ -28,19 +27,13 @@ import org.apache.shardingsphere.infra.database.type.DatabaseTypeEngine;
import org.apache.shardingsphere.infra.executor.kernel.ExecutorEngine;
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.loader.DatabaseLoader;
import org.apache.shardingsphere.infra.metadata.rule.ShardingSphereRuleMetaData;
-import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import org.apache.shardingsphere.infra.rule.builder.global.GlobalRulesBuilder;
-import org.apache.shardingsphere.infra.rule.builder.schema.SchemaRulesBuilder;
import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
import java.sql.SQLException;
import java.util.Collection;
import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.LinkedList;
import java.util.Map;
import java.util.Map.Entry;
@@ -84,30 +77,17 @@ public final class MetaDataContextsBuilder {
for (Entry<String, DatabaseConfiguration> entry : databaseConfigMap.entrySet()) {
String databaseName = entry.getKey();
if (!frontendDatabaseType.getSystemSchemas().contains(databaseName)) {
- result.put(databaseName, createMetaData(databaseName, frontendDatabaseType, backendDatabaseType, entry.getValue()));
+ result.put(databaseName, ShardingSphereMetaData.create(databaseName, frontendDatabaseType, backendDatabaseType, entry.getValue(), props));
}
}
return result;
}
- private ShardingSphereMetaData createMetaData(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);
- return ShardingSphereMetaData.create(frontendDatabaseType, database, databaseConfig, databaseRules);
- }
-
private Map<String, ShardingSphereMetaData> getSystemDatabaseMetaDataMap(final DatabaseType frontendDatabaseType) throws SQLException {
Map<String, ShardingSphereMetaData> result = new HashMap<>(frontendDatabaseType.getSystemDatabaseSchemaMap().size(), 1);
for (String each : frontendDatabaseType.getSystemDatabaseSchemaMap().keySet()) {
- result.put(each, createSystemMetaData(each, frontendDatabaseType));
+ result.put(each, ShardingSphereMetaData.create(each, frontendDatabaseType));
}
return result;
}
-
- private ShardingSphereMetaData createSystemMetaData(final String databaseName, final DatabaseType frontendDatabaseType) throws SQLException {
- ShardingSphereDatabase database = DatabaseLoader.load(databaseName, frontendDatabaseType);
- DatabaseConfiguration databaseConfig = new DataSourceProvidedDatabaseConfiguration(new LinkedHashMap<>(), new LinkedList<>());
- return ShardingSphereMetaData.create(frontendDatabaseType, database, databaseConfig, new LinkedList<>());
- }
}
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 9e30005ebcd..de5af32b0b5 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
@@ -56,15 +56,20 @@ public final class MetaDataContextsBuilderTest {
AuthorityRuleConfiguration authorityRuleConfig = new AuthorityRuleConfiguration(Collections.singleton(user),
new ShardingSphereAlgorithmConfiguration("ALL_PERMITTED", new Properties()));
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));
+ MetaDataContexts actual = new MetaDataContextsBuilder(
+ Collections.singletonMap("logic_db", databaseConfig), Collections.singleton(authorityRuleConfig), new ConfigurationProperties(props)).build(mock(MetaDataPersistService.class));
assertRules(actual);
assertTrue(actual.getMetaData("logic_db").getResource().getDataSources().isEmpty());
assertThat(actual.getProps().getProps().size(), is(1));
assertThat(actual.getProps().getValue(ConfigurationPropertyKey.KERNEL_EXECUTOR_SIZE), is(1));
}
+ private void assertRules(final MetaDataContexts actual) {
+ Collection<ShardingSphereRule> rules = actual.getMetaData("logic_db").getRuleMetaData().getRules();
+ assertThat(rules.size(), is(1));
+ assertThat(rules.iterator().next(), instanceOf(FixtureRule.class));
+ }
+
@Test
public void assertBuildWithoutGlobalRuleConfigurations() throws SQLException {
MetaDataContexts actual = new MetaDataContextsBuilder(
@@ -78,8 +83,8 @@ public final class MetaDataContextsBuilderTest {
@Test
public void assertBuildWithEmptyRuleConfigurations() throws SQLException {
- MetaDataContextsBuilder builder = new MetaDataContextsBuilder(Collections.emptyMap(), Collections.emptyList(), new ConfigurationProperties(new Properties()));
- MetaDataContexts actual = builder.build(mock(MetaDataPersistService.class));
+ MetaDataContexts actual = new MetaDataContextsBuilder(
+ Collections.emptyMap(), Collections.emptyList(), new ConfigurationProperties(new Properties())).build(mock(MetaDataPersistService.class));
assertThat(actual.getMetaDataMap().size(), is(4));
assertTrue(actual.getMetaDataMap().containsKey("information_schema"));
assertTrue(actual.getMetaDataMap().containsKey("performance_schema"));
@@ -90,10 +95,4 @@ public final class MetaDataContextsBuilderTest {
assertThat(actual.getMetaDataMap().get("mysql").getRuleMetaData().getRules(), instanceOf(LinkedList.class));
assertThat(actual.getMetaDataMap().get("sys").getRuleMetaData().getRules(), instanceOf(LinkedList.class));
}
-
- private void assertRules(final MetaDataContexts actual) {
- Collection<ShardingSphereRule> rules = actual.getMetaData("logic_db").getRuleMetaData().getRules();
- assertThat(rules.size(), is(1));
- assertThat(rules.iterator().next(), instanceOf(FixtureRule.class));
- }
}
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 cc4763944e7..ea1c327e802 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
@@ -69,8 +69,7 @@ public final class ClusterContextManagerBuilder implements ContextManagerBuilder
MetaDataPersistService metaDataPersistService = new MetaDataPersistService(repository);
persistConfigurations(metaDataPersistService, parameter);
RegistryCenter registryCenter = new RegistryCenter(repository);
- MetaDataContextsBuilder builder = createMetaDataContextsBuilder(metaDataPersistService, parameter);
- MetaDataContexts metaDataContexts = builder.build(metaDataPersistService);
+ MetaDataContexts metaDataContexts = createMetaDataContextsBuilder(metaDataPersistService, parameter).build(metaDataPersistService);
persistMetaData(metaDataContexts);
Properties transactionProps = getTransactionProperties(metaDataContexts);
persistTransactionConfiguration(parameter, metaDataPersistService, transactionProps);
@@ -91,9 +90,9 @@ public final class ClusterContextManagerBuilder implements ContextManagerBuilder
Collection<String> databaseNames = InstanceType.JDBC == parameter.getInstanceDefinition().getInstanceType()
? parameter.getDatabaseConfigs().keySet()
: metaDataPersistService.getSchemaMetaDataService().loadAllDatabaseNames();
+ Map<String, DatabaseConfiguration> databaseConfigMap = getDatabaseConfigMap(databaseNames, metaDataPersistService, parameter);
Collection<RuleConfiguration> globalRuleConfigs = metaDataPersistService.getGlobalRuleService().load();
ConfigurationProperties props = new ConfigurationProperties(metaDataPersistService.getPropsService().load());
- Map<String, DatabaseConfiguration> databaseConfigMap = getDatabaseConfigMap(databaseNames, metaDataPersistService, parameter);
return new MetaDataContextsBuilder(databaseConfigMap, globalRuleConfigs, props);
}
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 339be07bb80..3579b2a58b2 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
@@ -45,7 +45,8 @@ public final class MemoryContextManagerBuilder implements ContextManagerBuilder
@Override
public ContextManager build(final ContextManagerBuilderParameter parameter) throws SQLException {
- MetaDataContexts metaDataContexts = createMetaDataContextsBuilder(parameter).build(null);
+ MetaDataContexts metaDataContexts = new MetaDataContextsBuilder(
+ parameter.getDatabaseConfigs(), parameter.getGlobalRuleConfigs(), new ConfigurationProperties(parameter.getProps())).build(null);
InstanceContext instanceContext = buildInstanceContext(parameter);
generateTransactionConfigurationFile(instanceContext, metaDataContexts);
TransactionContexts transactionContexts = new TransactionContextsBuilder(metaDataContexts.getMetaDataMap(), metaDataContexts.getGlobalRuleMetaData().getRules()).build();
@@ -55,11 +56,6 @@ 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 5ab1341bafa..878aa345f70 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
@@ -65,13 +65,13 @@ public final class StandaloneContextManagerBuilder implements ContextManagerBuil
}
}
- private MetaDataContextsBuilder createMetaDataContextsBuilder(final MetaDataPersistService metaDataPersistService, final ContextManagerBuilderParameter parameter) throws SQLException {
+ private MetaDataContextsBuilder createMetaDataContextsBuilder(final MetaDataPersistService metaDataPersistService, final ContextManagerBuilderParameter parameter) {
Collection<String> databaseNames = InstanceType.JDBC == parameter.getInstanceDefinition().getInstanceType()
? parameter.getDatabaseConfigs().keySet()
: metaDataPersistService.getSchemaMetaDataService().loadAllDatabaseNames();
+ Map<String, DatabaseConfiguration> databaseConfigMap = getDatabaseConfigMap(databaseNames, metaDataPersistService, parameter);
Collection<RuleConfiguration> globalRuleConfigs = metaDataPersistService.getGlobalRuleService().load();
ConfigurationProperties props = new ConfigurationProperties(metaDataPersistService.getPropsService().load());
- Map<String, DatabaseConfiguration> databaseConfigMap = getDatabaseConfigMap(databaseNames, metaDataPersistService, parameter);
return new MetaDataContextsBuilder(databaseConfigMap, globalRuleConfigs, props);
}