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 c47ef3567a8 Refactor DataSourceStateManager (#31596)
c47ef3567a8 is described below
commit c47ef3567a8375454a9432eb1d41f87a86456a60
Author: Haoran Meng <[email protected]>
AuthorDate: Thu Jun 6 11:46:01 2024 +0800
Refactor DataSourceStateManager (#31596)
---
.../infra/database/DatabaseTypeEngine.java | 28 ++--
.../metadata/database/ShardingSphereDatabase.java | 3 +-
.../state/datasource/DataSourceStateManager.java | 162 ---------------------
.../infra/database/DatabaseTypeEngineTest.java | 8 +-
.../metadata/factory/ExternalMetaDataFactory.java | 6 +-
.../metadata/factory/InternalMetaDataFactory.java | 2 +-
.../SingleRuleConfigurationDecorator.java | 6 +-
.../shardingsphere/single/rule/SingleRule.java | 6 +-
.../mode/metadata/MetaDataContextsFactory.java | 11 --
.../subscriber/StateChangedSubscriber.java | 3 -
.../proxy/version/ShardingSphereProxyVersion.java | 7 +-
11 files changed, 31 insertions(+), 211 deletions(-)
diff --git
a/infra/common/src/main/java/org/apache/shardingsphere/infra/database/DatabaseTypeEngine.java
b/infra/common/src/main/java/org/apache/shardingsphere/infra/database/DatabaseTypeEngine.java
index 241d59987f4..a973e47d5f7 100644
---
a/infra/common/src/main/java/org/apache/shardingsphere/infra/database/DatabaseTypeEngine.java
+++
b/infra/common/src/main/java/org/apache/shardingsphere/infra/database/DatabaseTypeEngine.java
@@ -27,7 +27,6 @@ import
org.apache.shardingsphere.infra.database.core.type.DatabaseTypeFactory;
import
org.apache.shardingsphere.infra.datasource.pool.CatalogSwitchableDataSource;
import
org.apache.shardingsphere.infra.exception.core.external.sql.type.wrapper.SQLWrapperException;
import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
-import org.apache.shardingsphere.infra.state.datasource.DataSourceStateManager;
import javax.sql.DataSource;
import java.sql.Connection;
@@ -38,6 +37,7 @@ import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Optional;
+import java.util.stream.Collectors;
/**
* Database type engine.
@@ -50,18 +50,18 @@ public final class DatabaseTypeEngine {
/**
* Get protocol type.
*
- * @param databaseName database name
* @param databaseConfig database configuration
* @param props configuration properties
* @return protocol type
*/
- public static DatabaseType getProtocolType(final String databaseName,
final DatabaseConfiguration databaseConfig, final ConfigurationProperties
props) {
+ public static DatabaseType getProtocolType(final DatabaseConfiguration
databaseConfig, final ConfigurationProperties props) {
Optional<DatabaseType> configuredDatabaseType =
findConfiguredDatabaseType(props);
if (configuredDatabaseType.isPresent()) {
return configuredDatabaseType.get();
}
- Collection<DataSource> enabledDataSources =
DataSourceStateManager.getInstance().getEnabledDataSources(databaseName,
databaseConfig).values();
- return enabledDataSources.isEmpty() ? getDefaultStorageType() :
getStorageType(enabledDataSources.iterator().next());
+ Collection<DataSource> dataSources =
databaseConfig.getStorageUnits().entrySet().stream()
+ .collect(Collectors.toMap(Entry::getKey, entry ->
entry.getValue().getDataSource(), (oldValue, currentValue) -> oldValue,
LinkedHashMap::new)).values();
+ return dataSources.isEmpty() ? getDefaultStorageType() :
getStorageType(dataSources.iterator().next());
}
/**
@@ -76,8 +76,8 @@ public final class DatabaseTypeEngine {
if (configuredDatabaseType.isPresent()) {
return configuredDatabaseType.get();
}
- Map<String, DataSource> enabledDataSources =
getEnabledDataSources(databaseConfigs);
- return enabledDataSources.isEmpty() ? getDefaultStorageType() :
getStorageType(enabledDataSources.values().iterator().next());
+ Map<String, DataSource> dataSources = getDataSources(databaseConfigs);
+ return dataSources.isEmpty() ? getDefaultStorageType() :
getStorageType(dataSources.values().iterator().next());
}
private static Optional<DatabaseType> findConfiguredDatabaseType(final
ConfigurationProperties props) {
@@ -85,10 +85,12 @@ public final class DatabaseTypeEngine {
return null == configuredDatabaseType ? Optional.empty() :
Optional.of(configuredDatabaseType.getTrunkDatabaseType().orElse(configuredDatabaseType));
}
- private static Map<String, DataSource> getEnabledDataSources(final
Map<String, ? extends DatabaseConfiguration> databaseConfigs) {
+ private static Map<String, DataSource> getDataSources(final Map<String, ?
extends DatabaseConfiguration> databaseConfigs) {
Map<String, DataSource> result = new LinkedHashMap<>();
for (Entry<String, ? extends DatabaseConfiguration> entry :
databaseConfigs.entrySet()) {
-
result.putAll(DataSourceStateManager.getInstance().getEnabledDataSources(entry.getKey(),
entry.getValue()));
+ Map<String, DataSource> dataSources =
entry.getValue().getStorageUnits().entrySet().stream()
+ .collect(Collectors.toMap(Entry::getKey, storageUnit ->
storageUnit.getValue().getDataSource(), (oldValue, currentValue) -> oldValue,
LinkedHashMap::new));
+ result.putAll(dataSources);
}
return result;
}
@@ -96,14 +98,14 @@ public final class DatabaseTypeEngine {
/**
* Get storage types.
*
- * @param databaseName database name
* @param databaseConfig database configuration
* @return storage types
*/
- public static Map<String, DatabaseType> getStorageTypes(final String
databaseName, final DatabaseConfiguration databaseConfig) {
+ public static Map<String, DatabaseType> getStorageTypes(final
DatabaseConfiguration databaseConfig) {
Map<String, DatabaseType> result = new
LinkedHashMap<>(databaseConfig.getStorageUnits().size(), 1F);
- Map<String, DataSource> enabledDataSources =
DataSourceStateManager.getInstance().getEnabledDataSources(databaseName,
databaseConfig);
- for (Entry<String, DataSource> entry : enabledDataSources.entrySet()) {
+ Map<String, DataSource> dataSources =
databaseConfig.getStorageUnits().entrySet().stream()
+ .collect(Collectors.toMap(Entry::getKey, entry ->
entry.getValue().getDataSource(), (oldValue, currentValue) -> oldValue,
LinkedHashMap::new));
+ for (Entry<String, DataSource> entry : dataSources.entrySet()) {
result.put(entry.getKey(), getStorageType(entry.getValue()));
}
return result;
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 a4216384d7f..72215aae24b 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
@@ -36,7 +36,6 @@ import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSp
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 org.apache.shardingsphere.infra.state.datasource.DataSourceStateManager;
import javax.sql.DataSource;
import java.sql.SQLException;
@@ -92,7 +91,7 @@ public final class ShardingSphereDatabase {
ResourceMetaData resourceMetaData =
createResourceMetaData(databaseConfig.getDataSources(),
databaseConfig.getStorageUnits());
Collection<ShardingSphereRule> databaseRules =
DatabaseRulesBuilder.build(name, protocolType, databaseConfig,
computeNodeInstanceContext, resourceMetaData);
Map<String, ShardingSphereSchema> schemas = new
ConcurrentHashMap<>(GenericSchemaBuilder
- .build(new GenericSchemaBuilderMaterial(protocolType,
storageTypes, DataSourceStateManager.getInstance().getEnabledDataSources(name,
databaseConfig), databaseRules,
+ .build(new GenericSchemaBuilderMaterial(protocolType,
storageTypes, resourceMetaData.getDataSourceMap(), databaseRules,
props, new
DatabaseTypeRegistry(protocolType).getDefaultSchemaName(name))));
SystemSchemaBuilder.build(name, protocolType,
props).forEach(schemas::putIfAbsent);
return create(name, protocolType, databaseRules, schemas,
resourceMetaData);
diff --git
a/infra/common/src/main/java/org/apache/shardingsphere/infra/state/datasource/DataSourceStateManager.java
b/infra/common/src/main/java/org/apache/shardingsphere/infra/state/datasource/DataSourceStateManager.java
deleted file mode 100644
index 0a52864bb66..00000000000
---
a/infra/common/src/main/java/org/apache/shardingsphere/infra/state/datasource/DataSourceStateManager.java
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
- * 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.state.datasource;
-
-import lombok.AccessLevel;
-import lombok.NoArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.shardingsphere.infra.config.database.DatabaseConfiguration;
-import
org.apache.shardingsphere.infra.exception.core.ShardingSpherePreconditions;
-import
org.apache.shardingsphere.infra.metadata.database.resource.unit.StorageUnit;
-import
org.apache.shardingsphere.infra.metadata.database.schema.QualifiedDataSource;
-import
org.apache.shardingsphere.infra.state.datasource.exception.UnavailableDataSourceException;
-
-import javax.sql.DataSource;
-import java.sql.Connection;
-import java.sql.SQLException;
-import java.util.LinkedHashMap;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.stream.Collectors;
-
-/**
- * Data source state manager.
- */
-@NoArgsConstructor(access = AccessLevel.PRIVATE)
-@Slf4j
-public final class DataSourceStateManager {
-
- private static final DataSourceStateManager INSTANCE = new
DataSourceStateManager();
-
- private final Map<String, DataSourceState> dataSourceStates = new
ConcurrentHashMap<>();
-
- private volatile boolean forceStart;
-
- private final AtomicBoolean initialized = new AtomicBoolean(false);
-
- /**
- * Get data source state manager.
- *
- * @return data source state manager
- */
- public static DataSourceStateManager getInstance() {
- return INSTANCE;
- }
-
- /**
- * Set data source states when bootstrap.
- *
- * @param databaseName database name
- * @param storageUnits storage units
- * @param storageDataSourceStates storage node data source state
- * @param forceStart whether to force start
- */
- public void initStates(final String databaseName, final Map<String,
StorageUnit> storageUnits, final Map<String, DataSourceState>
storageDataSourceStates, final boolean forceStart) {
- this.forceStart = forceStart;
- if (initialized.compareAndSet(false, true)) {
- storageUnits.forEach((key, value) -> initState(databaseName,
storageDataSourceStates, key, value.getDataSource()));
- }
- }
-
- private void initState(final String databaseName, final Map<String,
DataSourceState> storageDataSourceStates, final String actualDataSourceName,
final DataSource dataSource) {
- DataSourceState storageState =
storageDataSourceStates.get(getCacheKey(databaseName, actualDataSourceName));
- if (DataSourceState.DISABLED == storageState) {
- dataSourceStates.put(getCacheKey(databaseName,
actualDataSourceName), storageState);
- } else {
- checkState(databaseName, actualDataSourceName, dataSource);
- }
- }
-
- private void checkState(final String databaseName, final String
actualDataSourceName, final DataSource dataSource) {
- try (Connection ignored = dataSource.getConnection()) {
- dataSourceStates.put(getCacheKey(databaseName,
actualDataSourceName), DataSourceState.ENABLED);
- } catch (final SQLException ex) {
- ShardingSpherePreconditions.checkState(forceStart, () -> new
UnavailableDataSourceException(actualDataSourceName, ex));
- log.error("Data source unavailable, ignored with the -f
parameter.", ex);
- }
- }
-
- /**
- * Get enabled data sources.
- *
- * @param databaseName database name
- * @param databaseConfig database configuration
- * @return enabled data sources
- */
- public Map<String, DataSource> getEnabledDataSources(final String
databaseName, final DatabaseConfiguration databaseConfig) {
- Map<String, DataSource> dataSources =
databaseConfig.getStorageUnits().entrySet().stream()
- .collect(Collectors.toMap(Entry::getKey, entry ->
entry.getValue().getDataSource(), (oldValue, currentValue) -> oldValue,
LinkedHashMap::new));
- return getEnabledDataSources(databaseName, dataSources);
- }
-
- /**
- * Get enabled data sources.
- *
- * @param databaseName database name
- * @param dataSources data sources
- * @return enabled data sources
- */
- public Map<String, DataSource> getEnabledDataSources(final String
databaseName, final Map<String, DataSource> dataSources) {
- if (dataSources.isEmpty() || !initialized.get()) {
- return dataSources;
- }
- Map<String, DataSource> result =
filterDisabledDataSources(databaseName, dataSources);
- checkForceConnection(result);
- return result;
- }
-
- private Map<String, DataSource> filterDisabledDataSources(final String
databaseName, final Map<String, DataSource> dataSources) {
- Map<String, DataSource> result = new
LinkedHashMap<>(dataSources.size(), 1F);
- dataSources.forEach((key, value) -> {
- DataSourceState dataSourceState =
dataSourceStates.get(getCacheKey(databaseName, key));
- if (DataSourceState.DISABLED != dataSourceState) {
- result.put(key, value);
- }
- });
- return result;
- }
-
- private void checkForceConnection(final Map<String, DataSource>
dataSources) {
- if (forceStart) {
- dataSources.entrySet().removeIf(entry -> {
- try (Connection ignored = entry.getValue().getConnection()) {
- return false;
- } catch (final SQLException ex) {
- log.error("Data source state unavailable, ignored with the
-f parameter.", ex);
- return true;
- }
- });
- }
- }
-
- /**
- * Update data source state.
- *
- * @param qualifiedDataSource qualified data source
- * @param dataSourceState data source state
- */
- public void updateState(final QualifiedDataSource qualifiedDataSource,
final DataSourceState dataSourceState) {
-
dataSourceStates.put(getCacheKey(qualifiedDataSource.getDatabaseName(),
qualifiedDataSource.getDataSourceName()), dataSourceState);
- }
-
- private String getCacheKey(final String databaseName, final String
dataSourceName) {
- return databaseName + "." + dataSourceName;
- }
-}
diff --git
a/infra/common/src/test/java/org/apache/shardingsphere/infra/database/DatabaseTypeEngineTest.java
b/infra/common/src/test/java/org/apache/shardingsphere/infra/database/DatabaseTypeEngineTest.java
index 6c62d5db197..bc49a70a10e 100644
---
a/infra/common/src/test/java/org/apache/shardingsphere/infra/database/DatabaseTypeEngineTest.java
+++
b/infra/common/src/test/java/org/apache/shardingsphere/infra/database/DatabaseTypeEngineTest.java
@@ -53,7 +53,7 @@ class DatabaseTypeEngineTest {
void assertGetProtocolTypeFromConfiguredProperties() {
Properties props = PropertiesBuilder.build(new
Property(ConfigurationPropertyKey.PROXY_FRONTEND_DATABASE_PROTOCOL_TYPE.getKey(),
"MySQL"));
DatabaseConfiguration databaseConfig = new
DataSourceProvidedDatabaseConfiguration(Collections.emptyMap(),
Collections.singleton(new FixtureRuleConfiguration()));
- assertThat(DatabaseTypeEngine.getProtocolType("sharding_db",
databaseConfig, new ConfigurationProperties(props)),
instanceOf(MySQLDatabaseType.class));
+ assertThat(DatabaseTypeEngine.getProtocolType(databaseConfig, new
ConfigurationProperties(props)), instanceOf(MySQLDatabaseType.class));
assertThat(DatabaseTypeEngine.getProtocolType(Collections.singletonMap("foo_db",
databaseConfig), new ConfigurationProperties(props)),
instanceOf(MySQLDatabaseType.class));
}
@@ -61,7 +61,7 @@ class DatabaseTypeEngineTest {
void assertGetProtocolTypeFromDataSource() throws SQLException {
DataSource datasource =
mockDataSource(TypedSPILoader.getService(DatabaseType.class, "PostgreSQL"));
DatabaseConfiguration databaseConfig = new
DataSourceProvidedDatabaseConfiguration(Collections.singletonMap("foo_ds",
datasource), Collections.singleton(new FixtureRuleConfiguration()));
- assertThat(DatabaseTypeEngine.getProtocolType("sharding_db",
databaseConfig, new ConfigurationProperties(new Properties())),
instanceOf(PostgreSQLDatabaseType.class));
+ assertThat(DatabaseTypeEngine.getProtocolType(databaseConfig, new
ConfigurationProperties(new Properties())),
instanceOf(PostgreSQLDatabaseType.class));
assertThat(DatabaseTypeEngine.getProtocolType(Collections.singletonMap("foo_db",
databaseConfig), new ConfigurationProperties(new Properties())),
instanceOf(PostgreSQLDatabaseType.class));
}
@@ -69,8 +69,8 @@ class DatabaseTypeEngineTest {
void assertGetStorageTypes() throws SQLException {
DataSource datasource =
mockDataSource(TypedSPILoader.getService(DatabaseType.class, "MySQL"));
DatabaseConfiguration databaseConfig = new
DataSourceProvidedDatabaseConfiguration(Collections.singletonMap("foo_db",
datasource), Collections.singletonList(new FixtureRuleConfiguration()));
- assertTrue(DatabaseTypeEngine.getStorageTypes("foo_db",
databaseConfig).containsKey("foo_db"));
- assertThat(DatabaseTypeEngine.getStorageTypes("foo_db",
databaseConfig).get("foo_db"), instanceOf(MySQLDatabaseType.class));
+
assertTrue(DatabaseTypeEngine.getStorageTypes(databaseConfig).containsKey("foo_db"));
+
assertThat(DatabaseTypeEngine.getStorageTypes(databaseConfig).get("foo_db"),
instanceOf(MySQLDatabaseType.class));
}
@Test
diff --git
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/factory/ExternalMetaDataFactory.java
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/factory/ExternalMetaDataFactory.java
index 70f26940427..3746fd2d408 100644
---
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/factory/ExternalMetaDataFactory.java
+++
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/factory/ExternalMetaDataFactory.java
@@ -51,8 +51,8 @@ public final class ExternalMetaDataFactory {
*/
public static ShardingSphereDatabase create(final String databaseName,
final DatabaseConfiguration databaseConfig,
final ConfigurationProperties
props, final ComputeNodeInstanceContext computeNodeInstanceContext) throws
SQLException {
- return ShardingSphereDatabase.create(databaseName,
DatabaseTypeEngine.getProtocolType(databaseName, databaseConfig, props),
- DatabaseTypeEngine.getStorageTypes(databaseName,
databaseConfig), databaseConfig, props, computeNodeInstanceContext);
+ return ShardingSphereDatabase.create(databaseName,
DatabaseTypeEngine.getProtocolType(databaseConfig, props),
+ DatabaseTypeEngine.getStorageTypes(databaseConfig),
databaseConfig, props, computeNodeInstanceContext);
}
/**
@@ -81,7 +81,7 @@ public final class ExternalMetaDataFactory {
for (Entry<String, DatabaseConfiguration> entry :
databaseConfigMap.entrySet()) {
String databaseName = entry.getKey();
if (!entry.getValue().getStorageUnits().isEmpty() ||
!systemDatabase.getSystemSchemas().contains(databaseName)) {
- Map<String, DatabaseType> storageTypes =
DatabaseTypeEngine.getStorageTypes(entry.getKey(), entry.getValue());
+ Map<String, DatabaseType> storageTypes =
DatabaseTypeEngine.getStorageTypes(entry.getValue());
result.put(databaseName.toLowerCase(),
ShardingSphereDatabase.create(databaseName, protocolType, storageTypes,
entry.getValue(), props, computeNodeInstanceContext));
}
}
diff --git
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/factory/InternalMetaDataFactory.java
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/factory/InternalMetaDataFactory.java
index b12e59cca40..62a85f17021 100644
---
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/factory/InternalMetaDataFactory.java
+++
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/factory/InternalMetaDataFactory.java
@@ -49,7 +49,7 @@ public final class InternalMetaDataFactory {
*/
public static ShardingSphereDatabase create(final String databaseName,
final MetaDataPersistService persistService, final DatabaseConfiguration
databaseConfig,
final ConfigurationProperties
props, final ComputeNodeInstanceContext computeNodeInstanceContext) {
- DatabaseType protocolType =
DatabaseTypeEngine.getProtocolType(databaseName, databaseConfig, props);
+ DatabaseType protocolType =
DatabaseTypeEngine.getProtocolType(databaseConfig, props);
return ShardingSphereDatabase.create(databaseName, protocolType,
databaseConfig, computeNodeInstanceContext,
persistService.getDatabaseMetaDataService().loadSchemas(databaseName));
}
diff --git
a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/decorator/SingleRuleConfigurationDecorator.java
b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/decorator/SingleRuleConfigurationDecorator.java
index e9b2c81838f..b5886bfa591 100644
---
a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/decorator/SingleRuleConfigurationDecorator.java
+++
b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/decorator/SingleRuleConfigurationDecorator.java
@@ -24,7 +24,6 @@ import
org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
import org.apache.shardingsphere.infra.datanode.DataNode;
import
org.apache.shardingsphere.infra.exception.core.ShardingSpherePreconditions;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
-import org.apache.shardingsphere.infra.state.datasource.DataSourceStateManager;
import org.apache.shardingsphere.single.api.config.SingleRuleConfiguration;
import org.apache.shardingsphere.single.api.constant.SingleTableConstants;
import org.apache.shardingsphere.single.datanode.SingleTableDataNodeLoader;
@@ -62,9 +61,8 @@ public final class SingleRuleConfigurationDecorator
implements RuleConfiguration
if (!isExpandRequired(splitTables)) {
return splitTables;
}
- Map<String, DataSource> enabledDataSources =
DataSourceStateManager.getInstance().getEnabledDataSources(databaseName,
dataSources);
- Map<String, DataSource> aggregatedDataSources =
SingleTableLoadUtils.getAggregatedDataSourceMap(enabledDataSources, builtRules);
- DatabaseType databaseType = enabledDataSources.isEmpty() ?
DatabaseTypeEngine.getDefaultStorageType() :
DatabaseTypeEngine.getStorageType(enabledDataSources.values().iterator().next());
+ Map<String, DataSource> aggregatedDataSources =
SingleTableLoadUtils.getAggregatedDataSourceMap(dataSources, builtRules);
+ DatabaseType databaseType = dataSources.isEmpty() ?
DatabaseTypeEngine.getDefaultStorageType() :
DatabaseTypeEngine.getStorageType(dataSources.values().iterator().next());
Collection<String> excludedTables =
SingleTableLoadUtils.getExcludedTables(builtRules);
Map<String, Collection<DataNode>> actualDataNodes =
SingleTableDataNodeLoader.load(databaseName, aggregatedDataSources,
excludedTables);
Collection<DataNode> configuredDataNodes =
SingleTableLoadUtils.convertToDataNodes(databaseName, databaseType,
splitTables);
diff --git
a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/rule/SingleRule.java
b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/rule/SingleRule.java
index 822fcbd2944..9866f43b904 100644
---
a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/rule/SingleRule.java
+++
b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/rule/SingleRule.java
@@ -27,9 +27,8 @@ import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import org.apache.shardingsphere.infra.metadata.database.schema.QualifiedTable;
import
org.apache.shardingsphere.infra.metadata.database.schema.util.IndexMetaDataUtils;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
-import org.apache.shardingsphere.infra.rule.scope.DatabaseRule;
import org.apache.shardingsphere.infra.rule.attribute.RuleAttributes;
-import org.apache.shardingsphere.infra.state.datasource.DataSourceStateManager;
+import org.apache.shardingsphere.infra.rule.scope.DatabaseRule;
import org.apache.shardingsphere.single.api.config.SingleRuleConfiguration;
import org.apache.shardingsphere.single.datanode.SingleTableDataNodeLoader;
import org.apache.shardingsphere.single.util.SingleTableLoadUtils;
@@ -69,8 +68,7 @@ public final class SingleRule implements DatabaseRule {
final DatabaseType protocolType, final Map<String,
DataSource> dataSourceMap, final Collection<ShardingSphereRule> builtRules) {
configuration = ruleConfig;
defaultDataSource = ruleConfig.getDefaultDataSource().orElse(null);
- Map<String, DataSource> enabledDataSources =
DataSourceStateManager.getInstance().getEnabledDataSources(databaseName,
dataSourceMap);
- Map<String, DataSource> aggregateDataSourceMap =
SingleTableLoadUtils.getAggregatedDataSourceMap(enabledDataSources, builtRules);
+ Map<String, DataSource> aggregateDataSourceMap =
SingleTableLoadUtils.getAggregatedDataSourceMap(dataSourceMap, builtRules);
dataSourceNames = aggregateDataSourceMap.keySet();
this.protocolType = protocolType;
singleTableDataNodes = SingleTableDataNodeLoader.load(databaseName,
protocolType, aggregateDataSourceMap, builtRules, configuration.getTables());
diff --git
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsFactory.java
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsFactory.java
index aa0431f6e72..fefaef1ede1 100644
---
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsFactory.java
+++
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsFactory.java
@@ -45,7 +45,6 @@ import
org.apache.shardingsphere.infra.metadata.statistics.builder.ShardingSpher
import org.apache.shardingsphere.infra.rule.builder.global.GlobalRulesBuilder;
import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
import org.apache.shardingsphere.infra.state.datasource.DataSourceState;
-import org.apache.shardingsphere.infra.state.datasource.DataSourceStateManager;
import org.apache.shardingsphere.metadata.factory.ExternalMetaDataFactory;
import org.apache.shardingsphere.metadata.factory.InternalMetaDataFactory;
import org.apache.shardingsphere.metadata.persist.MetaDataPersistService;
@@ -100,7 +99,6 @@ public final class MetaDataContextsFactory {
Map<String, DatabaseConfiguration> effectiveDatabaseConfigs =
isDatabaseMetaDataExisted
?
createEffectiveDatabaseConfigurations(getDatabaseNames(computeNodeInstanceContext,
param.getDatabaseConfigs(), persistService), param.getDatabaseConfigs(),
persistService)
: param.getDatabaseConfigs();
- checkDataSourceStates(effectiveDatabaseConfigs, statusMap,
param.isForce());
// TODO load global data sources from persist service
Map<String, DataSource> globalDataSources =
param.getGlobalDataSources();
Collection<RuleConfiguration> globalRuleConfigs =
isDatabaseMetaDataExisted ? persistService.getGlobalRuleService().load() :
param.getGlobalRuleConfigs();
@@ -155,15 +153,6 @@ public final class MetaDataContextsFactory {
}
}
- private static void checkDataSourceStates(final Map<String,
DatabaseConfiguration> databaseConfigs, final Map<String,
QualifiedDataSourceState> statusMap, final boolean force) {
- Map<String, DataSourceState> storageDataSourceStates =
getStorageDataSourceStates(statusMap);
- databaseConfigs.forEach((key, value) -> {
- if (!value.getStorageUnits().isEmpty()) {
- DataSourceStateManager.getInstance().initStates(key,
value.getStorageUnits(), storageDataSourceStates, force);
- }
- });
- }
-
private static Map<String, DataSourceState>
getStorageDataSourceStates(final Map<String, QualifiedDataSourceState>
statusMap) {
Map<String, DataSourceState> result = new HashMap<>(statusMap.size(),
1F);
statusMap.forEach((key, value) -> {
diff --git
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/subscriber/StateChangedSubscriber.java
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/subscriber/StateChangedSubscriber.java
index f122e1be841..353c83650b8 100644
---
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/subscriber/StateChangedSubscriber.java
+++
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/subscriber/StateChangedSubscriber.java
@@ -22,8 +22,6 @@ import
org.apache.shardingsphere.infra.instance.ComputeNodeInstance;
import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import
org.apache.shardingsphere.infra.metadata.database.schema.QualifiedDataSource;
import
org.apache.shardingsphere.infra.rule.attribute.datasource.StaticDataSourceRuleAttribute;
-import org.apache.shardingsphere.infra.state.datasource.DataSourceState;
-import org.apache.shardingsphere.infra.state.datasource.DataSourceStateManager;
import org.apache.shardingsphere.infra.util.eventbus.EventSubscriber;
import org.apache.shardingsphere.mode.manager.ContextManager;
import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.status.cluster.event.ClusterStateEvent;
@@ -57,7 +55,6 @@ public final class StateChangedSubscriber implements
EventSubscriber {
if
(!contextManager.getMetaDataContexts().getMetaData().containsDatabase(qualifiedDataSource.getDatabaseName()))
{
return;
}
- DataSourceStateManager.getInstance().updateState(qualifiedDataSource,
DataSourceState.valueOf(event.getStatus().getStatus().name()));
ShardingSphereDatabase database =
contextManager.getMetaDataContexts().getMetaData().getDatabase(qualifiedDataSource.getDatabaseName());
for (StaticDataSourceRuleAttribute each :
database.getRuleMetaData().getAttributes(StaticDataSourceRuleAttribute.class)) {
each.updateStatus(qualifiedDataSource,
event.getStatus().getStatus());
diff --git
a/proxy/bootstrap/src/main/java/org/apache/shardingsphere/proxy/version/ShardingSphereProxyVersion.java
b/proxy/bootstrap/src/main/java/org/apache/shardingsphere/proxy/version/ShardingSphereProxyVersion.java
index 89e84985120..653e46946e4 100644
---
a/proxy/bootstrap/src/main/java/org/apache/shardingsphere/proxy/version/ShardingSphereProxyVersion.java
+++
b/proxy/bootstrap/src/main/java/org/apache/shardingsphere/proxy/version/ShardingSphereProxyVersion.java
@@ -27,7 +27,6 @@ import
org.apache.shardingsphere.infra.autogen.version.ShardingSphereVersion;
import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import
org.apache.shardingsphere.infra.metadata.database.resource.ResourceMetaData;
-import org.apache.shardingsphere.infra.state.datasource.DataSourceStateManager;
import org.apache.shardingsphere.mode.manager.ContextManager;
import org.apache.shardingsphere.proxy.database.DatabaseServerInfo;
@@ -66,7 +65,7 @@ public final class ShardingSphereProxyVersion {
}
private static void setDatabaseVersion(final ShardingSphereDatabase
database) {
- Optional<DataSource> dataSource =
findDataSourceByProtocolType(database.getName(),
database.getResourceMetaData(), database.getProtocolType());
+ Optional<DataSource> dataSource =
findDataSourceByProtocolType(database.getResourceMetaData(),
database.getProtocolType());
if (!dataSource.isPresent()) {
return;
}
@@ -75,11 +74,11 @@ public final class ShardingSphereProxyVersion {
DatabaseProtocolServerInfo.setProtocolVersion(database.getName(),
databaseServerInfo.getDatabaseVersion());
}
- private static Optional<DataSource> findDataSourceByProtocolType(final
String databaseName, final ResourceMetaData resourceMetaData, final
DatabaseType protocolType) {
+ private static Optional<DataSource> findDataSourceByProtocolType(final
ResourceMetaData resourceMetaData, final DatabaseType protocolType) {
Optional<String> dataSourceName =
resourceMetaData.getStorageUnits().entrySet()
.stream().filter(entry ->
entry.getValue().getStorageType().equals(protocolType)).map(Entry::getKey).findFirst();
Map<String, DataSource> dataSources =
resourceMetaData.getStorageUnits().entrySet().stream()
.collect(Collectors.toMap(Entry::getKey, entry ->
entry.getValue().getDataSource(), (oldValue, currentValue) -> oldValue,
LinkedHashMap::new));
- return dataSourceName.flatMap(optional ->
Optional.ofNullable(DataSourceStateManager.getInstance().getEnabledDataSources(databaseName,
dataSources).get(optional)));
+ return dataSourceName.flatMap(optional ->
Optional.ofNullable(dataSources.get(optional)));
}
}