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 <[email protected]>
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) {

Reply via email to