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 a4c3862d541 Remove DynamicDataSourceStrategy Singleton SPI (#19021)
a4c3862d541 is described below
commit a4c3862d5411204c09b8fe85e68cd68cd0774772
Author: zhaojinchao <[email protected]>
AuthorDate: Tue Jul 12 11:23:55 2022 +0800
Remove DynamicDataSourceStrategy Singleton SPI (#19021)
* Remove DynamicDataSourceStrategy Singleton SPI
* Fix ci
* Fix ci
* Rename
* Refactor
---
...DatabaseDiscoveryDynamicDataSourceStrategy.java | 47 -------------------
.../dbdiscovery/rule/DatabaseDiscoveryRule.java | 24 ++++++----
.../rule/ReadwriteSplittingDataSourceRule.java | 6 ++-
.../rule/ReadwriteSplittingRule.java | 13 +++---
...rithmProvidedReadwriteSplittingRuleBuilder.java | 2 +-
.../builder/ReadwriteSplittingRuleBuilder.java | 2 +-
.../ReadwriteSplittingStrategyFactory.java | 17 ++++---
.../type/DynamicReadwriteSplittingStrategy.java | 12 ++---
...eDiscoveryDynamicDataSourceStrategyFixture.java | 41 ----------------
.../route/ReadwriteSplittingSQLRouterTest.java | 10 +++-
.../rule/ReadwriteSplittingDataSourceRuleTest.java | 8 ++--
.../rule/ReadwriteSplittingRuleTest.java | 4 +-
...a.datasource.strategy.DynamicDataSourceStrategy | 18 --------
.../strategy/DynamicDataSourceStrategy.java | 54 ----------------------
.../strategy/DynamicDataSourceStrategyFactory.java | 45 ------------------
...le.java => DynamicDataSourceContainedRule.java} | 22 ++++++++-
...ule.java => StaticDataSourceContainedRule.java} | 4 +-
.../DynamicDataSourceStrategyFactoryTest.java | 31 -------------
.../ClusterContextManagerCoordinator.java | 28 +++++------
.../ClusterContextManagerCoordinatorTest.java | 16 +++----
20 files changed, 101 insertions(+), 303 deletions(-)
diff --git
a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/main/java/org/apache/shardingsphere/dbdiscovery/aware/DatabaseDiscoveryDynamicDataSourceStrategy.java
b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/main/java/org/apache/shardingsphere/dbdiscovery/aware/DatabaseDiscoveryDynamicDataSourceStrategy.java
deleted file mode 100644
index ca175d20e26..00000000000
---
a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/main/java/org/apache/shardingsphere/dbdiscovery/aware/DatabaseDiscoveryDynamicDataSourceStrategy.java
+++ /dev/null
@@ -1,47 +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.dbdiscovery.aware;
-
-import org.apache.shardingsphere.dbdiscovery.rule.DatabaseDiscoveryRule;
-import
org.apache.shardingsphere.infra.datasource.strategy.DynamicDataSourceStrategy;
-import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
-
-import java.util.Collection;
-
-/**
- * Database discovery dynamic data source strategy.
- */
-public final class DatabaseDiscoveryDynamicDataSourceStrategy implements
DynamicDataSourceStrategy {
-
- private DatabaseDiscoveryRule rule;
-
- @Override
- public void init(final ShardingSphereRule rule) {
- this.rule = (DatabaseDiscoveryRule) rule;
- }
-
- @Override
- public String getPrimaryDataSourceName(final String dataSourceName) {
- return
rule.getDataSourceRules().get(dataSourceName).getPrimaryDataSourceName();
- }
-
- @Override
- public Collection<String> getReplicaDataSourceNames(final String
dataSourceName) {
- return
rule.getDataSourceRules().get(dataSourceName).getReplicaDataSourceNames();
- }
-}
diff --git
a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/main/java/org/apache/shardingsphere/dbdiscovery/rule/DatabaseDiscoveryRule.java
b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/main/java/org/apache/shardingsphere/dbdiscovery/rule/DatabaseDiscoveryRule.java
index cdf1d7ad14d..68bd065abc9 100644
---
a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/main/java/org/apache/shardingsphere/dbdiscovery/rule/DatabaseDiscoveryRule.java
+++
b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/main/java/org/apache/shardingsphere/dbdiscovery/rule/DatabaseDiscoveryRule.java
@@ -30,14 +30,13 @@ import
org.apache.shardingsphere.dbdiscovery.heartbeat.HeartbeatJob;
import
org.apache.shardingsphere.dbdiscovery.spi.DatabaseDiscoveryProviderAlgorithm;
import org.apache.shardingsphere.infra.config.RuleConfiguration;
import
org.apache.shardingsphere.infra.config.algorithm.ShardingSphereAlgorithmConfiguration;
-import
org.apache.shardingsphere.infra.datasource.strategy.DynamicDataSourceStrategyFactory;
import org.apache.shardingsphere.infra.distsql.constant.ExportableConstants;
import org.apache.shardingsphere.infra.instance.InstanceContext;
import
org.apache.shardingsphere.infra.metadata.database.schema.QualifiedDatabase;
import org.apache.shardingsphere.infra.rule.event.DataSourceStatusChangedEvent;
import org.apache.shardingsphere.infra.rule.identifier.scope.DatabaseRule;
import
org.apache.shardingsphere.infra.rule.identifier.type.DataSourceContainedRule;
-import
org.apache.shardingsphere.infra.rule.identifier.type.DynamicStatusContainedRule;
+import
org.apache.shardingsphere.infra.rule.identifier.type.DynamicDataSourceContainedRule;
import
org.apache.shardingsphere.infra.rule.identifier.type.exportable.ExportableRule;
import org.apache.shardingsphere.mode.metadata.storage.StorageNodeStatus;
import
org.apache.shardingsphere.mode.metadata.storage.event.PrimaryDataSourceChangedEvent;
@@ -59,7 +58,7 @@ import java.util.Properties;
/**
* Database discovery rule.
*/
-public final class DatabaseDiscoveryRule implements DatabaseRule,
DataSourceContainedRule, DynamicStatusContainedRule, ExportableRule {
+public final class DatabaseDiscoveryRule implements DatabaseRule,
DataSourceContainedRule, DynamicDataSourceContainedRule, ExportableRule {
@Getter
private final RuleConfiguration configuration;
@@ -83,7 +82,7 @@ public final class DatabaseDiscoveryRule implements
DatabaseRule, DataSourceCont
discoveryTypes =
getDiscoveryProviderAlgorithms(ruleConfig.getDiscoveryTypes());
dataSourceRules = getDataSourceRules(ruleConfig.getDataSources(),
ruleConfig.getDiscoveryHeartbeats());
findPrimaryReplicaRelationship(databaseName, dataSourceMap);
- initAwareAndHeartBeatJobs(instanceContext);
+
initHeartBeatJobs(instanceContext.getInstance().getCurrentInstanceId());
}
public DatabaseDiscoveryRule(final String databaseName,
@@ -95,7 +94,7 @@ public final class DatabaseDiscoveryRule implements
DatabaseRule, DataSourceCont
discoveryTypes = ruleConfig.getDiscoveryTypes();
dataSourceRules = getDataSourceRules(ruleConfig.getDataSources(),
ruleConfig.getDiscoveryHeartbeats());
findPrimaryReplicaRelationship(databaseName, dataSourceMap);
- initAwareAndHeartBeatJobs(instanceContext);
+
initHeartBeatJobs(instanceContext.getInstance().getCurrentInstanceId());
}
private static Map<String, DatabaseDiscoveryProviderAlgorithm>
getDiscoveryProviderAlgorithms(final Map<String,
ShardingSphereAlgorithmConfiguration> discoveryTypesConfig) {
@@ -163,11 +162,6 @@ public final class DatabaseDiscoveryRule implements
DatabaseRule, DataSourceCont
DatabaseDiscoveryDataSourceRule dataSourceRule =
dataSourceRules.get(qualifiedDatabase.getGroupName());
Preconditions.checkState(null != dataSourceRule, "Can 't find database
discovery data source rule in database `%s`.", databaseName);
dataSourceRule.changePrimaryDataSourceName(qualifiedDatabase.getDataSourceName());
- initAwareAndHeartBeatJobs(instanceContext);
- }
-
- private void initAwareAndHeartBeatJobs(final InstanceContext
instanceContext) {
- DynamicDataSourceStrategyFactory.findInstance().ifPresent(optional ->
optional.init(this));
initHeartBeatJobs(instanceContext.getInstance().getCurrentInstanceId());
}
@@ -185,6 +179,16 @@ public final class DatabaseDiscoveryRule implements
DatabaseRule, DataSourceCont
}
}
+ @Override
+ public String getPrimaryDataSourceName(final String dataSourceName) {
+ return dataSourceRules.get(dataSourceName).getPrimaryDataSourceName();
+ }
+
+ @Override
+ public Collection<String> getReplicaDataSourceNames(final String
dataSourceName) {
+ return dataSourceRules.get(dataSourceName).getReplicaDataSourceNames();
+ }
+
@Override
public void updateStatus(final DataSourceStatusChangedEvent event) {
StorageNodeDataSourceChangedEvent dataSourceChangedEvent =
(StorageNodeDataSourceChangedEvent) event;
diff --git
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingDataSourceRule.java
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingDataSourceRule.java
index 74aa7c6c7b7..a4c9faccd60 100644
---
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingDataSourceRule.java
+++
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingDataSourceRule.java
@@ -21,6 +21,7 @@ import com.google.common.base.Preconditions;
import com.google.common.base.Strings;
import lombok.AccessLevel;
import lombok.Getter;
+import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import
org.apache.shardingsphere.readwritesplitting.api.rule.ReadwriteSplittingDataSourceRuleConfiguration;
import
org.apache.shardingsphere.readwritesplitting.spi.ReadQueryLoadBalanceAlgorithm;
import
org.apache.shardingsphere.readwritesplitting.strategy.ReadwriteSplittingStrategy;
@@ -47,11 +48,12 @@ public final class ReadwriteSplittingDataSourceRule {
@Getter(AccessLevel.NONE)
private final Collection<String> disabledDataSourceNames = new HashSet<>();
- public ReadwriteSplittingDataSourceRule(final
ReadwriteSplittingDataSourceRuleConfiguration config, final
ReadQueryLoadBalanceAlgorithm loadBalancer) {
+ public ReadwriteSplittingDataSourceRule(final
ReadwriteSplittingDataSourceRuleConfiguration config, final
ReadQueryLoadBalanceAlgorithm loadBalancer,
+ final
Collection<ShardingSphereRule> builtRules) {
Preconditions.checkArgument(!Strings.isNullOrEmpty(config.getName()),
"Name is required.");
name = config.getName();
this.loadBalancer = loadBalancer;
- readwriteSplittingStrategy =
ReadwriteSplittingStrategyFactory.newInstance(config);
+ readwriteSplittingStrategy =
ReadwriteSplittingStrategyFactory.newInstance(config, builtRules);
}
/**
diff --git
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingRule.java
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingRule.java
index 1562788b6e7..082388cb362 100644
---
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingRule.java
+++
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingRule.java
@@ -24,10 +24,11 @@ import
org.apache.shardingsphere.infra.config.RuleConfiguration;
import org.apache.shardingsphere.infra.distsql.constant.ExportableConstants;
import
org.apache.shardingsphere.infra.distsql.constant.ExportableItemConstants;
import
org.apache.shardingsphere.infra.metadata.database.schema.QualifiedDatabase;
+import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import org.apache.shardingsphere.infra.rule.event.DataSourceStatusChangedEvent;
import org.apache.shardingsphere.infra.rule.identifier.scope.DatabaseRule;
import
org.apache.shardingsphere.infra.rule.identifier.type.DataSourceContainedRule;
-import
org.apache.shardingsphere.infra.rule.identifier.type.StaticStatusContainedRule;
+import
org.apache.shardingsphere.infra.rule.identifier.type.StaticDataSourceContainedRule;
import
org.apache.shardingsphere.infra.rule.identifier.type.StorageConnectorReusableRule;
import
org.apache.shardingsphere.infra.rule.identifier.type.exportable.ExportableRule;
import org.apache.shardingsphere.mode.metadata.storage.StorageNodeStatus;
@@ -50,7 +51,7 @@ import java.util.Optional;
/**
* Readwrite-splitting rule.
*/
-public final class ReadwriteSplittingRule implements DatabaseRule,
DataSourceContainedRule, StaticStatusContainedRule, ExportableRule,
StorageConnectorReusableRule {
+public final class ReadwriteSplittingRule implements DatabaseRule,
DataSourceContainedRule, StaticDataSourceContainedRule, ExportableRule,
StorageConnectorReusableRule {
@Getter
private final RuleConfiguration configuration;
@@ -59,7 +60,7 @@ public final class ReadwriteSplittingRule implements
DatabaseRule, DataSourceCon
private final Map<String, ReadwriteSplittingDataSourceRule>
dataSourceRules;
- public ReadwriteSplittingRule(final ReadwriteSplittingRuleConfiguration
ruleConfig) {
+ public ReadwriteSplittingRule(final ReadwriteSplittingRuleConfiguration
ruleConfig, final Collection<ShardingSphereRule> builtRules) {
configuration = ruleConfig;
Preconditions.checkArgument(!ruleConfig.getDataSources().isEmpty(),
"Replica query data source rules can not be empty.");
ruleConfig.getLoadBalancers().forEach((key, value) ->
loadBalancers.put(key, ReplicaLoadBalanceAlgorithmFactory.newInstance(value)));
@@ -69,11 +70,11 @@ public final class ReadwriteSplittingRule implements
DatabaseRule, DataSourceCon
ReadQueryLoadBalanceAlgorithm loadBalanceAlgorithm =
Strings.isNullOrEmpty(each.getLoadBalancerName()) ||
!loadBalancers.containsKey(each.getLoadBalancerName())
? ReplicaLoadBalanceAlgorithmFactory.newInstance()
: loadBalancers.get(each.getLoadBalancerName());
- dataSourceRules.put(each.getName(), new
ReadwriteSplittingDataSourceRule(each, loadBalanceAlgorithm));
+ dataSourceRules.put(each.getName(), new
ReadwriteSplittingDataSourceRule(each, loadBalanceAlgorithm, builtRules));
}
}
- public ReadwriteSplittingRule(final
AlgorithmProvidedReadwriteSplittingRuleConfiguration ruleConfig) {
+ public ReadwriteSplittingRule(final
AlgorithmProvidedReadwriteSplittingRuleConfiguration ruleConfig, final
Collection<ShardingSphereRule> builtRules) {
configuration = ruleConfig;
Preconditions.checkArgument(!ruleConfig.getDataSources().isEmpty(),
"Replica query data source rules can not be empty.");
loadBalancers.putAll(ruleConfig.getLoadBalanceAlgorithms());
@@ -83,7 +84,7 @@ public final class ReadwriteSplittingRule implements
DatabaseRule, DataSourceCon
ReadQueryLoadBalanceAlgorithm loadBalanceAlgorithm =
Strings.isNullOrEmpty(each.getLoadBalancerName()) ||
!loadBalancers.containsKey(each.getLoadBalancerName())
? ReplicaLoadBalanceAlgorithmFactory.newInstance()
: loadBalancers.get(each.getLoadBalancerName());
- dataSourceRules.put(each.getName(), new
ReadwriteSplittingDataSourceRule(each, loadBalanceAlgorithm));
+ dataSourceRules.put(each.getName(), new
ReadwriteSplittingDataSourceRule(each, loadBalanceAlgorithm, builtRules));
}
}
diff --git
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/builder/AlgorithmProvidedReadwriteSplittingRuleBuilder.java
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/builder/AlgorithmProvidedReadwriteSplittingRuleBuilder.java
index 7d2a472c048..816d538ef72 100644
---
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/builder/AlgorithmProvidedReadwriteSplittingRuleBuilder.java
+++
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/builder/AlgorithmProvidedReadwriteSplittingRuleBuilder.java
@@ -36,7 +36,7 @@ public final class
AlgorithmProvidedReadwriteSplittingRuleBuilder implements Dat
@Override
public ReadwriteSplittingRule build(final
AlgorithmProvidedReadwriteSplittingRuleConfiguration config, final String
databaseName,
final Map<String, DataSource>
dataSources, final Collection<ShardingSphereRule> builtRules, final
InstanceContext instanceContext) {
- return new ReadwriteSplittingRule(config);
+ return new ReadwriteSplittingRule(config, builtRules);
}
@Override
diff --git
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/builder/ReadwriteSplittingRuleBuilder.java
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/builder/ReadwriteSplittingRuleBuilder.java
index 281f74b12e0..f0d3afbcbf6 100644
---
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/builder/ReadwriteSplittingRuleBuilder.java
+++
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/builder/ReadwriteSplittingRuleBuilder.java
@@ -36,7 +36,7 @@ public final class ReadwriteSplittingRuleBuilder implements
DatabaseRuleBuilder<
@Override
public ReadwriteSplittingRule build(final
ReadwriteSplittingRuleConfiguration config, final String databaseName,
final Map<String, DataSource>
dataSources, final Collection<ShardingSphereRule> builtRules, final
InstanceContext instanceContext) {
- return new ReadwriteSplittingRule(config);
+ return new ReadwriteSplittingRule(config, builtRules);
}
@Override
diff --git
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/strategy/ReadwriteSplittingStrategyFactory.java
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/strategy/ReadwriteSplittingStrategyFactory.java
index 61bd768067e..5243002abff 100644
---
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/strategy/ReadwriteSplittingStrategyFactory.java
+++
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/strategy/ReadwriteSplittingStrategyFactory.java
@@ -21,14 +21,15 @@ import com.google.common.base.Preconditions;
import com.google.common.base.Strings;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
-import
org.apache.shardingsphere.infra.datasource.strategy.DynamicDataSourceStrategy;
-import
org.apache.shardingsphere.infra.datasource.strategy.DynamicDataSourceStrategyFactory;
+import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
+import
org.apache.shardingsphere.infra.rule.identifier.type.DynamicDataSourceContainedRule;
import
org.apache.shardingsphere.readwritesplitting.api.rule.ReadwriteSplittingDataSourceRuleConfiguration;
import
org.apache.shardingsphere.readwritesplitting.api.strategy.DynamicReadwriteSplittingStrategyConfiguration;
import
org.apache.shardingsphere.readwritesplitting.api.strategy.StaticReadwriteSplittingStrategyConfiguration;
import
org.apache.shardingsphere.readwritesplitting.strategy.type.DynamicReadwriteSplittingStrategy;
import
org.apache.shardingsphere.readwritesplitting.strategy.type.StaticReadwriteSplittingStrategy;
+import java.util.Collection;
import java.util.Optional;
/**
@@ -41,11 +42,12 @@ public final class ReadwriteSplittingStrategyFactory {
* Create new instance of readwrite splitting strategy.
*
* @param readwriteSplittingConfig readwrite-splitting rule config
+ * @param builtRules built rules
* @return created instance
*/
- public static ReadwriteSplittingStrategy newInstance(final
ReadwriteSplittingDataSourceRuleConfiguration readwriteSplittingConfig) {
+ public static ReadwriteSplittingStrategy newInstance(final
ReadwriteSplittingDataSourceRuleConfiguration readwriteSplittingConfig, final
Collection<ShardingSphereRule> builtRules) {
return null != readwriteSplittingConfig.getStaticStrategy() ?
createStaticReadwriteSplittingStrategy(readwriteSplittingConfig.getStaticStrategy())
- :
createDynamicReadwriteSplittingStrategy(readwriteSplittingConfig.getDynamicStrategy());
+ :
createDynamicReadwriteSplittingStrategy(readwriteSplittingConfig.getDynamicStrategy(),
builtRules);
}
private static StaticReadwriteSplittingStrategy
createStaticReadwriteSplittingStrategy(final
StaticReadwriteSplittingStrategyConfiguration staticConfig) {
@@ -54,11 +56,12 @@ public final class ReadwriteSplittingStrategyFactory {
return new
StaticReadwriteSplittingStrategy(staticConfig.getWriteDataSourceName(),
staticConfig.getReadDataSourceNames());
}
- private static DynamicReadwriteSplittingStrategy
createDynamicReadwriteSplittingStrategy(final
DynamicReadwriteSplittingStrategyConfiguration dynamicConfig) {
+ private static DynamicReadwriteSplittingStrategy
createDynamicReadwriteSplittingStrategy(final
DynamicReadwriteSplittingStrategyConfiguration dynamicConfig,
+
final Collection<ShardingSphereRule> builtRules) {
Preconditions.checkArgument(!Strings.isNullOrEmpty(dynamicConfig.getAutoAwareDataSourceName()),
"Auto aware data source name is required.");
- Optional<DynamicDataSourceStrategy> dynamicDataSourceStrategy =
DynamicDataSourceStrategyFactory.findInstance();
+ Optional<ShardingSphereRule> dynamicDataSourceStrategy =
builtRules.stream().filter(each -> each instanceof
DynamicDataSourceContainedRule).findFirst();
Preconditions.checkArgument(dynamicDataSourceStrategy.isPresent(),
"Dynamic data source strategy is required.");
boolean allowWriteDataSourceQuery =
Strings.isNullOrEmpty(dynamicConfig.getWriteDataSourceQueryEnabled()) ?
Boolean.TRUE :
Boolean.parseBoolean(dynamicConfig.getWriteDataSourceQueryEnabled());
- return new
DynamicReadwriteSplittingStrategy(dynamicConfig.getAutoAwareDataSourceName(),
allowWriteDataSourceQuery, dynamicDataSourceStrategy.get());
+ return new
DynamicReadwriteSplittingStrategy(dynamicConfig.getAutoAwareDataSourceName(),
allowWriteDataSourceQuery, (DynamicDataSourceContainedRule)
dynamicDataSourceStrategy.get());
}
}
diff --git
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/strategy/type/DynamicReadwriteSplittingStrategy.java
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/strategy/type/DynamicReadwriteSplittingStrategy.java
index 15694de2cce..52787d23457 100644
---
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/strategy/type/DynamicReadwriteSplittingStrategy.java
+++
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/strategy/type/DynamicReadwriteSplittingStrategy.java
@@ -19,7 +19,7 @@ package
org.apache.shardingsphere.readwritesplitting.strategy.type;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
-import
org.apache.shardingsphere.infra.datasource.strategy.DynamicDataSourceStrategy;
+import
org.apache.shardingsphere.infra.rule.identifier.type.DynamicDataSourceContainedRule;
import
org.apache.shardingsphere.readwritesplitting.strategy.ReadwriteSplittingStrategy;
import java.util.ArrayList;
@@ -38,23 +38,23 @@ public final class DynamicReadwriteSplittingStrategy
implements ReadwriteSplitti
private final boolean allowWriteDataSourceQuery;
- private final DynamicDataSourceStrategy dynamicDataSourceStrategy;
+ private final DynamicDataSourceContainedRule dynamicDataSource;
@Override
public String getWriteDataSource() {
- return
dynamicDataSourceStrategy.getPrimaryDataSourceName(autoAwareDataSourceName);
+ return
dynamicDataSource.getPrimaryDataSourceName(autoAwareDataSourceName);
}
@Override
public List<String> getReadDataSources() {
- return new
ArrayList<>(dynamicDataSourceStrategy.getReplicaDataSourceNames(autoAwareDataSourceName));
+ return new
ArrayList<>(dynamicDataSource.getReplicaDataSourceNames(autoAwareDataSourceName));
}
@Override
public Collection<String> getAllDataSources() {
Collection<String> result = new LinkedList<>();
-
result.add(dynamicDataSourceStrategy.getPrimaryDataSourceName(autoAwareDataSourceName));
-
result.addAll(dynamicDataSourceStrategy.getReplicaDataSourceNames(autoAwareDataSourceName));
+
result.add(dynamicDataSource.getPrimaryDataSourceName(autoAwareDataSourceName));
+
result.addAll(dynamicDataSource.getReplicaDataSourceNames(autoAwareDataSourceName));
return result;
}
}
diff --git
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/fixture/DatabaseDiscoveryDynamicDataSourceStrategyFixture.java
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/fixture/DatabaseDiscoveryDynamicDataSourceStrategyFixture.java
deleted file mode 100644
index ba45dddc8bc..00000000000
---
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/fixture/DatabaseDiscoveryDynamicDataSourceStrategyFixture.java
+++ /dev/null
@@ -1,41 +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.readwritesplitting.fixture;
-
-import
org.apache.shardingsphere.infra.datasource.strategy.DynamicDataSourceStrategy;
-import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
-
-import java.util.Collection;
-import java.util.Collections;
-
-public class DatabaseDiscoveryDynamicDataSourceStrategyFixture implements
DynamicDataSourceStrategy {
-
- @Override
- public void init(final ShardingSphereRule rule) {
- }
-
- @Override
- public String getPrimaryDataSourceName(final String dataSourceName) {
- return "write";
- }
-
- @Override
- public Collection<String> getReplicaDataSourceNames(final String
dataSourceName) {
- return Collections.emptyList();
- }
-}
diff --git
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/route/ReadwriteSplittingSQLRouterTest.java
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/route/ReadwriteSplittingSQLRouterTest.java
index 1b562a70cf4..90cb15ce83b 100644
---
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/route/ReadwriteSplittingSQLRouterTest.java
+++
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/route/ReadwriteSplittingSQLRouterTest.java
@@ -31,6 +31,7 @@ import org.apache.shardingsphere.infra.route.SQLRouterFactory;
import org.apache.shardingsphere.infra.route.context.RouteContext;
import org.apache.shardingsphere.infra.route.context.RouteMapper;
import org.apache.shardingsphere.infra.route.context.RouteUnit;
+import
org.apache.shardingsphere.infra.rule.identifier.type.DynamicDataSourceContainedRule;
import
org.apache.shardingsphere.readwritesplitting.api.ReadwriteSplittingRuleConfiguration;
import
org.apache.shardingsphere.readwritesplitting.api.rule.ReadwriteSplittingDataSourceRuleConfiguration;
import
org.apache.shardingsphere.readwritesplitting.api.strategy.DynamicReadwriteSplittingStrategyConfiguration;
@@ -84,10 +85,15 @@ public final class ReadwriteSplittingSQLRouterTest {
@Before
public void setUp() {
rule = new ReadwriteSplittingRule(new
ReadwriteSplittingRuleConfiguration(Collections.singleton(new
ReadwriteSplittingDataSourceRuleConfiguration(DATASOURCE_NAME,
- new
StaticReadwriteSplittingStrategyConfiguration(WRITE_DATASOURCE,
Collections.singletonList(READ_DATASOURCE)), null, "")),
Collections.emptyMap()));
+ new
StaticReadwriteSplittingStrategyConfiguration(WRITE_DATASOURCE,
Collections.singletonList(READ_DATASOURCE)), null, "")),
+ Collections.emptyMap()), Collections.emptyList());
sqlRouter = (ReadwriteSplittingSQLRouter)
SQLRouterFactory.getInstances(Collections.singleton(rule)).get(rule);
+ DynamicDataSourceContainedRule dynamicDataSourceRule =
mock(DynamicDataSourceContainedRule.class, RETURNS_DEEP_STUBS);
+
when(dynamicDataSourceRule.getPrimaryDataSourceName("readwrite_ds")).thenReturn(WRITE_DATASOURCE);
+
when(dynamicDataSourceRule.getReplicaDataSourceNames("readwrite_ds")).thenReturn(Collections.emptyList());
dynamicRule = new ReadwriteSplittingRule(new
ReadwriteSplittingRuleConfiguration(Collections.singleton(new
ReadwriteSplittingDataSourceRuleConfiguration(DATASOURCE_NAME, null,
- new
DynamicReadwriteSplittingStrategyConfiguration("readwrite_ds", "true"), "")),
Collections.emptyMap()));
+ new
DynamicReadwriteSplittingStrategyConfiguration("readwrite_ds", "true"), "")),
Collections.emptyMap()),
+ Collections.singleton(dynamicDataSourceRule));
dynamicSqlRouter = (ReadwriteSplittingSQLRouter)
SQLRouterFactory.getInstances(Collections.singleton(dynamicRule)).get(dynamicRule);
}
diff --git
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingDataSourceRuleTest.java
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingDataSourceRuleTest.java
index ff7f2582c0d..dcb731144f6 100644
---
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingDataSourceRuleTest.java
+++
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingDataSourceRuleTest.java
@@ -39,28 +39,28 @@ public final class ReadwriteSplittingDataSourceRuleTest {
readwriteSplittingDataSourceRule = new
ReadwriteSplittingDataSourceRule(
new ReadwriteSplittingDataSourceRuleConfiguration("test_pr",
new
StaticReadwriteSplittingStrategyConfiguration("write_ds",
Arrays.asList("read_ds_0", "read_ds_1")), null, null),
- new RandomReplicaLoadBalanceAlgorithm());
+ new RandomReplicaLoadBalanceAlgorithm(),
Collections.emptyList());
}
@Test(expected = IllegalArgumentException.class)
public void assertNewReadwriteSplittingDataSourceRuleWithoutName() {
new ReadwriteSplittingDataSourceRule(new
ReadwriteSplittingDataSourceRuleConfiguration("",
new StaticReadwriteSplittingStrategyConfiguration("write_ds",
Arrays.asList("read_ds")),
- null, null), new RoundRobinReplicaLoadBalanceAlgorithm());
+ null, null), new RoundRobinReplicaLoadBalanceAlgorithm(),
Collections.emptyList());
}
@Test(expected = IllegalArgumentException.class)
public void
assertNewReadwriteSplittingDataSourceRuleWithoutWriteDataSourceName() {
new ReadwriteSplittingDataSourceRule(new
ReadwriteSplittingDataSourceRuleConfiguration("ds",
new StaticReadwriteSplittingStrategyConfiguration("",
Arrays.asList("read_ds")),
- null, null), new RoundRobinReplicaLoadBalanceAlgorithm());
+ null, null), new RoundRobinReplicaLoadBalanceAlgorithm(),
Collections.emptyList());
}
@Test(expected = IllegalArgumentException.class)
public void
assertNewReadwriteSplittingDataSourceRuleWithEmptyReadDataSourceName() {
new ReadwriteSplittingDataSourceRule(new
ReadwriteSplittingDataSourceRuleConfiguration("ds",
new StaticReadwriteSplittingStrategyConfiguration("write_ds",
Collections.emptyList()),
- null, null), new RoundRobinReplicaLoadBalanceAlgorithm());
+ null, null), new RoundRobinReplicaLoadBalanceAlgorithm(),
Collections.emptyList());
}
@Test
diff --git
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingRuleTest.java
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingRuleTest.java
index 429e99486cd..56631c05064 100644
---
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingRuleTest.java
+++
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingRuleTest.java
@@ -43,7 +43,7 @@ public final class ReadwriteSplittingRuleTest {
@Test(expected = IllegalArgumentException.class)
public void assertNewWithEmptyDataSourceRule() {
- new ReadwriteSplittingRule(new
ReadwriteSplittingRuleConfiguration(Collections.emptyList(),
Collections.emptyMap()));
+ new ReadwriteSplittingRule(new
ReadwriteSplittingRuleConfiguration(Collections.emptyList(),
Collections.emptyMap()), Collections.emptyList());
}
@Test
@@ -62,7 +62,7 @@ public final class ReadwriteSplittingRuleTest {
ReadwriteSplittingDataSourceRuleConfiguration config =
new ReadwriteSplittingDataSourceRuleConfiguration("readwrite",
new StaticReadwriteSplittingStrategyConfiguration("write_ds",
Arrays.asList("read_ds_0", "read_ds_1")), null, "random");
return new ReadwriteSplittingRule(new
ReadwriteSplittingRuleConfiguration(
- Collections.singleton(config),
Collections.singletonMap("random", new
ShardingSphereAlgorithmConfiguration("RANDOM", new Properties()))));
+ Collections.singleton(config),
Collections.singletonMap("random", new
ShardingSphereAlgorithmConfiguration("RANDOM", new Properties()))),
Collections.emptyList());
}
private void assertDataSourceRule(final ReadwriteSplittingDataSourceRule
actual) {
diff --git
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/resources/META-INF/services/org.apache.shardingsphere.infra.datasource.strategy.DynamicDataSourceStrategy
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/resources/META-INF/services/org.apache.shardingsphere.infra.datasource.strategy.DynamicDataSourceStrategy
deleted file mode 100644
index 6f2a366ee2a..00000000000
---
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/resources/META-INF/services/org.apache.shardingsphere.infra.datasource.strategy.DynamicDataSourceStrategy
+++ /dev/null
@@ -1,18 +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.
-#
-
-org.apache.shardingsphere.readwritesplitting.fixture.DatabaseDiscoveryDynamicDataSourceStrategyFixture
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/datasource/strategy/DynamicDataSourceStrategy.java
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/datasource/strategy/DynamicDataSourceStrategy.java
deleted file mode 100644
index e76ae8c80d3..00000000000
---
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/datasource/strategy/DynamicDataSourceStrategy.java
+++ /dev/null
@@ -1,54 +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.datasource.strategy;
-
-import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
-import org.apache.shardingsphere.spi.annotation.SingletonSPI;
-import org.apache.shardingsphere.spi.type.optional.OptionalSPI;
-
-import java.util.Collection;
-
-/**
- * Dynamic data source strategy.
- */
-@SingletonSPI
-public interface DynamicDataSourceStrategy extends OptionalSPI {
-
- /**
- * Initialize.
- *
- * @param rule rule
- */
- void init(ShardingSphereRule rule);
-
- /**
- * Get primary data source name.
- *
- * @param dataSourceName data source name
- * @return primary data source name
- */
- String getPrimaryDataSourceName(String dataSourceName);
-
- /**
- * Get replica data source names.
- *
- * @param dataSourceName data source name
- * @return replica data source names
- */
- Collection<String> getReplicaDataSourceNames(String dataSourceName);
-}
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/datasource/strategy/DynamicDataSourceStrategyFactory.java
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/datasource/strategy/DynamicDataSourceStrategyFactory.java
deleted file mode 100644
index 943c37709c0..00000000000
---
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/datasource/strategy/DynamicDataSourceStrategyFactory.java
+++ /dev/null
@@ -1,45 +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.datasource.strategy;
-
-import lombok.AccessLevel;
-import lombok.NoArgsConstructor;
-import org.apache.shardingsphere.spi.ShardingSphereServiceLoader;
-import org.apache.shardingsphere.spi.type.optional.OptionalSPIRegistry;
-
-import java.util.Optional;
-
-/**
- * Dynamic data source strategy factory.
- */
-@NoArgsConstructor(access = AccessLevel.PRIVATE)
-public final class DynamicDataSourceStrategyFactory {
-
- static {
- ShardingSphereServiceLoader.register(DynamicDataSourceStrategy.class);
- }
-
- /**
- * Find instance of dynamic data source strategy.
- *
- * @return found instance
- */
- public static Optional<DynamicDataSourceStrategy> findInstance() {
- return
OptionalSPIRegistry.findRegisteredService(DynamicDataSourceStrategy.class);
- }
-}
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/rule/identifier/type/DynamicStatusContainedRule.java
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/rule/identifier/type/DynamicDataSourceContainedRule.java
similarity index 72%
rename from
shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/rule/identifier/type/DynamicStatusContainedRule.java
rename to
shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/rule/identifier/type/DynamicDataSourceContainedRule.java
index 6b9dac74120..2e8266c47dd 100644
---
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/rule/identifier/type/DynamicStatusContainedRule.java
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/rule/identifier/type/DynamicDataSourceContainedRule.java
@@ -21,10 +21,28 @@ import
org.apache.shardingsphere.infra.instance.InstanceContext;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import org.apache.shardingsphere.infra.rule.event.DataSourceStatusChangedEvent;
+import java.util.Collection;
+
/**
- * Dynamic status contained rule.
+ * Dynamic data source contained rule.
*/
-public interface DynamicStatusContainedRule extends ShardingSphereRule {
+public interface DynamicDataSourceContainedRule extends ShardingSphereRule {
+
+ /**
+ * Get primary data source name.
+ *
+ * @param dataSourceName data source name
+ * @return primary data source name
+ */
+ String getPrimaryDataSourceName(String dataSourceName);
+
+ /**
+ * Get replica data source names.
+ *
+ * @param dataSourceName data source name
+ * @return replica data source names
+ */
+ Collection<String> getReplicaDataSourceNames(String dataSourceName);
/**
* Update data source status.
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/rule/identifier/type/StaticStatusContainedRule.java
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/rule/identifier/type/StaticDataSourceContainedRule.java
similarity index 91%
rename from
shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/rule/identifier/type/StaticStatusContainedRule.java
rename to
shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/rule/identifier/type/StaticDataSourceContainedRule.java
index 37a73dabb70..b12c8e6c044 100644
---
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/rule/identifier/type/StaticStatusContainedRule.java
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/rule/identifier/type/StaticDataSourceContainedRule.java
@@ -21,9 +21,9 @@ import
org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import org.apache.shardingsphere.infra.rule.event.DataSourceStatusChangedEvent;
/**
- * Static Status contained rule.
+ * Static data source contained rule.
*/
-public interface StaticStatusContainedRule extends ShardingSphereRule {
+public interface StaticDataSourceContainedRule extends ShardingSphereRule {
/**
* Update data source status.
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/aware/DynamicDataSourceStrategyFactoryTest.java
b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/aware/DynamicDataSourceStrategyFactoryTest.java
deleted file mode 100644
index 6dc5a555b42..00000000000
---
a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/aware/DynamicDataSourceStrategyFactoryTest.java
+++ /dev/null
@@ -1,31 +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.aware;
-
-import
org.apache.shardingsphere.infra.datasource.strategy.DynamicDataSourceStrategyFactory;
-import org.junit.Test;
-
-import static org.junit.Assert.assertFalse;
-
-public final class DynamicDataSourceStrategyFactoryTest {
-
- @Test
- public void assertFindInstance() {
-
assertFalse(DynamicDataSourceStrategyFactory.findInstance().isPresent());
- }
-}
diff --git
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/ClusterContextManagerCoordinator.java
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/ClusterContextManagerCoordinator.java
index 4d776ad19d0..3f94c870a57 100644
---
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/ClusterContextManagerCoordinator.java
+++
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/ClusterContextManagerCoordinator.java
@@ -25,8 +25,8 @@ import
org.apache.shardingsphere.infra.executor.sql.process.model.yaml.YamlExecu
import org.apache.shardingsphere.infra.instance.ComputeNodeInstance;
import
org.apache.shardingsphere.infra.metadata.database.schema.QualifiedDatabase;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
-import
org.apache.shardingsphere.infra.rule.identifier.type.DynamicStatusContainedRule;
-import
org.apache.shardingsphere.infra.rule.identifier.type.StaticStatusContainedRule;
+import
org.apache.shardingsphere.infra.rule.identifier.type.StaticDataSourceContainedRule;
+import
org.apache.shardingsphere.infra.rule.identifier.type.DynamicDataSourceContainedRule;
import org.apache.shardingsphere.infra.yaml.engine.YamlEngine;
import org.apache.shardingsphere.mode.manager.ContextManager;
import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.config.event.datasource.DataSourceChangedEvent;
@@ -168,15 +168,15 @@ public final class ClusterContextManagerCoordinator {
@Subscribe
public synchronized void renew(final StorageNodeChangedEvent event) {
QualifiedDatabase qualifiedDatabase = event.getQualifiedDatabase();
- Optional<ShardingSphereRule> dynamicStatusContainedRule =
contextManager.getMetaDataContexts().getMetaData().getDatabases().get(qualifiedDatabase.getDatabaseName()).getRuleMetaData()
- .getRules().stream().filter(each -> each instanceof
DynamicStatusContainedRule).findFirst();
- if (dynamicStatusContainedRule.isPresent()) {
- ((DynamicStatusContainedRule)
dynamicStatusContainedRule.get()).updateStatus(new
StorageNodeDataSourceChangedEvent(qualifiedDatabase, event.getDataSource()));
+ Optional<ShardingSphereRule> dynamicDataSourceRule =
contextManager.getMetaDataContexts().getMetaData().getDatabases().get(qualifiedDatabase.getDatabaseName()).getRuleMetaData()
+ .getRules().stream().filter(each -> each instanceof
DynamicDataSourceContainedRule).findFirst();
+ if (dynamicDataSourceRule.isPresent()) {
+ ((DynamicDataSourceContainedRule)
dynamicDataSourceRule.get()).updateStatus(new
StorageNodeDataSourceChangedEvent(qualifiedDatabase, event.getDataSource()));
return;
}
- Optional<ShardingSphereRule> staticStatusContainedRule =
contextManager.getMetaDataContexts().getMetaData().getDatabases().get(qualifiedDatabase.getDatabaseName()).getRuleMetaData()
- .getRules().stream().filter(each -> each instanceof
StaticStatusContainedRule).findFirst();
- staticStatusContainedRule.ifPresent(shardingSphereRule ->
((StaticStatusContainedRule) shardingSphereRule)
+ Optional<ShardingSphereRule> staticDataSourceRule =
contextManager.getMetaDataContexts().getMetaData().getDatabases().get(qualifiedDatabase.getDatabaseName()).getRuleMetaData()
+ .getRules().stream().filter(each -> each instanceof
StaticDataSourceContainedRule).findFirst();
+ staticDataSourceRule.ifPresent(shardingSphereRule ->
((StaticDataSourceContainedRule) shardingSphereRule)
.updateStatus(new
StorageNodeDataSourceChangedEvent(qualifiedDatabase, event.getDataSource())));
}
@@ -190,8 +190,8 @@ public final class ClusterContextManagerCoordinator {
QualifiedDatabase qualifiedDatabase = event.getQualifiedDatabase();
contextManager.getMetaDataContexts().getMetaData().getDatabases().get(qualifiedDatabase.getDatabaseName()).getRuleMetaData().getRules()
.stream()
- .filter(each -> each instanceof DynamicStatusContainedRule)
- .forEach(each -> ((DynamicStatusContainedRule) each)
+ .filter(each -> each instanceof DynamicDataSourceContainedRule)
+ .forEach(each -> ((DynamicDataSourceContainedRule) each)
.restartHeartBeatJob(new
PrimaryDataSourceChangedEvent(qualifiedDatabase),
contextManager.getInstanceContext()));
}
@@ -303,13 +303,13 @@ public final class ClusterContextManagerCoordinator {
private void disableDataSources() {
contextManager.getMetaDataContexts().getMetaData().getDatabases().forEach((key,
value) -> value.getRuleMetaData().getRules().forEach(each -> {
- if (each instanceof StaticStatusContainedRule) {
- disableDataSources((StaticStatusContainedRule) each);
+ if (each instanceof StaticDataSourceContainedRule) {
+ disableDataSources((StaticDataSourceContainedRule) each);
}
}));
}
- private void disableDataSources(final StaticStatusContainedRule rule) {
+ private void disableDataSources(final StaticDataSourceContainedRule rule) {
Map<String, StorageNodeDataSource> storageNodes =
registryCenter.getStorageNodeStatusService().loadStorageNodes();
Map<String, StorageNodeDataSource> disableDataSources =
storageNodes.entrySet().stream().filter(entry ->
StorageNodeStatus.isDisable(entry.getValue().getStatus()))
.collect(Collectors.toMap(Map.Entry::getKey,
Map.Entry::getValue));
diff --git
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/ClusterContextManagerCoordinatorTest.java
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/ClusterContextManagerCoordinatorTest.java
index e4fcacb1194..5ec0a8e0dde 100644
---
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/ClusterContextManagerCoordinatorTest.java
+++
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/ClusterContextManagerCoordinatorTest.java
@@ -44,9 +44,9 @@ import
org.apache.shardingsphere.infra.metadata.database.schema.decorator.model.
import
org.apache.shardingsphere.infra.metadata.database.schema.decorator.model.ShardingSphereTable;
import org.apache.shardingsphere.infra.metadata.user.ShardingSphereUser;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
-import
org.apache.shardingsphere.infra.rule.identifier.type.StaticStatusContainedRule;
+import
org.apache.shardingsphere.infra.rule.identifier.type.StaticDataSourceContainedRule;
import org.apache.shardingsphere.infra.rule.identifier.type.ResourceHeldRule;
-import
org.apache.shardingsphere.infra.rule.identifier.type.DynamicStatusContainedRule;
+import
org.apache.shardingsphere.infra.rule.identifier.type.DynamicDataSourceContainedRule;
import org.apache.shardingsphere.infra.state.StateType;
import org.apache.shardingsphere.mode.manager.ContextManager;
import org.apache.shardingsphere.mode.manager.ContextManagerBuilderParameter;
@@ -224,11 +224,11 @@ public final class ClusterContextManagerCoordinatorTest {
@Test
public void assertRenewForDisableStateChanged() {
- StaticStatusContainedRule statusContainedRule =
mock(StaticStatusContainedRule.class);
-
when(database.getRuleMetaData().getRules()).thenReturn(Collections.singletonList(statusContainedRule));
+ StaticDataSourceContainedRule staticDataSourceRule =
mock(StaticDataSourceContainedRule.class);
+
when(database.getRuleMetaData().getRules()).thenReturn(Collections.singletonList(staticDataSourceRule));
StorageNodeChangedEvent event = new StorageNodeChangedEvent(new
QualifiedDatabase("db.readwrite_ds.ds_0"), new
StorageNodeDataSource(StorageNodeRole.MEMBER, StorageNodeStatus.DISABLED));
coordinator.renew(event);
- verify(statusContainedRule).updateStatus(argThat(
+ verify(staticDataSourceRule).updateStatus(argThat(
(ArgumentMatcher<StorageNodeDataSourceChangedEvent>)
argumentEvent -> Objects.equals(event.getQualifiedDatabase(),
argumentEvent.getQualifiedDatabase())
&& Objects.equals(event.getDataSource(),
argumentEvent.getDataSource())));
}
@@ -276,15 +276,15 @@ public final class ClusterContextManagerCoordinatorTest {
@Test
public void assertRenewPrimaryDataSourceName() {
Collection<ShardingSphereRule> rules = new LinkedList<>();
- DynamicStatusContainedRule mockRestartHeartBeatJobRule =
mock(DynamicStatusContainedRule.class);
- rules.add(mockRestartHeartBeatJobRule);
+ DynamicDataSourceContainedRule dynamicDataSourceRule =
mock(DynamicDataSourceContainedRule.class);
+ rules.add(dynamicDataSourceRule);
ShardingSphereRuleMetaData ruleMetaData = new
ShardingSphereRuleMetaData(rules);
ShardingSphereDatabase database = mock(ShardingSphereDatabase.class);
when(database.getRuleMetaData()).thenReturn(ruleMetaData);
contextManager.getMetaDataContexts().getMetaData().getDatabases().put("db",
database);
PrimaryStateChangedEvent mockPrimaryStateChangedEvent = new
PrimaryStateChangedEvent(new QualifiedDatabase("db.readwrite_ds.test_ds"));
coordinator.renew(mockPrimaryStateChangedEvent);
- verify(mockRestartHeartBeatJobRule).restartHeartBeatJob(any(), any());
+ verify(dynamicDataSourceRule).restartHeartBeatJob(any(), any());
}
@Test