This is an automated email from the ASF dual-hosted git repository.
zhangliang 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 759076c0f50 Add ShardingSphereDatabaseFactory (#34402)
759076c0f50 is described below
commit 759076c0f50fa25b4fd80623e919974aae8e6962
Author: Liang Zhang <[email protected]>
AuthorDate: Sun Jan 19 23:07:17 2025 +0800
Add ShardingSphereDatabaseFactory (#34402)
* Add MetaDataContextsInitFactory
* Add ShardingSphereDatabaseFactory
* Add ShardingSphereDatabaseFactory
---
.../infra/metadata/ShardingSphereMetaData.java | 3 +-
.../metadata/database/ShardingSphereDatabase.java | 62 -----------
...ase.java => ShardingSphereDatabaseFactory.java} | 117 +--------------------
.../database/ShardingSphereDatabasesFactory.java | 8 +-
.../infra/metadata/ShardingSphereMetaDataTest.java | 5 +-
.../database/ShardingSphereDatabaseTest.java | 6 +-
.../builder/global/GlobalRulesBuilderTest.java | 3 +-
.../metadata/factory/MetaDataContextsFactory.java | 80 +++++++-------
8 files changed, 54 insertions(+), 230 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 160975a4471..28a2e965b75 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
@@ -25,6 +25,7 @@ import
org.apache.shardingsphere.infra.config.props.temporary.TemporaryConfigura
import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
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;
import
org.apache.shardingsphere.infra.metadata.database.resource.ResourceMetaData;
import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
import
org.apache.shardingsphere.infra.metadata.identifier.ShardingSphereIdentifier;
@@ -109,7 +110,7 @@ public final class ShardingSphereMetaData implements
AutoCloseable {
* @param props configuration properties
*/
public void addDatabase(final String databaseName, final DatabaseType
protocolType, final ConfigurationProperties props) {
- ShardingSphereDatabase database =
ShardingSphereDatabase.create(databaseName, protocolType, props);
+ ShardingSphereDatabase database =
ShardingSphereDatabaseFactory.create(databaseName, protocolType, props);
databases.put(new ShardingSphereIdentifier(database.getName()),
database);
globalRuleMetaData.getRules().forEach(each -> ((GlobalRule)
each).refresh(databases.values(), GlobalRuleChangedType.DATABASE_CHANGED));
}
diff --git
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabase.java
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabase.java
index 7da9ea92999..ff1ccfe4ee7 100644
---
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabase.java
+++
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabase.java
@@ -19,26 +19,16 @@ package org.apache.shardingsphere.infra.metadata.database;
import lombok.AccessLevel;
import lombok.Getter;
-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.rule.RuleConfiguration;
import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
-import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
-import org.apache.shardingsphere.infra.instance.ComputeNodeInstanceContext;
import
org.apache.shardingsphere.infra.metadata.database.resource.ResourceMetaData;
import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
-import
org.apache.shardingsphere.infra.metadata.database.schema.builder.GenericSchemaBuilder;
-import
org.apache.shardingsphere.infra.metadata.database.schema.builder.GenericSchemaBuilderMaterial;
-import
org.apache.shardingsphere.infra.metadata.database.schema.builder.SystemSchemaBuilder;
import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
import
org.apache.shardingsphere.infra.metadata.identifier.ShardingSphereIdentifier;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import
org.apache.shardingsphere.infra.rule.attribute.datanode.MutableDataNodeRuleAttribute;
-import
org.apache.shardingsphere.infra.rule.builder.database.DatabaseRulesBuilder;
import javax.sql.DataSource;
-import java.sql.SQLException;
import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.LinkedList;
@@ -73,58 +63,6 @@ public final class ShardingSphereDatabase {
this.schemas = new
ConcurrentHashMap<>(schemas.stream().collect(Collectors.toMap(each -> new
ShardingSphereIdentifier(each.getName()), each -> each)));
}
- /**
- * Create system database.
- *
- * @param name system database name
- * @param protocolType protocol database type
- * @param props configuration properties
- * @return created system database
- */
- public static ShardingSphereDatabase create(final String name, final
DatabaseType protocolType, final ConfigurationProperties props) {
- DatabaseConfiguration databaseConfig = new
DataSourceProvidedDatabaseConfiguration(new LinkedHashMap<>(), new
LinkedList<>());
- ResourceMetaData resourceMetaData = new
ResourceMetaData(databaseConfig.getDataSources(),
databaseConfig.getStorageUnits());
- return new ShardingSphereDatabase(name, protocolType,
resourceMetaData, new RuleMetaData(new LinkedList<>()),
SystemSchemaBuilder.build(name, protocolType, props).values());
- }
-
- /**
- * Create database.
- *
- * @param name database name
- * @param protocolType database protocol type
- * @param databaseConfig database configuration
- * @param props configuration properties
- * @param computeNodeInstanceContext compute node instance context
- * @return created database
- * @throws SQLException SQL exception
- */
- public static ShardingSphereDatabase create(final String name, final
DatabaseType protocolType, final DatabaseConfiguration databaseConfig,
- final ConfigurationProperties
props, final ComputeNodeInstanceContext computeNodeInstanceContext) throws
SQLException {
- ResourceMetaData resourceMetaData = new
ResourceMetaData(databaseConfig.getDataSources(),
databaseConfig.getStorageUnits());
- Collection<ShardingSphereRule> databaseRules =
DatabaseRulesBuilder.build(name, protocolType, databaseConfig,
computeNodeInstanceContext, resourceMetaData);
- Map<String, ShardingSphereSchema> schemas = new
ConcurrentHashMap<>(GenericSchemaBuilder.build(protocolType,
- new
GenericSchemaBuilderMaterial(resourceMetaData.getStorageUnits(), databaseRules,
props, new DatabaseTypeRegistry(protocolType).getDefaultSchemaName(name))));
- SystemSchemaBuilder.build(name, protocolType,
props).forEach(schemas::putIfAbsent);
- return new ShardingSphereDatabase(name, protocolType,
resourceMetaData, new RuleMetaData(databaseRules), schemas.values());
- }
-
- /**
- * Create database.
- *
- * @param name database name
- * @param protocolType database protocol type
- * @param databaseConfig database configuration
- * @param computeNodeInstanceContext compute node instance context
- * @param schemas schemas
- * @return created database
- */
- public static ShardingSphereDatabase create(final String name, final
DatabaseType protocolType, final DatabaseConfiguration databaseConfig,
- final
ComputeNodeInstanceContext computeNodeInstanceContext, final
Collection<ShardingSphereSchema> schemas) {
- ResourceMetaData resourceMetaData = new
ResourceMetaData(databaseConfig.getDataSources(),
databaseConfig.getStorageUnits());
- Collection<ShardingSphereRule> rules =
DatabaseRulesBuilder.build(name, protocolType, databaseConfig,
computeNodeInstanceContext, resourceMetaData);
- return new ShardingSphereDatabase(name, protocolType,
resourceMetaData, new RuleMetaData(rules), schemas);
- }
-
/**
* Get all schemas.
*
diff --git
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabase.java
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabaseFactory.java
similarity index 57%
copy from
infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabase.java
copy to
infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabaseFactory.java
index 7da9ea92999..bc4d8ce1ce2 100644
---
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabase.java
+++
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabaseFactory.java
@@ -18,11 +18,10 @@
package org.apache.shardingsphere.infra.metadata.database;
import lombok.AccessLevel;
-import lombok.Getter;
+import lombok.NoArgsConstructor;
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.rule.RuleConfiguration;
import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
import org.apache.shardingsphere.infra.instance.ComputeNodeInstanceContext;
@@ -32,46 +31,21 @@ import
org.apache.shardingsphere.infra.metadata.database.schema.builder.GenericS
import
org.apache.shardingsphere.infra.metadata.database.schema.builder.GenericSchemaBuilderMaterial;
import
org.apache.shardingsphere.infra.metadata.database.schema.builder.SystemSchemaBuilder;
import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
-import
org.apache.shardingsphere.infra.metadata.identifier.ShardingSphereIdentifier;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
-import
org.apache.shardingsphere.infra.rule.attribute.datanode.MutableDataNodeRuleAttribute;
import
org.apache.shardingsphere.infra.rule.builder.database.DatabaseRulesBuilder;
-import javax.sql.DataSource;
import java.sql.SQLException;
import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.Map;
-import java.util.Map.Entry;
import java.util.concurrent.ConcurrentHashMap;
-import java.util.stream.Collectors;
/**
- * ShardingSphere database.
+ * ShardingSphere database factory.
*/
-@Getter
-public final class ShardingSphereDatabase {
-
- private final String name;
-
- private final DatabaseType protocolType;
-
- private final ResourceMetaData resourceMetaData;
-
- private final RuleMetaData ruleMetaData;
-
- @Getter(AccessLevel.NONE)
- private final Map<ShardingSphereIdentifier, ShardingSphereSchema> schemas;
-
- public ShardingSphereDatabase(final String name, final DatabaseType
protocolType, final ResourceMetaData resourceMetaData,
- final RuleMetaData ruleMetaData, final
Collection<ShardingSphereSchema> schemas) {
- this.name = name;
- this.protocolType = protocolType;
- this.resourceMetaData = resourceMetaData;
- this.ruleMetaData = ruleMetaData;
- this.schemas = new
ConcurrentHashMap<>(schemas.stream().collect(Collectors.toMap(each -> new
ShardingSphereIdentifier(each.getName()), each -> each)));
- }
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class ShardingSphereDatabaseFactory {
/**
* Create system database.
@@ -124,87 +98,4 @@ public final class ShardingSphereDatabase {
Collection<ShardingSphereRule> rules =
DatabaseRulesBuilder.build(name, protocolType, databaseConfig,
computeNodeInstanceContext, resourceMetaData);
return new ShardingSphereDatabase(name, protocolType,
resourceMetaData, new RuleMetaData(rules), schemas);
}
-
- /**
- * Get all schemas.
- *
- * @return all schemas
- */
- public Collection<ShardingSphereSchema> getAllSchemas() {
- return schemas.values();
- }
-
- /**
- * Judge contains schema from database or not.
- *
- * @param schemaName schema name
- * @return contains schema from database or not
- */
- public boolean containsSchema(final String schemaName) {
- return schemas.containsKey(new ShardingSphereIdentifier(schemaName));
- }
-
- /**
- * Get schema.
- *
- * @param schemaName schema name
- * @return schema
- */
- public ShardingSphereSchema getSchema(final String schemaName) {
- return schemas.get(new ShardingSphereIdentifier(schemaName));
- }
-
- /**
- * Add schema.
- *
- * @param schema schema
- */
- public void addSchema(final ShardingSphereSchema schema) {
- schemas.put(new ShardingSphereIdentifier(schema.getName()), schema);
- }
-
- /**
- * Drop schema.
- *
- * @param schemaName schema name
- */
- public void dropSchema(final String schemaName) {
- schemas.remove(new ShardingSphereIdentifier(schemaName));
- }
-
- /**
- * Judge whether is completed.
- *
- * @return is completed or not
- */
- public boolean isComplete() {
- return !ruleMetaData.getRules().isEmpty() &&
!resourceMetaData.getStorageUnits().isEmpty();
- }
-
- /**
- * Judge whether contains data source.
- *
- * @return contains data source or not
- */
- public boolean containsDataSource() {
- return !resourceMetaData.getStorageUnits().isEmpty();
- }
-
- /**
- * Reload rules.
- */
- public synchronized void reloadRules() {
- Collection<ShardingSphereRule> toBeReloadedRules =
ruleMetaData.getRules().stream()
- .filter(each ->
each.getAttributes().findAttribute(MutableDataNodeRuleAttribute.class).isPresent()).collect(Collectors.toList());
- RuleConfiguration ruleConfig =
toBeReloadedRules.stream().map(ShardingSphereRule::getConfiguration).findFirst().orElse(null);
- Collection<ShardingSphereRule> rules = new
LinkedList<>(ruleMetaData.getRules());
- toBeReloadedRules.stream().findFirst().ifPresent(optional -> {
- rules.removeAll(toBeReloadedRules);
- Map<String, DataSource> dataSources =
resourceMetaData.getStorageUnits().entrySet().stream()
- .collect(Collectors.toMap(Entry::getKey, entry ->
entry.getValue().getDataSource(), (oldValue, currentValue) -> oldValue,
LinkedHashMap::new));
-
rules.add(optional.getAttributes().getAttribute(MutableDataNodeRuleAttribute.class).reloadRule(ruleConfig,
name, dataSources, rules));
- });
- ruleMetaData.getRules().clear();
- ruleMetaData.getRules().addAll(rules);
- }
}
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 c650951b467..46e83df134d 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
@@ -62,8 +62,8 @@ public final class ShardingSphereDatabasesFactory {
final
Collection<ShardingSphereSchema> schemas, final ConfigurationProperties props,
final
ComputeNodeInstanceContext computeNodeInstanceContext) {
return databaseConfig.getStorageUnits().isEmpty()
- ? ShardingSphereDatabase.create(databaseName, protocolType,
props)
- : ShardingSphereDatabase.create(databaseName,
DatabaseTypeEngine.getProtocolType(databaseConfig, props), databaseConfig,
computeNodeInstanceContext, schemas);
+ ? ShardingSphereDatabaseFactory.create(databaseName,
protocolType, props)
+ : ShardingSphereDatabaseFactory.create(databaseName,
DatabaseTypeEngine.getProtocolType(databaseConfig, props), databaseConfig,
computeNodeInstanceContext, schemas);
}
/**
@@ -92,7 +92,7 @@ public final class ShardingSphereDatabasesFactory {
for (Entry<String, DatabaseConfiguration> entry :
databaseConfigMap.entrySet()) {
String databaseName = entry.getKey();
if (!entry.getValue().getStorageUnits().isEmpty() ||
!systemDatabase.getSystemSchemas().contains(databaseName)) {
- result.add(ShardingSphereDatabase.create(databaseName,
protocolType, entry.getValue(), props, instanceContext));
+ result.add(ShardingSphereDatabaseFactory.create(databaseName,
protocolType, entry.getValue(), props, instanceContext));
}
}
return result;
@@ -103,7 +103,7 @@ public final class ShardingSphereDatabasesFactory {
Collection<ShardingSphereDatabase> result = new
HashSet<>(systemDatabase.getSystemDatabaseSchemaMap().size(), 1F);
for (String each :
systemDatabase.getSystemDatabaseSchemaMap().keySet()) {
if (!databaseConfigMap.containsKey(each) ||
databaseConfigMap.get(each).getStorageUnits().isEmpty()) {
- result.add(ShardingSphereDatabase.create(each, protocolType,
props));
+ result.add(ShardingSphereDatabaseFactory.create(each,
protocolType, props));
}
}
return result;
diff --git
a/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/ShardingSphereMetaDataTest.java
b/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/ShardingSphereMetaDataTest.java
index f1f4a28fbc4..98a9c8020cc 100644
---
a/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/ShardingSphereMetaDataTest.java
+++
b/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/ShardingSphereMetaDataTest.java
@@ -22,6 +22,7 @@ import
org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
import
org.apache.shardingsphere.infra.datasource.pool.props.domain.DataSourcePoolProperties;
import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
+import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabaseFactory;
import
org.apache.shardingsphere.infra.metadata.database.resource.ResourceMetaData;
import
org.apache.shardingsphere.infra.metadata.database.resource.node.StorageNode;
import
org.apache.shardingsphere.infra.metadata.database.resource.unit.StorageUnit;
@@ -58,7 +59,7 @@ import static org.mockito.Mockito.when;
import static org.mockito.Mockito.withSettings;
@ExtendWith(AutoMockExtension.class)
-@StaticMockSettings(ShardingSphereDatabase.class)
+@StaticMockSettings(ShardingSphereDatabaseFactory.class)
@MockitoSettings(strictness = Strictness.LENIENT)
class ShardingSphereMetaDataTest {
@@ -68,7 +69,7 @@ class ShardingSphereMetaDataTest {
ShardingSphereDatabase database =
mockDatabase(mock(ResourceMetaData.class, RETURNS_DEEP_STUBS), new
MockedDataSource(), globalRule);
DatabaseType databaseType = mock(DatabaseType.class);
ConfigurationProperties configProps = new ConfigurationProperties(new
Properties());
- when(ShardingSphereDatabase.create("foo_db", databaseType,
configProps)).thenReturn(database);
+ when(ShardingSphereDatabaseFactory.create("foo_db", databaseType,
configProps)).thenReturn(database);
Collection<ShardingSphereDatabase> databases = new
LinkedList<>(Collections.singleton(database));
ShardingSphereMetaData metaData = new
ShardingSphereMetaData(databases, mock(ResourceMetaData.class), new
RuleMetaData(Collections.singleton(globalRule)), configProps);
metaData.addDatabase("foo_db", databaseType, configProps);
diff --git
a/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabaseTest.java
b/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabaseTest.java
index 03bea574939..f89d1ed6da7 100644
---
a/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabaseTest.java
+++
b/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabaseTest.java
@@ -53,7 +53,7 @@ import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
@ExtendWith(AutoMockExtension.class)
-@StaticMockSettings(ShardingSphereDatabase.class)
+@StaticMockSettings(ShardingSphereDatabaseFactory.class)
@MockitoSettings(strictness = Strictness.LENIENT)
class ShardingSphereDatabaseTest {
@@ -154,7 +154,7 @@ class ShardingSphereDatabaseTest {
@Test
void assertGetPostgreSQLDefaultSchema() throws SQLException {
DatabaseType databaseType =
TypedSPILoader.getService(DatabaseType.class, "PostgreSQL");
- ShardingSphereDatabase actual =
ShardingSphereDatabase.create("foo_db", databaseType,
+ ShardingSphereDatabase actual =
ShardingSphereDatabaseFactory.create("foo_db", databaseType,
mock(DataSourceProvidedDatabaseConfiguration.class), new
ConfigurationProperties(new Properties()),
mock(ComputeNodeInstanceContext.class));
assertNotNull(actual.getSchema("public"));
}
@@ -162,7 +162,7 @@ class ShardingSphereDatabaseTest {
@Test
void assertGetMySQLDefaultSchema() throws SQLException {
DatabaseType databaseType =
TypedSPILoader.getService(DatabaseType.class, "MySQL");
- ShardingSphereDatabase actual =
ShardingSphereDatabase.create("foo_db", databaseType,
+ ShardingSphereDatabase actual =
ShardingSphereDatabaseFactory.create("foo_db", databaseType,
mock(DataSourceProvidedDatabaseConfiguration.class), new
ConfigurationProperties(new Properties()),
mock(ComputeNodeInstanceContext.class));
assertNotNull(actual.getSchema("foo_db"));
}
diff --git
a/infra/common/src/test/java/org/apache/shardingsphere/infra/rule/builder/global/GlobalRulesBuilderTest.java
b/infra/common/src/test/java/org/apache/shardingsphere/infra/rule/builder/global/GlobalRulesBuilderTest.java
index 6dbf6f6f747..94ec9c41523 100644
---
a/infra/common/src/test/java/org/apache/shardingsphere/infra/rule/builder/global/GlobalRulesBuilderTest.java
+++
b/infra/common/src/test/java/org/apache/shardingsphere/infra/rule/builder/global/GlobalRulesBuilderTest.java
@@ -20,6 +20,7 @@ package org.apache.shardingsphere.infra.rule.builder.global;
import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
+import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabaseFactory;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import org.apache.shardingsphere.infra.rule.builder.fixture.FixtureGlobalRule;
import
org.apache.shardingsphere.infra.rule.builder.fixture.FixtureGlobalRuleConfiguration;
@@ -51,6 +52,6 @@ class GlobalRulesBuilderTest {
}
private ShardingSphereDatabase buildDatabase() {
- return ShardingSphereDatabase.create("foo_db",
TypedSPILoader.getService(DatabaseType.class, "FIXTURE"), new
ConfigurationProperties(new Properties()));
+ return ShardingSphereDatabaseFactory.create("foo_db",
TypedSPILoader.getService(DatabaseType.class, "FIXTURE"), new
ConfigurationProperties(new Properties()));
}
}
diff --git
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/factory/MetaDataContextsFactory.java
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/factory/MetaDataContextsFactory.java
index 646d595a0e9..b9eb4ed10bd 100644
---
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/factory/MetaDataContextsFactory.java
+++
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/factory/MetaDataContextsFactory.java
@@ -28,6 +28,7 @@ import
org.apache.shardingsphere.infra.datasource.pool.props.domain.DataSourcePo
import org.apache.shardingsphere.infra.instance.ComputeNodeInstanceContext;
import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
+import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabaseFactory;
import
org.apache.shardingsphere.infra.metadata.database.resource.ResourceMetaData;
import
org.apache.shardingsphere.infra.metadata.database.resource.node.StorageNode;
import
org.apache.shardingsphere.infra.metadata.database.resource.unit.StorageUnit;
@@ -82,15 +83,15 @@ public final class MetaDataContextsFactory {
* Create meta data contexts by switch resource.
*
* @param databaseName database name
- * @param internalLoadMetaData internal load meta data
+ * @param isLoadSchemasFromRegisterCenter is load schemas from register
center or not
* @param switchingResource switching resource
* @param originalMetaDataContexts original meta data contexts
* @return meta data contexts
* @throws SQLException SQL exception
*/
- public MetaDataContexts createBySwitchResource(final String databaseName,
final boolean internalLoadMetaData, final SwitchingResource switchingResource,
- final MetaDataContexts
originalMetaDataContexts) throws SQLException {
- ShardingSphereDatabase changedDatabase =
createChangedDatabase(databaseName, internalLoadMetaData, switchingResource,
null, originalMetaDataContexts);
+ public MetaDataContexts createBySwitchResource(final String databaseName,
final boolean isLoadSchemasFromRegisterCenter,
+ final SwitchingResource
switchingResource, final MetaDataContexts originalMetaDataContexts) throws
SQLException {
+ ShardingSphereDatabase changedDatabase =
createChangedDatabase(databaseName, isLoadSchemasFromRegisterCenter,
switchingResource, null, originalMetaDataContexts);
ConfigurationProperties props =
originalMetaDataContexts.getMetaData().getProps();
ShardingSphereMetaData clonedMetaData =
cloneMetaData(originalMetaDataContexts.getMetaData(), changedDatabase);
RuleMetaData changedGlobalMetaData = new RuleMetaData(
@@ -104,15 +105,15 @@ public final class MetaDataContextsFactory {
* Create meta data contexts by alter rule.
*
* @param databaseName database name
- * @param internalLoadMetaData internal load meta data
+ * @param isLoadSchemasFromRegisterCenter is load schemas from register
center or not
* @param ruleConfigs rule configs
* @param originalMetaDataContexts original meta data contexts
* @return meta data contexts
* @throws SQLException SQL exception
*/
- public MetaDataContexts createByAlterRule(final String databaseName, final
boolean internalLoadMetaData, final Collection<RuleConfiguration> ruleConfigs,
- final MetaDataContexts
originalMetaDataContexts) throws SQLException {
- ShardingSphereDatabase changedDatabase =
createChangedDatabase(databaseName, internalLoadMetaData, null, ruleConfigs,
originalMetaDataContexts);
+ public MetaDataContexts createByAlterRule(final String databaseName, final
boolean isLoadSchemasFromRegisterCenter,
+ final
Collection<RuleConfiguration> ruleConfigs, final MetaDataContexts
originalMetaDataContexts) throws SQLException {
+ ShardingSphereDatabase changedDatabase =
createChangedDatabase(databaseName, isLoadSchemasFromRegisterCenter, null,
ruleConfigs, originalMetaDataContexts);
ShardingSphereMetaData clonedMetaData =
cloneMetaData(originalMetaDataContexts.getMetaData(), changedDatabase);
ConfigurationProperties props =
originalMetaDataContexts.getMetaData().getProps();
RuleMetaData changedGlobalMetaData = new RuleMetaData(
@@ -130,67 +131,58 @@ public final class MetaDataContextsFactory {
}
/**
- * Create changed database by switch resource.
+ * Create changed database.
*
* @param databaseName database name
- * @param internalLoadMetaData internal load meta data
+ * @param isLoadSchemasFromRegisterCenter is load schemas from register
center or not
* @param switchingResource switching resource
* @param ruleConfigs rule configurations
* @param originalMetaDataContext original meta data contexts
* @return changed database
* @throws SQLException SQL exception
*/
- public ShardingSphereDatabase createChangedDatabase(final String
databaseName, final boolean internalLoadMetaData, final SwitchingResource
switchingResource,
- final
Collection<RuleConfiguration> ruleConfigs, final MetaDataContexts
originalMetaDataContext) throws SQLException {
- ResourceMetaData effectiveResourceMetaData =
getEffectiveResourceMetaData(originalMetaDataContext.getMetaData().getDatabase(databaseName),
switchingResource);
- Collection<RuleConfiguration> toBeCreatedRuleConfigs = null ==
ruleConfigs
- ?
originalMetaDataContext.getMetaData().getDatabase(databaseName).getRuleMetaData().getConfigurations()
- : ruleConfigs;
+ public ShardingSphereDatabase createChangedDatabase(final String
databaseName, final boolean isLoadSchemasFromRegisterCenter,
+ final
SwitchingResource switchingResource, final Collection<RuleConfiguration>
ruleConfigs,
+ final MetaDataContexts
originalMetaDataContext) throws SQLException {
+ ShardingSphereDatabase database =
originalMetaDataContext.getMetaData().getDatabase(databaseName);
+ ResourceMetaData effectiveResourceMetaData =
getEffectiveResourceMetaData(database, switchingResource);
+ Collection<RuleConfiguration> toBeCreatedRuleConfigs = null ==
ruleConfigs ? database.getRuleMetaData().getConfigurations() : ruleConfigs;
DatabaseConfiguration toBeCreatedDatabaseConfig =
getDatabaseConfiguration(effectiveResourceMetaData, switchingResource,
toBeCreatedRuleConfigs);
- return
createChangedDatabase(originalMetaDataContext.getMetaData().getDatabase(databaseName).getName(),
internalLoadMetaData,
- toBeCreatedDatabaseConfig,
originalMetaDataContext.getMetaData().getProps());
+ return createChangedDatabase(database.getName(),
isLoadSchemasFromRegisterCenter, toBeCreatedDatabaseConfig,
originalMetaDataContext.getMetaData().getProps());
}
- private ShardingSphereDatabase createChangedDatabase(final String
databaseName, final boolean internalLoadMetaData, final DatabaseConfiguration
databaseConfig,
+ private ShardingSphereDatabase createChangedDatabase(final String
databaseName, final boolean isLoadSchemasFromRegisterCenter, final
DatabaseConfiguration databaseConfig,
final
ConfigurationProperties props) throws SQLException {
DatabaseType protocolType =
DatabaseTypeEngine.getProtocolType(databaseConfig, props);
- return internalLoadMetaData
- ? ShardingSphereDatabase.create(databaseName, protocolType,
databaseConfig, instanceContext,
persistService.getDatabaseMetaDataFacade().getSchema().load(databaseName))
- : ShardingSphereDatabase.create(databaseName, protocolType,
databaseConfig, props, instanceContext);
+ return isLoadSchemasFromRegisterCenter
+ ? ShardingSphereDatabaseFactory.create(databaseName,
protocolType, databaseConfig, instanceContext,
persistService.getDatabaseMetaDataFacade().getSchema().load(databaseName))
+ : ShardingSphereDatabaseFactory.create(databaseName,
protocolType, databaseConfig, props, instanceContext);
}
- private ResourceMetaData getEffectiveResourceMetaData(final
ShardingSphereDatabase database, final SwitchingResource resource) {
- Map<StorageNode, DataSource> storageNodes =
getStorageNodes(database.getResourceMetaData().getDataSources(), resource);
- Map<String, StorageUnit> storageUnits =
getStorageUnits(database.getResourceMetaData().getStorageUnits(), resource);
+ private ResourceMetaData getEffectiveResourceMetaData(final
ShardingSphereDatabase database, final SwitchingResource switchingResource) {
+ Map<StorageNode, DataSource> storageNodes =
getStorageNodes(database.getResourceMetaData().getDataSources(),
switchingResource);
+ Map<String, StorageUnit> storageUnits =
getStorageUnits(database.getResourceMetaData().getStorageUnits(),
switchingResource);
return new ResourceMetaData(storageNodes, storageUnits);
}
- private Map<StorageNode, DataSource> getStorageNodes(final
Map<StorageNode, DataSource> currentStorageNodes, final SwitchingResource
resource) {
- Map<StorageNode, DataSource> result = new
LinkedHashMap<>(currentStorageNodes.size(), 1F);
- for (Entry<StorageNode, DataSource> entry :
currentStorageNodes.entrySet()) {
- if (null == resource ||
!resource.getStaleDataSources().containsKey(entry.getKey())) {
- result.put(entry.getKey(), entry.getValue());
- }
- }
- return result;
+ private Map<StorageNode, DataSource> getStorageNodes(final
Map<StorageNode, DataSource> currentStorageNodes, final SwitchingResource
switchingResource) {
+ return currentStorageNodes.entrySet().stream()
+ .filter(entry -> null == switchingResource ||
!switchingResource.getStaleDataSources().containsKey(entry.getKey()))
+ .collect(Collectors.toMap(Entry::getKey, Entry::getValue, (a,
b) -> b, () -> new LinkedHashMap<>(currentStorageNodes.size(), 1F)));
}
- private Map<String, StorageUnit> getStorageUnits(final Map<String,
StorageUnit> currentStorageUnits, final SwitchingResource resource) {
- Map<String, StorageUnit> result = new
LinkedHashMap<>(currentStorageUnits.size(), 1F);
- for (Entry<String, StorageUnit> entry :
currentStorageUnits.entrySet()) {
- if (null == resource ||
!resource.getStaleStorageUnitNames().contains(entry.getKey())) {
- result.put(entry.getKey(), entry.getValue());
- }
- }
- return result;
+ private Map<String, StorageUnit> getStorageUnits(final Map<String,
StorageUnit> currentStorageUnits, final SwitchingResource switchingResource) {
+ return currentStorageUnits.entrySet().stream()
+ .filter(entry -> null == switchingResource ||
!switchingResource.getStaleStorageUnitNames().contains(entry.getKey()))
+ .collect(Collectors.toMap(Entry::getKey, Entry::getValue, (a,
b) -> b, () -> new LinkedHashMap<>(currentStorageUnits.size(), 1F)));
}
- private DatabaseConfiguration getDatabaseConfiguration(final
ResourceMetaData resourceMetaData,
+ private DatabaseConfiguration getDatabaseConfiguration(final
ResourceMetaData currentResourceMetaData,
final
SwitchingResource switchingResource, final Collection<RuleConfiguration>
toBeCreatedRuleConfigs) {
- Map<String, DataSourcePoolProperties> propsMap = null ==
switchingResource ? resourceMetaData.getStorageUnits().entrySet().stream()
+ Map<String, DataSourcePoolProperties> propsMap = null ==
switchingResource ?
currentResourceMetaData.getStorageUnits().entrySet().stream()
.collect(Collectors.toMap(Entry::getKey, entry ->
entry.getValue().getDataSourcePoolProperties(), (oldValue, currentValue) ->
oldValue, LinkedHashMap::new))
: switchingResource.getMergedDataSourcePoolPropertiesMap();
- return new
DataSourceProvidedDatabaseConfiguration(getMergedStorageNodeDataSources(resourceMetaData,
switchingResource), toBeCreatedRuleConfigs, propsMap);
+ return new
DataSourceProvidedDatabaseConfiguration(getMergedStorageNodeDataSources(currentResourceMetaData,
switchingResource), toBeCreatedRuleConfigs, propsMap);
}
private Map<StorageNode, DataSource> getMergedStorageNodeDataSources(final
ResourceMetaData currentResourceMetaData, final SwitchingResource
switchingResource) {