This is an automated email from the ASF dual-hosted git repository.
sunnianjun 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 031c4171ee0 Fix 24275 (#24284)
031c4171ee0 is described below
commit 031c4171ee0b3d6ab5956d5d43dbafd05aed732b
Author: zhaojinchao <[email protected]>
AuthorDate: Tue Feb 21 20:16:32 2023 +0800
Fix 24275 (#24284)
---
.../readwritesplitting/rule/ReadwriteSplittingRule.java | 10 ++++++++--
.../rule/builder/ReadwriteSplittingRuleBuilder.java | 2 +-
.../route/ReadwriteSplittingSQLRouterTest.java | 5 +++--
.../readwritesplitting/rule/ReadwriteSplittingRuleTest.java | 4 +++-
.../status/storage/watcher/StorageNodeStateChangedWatcher.java | 2 +-
.../ral/updatable/ImportDatabaseConfigurationUpdater.java | 2 +-
6 files changed, 17 insertions(+), 8 deletions(-)
diff --git
a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingRule.java
b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingRule.java
index ebd843d992c..a88031664df 100644
---
a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingRule.java
+++
b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingRule.java
@@ -22,6 +22,7 @@ import lombok.Getter;
import org.apache.shardingsphere.infra.config.algorithm.AlgorithmConfiguration;
import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
import org.apache.shardingsphere.infra.datasource.state.DataSourceState;
+import org.apache.shardingsphere.infra.instance.InstanceContext;
import
org.apache.shardingsphere.infra.metadata.database.schema.QualifiedDatabase;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import org.apache.shardingsphere.infra.rule.event.DataSourceStatusChangedEvent;
@@ -69,8 +70,12 @@ public final class ReadwriteSplittingRule implements
DatabaseRule, DataSourceCon
private final Map<String, ReadwriteSplittingDataSourceRule>
dataSourceRules;
- public ReadwriteSplittingRule(final String databaseName, final
ReadwriteSplittingRuleConfiguration ruleConfig, final
Collection<ShardingSphereRule> builtRules) {
+ private final InstanceContext instanceContext;
+
+ public ReadwriteSplittingRule(final String databaseName, final
ReadwriteSplittingRuleConfiguration ruleConfig,
+ final Collection<ShardingSphereRule>
builtRules, final InstanceContext instanceContext) {
this.databaseName = databaseName;
+ this.instanceContext = instanceContext;
configuration = ruleConfig;
for (ReadwriteSplittingDataSourceRuleConfiguration
dataSourceRuleConfiguration : ruleConfig.getDataSources()) {
if
(ruleConfig.getLoadBalancers().containsKey(dataSourceRuleConfiguration.getLoadBalancerName()))
{
@@ -190,7 +195,8 @@ public final class ReadwriteSplittingRule implements
DatabaseRule, DataSourceCon
if (rule.getReadwriteSplittingStrategy() instanceof
DynamicReadwriteSplittingStrategy) {
return;
}
- rule.getReadwriteSplittingStrategy().getReadDataSources().forEach(each
-> new StorageNodeDataSourceDeletedEvent(new QualifiedDatabase(databaseName,
rule.getName(), each)));
+ rule.getReadwriteSplittingStrategy().getReadDataSources().forEach(each
->
+ instanceContext.getEventBusContext().post(new
StorageNodeDataSourceDeletedEvent(new QualifiedDatabase(databaseName,
rule.getName(), each))));
}
@Override
diff --git
a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/builder/ReadwriteSplittingRuleBuilder.java
b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/builder/ReadwriteSplittingRuleBuilder.java
index 1fe9cf64e35..84181a011d1 100644
---
a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/builder/ReadwriteSplittingRuleBuilder.java
+++
b/features/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(databaseName, config, builtRules);
+ return new ReadwriteSplittingRule(databaseName, config, builtRules,
instanceContext);
}
@Override
diff --git
a/features/readwrite-splitting/core/src/test/java/org/apache/shardingsphere/readwritesplitting/route/ReadwriteSplittingSQLRouterTest.java
b/features/readwrite-splitting/core/src/test/java/org/apache/shardingsphere/readwritesplitting/route/ReadwriteSplittingSQLRouterTest.java
index 26a56b8dfbd..a5200e6f030 100644
---
a/features/readwrite-splitting/core/src/test/java/org/apache/shardingsphere/readwritesplitting/route/ReadwriteSplittingSQLRouterTest.java
+++
b/features/readwrite-splitting/core/src/test/java/org/apache/shardingsphere/readwritesplitting/route/ReadwriteSplittingSQLRouterTest.java
@@ -25,6 +25,7 @@ import
org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
import org.apache.shardingsphere.infra.context.ConnectionContext;
import org.apache.shardingsphere.infra.database.DefaultDatabase;
import org.apache.shardingsphere.infra.database.type.DatabaseType;
+import org.apache.shardingsphere.infra.instance.InstanceContext;
import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import
org.apache.shardingsphere.infra.metadata.database.resource.ShardingSphereResourceMetaData;
import
org.apache.shardingsphere.infra.metadata.database.rule.ShardingSphereRuleMetaData;
@@ -88,14 +89,14 @@ public final class ReadwriteSplittingSQLRouterTest {
public void setUp() {
staticRule = new ReadwriteSplittingRule("logic_db", new
ReadwriteSplittingRuleConfiguration(Collections.singleton(new
ReadwriteSplittingDataSourceRuleConfiguration(DATASOURCE_NAME,
new
StaticReadwriteSplittingStrategyConfiguration(WRITE_DATASOURCE,
Collections.singletonList(READ_DATASOURCE)), null, "")),
- Collections.emptyMap()), Collections.emptyList());
+ Collections.emptyMap()), Collections.emptyList(),
mock(InstanceContext.class));
sqlRouter = (ReadwriteSplittingSQLRouter)
OrderedSPILoader.getServices(SQLRouter.class,
Collections.singleton(staticRule)).get(staticRule);
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("logic_db", new
ReadwriteSplittingRuleConfiguration(Collections.singleton(new
ReadwriteSplittingDataSourceRuleConfiguration(DATASOURCE_NAME, null,
new
DynamicReadwriteSplittingStrategyConfiguration("readwrite_ds", "true"), "")),
Collections.emptyMap()),
- Collections.singleton(dynamicDataSourceRule));
+ Collections.singleton(dynamicDataSourceRule),
mock(InstanceContext.class));
dynamicSqlRouter = (ReadwriteSplittingSQLRouter)
OrderedSPILoader.getServices(SQLRouter.class,
Collections.singleton(dynamicRule)).get(dynamicRule);
}
diff --git
a/features/readwrite-splitting/core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingRuleTest.java
b/features/readwrite-splitting/core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingRuleTest.java
index bb117c99443..a942651ec72 100644
---
a/features/readwrite-splitting/core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingRuleTest.java
+++
b/features/readwrite-splitting/core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingRuleTest.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.readwritesplitting.rule;
import org.apache.shardingsphere.infra.config.algorithm.AlgorithmConfiguration;
import org.apache.shardingsphere.infra.datasource.state.DataSourceState;
+import org.apache.shardingsphere.infra.instance.InstanceContext;
import
org.apache.shardingsphere.infra.metadata.database.schema.QualifiedDatabase;
import org.apache.shardingsphere.mode.metadata.storage.StorageNodeDataSource;
import org.apache.shardingsphere.mode.metadata.storage.StorageNodeRole;
@@ -38,6 +39,7 @@ import java.util.Properties;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.mock;
public final class ReadwriteSplittingRuleTest {
@@ -57,7 +59,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("logic_db", new
ReadwriteSplittingRuleConfiguration(
- Collections.singleton(config),
Collections.singletonMap("random", new AlgorithmConfiguration("RANDOM", new
Properties()))), Collections.emptyList());
+ Collections.singleton(config),
Collections.singletonMap("random", new AlgorithmConfiguration("RANDOM", new
Properties()))), Collections.emptyList(), mock(InstanceContext.class));
}
private void assertDataSourceRule(final ReadwriteSplittingDataSourceRule
actual) {
diff --git
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/status/storage/watcher/StorageNodeStateChangedWatcher.java
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/status/storage/watcher/StorageNodeStateChangedWatcher.java
index b2e5889a1b2..f88fbad5e68 100644
---
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/status/storage/watcher/StorageNodeStateChangedWatcher.java
+++
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/status/storage/watcher/StorageNodeStateChangedWatcher.java
@@ -49,7 +49,7 @@ public final class StorageNodeStateChangedWatcher implements
GovernanceWatcher<G
@Override
public Collection<Type> getWatchingTypes() {
- return Arrays.asList(Type.ADDED, Type.UPDATED, Type.DELETED);
+ return Arrays.asList(Type.ADDED, Type.UPDATED);
}
@Override
diff --git
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/ImportDatabaseConfigurationUpdater.java
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/ImportDatabaseConfigurationUpdater.java
index 0eedb5077e9..227a5a6770c 100644
---
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/ImportDatabaseConfigurationUpdater.java
+++
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/ImportDatabaseConfigurationUpdater.java
@@ -169,7 +169,7 @@ public final class ImportDatabaseConfigurationUpdater
implements RALUpdater<Impo
ReadwriteSplittingRuleConfiguration
readwriteSplittingRuleConfig = new
YamlReadwriteSplittingRuleConfigurationSwapper().swapToObject((YamlReadwriteSplittingRuleConfiguration)
each);
readwriteSplittingRuleConfigurationImportChecker.check(database,
readwriteSplittingRuleConfig);
ruleConfigs.add(readwriteSplittingRuleConfig);
- rules.add(new ReadwriteSplittingRule(databaseName,
readwriteSplittingRuleConfig, rules));
+ rules.add(new ReadwriteSplittingRule(databaseName,
readwriteSplittingRuleConfig, rules, instanceContext));
} else if (each instanceof YamlDatabaseDiscoveryRuleConfiguration)
{
DatabaseDiscoveryRuleConfiguration databaseDiscoveryRuleConfig
= new
YamlDatabaseDiscoveryRuleConfigurationSwapper().swapToObject((YamlDatabaseDiscoveryRuleConfiguration)
each);
databaseDiscoveryRuleConfigurationImportChecker.check(database,
databaseDiscoveryRuleConfig);