You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by zh...@apache.org on 2020/08/26 10:06:33 UTC
[shardingsphere] branch master updated: Add
JDBCOrchestrationSchemaContexts for OrchestrationShardingSphereDataSource
(#7080)
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 2075b70 Add JDBCOrchestrationSchemaContexts for OrchestrationShardingSphereDataSource (#7080)
2075b70 is described below
commit 2075b70f2aa61eeca6b3012b20d857fd32c712a1
Author: Juan Pan(Trista) <pa...@apache.org>
AuthorDate: Wed Aug 26 18:06:14 2020 +0800
Add JDBCOrchestrationSchemaContexts for OrchestrationShardingSphereDataSource (#7080)
---
...chestrationShardingSphereDataSourceFactory.java | 2 +-
.../OrchestrationShardingSphereDataSource.java | 95 +++++++++++-----------
.../schema/JDBCOrchestrationSchemaContexts.java | 2 +-
3 files changed, 50 insertions(+), 49 deletions(-)
diff --git a/shardingsphere-jdbc/shardingsphere-jdbc-orchestration/src/main/java/org/apache/shardingsphere/driver/orchestration/api/yaml/YamlOrchestrationShardingSphereDataSourceFactory.java b/shardingsphere-jdbc/shardingsphere-jdbc-orchestration/src/main/java/org/apache/shardingsphere/driver/orchestration/api/yaml/YamlOrchestrationShardingSphereDataSourceFactory.java
index ada77c6..8487511 100644
--- a/shardingsphere-jdbc/shardingsphere-jdbc-orchestration/src/main/java/org/apache/shardingsphere/driver/orchestration/api/yaml/YamlOrchestrationShardingSphereDataSourceFactory.java
+++ b/shardingsphere-jdbc/shardingsphere-jdbc-orchestration/src/main/java/org/apache/shardingsphere/driver/orchestration/api/yaml/YamlOrchestrationShardingSphereDataSourceFactory.java
@@ -133,7 +133,7 @@ public final class YamlOrchestrationShardingSphereDataSourceFactory {
private static DataSource createDataSourceWithRules(final ShardingSphereDataSource shardingSphereDataSource,
final YamlOrchestrationConfiguration orchestration,
final YamlClusterConfiguration yamlClusterConfiguration,
- final YamlMetricsConfiguration yamlMetricsConfiguration) {
+ final YamlMetricsConfiguration yamlMetricsConfiguration) throws SQLException {
if (null == yamlClusterConfiguration && null == yamlMetricsConfiguration) {
return new OrchestrationShardingSphereDataSource(shardingSphereDataSource,
YamlOrchestrationRepositoryConfigurationSwapperUtil.marshal(orchestration));
diff --git a/shardingsphere-jdbc/shardingsphere-jdbc-orchestration/src/main/java/org/apache/shardingsphere/driver/orchestration/internal/datasource/OrchestrationShardingSphereDataSource.java b/shardingsphere-jdbc/shardingsphere-jdbc-orchestration/src/main/java/org/apache/shardingsphere/driver/orchestration/internal/datasource/OrchestrationShardingSphereDataSource.java
index 66ec423..8a22e2b 100644
--- a/shardingsphere-jdbc/shardingsphere-jdbc-orchestration/src/main/java/org/apache/shardingsphere/driver/orchestration/internal/datasource/OrchestrationShardingSphereDataSource.java
+++ b/shardingsphere-jdbc/shardingsphere-jdbc-orchestration/src/main/java/org/apache/shardingsphere/driver/orchestration/internal/datasource/OrchestrationShardingSphereDataSource.java
@@ -17,6 +17,7 @@
package org.apache.shardingsphere.driver.orchestration.internal.datasource;
+import com.google.common.base.Preconditions;
import com.google.common.collect.Maps;
import com.google.common.eventbus.Subscribe;
import lombok.Getter;
@@ -31,10 +32,14 @@ import org.apache.shardingsphere.control.panel.spi.engine.ControlPanelFacadeEngi
import org.apache.shardingsphere.driver.jdbc.core.datasource.ShardingSphereDataSource;
import org.apache.shardingsphere.driver.jdbc.unsupported.AbstractUnsupportedOperationDataSource;
import org.apache.shardingsphere.driver.orchestration.internal.circuit.datasource.CircuitBreakerDataSource;
+import org.apache.shardingsphere.driver.orchestration.internal.schema.JDBCOrchestrationSchemaContexts;
import org.apache.shardingsphere.driver.orchestration.internal.util.DataSourceConverter;
+import org.apache.shardingsphere.infra.auth.Authentication;
import org.apache.shardingsphere.infra.config.DataSourceConfiguration;
import org.apache.shardingsphere.infra.config.RuleConfiguration;
import org.apache.shardingsphere.infra.database.DefaultSchema;
+import org.apache.shardingsphere.infra.database.type.DatabaseType;
+import org.apache.shardingsphere.infra.database.type.DatabaseTypes;
import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import org.apache.shardingsphere.infra.metadata.schema.RuleSchemaMetaData;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
@@ -42,13 +47,13 @@ import org.apache.shardingsphere.infra.rule.StatusContainedRule;
import org.apache.shardingsphere.infra.rule.event.impl.DataSourceNameDisabledEvent;
import org.apache.shardingsphere.kernel.context.SchemaContext;
import org.apache.shardingsphere.kernel.context.SchemaContexts;
+import org.apache.shardingsphere.kernel.context.SchemaContextsBuilder;
import org.apache.shardingsphere.kernel.context.StandardSchemaContexts;
import org.apache.shardingsphere.kernel.context.schema.ShardingSphereSchema;
import org.apache.shardingsphere.metrics.configuration.config.MetricsConfiguration;
import org.apache.shardingsphere.orchestration.core.common.event.DataSourceChangedEvent;
import org.apache.shardingsphere.orchestration.core.common.event.PropertiesChangedEvent;
import org.apache.shardingsphere.orchestration.core.common.event.RuleConfigurationsChangedEvent;
-import org.apache.shardingsphere.orchestration.core.common.eventbus.OrchestrationEventBus;
import org.apache.shardingsphere.orchestration.core.config.ConfigCenter;
import org.apache.shardingsphere.orchestration.core.facade.OrchestrationFacade;
import org.apache.shardingsphere.orchestration.core.metadata.event.MetaDataChangedEvent;
@@ -83,6 +88,8 @@ public final class OrchestrationShardingSphereDataSource extends AbstractUnsuppo
@Setter
private PrintWriter logWriter = new PrintWriter(System.out);
+ private final SchemaContexts schemaContexts;
+
private final OrchestrationFacade orchestrationFacade = OrchestrationFacade.getInstance();
private final Map<String, DataSourceConfiguration> dataSourceConfigurations = new LinkedHashMap<>();
@@ -91,50 +98,45 @@ public final class OrchestrationShardingSphereDataSource extends AbstractUnsuppo
public OrchestrationShardingSphereDataSource(final OrchestrationConfiguration orchestrationConfig) throws SQLException {
init(orchestrationConfig);
+ schemaContexts = new JDBCOrchestrationSchemaContexts(createSchemaContexts(), orchestrationFacade);
dataSource = loadDataSource();
- initWithOrchestrationCenter();
- disableDataSources();
- persistMetaData(dataSource.getSchemaContexts().getDefaultSchemaContext().getSchema().getMetaData().getSchema());
+ initDataSourceConfigurations();
initControlPanel();
}
public OrchestrationShardingSphereDataSource(final OrchestrationConfiguration orchestrationConfig, final ClusterConfiguration clusterConfiguration,
final MetricsConfiguration metricsConfiguration) throws SQLException {
init(orchestrationConfig);
+ schemaContexts = new JDBCOrchestrationSchemaContexts(createSchemaContexts(), orchestrationFacade);
dataSource = loadDataSource();
- initWithOrchestrationCenter();
+ initDataSourceConfigurations();
initConfigurations(clusterConfiguration, metricsConfiguration);
- disableDataSources();
- persistMetaData(dataSource.getSchemaContexts().getDefaultSchemaContext().getSchema().getMetaData().getSchema());
initControlPanel();
}
public OrchestrationShardingSphereDataSource(final OrchestrationConfiguration orchestrationConfig, final ClusterConfiguration clusterConfiguration) throws SQLException {
init(orchestrationConfig);
+ schemaContexts = new JDBCOrchestrationSchemaContexts(createSchemaContexts(), orchestrationFacade);
dataSource = loadDataSource();
- initWithOrchestrationCenter();
+ initDataSourceConfigurations();
initConfigurations(clusterConfiguration, null);
- disableDataSources();
- persistMetaData(dataSource.getSchemaContexts().getDefaultSchemaContext().getSchema().getMetaData().getSchema());
initControlPanel();
}
public OrchestrationShardingSphereDataSource(final OrchestrationConfiguration orchestrationConfig, final MetricsConfiguration metricsConfiguration) throws SQLException {
init(orchestrationConfig);
+ schemaContexts = new JDBCOrchestrationSchemaContexts(createSchemaContexts(), orchestrationFacade);
dataSource = loadDataSource();
- initWithOrchestrationCenter();
+ initDataSourceConfigurations();
initConfigurations(null, metricsConfiguration);
- disableDataSources();
- persistMetaData(dataSource.getSchemaContexts().getDefaultSchemaContext().getSchema().getMetaData().getSchema());
initControlPanel();
}
public OrchestrationShardingSphereDataSource(final ShardingSphereDataSource dataSource, final OrchestrationConfiguration orchestrationConfig) {
init(orchestrationConfig);
+ schemaContexts = new JDBCOrchestrationSchemaContexts(dataSource.getSchemaContexts(), orchestrationFacade);
this.dataSource = dataSource;
initWithLocalConfiguration();
- disableDataSources();
- persistMetaData(this.dataSource.getSchemaContexts().getDefaultSchemaContext().getSchema().getMetaData().getSchema());
initControlPanel();
}
@@ -143,11 +145,10 @@ public final class OrchestrationShardingSphereDataSource extends AbstractUnsuppo
final ClusterConfiguration clusterConfiguration,
final MetricsConfiguration metricsConfiguration) {
init(orchestrationConfig);
+ schemaContexts = new JDBCOrchestrationSchemaContexts(dataSource.getSchemaContexts(), orchestrationFacade);
this.dataSource = dataSource;
initWithLocalConfiguration();
initConfigurations(clusterConfiguration, metricsConfiguration);
- disableDataSources();
- persistMetaData(this.dataSource.getSchemaContexts().getDefaultSchemaContext().getSchema().getMetaData().getSchema());
initControlPanel();
}
@@ -155,11 +156,10 @@ public final class OrchestrationShardingSphereDataSource extends AbstractUnsuppo
final OrchestrationConfiguration orchestrationConfig,
final ClusterConfiguration clusterConfiguration) {
init(orchestrationConfig);
+ schemaContexts = new JDBCOrchestrationSchemaContexts(dataSource.getSchemaContexts(), orchestrationFacade);
this.dataSource = dataSource;
initWithLocalConfiguration();
initConfigurations(clusterConfiguration, null);
- disableDataSources();
- persistMetaData(this.dataSource.getSchemaContexts().getDefaultSchemaContext().getSchema().getMetaData().getSchema());
initControlPanel();
}
@@ -167,17 +167,26 @@ public final class OrchestrationShardingSphereDataSource extends AbstractUnsuppo
final OrchestrationConfiguration orchestrationConfig,
final MetricsConfiguration metricsConfiguration) {
init(orchestrationConfig);
+ schemaContexts = new JDBCOrchestrationSchemaContexts(dataSource.getSchemaContexts(), orchestrationFacade);
this.dataSource = dataSource;
initWithLocalConfiguration();
initConfigurations(null, metricsConfiguration);
- disableDataSources();
- persistMetaData(this.dataSource.getSchemaContexts().getDefaultSchemaContext().getSchema().getMetaData().getSchema());
initControlPanel();
}
private void init(final OrchestrationConfiguration config) {
orchestrationFacade.init(config, Collections.singletonList(DefaultSchema.LOGIC_NAME));
- OrchestrationEventBus.getInstance().register(this);
+ orchestrationFacade.onlineInstance();
+ }
+
+ private SchemaContexts createSchemaContexts() throws SQLException {
+ ConfigCenter configCenter = orchestrationFacade.getConfigCenter();
+ Map<String, DataSourceConfiguration> dataSourceConfigs = configCenter.loadDataSourceConfigurations(DefaultSchema.LOGIC_NAME);
+ Collection<RuleConfiguration> ruleConfigurations = configCenter.loadRuleConfigurations(DefaultSchema.LOGIC_NAME);
+ Map<String, DataSource> dataSourceMap = DataSourceConverter.getDataSourceMap(dataSourceConfigs);
+ SchemaContextsBuilder schemaContextsBuilder = new SchemaContextsBuilder(createDatabaseType(dataSourceMap), Collections.singletonMap(DefaultSchema.LOGIC_NAME, dataSourceMap),
+ Collections.singletonMap(DefaultSchema.LOGIC_NAME, ruleConfigurations), new Authentication(), configCenter.loadProperties());
+ return schemaContextsBuilder.build();
}
private ShardingSphereDataSource loadDataSource() throws SQLException {
@@ -187,8 +196,23 @@ public final class OrchestrationShardingSphereDataSource extends AbstractUnsuppo
return new ShardingSphereDataSource(DataSourceConverter.getDataSourceMap(dataSourceConfigs), ruleConfigurations, configCenter.loadProperties());
}
- private void initWithOrchestrationCenter() {
- orchestrationFacade.onlineInstance();
+ private DatabaseType createDatabaseType(final Map<String, DataSource> dataSourceMap) throws SQLException {
+ DatabaseType result = null;
+ for (DataSource each : dataSourceMap.values()) {
+ DatabaseType databaseType = createDatabaseType(each);
+ Preconditions.checkState(null == result || result == databaseType, String.format("Database type inconsistent with '%s' and '%s'", result, databaseType));
+ result = databaseType;
+ }
+ return result;
+ }
+
+ private DatabaseType createDatabaseType(final DataSource dataSource) throws SQLException {
+ try (Connection connection = dataSource.getConnection()) {
+ return DatabaseTypes.getDatabaseTypeByURL(connection.getMetaData().getURL());
+ }
+ }
+
+ private void initDataSourceConfigurations() {
dataSourceConfigurations.putAll(orchestrationFacade.getConfigCenter().loadDataSourceConfigurations(DefaultSchema.LOGIC_NAME));
}
@@ -210,29 +234,6 @@ public final class OrchestrationShardingSphereDataSource extends AbstractUnsuppo
}
}
- private void disableDataSources() {
- Collection<String> disabledDataSources = orchestrationFacade.getRegistryCenter().loadDisabledDataSources();
- if (disabledDataSources.isEmpty()) {
- return;
- }
- dataSource.getSchemaContexts().getSchemaContexts().forEach((key, value)
- -> value.getSchema().getRules().stream().filter(each -> each instanceof StatusContainedRule).forEach(each -> disableDataSources((StatusContainedRule) each, disabledDataSources, key)));
- }
-
- private void disableDataSources(final StatusContainedRule statusContainedRule, final Collection<String> disabledDataSources, final String schemaName) {
- disabledDataSources.stream().filter(each -> each.startsWith(schemaName)).map(this::getDataSourceName).forEach(each ->
- statusContainedRule.updateRuleStatus(new DataSourceNameDisabledEvent(each, true))
- );
- }
-
- private String getDataSourceName(final String disableDataSource) {
- return new OrchestrationSchema(disableDataSource).getDataSourceName();
- }
-
- private void persistMetaData(final RuleSchemaMetaData metaData) {
- orchestrationFacade.getMetaDataCenter().persistMetaDataCenterNode(DefaultSchema.LOGIC_NAME, metaData);
- }
-
private void initControlPanel() {
ClusterConfiguration clusterConfiguration = orchestrationFacade.getConfigCenter().loadClusterConfiguration();
MetricsConfiguration metricsConfiguration = orchestrationFacade.getConfigCenter().loadMetricsConfiguration();
diff --git a/shardingsphere-jdbc/shardingsphere-jdbc-orchestration/src/main/java/org/apache/shardingsphere/driver/orchestration/internal/schema/JDBCOrchestrationSchemaContexts.java b/shardingsphere-jdbc/shardingsphere-jdbc-orchestration/src/main/java/org/apache/shardingsphere/driver/orchestration/internal/schema/JDBCOrchestrationSchemaContexts.java
index 11578f0..a609d6a 100644
--- a/shardingsphere-jdbc/shardingsphere-jdbc-orchestration/src/main/java/org/apache/shardingsphere/driver/orchestration/internal/schema/JDBCOrchestrationSchemaContexts.java
+++ b/shardingsphere-jdbc/shardingsphere-jdbc-orchestration/src/main/java/org/apache/shardingsphere/driver/orchestration/internal/schema/JDBCOrchestrationSchemaContexts.java
@@ -38,7 +38,7 @@ import java.util.stream.Collectors;
*/
public final class JDBCOrchestrationSchemaContexts extends OrchestrationSchemaContexts {
- protected JDBCOrchestrationSchemaContexts(final SchemaContexts schemaContexts, final OrchestrationFacade orchestrationFacade) {
+ public JDBCOrchestrationSchemaContexts(final SchemaContexts schemaContexts, final OrchestrationFacade orchestrationFacade) {
super(schemaContexts, orchestrationFacade);
}