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/10/09 01:50:29 UTC
[shardingsphere] branch master updated: Fix check data source state(#21378) (#21390)
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 d52c7a0a2db Fix check data source state(#21378) (#21390)
d52c7a0a2db is described below
commit d52c7a0a2dbaa76b3c06cb3ddc6184928e82ca04
Author: ZhangCheng <fl...@outlook.com>
AuthorDate: Sun Oct 9 09:50:17 2022 +0800
Fix check data source state(#21378) (#21390)
* Fix check data source state
* Fix checkstyle
---
.../metadata/database/ShardingSphereDatabase.java | 4 +-
.../mode/metadata/MetaDataContextsFactory.java | 46 +++++++++++++++++++++-
.../cluster/ClusterContextManagerBuilder.java | 34 +---------------
.../StandaloneContextManagerBuilder.java | 13 ------
.../proxy/version/ShardingSphereProxyVersion.java | 4 +-
5 files changed, 52 insertions(+), 49 deletions(-)
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 8e8fbf0648b..bcd6bd6df74 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
@@ -24,6 +24,7 @@ import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
import org.apache.shardingsphere.infra.database.type.DatabaseType;
import org.apache.shardingsphere.infra.database.type.DatabaseTypeEngine;
+import org.apache.shardingsphere.infra.datasource.state.DataSourceStateManager;
import org.apache.shardingsphere.infra.instance.InstanceContext;
import org.apache.shardingsphere.infra.metadata.database.resource.ShardingSphereResource;
import org.apache.shardingsphere.infra.metadata.database.rule.ShardingSphereRuleMetaData;
@@ -85,7 +86,8 @@ public final class ShardingSphereDatabase {
final DatabaseConfiguration databaseConfig, final ConfigurationProperties props, final InstanceContext instanceContext) throws SQLException {
Collection<ShardingSphereRule> databaseRules = DatabaseRulesBuilder.build(name, databaseConfig, instanceContext);
Map<String, ShardingSphereSchema> schemas = new ConcurrentHashMap<>();
- schemas.putAll(GenericSchemaBuilder.build(new GenericSchemaBuilderMaterials(protocolType, storageType, databaseConfig.getDataSources(), databaseRules, props,
+ schemas.putAll(GenericSchemaBuilder.build(new GenericSchemaBuilderMaterials(protocolType, storageType,
+ DataSourceStateManager.getInstance().getEnabledDataSourceMap(name, databaseConfig.getDataSources()), databaseRules, props,
DatabaseTypeEngine.getDefaultSchemaName(storageType, name))));
schemas.putAll(SystemSchemaBuilder.build(name, protocolType));
return create(name, protocolType, databaseConfig, databaseRules, schemas);
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 f09b7686345..e8ec98d8ede 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
@@ -17,12 +17,16 @@
package org.apache.shardingsphere.mode.metadata;
+import com.google.common.base.Preconditions;
+import com.google.common.base.Splitter;
import lombok.AccessLevel;
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.datasource.state.DataSourceState;
+import org.apache.shardingsphere.infra.datasource.state.DataSourceStateManager;
import org.apache.shardingsphere.infra.instance.InstanceContext;
import org.apache.shardingsphere.infra.instance.metadata.jdbc.JDBCInstanceMetaData;
import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
@@ -33,11 +37,14 @@ import org.apache.shardingsphere.infra.metadata.database.schema.decorator.model.
import org.apache.shardingsphere.infra.rule.builder.global.GlobalRulesBuilder;
import org.apache.shardingsphere.mode.manager.ContextManagerBuilderParameter;
import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
+import org.apache.shardingsphere.mode.metadata.storage.StorageNodeDataSource;
import javax.sql.DataSource;
import java.sql.SQLException;
import java.util.Collection;
+import java.util.Collections;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Collectors;
@@ -50,7 +57,7 @@ public final class MetaDataContextsFactory {
/**
* Create meta data contexts.
- *
+ *
* @param persistService persist service
* @param parameter database configurations
* @param instanceContext instance context
@@ -59,10 +66,26 @@ public final class MetaDataContextsFactory {
*/
public static MetaDataContexts create(final MetaDataPersistService persistService, final ContextManagerBuilderParameter parameter,
final InstanceContext instanceContext) throws SQLException {
+ return create(persistService, parameter, instanceContext, Collections.emptyMap());
+ }
+
+ /**
+ * Create meta data contexts.
+ *
+ * @param persistService persist service
+ * @param parameter database configurations
+ * @param instanceContext instance context
+ * @param storageNodes storage nodes
+ * @return meta data contexts
+ * @throws SQLException SQL exception
+ */
+ public static MetaDataContexts create(final MetaDataPersistService persistService, final ContextManagerBuilderParameter parameter,
+ final InstanceContext instanceContext, final Map<String, StorageNodeDataSource> storageNodes) throws SQLException {
Collection<String> databaseNames = instanceContext.getInstance().getMetaData() instanceof JDBCInstanceMetaData
? parameter.getDatabaseConfigs().keySet()
: persistService.getDatabaseMetaDataService().loadAllDatabaseNames();
Map<String, DatabaseConfiguration> effectiveDatabaseConfigs = createEffectiveDatabaseConfigurations(databaseNames, parameter.getDatabaseConfigs(), persistService);
+ checkDataSourceStates(effectiveDatabaseConfigs, storageNodes, parameter.isForce());
Collection<RuleConfiguration> globalRuleConfigs = persistService.getGlobalRuleService().load();
ConfigurationProperties props = new ConfigurationProperties(persistService.getPropsService().load());
Map<String, ShardingSphereDatabase> databases = ShardingSphereDatabasesFactory.create(effectiveDatabaseConfigs, props, instanceContext);
@@ -84,6 +107,27 @@ public final class MetaDataContextsFactory {
return new DataSourceProvidedDatabaseConfiguration(effectiveDataSources, databaseRuleConfigs);
}
+ private static void checkDataSourceStates(final Map<String, DatabaseConfiguration> databaseConfigs, final Map<String, StorageNodeDataSource> storageNodes, final boolean force) {
+ Map<String, DataSourceState> storageDataSourceStates = getStorageDataSourceStates(storageNodes);
+ databaseConfigs.forEach((key, value) -> {
+ if (null != value.getDataSources()) {
+ DataSourceStateManager.getInstance().initStates(key, value.getDataSources(), storageDataSourceStates, force);
+ }
+ });
+ }
+
+ private static Map<String, DataSourceState> getStorageDataSourceStates(final Map<String, StorageNodeDataSource> storageDataSourceStates) {
+ Map<String, DataSourceState> result = new HashMap<>(storageDataSourceStates.size(), 1);
+ storageDataSourceStates.forEach((key, value) -> {
+ List<String> values = Splitter.on(".").splitToList(key);
+ Preconditions.checkArgument(3 == values.size(), "Illegal data source of storage node.");
+ String databaseName = values.get(0);
+ String dataSourceName = values.get(2);
+ result.put(databaseName + "." + dataSourceName, DataSourceState.valueOf(value.getStatus().toUpperCase()));
+ });
+ return result;
+ }
+
private static Map<String, ShardingSphereDatabase> reloadDatabases(final Map<String, ShardingSphereDatabase> databases, final MetaDataPersistService persistService) {
Map<String, ShardingSphereDatabase> result = new ConcurrentHashMap<>(databases.size(), 1);
databases.forEach((key, value) -> {
diff --git a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterContextManagerBuilder.java b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterContextManagerBuilder.java
index 2063789473f..4fb26347ad8 100644
--- a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterContextManagerBuilder.java
+++ b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterContextManagerBuilder.java
@@ -17,11 +17,6 @@
package org.apache.shardingsphere.mode.manager.cluster;
-import com.google.common.base.Preconditions;
-import com.google.common.base.Splitter;
-import org.apache.shardingsphere.infra.config.database.DatabaseConfiguration;
-import org.apache.shardingsphere.infra.datasource.state.DataSourceState;
-import org.apache.shardingsphere.infra.datasource.state.DataSourceStateManager;
import org.apache.shardingsphere.infra.instance.ComputeNodeInstance;
import org.apache.shardingsphere.infra.instance.InstanceContext;
import org.apache.shardingsphere.infra.instance.InstanceContextAware;
@@ -36,16 +31,12 @@ import org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.worke
import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
import org.apache.shardingsphere.mode.metadata.MetaDataContextsFactory;
import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
-import org.apache.shardingsphere.mode.metadata.storage.StorageNodeDataSource;
import org.apache.shardingsphere.mode.repository.cluster.ClusterPersistRepository;
import org.apache.shardingsphere.mode.repository.cluster.ClusterPersistRepositoryConfiguration;
import org.apache.shardingsphere.mode.repository.cluster.ClusterPersistRepositoryFactory;
import org.apache.shardingsphere.schedule.core.ScheduleContextFactory;
import java.sql.SQLException;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
/**
* Cluster context manager builder.
@@ -63,36 +54,13 @@ public final class ClusterContextManagerBuilder implements ContextManagerBuilder
if (persistRepository instanceof InstanceContextAware) {
((InstanceContextAware) persistRepository).setInstanceContext(instanceContext);
}
- checkDataSourceStates(parameter.getDatabaseConfigs(), registryCenter, parameter.isForce());
- MetaDataContexts metaDataContexts = MetaDataContextsFactory.create(persistService, parameter, instanceContext);
+ MetaDataContexts metaDataContexts = MetaDataContextsFactory.create(persistService, parameter, instanceContext, registryCenter.getStorageNodeStatusService().loadStorageNodes());
persistMetaData(metaDataContexts);
ContextManager result = new ContextManager(metaDataContexts, instanceContext);
registerOnline(persistService, registryCenter, parameter, result);
return result;
}
- private void checkDataSourceStates(final Map<String, DatabaseConfiguration> databaseConfigs, final RegistryCenter registryCenter, final boolean force) {
- Map<String, StorageNodeDataSource> storageNodes = registryCenter.getStorageNodeStatusService().loadStorageNodes();
- Map<String, DataSourceState> storageDataSourceStates = getStorageDataSourceStates(storageNodes);
- databaseConfigs.forEach((key, value) -> {
- if (null != value.getDataSources()) {
- DataSourceStateManager.getInstance().initStates(key, value.getDataSources(), storageDataSourceStates, force);
- }
- });
- }
-
- private Map<String, DataSourceState> getStorageDataSourceStates(final Map<String, StorageNodeDataSource> storageDataSourceStates) {
- Map<String, DataSourceState> result = new HashMap<>(storageDataSourceStates.size(), 1);
- storageDataSourceStates.forEach((key, value) -> {
- List<String> values = Splitter.on(".").splitToList(key);
- Preconditions.checkArgument(3 == values.size(), "Illegal data source of storage node.");
- String databaseName = values.get(0);
- String dataSourceName = values.get(2);
- result.put(databaseName + "." + dataSourceName, DataSourceState.valueOf(value.getStatus().toUpperCase()));
- });
- return result;
- }
-
private void persistConfigurations(final MetaDataPersistService persistService, final ContextManagerBuilderParameter parameter) {
if (!parameter.isEmpty()) {
persistService.persistConfigurations(parameter.getDatabaseConfigs(), parameter.getGlobalRuleConfigs(), parameter.getProps());
diff --git a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneContextManagerBuilder.java b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneContextManagerBuilder.java
index f73853b2141..73b6e893ac9 100644
--- a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneContextManagerBuilder.java
+++ b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneContextManagerBuilder.java
@@ -17,8 +17,6 @@
package org.apache.shardingsphere.mode.manager.standalone;
-import org.apache.shardingsphere.infra.config.database.DatabaseConfiguration;
-import org.apache.shardingsphere.infra.datasource.state.DataSourceStateManager;
import org.apache.shardingsphere.infra.instance.ComputeNodeInstance;
import org.apache.shardingsphere.infra.instance.InstanceContext;
import org.apache.shardingsphere.infra.util.eventbus.EventBusContext;
@@ -36,8 +34,6 @@ import org.apache.shardingsphere.mode.repository.standalone.StandalonePersistRep
import org.apache.shardingsphere.schedule.core.ScheduleContextFactory;
import java.sql.SQLException;
-import java.util.Collections;
-import java.util.Map;
/**
* Standalone context manager builder.
@@ -51,19 +47,10 @@ public final class StandaloneContextManagerBuilder implements ContextManagerBuil
persistConfigurations(persistService, parameter);
InstanceContext instanceContext = buildInstanceContext(parameter);
new ProcessStandaloneSubscriber(instanceContext.getEventBusContext());
- checkDataSourceStates(parameter.getDatabaseConfigs(), parameter.isForce());
MetaDataContexts metaDataContexts = MetaDataContextsFactory.create(persistService, parameter, instanceContext);
return new ContextManager(metaDataContexts, instanceContext);
}
- private void checkDataSourceStates(final Map<String, DatabaseConfiguration> databaseConfigs, final boolean force) {
- databaseConfigs.forEach((key, value) -> {
- if (null != value.getDataSources()) {
- DataSourceStateManager.getInstance().initStates(key, value.getDataSources(), Collections.emptyMap(), force);
- }
- });
- }
-
private void persistConfigurations(final MetaDataPersistService persistService, final ContextManagerBuilderParameter parameter) {
if (!parameter.isEmpty()) {
persistService.persistConfigurations(parameter.getDatabaseConfigs(), parameter.getGlobalRuleConfigs(), parameter.getProps());
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 388bcf9f087..a27014c8928 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
@@ -22,6 +22,7 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.shardingsphere.db.protocol.CommonConstants;
import org.apache.shardingsphere.infra.autogen.version.ShardingSphereVersion;
import org.apache.shardingsphere.infra.database.type.DatabaseTypeEngine;
+import org.apache.shardingsphere.infra.datasource.state.DataSourceStateManager;
import org.apache.shardingsphere.mode.manager.ContextManager;
import org.apache.shardingsphere.proxy.database.DatabaseServerInfo;
import org.apache.shardingsphere.proxy.frontend.protocol.DatabaseProtocolFrontendEngineFactory;
@@ -44,7 +45,8 @@ public final class ShardingSphereProxyVersion {
*/
public static void setVersion(final ContextManager contextManager) {
CommonConstants.PROXY_VERSION.set(ShardingSphereProxyVersion.getProxyVersion());
- contextManager.getMetaDataContexts().getMetaData().getDatabases().keySet().forEach(each -> setDatabaseVersion(each, contextManager.getDataSourceMap(each)));
+ contextManager.getMetaDataContexts().getMetaData().getDatabases().keySet()
+ .forEach(each -> setDatabaseVersion(each, DataSourceStateManager.getInstance().getEnabledDataSourceMap(each, contextManager.getDataSourceMap(each))));
}
private static String getProxyVersion() {