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 2023/06/14 15:02:33 UTC

[shardingsphere] branch master updated: Fix feature rule configuration event builder (#26351)

This is an automated email from the ASF dual-hosted git repository.

zhaojinchao 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 ee94ec47cb6 Fix feature rule configuration event builder (#26351)
ee94ec47cb6 is described below

commit ee94ec47cb629582d054d0fa971243a50358cda6
Author: ChenJiaHao <Pa...@163.com>
AuthorDate: Wed Jun 14 23:02:24 2023 +0800

    Fix feature rule configuration event builder (#26351)
---
 ...writeSplittingRuleConfigurationEventBuilder.java | 21 ++++++++++++++-------
 .../event/ShadowRuleConfigurationEventBuilder.java  | 12 ++++++------
 2 files changed, 20 insertions(+), 13 deletions(-)

diff --git a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/event/ReadwriteSplittingRuleConfigurationEventBuilder.java b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/event/ReadwriteSplittingRuleConfigurationEventBuilder.java
index bfaa1cd10c5..0ccabc1afc1 100644
--- a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/event/ReadwriteSplittingRuleConfigurationEventBuilder.java
+++ b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/event/ReadwriteSplittingRuleConfigurationEventBuilder.java
@@ -27,6 +27,7 @@ import org.apache.shardingsphere.mode.event.DataChangedEvent;
 import org.apache.shardingsphere.mode.event.DataChangedEvent.Type;
 import org.apache.shardingsphere.mode.spi.RuleConfigurationEventBuilder;
 import org.apache.shardingsphere.readwritesplitting.api.rule.ReadwriteSplittingDataSourceRuleConfiguration;
+import org.apache.shardingsphere.readwritesplitting.api.transaction.TransactionalReadQueryStrategy;
 import org.apache.shardingsphere.readwritesplitting.event.config.AddReadwriteSplittingConfigurationEvent;
 import org.apache.shardingsphere.readwritesplitting.event.config.AlterReadwriteSplittingConfigurationEvent;
 import org.apache.shardingsphere.readwritesplitting.event.config.DeleteReadwriteSplittingConfigurationEvent;
@@ -34,8 +35,7 @@ import org.apache.shardingsphere.readwritesplitting.event.loadbalance.AddLoadBal
 import org.apache.shardingsphere.readwritesplitting.event.loadbalance.AlterLoadBalanceEvent;
 import org.apache.shardingsphere.readwritesplitting.event.loadbalance.DeleteLoadBalanceEvent;
 import org.apache.shardingsphere.readwritesplitting.metadata.converter.ReadwriteSplittingNodeConverter;
-import org.apache.shardingsphere.readwritesplitting.yaml.config.YamlReadwriteSplittingRuleConfiguration;
-import org.apache.shardingsphere.readwritesplitting.yaml.swapper.YamlReadwriteSplittingRuleConfigurationSwapper;
+import org.apache.shardingsphere.readwritesplitting.yaml.config.rule.YamlReadwriteSplittingDataSourceRuleConfiguration;
 
 import java.util.Optional;
 
@@ -62,17 +62,24 @@ public final class ReadwriteSplittingRuleConfigurationEventBuilder implements Ru
     
     private Optional<GovernanceEvent> createReadwriteSplittingConfigEvent(final String databaseName, final String groupName, final DataChangedEvent event) {
         if (Type.ADDED == event.getType()) {
-            return Optional.of(new AddReadwriteSplittingConfigurationEvent<>(databaseName, swapReadwriteSplittingDataSourceRuleConfig(event.getValue())));
+            return Optional.of(new AddReadwriteSplittingConfigurationEvent<>(databaseName, swapDataSource(groupName, event.getValue())));
         }
         if (Type.UPDATED == event.getType()) {
-            return Optional.of(new AlterReadwriteSplittingConfigurationEvent<>(databaseName, groupName, swapReadwriteSplittingDataSourceRuleConfig(event.getValue())));
+            return Optional.of(new AlterReadwriteSplittingConfigurationEvent<>(databaseName, groupName, swapDataSource(groupName, event.getValue())));
         }
         return Optional.of(new DeleteReadwriteSplittingConfigurationEvent(databaseName, groupName));
     }
     
-    // TODO Consider extract ReadwriteSplittingDataSourceRuleConfigurationSwapper
-    private ReadwriteSplittingDataSourceRuleConfiguration swapReadwriteSplittingDataSourceRuleConfig(final String yamlContext) {
-        return new YamlReadwriteSplittingRuleConfigurationSwapper().swapToObject(YamlEngine.unmarshal(yamlContext, YamlReadwriteSplittingRuleConfiguration.class)).getDataSources().iterator().next();
+    private ReadwriteSplittingDataSourceRuleConfiguration swapDataSource(final String name, final String yamlContext) {
+        YamlReadwriteSplittingDataSourceRuleConfiguration yamlDataSourceRuleConfig = YamlEngine.unmarshal(yamlContext, YamlReadwriteSplittingDataSourceRuleConfiguration.class);
+        return new ReadwriteSplittingDataSourceRuleConfiguration(name, yamlDataSourceRuleConfig.getWriteDataSourceName(), yamlDataSourceRuleConfig.getReadDataSourceNames(),
+                getTransactionalReadQueryStrategy(yamlDataSourceRuleConfig), yamlDataSourceRuleConfig.getLoadBalancerName());
+    }
+    
+    private TransactionalReadQueryStrategy getTransactionalReadQueryStrategy(final YamlReadwriteSplittingDataSourceRuleConfiguration yamlDataSourceRuleConfig) {
+        return Strings.isNullOrEmpty(yamlDataSourceRuleConfig.getTransactionalReadQueryStrategy())
+                ? TransactionalReadQueryStrategy.DYNAMIC
+                : TransactionalReadQueryStrategy.valueOf(yamlDataSourceRuleConfig.getTransactionalReadQueryStrategy());
     }
     
     private Optional<GovernanceEvent> createLoadBalanceEvent(final String databaseName, final String loadBalanceName, final DataChangedEvent event) {
diff --git a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/event/ShadowRuleConfigurationEventBuilder.java b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/event/ShadowRuleConfigurationEventBuilder.java
index 88642c63573..b61ee51cd34 100644
--- a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/event/ShadowRuleConfigurationEventBuilder.java
+++ b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/event/ShadowRuleConfigurationEventBuilder.java
@@ -38,9 +38,8 @@ import org.apache.shardingsphere.shadow.event.table.AddShadowTableEvent;
 import org.apache.shardingsphere.shadow.event.table.AlterShadowTableEvent;
 import org.apache.shardingsphere.shadow.event.table.DeleteShadowTableEvent;
 import org.apache.shardingsphere.shadow.metadata.converter.ShadowNodeConverter;
-import org.apache.shardingsphere.shadow.yaml.config.YamlShadowRuleConfiguration;
+import org.apache.shardingsphere.shadow.yaml.config.datasource.YamlShadowDataSourceConfiguration;
 import org.apache.shardingsphere.shadow.yaml.config.table.YamlShadowTableConfiguration;
-import org.apache.shardingsphere.shadow.yaml.swapper.YamlShadowRuleConfigurationSwapper;
 import org.apache.shardingsphere.shadow.yaml.swapper.table.YamlShadowTableConfigurationSwapper;
 
 import java.util.Optional;
@@ -72,16 +71,17 @@ public final class ShadowRuleConfigurationEventBuilder implements RuleConfigurat
     
     private Optional<GovernanceEvent> createShadowConfigEvent(final String databaseName, final String dataSourceName, final DataChangedEvent event) {
         if (Type.ADDED == event.getType()) {
-            return Optional.of(new AddShadowConfigurationEvent<>(databaseName, swapShadowDataSourceRuleConfig(event.getValue())));
+            return Optional.of(new AddShadowConfigurationEvent<>(databaseName, swapShadowDataSourceRuleConfig(dataSourceName, event.getValue())));
         }
         if (Type.UPDATED == event.getType()) {
-            return Optional.of(new AlterShadowConfigurationEvent<>(databaseName, dataSourceName, swapShadowDataSourceRuleConfig(event.getValue())));
+            return Optional.of(new AlterShadowConfigurationEvent<>(databaseName, dataSourceName, swapShadowDataSourceRuleConfig(dataSourceName, event.getValue())));
         }
         return Optional.of(new DeleteShadowConfigurationEvent(databaseName, dataSourceName));
     }
     
-    private ShadowDataSourceConfiguration swapShadowDataSourceRuleConfig(final String yamlContext) {
-        return new YamlShadowRuleConfigurationSwapper().swapToObject(YamlEngine.unmarshal(yamlContext, YamlShadowRuleConfiguration.class)).getDataSources().iterator().next();
+    private ShadowDataSourceConfiguration swapShadowDataSourceRuleConfig(final String dataSourceName, final String yamlContext) {
+        YamlShadowDataSourceConfiguration yamlConfig = YamlEngine.unmarshal(yamlContext, YamlShadowDataSourceConfiguration.class);
+        return new ShadowDataSourceConfiguration(dataSourceName, yamlConfig.getProductionDataSourceName(), yamlConfig.getShadowDataSourceName());
     }
     
     private Optional<GovernanceEvent> createShadowTableConfigEvent(final String databaseName, final String tableName, final DataChangedEvent event) {