You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by ji...@apache.org on 2023/06/15 09:52:58 UTC
[shardingsphere] branch master updated: Fix ReadwriteSplittingRule statement updater (#26369)
This is an automated email from the ASF dual-hosted git repository.
jianglongtao 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 e3b42c966b2 Fix ReadwriteSplittingRule statement updater (#26369)
e3b42c966b2 is described below
commit e3b42c966b28f1e2bd415f7226029dd9dff9f510
Author: ChenJiaHao <Pa...@163.com>
AuthorDate: Thu Jun 15 17:52:48 2023 +0800
Fix ReadwriteSplittingRule statement updater (#26369)
---
...AlterReadwriteSplittingRuleStatementUpdater.java | 12 +++---------
.../DropReadwriteSplittingRuleStatementUpdater.java | 21 +++++++++++----------
.../rdl/rule/NewRuleDefinitionBackendHandler.java | 2 +-
3 files changed, 15 insertions(+), 20 deletions(-)
diff --git a/features/readwrite-splitting/distsql/handler/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/update/AlterReadwriteSplittingRuleStatementUpdater.java b/features/readwrite-splitting/distsql/handler/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/update/AlterReadwriteSplittingRuleStatementUpdater.java
index 67623670690..0cfa36e952f 100644
--- a/features/readwrite-splitting/distsql/handler/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/update/AlterReadwriteSplittingRuleStatementUpdater.java
+++ b/features/readwrite-splitting/distsql/handler/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/update/AlterReadwriteSplittingRuleStatementUpdater.java
@@ -33,7 +33,6 @@ import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Optional;
-import java.util.Set;
import java.util.stream.Collectors;
/**
@@ -55,17 +54,12 @@ public final class AlterReadwriteSplittingRuleStatementUpdater implements RuleDe
public ReadwriteSplittingRuleConfiguration buildToBeDroppedRuleConfiguration(final ReadwriteSplittingRuleConfiguration currentRuleConfig,
final ReadwriteSplittingRuleConfiguration toBeAlteredRuleConfig) {
Collection<ReadwriteSplittingDataSourceRuleConfiguration> dataSources = new LinkedList<>();
+ Map<String, AlgorithmConfiguration> loadBalancers = new HashMap<>();
List<String> toBeAlteredDataSourceNames = toBeAlteredRuleConfig.getDataSources().stream().map(ReadwriteSplittingDataSourceRuleConfiguration::getName).collect(Collectors.toList());
for (ReadwriteSplittingDataSourceRuleConfiguration each : currentRuleConfig.getDataSources()) {
- if (!toBeAlteredDataSourceNames.contains(each.getName())) {
+ if (toBeAlteredDataSourceNames.contains(each.getName())) {
dataSources.add(each);
- }
- }
- Map<String, AlgorithmConfiguration> loadBalancers = new HashMap<>();
- for (String each : currentRuleConfig.getLoadBalancers().keySet()) {
- Set<String> toBeAlteredLoadBalancerNames = toBeAlteredRuleConfig.getLoadBalancers().keySet();
- if (!toBeAlteredLoadBalancerNames.contains(each)) {
- loadBalancers.put(each, null);
+ loadBalancers.put(each.getLoadBalancerName(), null);
}
}
return new ReadwriteSplittingRuleConfiguration(dataSources, loadBalancers);
diff --git a/features/readwrite-splitting/distsql/handler/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/update/DropReadwriteSplittingRuleStatementUpdater.java b/features/readwrite-splitting/distsql/handler/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/update/DropReadwriteSplittingRuleStatementUpdater.java
index cfc2deb7496..f5c8c638fa6 100644
--- a/features/readwrite-splitting/distsql/handler/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/update/DropReadwriteSplittingRuleStatementUpdater.java
+++ b/features/readwrite-splitting/distsql/handler/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/update/DropReadwriteSplittingRuleStatementUpdater.java
@@ -40,6 +40,7 @@ import java.util.LinkedList;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
+import java.util.Set;
import java.util.stream.Collectors;
/**
@@ -98,20 +99,20 @@ public final class DropReadwriteSplittingRuleStatementUpdater implements RuleDef
public ReadwriteSplittingRuleConfiguration buildToBeDroppedRuleConfiguration(final ReadwriteSplittingRuleConfiguration currentRuleConfig, final DropReadwriteSplittingRuleStatement sqlStatement) {
Collection<ReadwriteSplittingDataSourceRuleConfiguration> toBeDroppedDataSources = new LinkedList<>();
Map<String, AlgorithmConfiguration> toBeDroppedLoadBalancers = new HashMap<>();
- for (String each : sqlStatement.getNames()) {
- compareAndGetToBeDroppedRule(currentRuleConfig, toBeDroppedDataSources, toBeDroppedLoadBalancers, each, sqlStatement.getNames());
- }
+ sqlStatement.getNames().forEach(each -> toBeDroppedDataSources.add(new ReadwriteSplittingDataSourceRuleConfiguration(each, null, null, null)));
+ compareAndGetToBeDroppedLoadBalancers(currentRuleConfig, sqlStatement.getNames(), toBeDroppedLoadBalancers);
return new ReadwriteSplittingRuleConfiguration(toBeDroppedDataSources, toBeDroppedLoadBalancers);
}
- private void compareAndGetToBeDroppedRule(final ReadwriteSplittingRuleConfiguration currentRuleConfig, final Collection<ReadwriteSplittingDataSourceRuleConfiguration> toBeDroppedDataSources,
- final Map<String, AlgorithmConfiguration> toBeDroppedLoadBalancers, final String toBeDroppedDataSourceName, final Collection<String> dataSourceNames) {
- toBeDroppedDataSources.add(new ReadwriteSplittingDataSourceRuleConfiguration(toBeDroppedDataSourceName, null, null, null));
- currentRuleConfig.getDataSources().stream().filter(dataSource -> toBeDroppedDataSourceName.equals(dataSource.getName())).findAny().ifPresent(toBeDroppedDataSourceRuleConfig -> {
- if (null != toBeDroppedDataSourceRuleConfig.getLoadBalancerName() && isLoadBalancerNotInUse(currentRuleConfig, toBeDroppedDataSourceRuleConfig.getLoadBalancerName(), dataSourceNames)) {
- toBeDroppedLoadBalancers.put(toBeDroppedDataSourceRuleConfig.getLoadBalancerName(), currentRuleConfig.getLoadBalancers().get(toBeDroppedDataSourceRuleConfig.getLoadBalancerName()));
+ private void compareAndGetToBeDroppedLoadBalancers(final ReadwriteSplittingRuleConfiguration currentRuleConfig, final Collection<String> toBeDroppedDataSourceNames,
+ final Map<String, AlgorithmConfiguration> toBeDroppedLoadBalancers) {
+ Set<String> inUsedLoadBalancers = currentRuleConfig.getDataSources().stream().filter(dataSource -> !toBeDroppedDataSourceNames.contains(dataSource.getName()))
+ .map(ReadwriteSplittingDataSourceRuleConfiguration::getLoadBalancerName).collect(Collectors.toSet());
+ for (String each : currentRuleConfig.getLoadBalancers().keySet()) {
+ if (!inUsedLoadBalancers.contains(each)) {
+ toBeDroppedLoadBalancers.put(each, null);
}
- });
+ }
}
@Override
diff --git a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/rule/NewRuleDefinitionBackendHandler.java b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/rule/NewRuleDefinitionBackendHandler.java
index 5d87ed39e76..d0a988c1226 100644
--- a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/rule/NewRuleDefinitionBackendHandler.java
+++ b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/rule/NewRuleDefinitionBackendHandler.java
@@ -101,8 +101,8 @@ public final class NewRuleDefinitionBackendHandler<T extends RuleDefinitionState
RuleConfiguration toBeAlteredRuleConfig = updater.buildToBeAlteredRuleConfiguration(sqlStatement);
RuleConfiguration toBeDroppedRuleConfig = updater.buildToBeDroppedRuleConfiguration(currentRuleConfig, toBeAlteredRuleConfig);
updater.updateCurrentRuleConfiguration(currentRuleConfig, toBeAlteredRuleConfig);
- ProxyContext.getInstance().getContextManager().getInstanceContext().getModeContextManager().alterRuleConfiguration(database.getName(), toBeAlteredRuleConfig);
ProxyContext.getInstance().getContextManager().getInstanceContext().getModeContextManager().removeRuleConfiguration(database.getName(), toBeDroppedRuleConfig);
+ ProxyContext.getInstance().getContextManager().getInstanceContext().getModeContextManager().alterRuleConfiguration(database.getName(), toBeAlteredRuleConfig);
}
@SuppressWarnings({"rawtypes", "unchecked"})