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

panjuan 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 e515314b78d Fix PipelineDataSourceConfiguration side effect (#23216)
e515314b78d is described below

commit e515314b78df8fe0661a754d777e6a2cda455f1d
Author: Hongsheng Zhong <[email protected]>
AuthorDate: Sat Dec 31 16:14:36 2022 +0800

    Fix PipelineDataSourceConfiguration side effect (#23216)
---
 ...hardingSpherePipelineDataSourceConfiguration.java |  7 +------
 .../StandardPipelineDataSourceConfiguration.java     |  5 +++--
 ...ingSpherePipelineDataSourceConfigurationTest.java | 20 +++++++++++++++++++-
 .../StandardPipelineDataSourceConfigurationTest.java | 13 +++++++++++++
 4 files changed, 36 insertions(+), 9 deletions(-)

diff --git 
a/kernel/data-pipeline/api/src/main/java/org/apache/shardingsphere/data/pipeline/api/datasource/config/impl/ShardingSpherePipelineDataSourceConfiguration.java
 
b/kernel/data-pipeline/api/src/main/java/org/apache/shardingsphere/data/pipeline/api/datasource/config/impl/ShardingSpherePipelineDataSourceConfiguration.java
index 3022197d2fd..5ccf698bd91 100644
--- 
a/kernel/data-pipeline/api/src/main/java/org/apache/shardingsphere/data/pipeline/api/datasource/config/impl/ShardingSpherePipelineDataSourceConfiguration.java
+++ 
b/kernel/data-pipeline/api/src/main/java/org/apache/shardingsphere/data/pipeline/api/datasource/config/impl/ShardingSpherePipelineDataSourceConfiguration.java
@@ -67,12 +67,7 @@ public final class 
ShardingSpherePipelineDataSourceConfiguration implements Pipe
     }
     
     public ShardingSpherePipelineDataSourceConfiguration(final 
YamlRootConfiguration rootConfig) {
-        parameter = YamlEngine.marshal(new 
YamlParameterConfiguration(rootConfig.getDataSources(), rootConfig.getRules()));
-        this.rootConfig = rootConfig;
-        Map<String, Object> props = 
rootConfig.getDataSources().values().iterator().next();
-        databaseType = DatabaseTypeEngine.getDatabaseType(getJdbcUrl(props));
-        appendJdbcQueryProperties(databaseType.getType());
-        adjustDataSourceProperties(rootConfig.getDataSources());
+        this(YamlEngine.marshal(new 
YamlParameterConfiguration(rootConfig.getDataSources(), 
rootConfig.getRules())));
     }
     
     private String getJdbcUrl(final Map<String, Object> props) {
diff --git 
a/kernel/data-pipeline/api/src/main/java/org/apache/shardingsphere/data/pipeline/api/datasource/config/impl/StandardPipelineDataSourceConfiguration.java
 
b/kernel/data-pipeline/api/src/main/java/org/apache/shardingsphere/data/pipeline/api/datasource/config/impl/StandardPipelineDataSourceConfiguration.java
index dfea8395558..13975c6fdd8 100644
--- 
a/kernel/data-pipeline/api/src/main/java/org/apache/shardingsphere/data/pipeline/api/datasource/config/impl/StandardPipelineDataSourceConfiguration.java
+++ 
b/kernel/data-pipeline/api/src/main/java/org/apache/shardingsphere/data/pipeline/api/datasource/config/impl/StandardPipelineDataSourceConfiguration.java
@@ -31,6 +31,7 @@ import org.apache.shardingsphere.infra.util.yaml.YamlEngine;
 import 
org.apache.shardingsphere.infra.yaml.config.swapper.resource.YamlDataSourceConfigurationSwapper;
 
 import java.util.Arrays;
+import java.util.HashMap;
 import java.util.LinkedHashMap;
 import java.util.Map;
 import java.util.Optional;
@@ -62,8 +63,8 @@ public final class StandardPipelineDataSourceConfiguration 
implements PipelineDa
         this(param, YamlEngine.unmarshal(param, Map.class));
     }
     
-    public StandardPipelineDataSourceConfiguration(final Map<String, Object> 
yamlConfig) {
-        this(YamlEngine.marshal(yamlConfig), yamlConfig);
+    public StandardPipelineDataSourceConfiguration(final Map<String, Object> 
yamlDataSourceConfig) {
+        this(YamlEngine.marshal(yamlDataSourceConfig), new 
HashMap<>(yamlDataSourceConfig));
     }
     
     private StandardPipelineDataSourceConfiguration(final String param, final 
Map<String, Object> yamlConfig) {
diff --git 
a/kernel/data-pipeline/api/src/test/java/org/apache/shardingsphere/data/pipeline/api/datasource/config/impl/ShardingSpherePipelineDataSourceConfigurationTest.java
 
b/kernel/data-pipeline/api/src/test/java/org/apache/shardingsphere/data/pipeline/api/datasource/config/impl/ShardingSpherePipelineDataSourceConfigurationTest.java
index a598a9088aa..daf9475ee08 100644
--- 
a/kernel/data-pipeline/api/src/test/java/org/apache/shardingsphere/data/pipeline/api/datasource/config/impl/ShardingSpherePipelineDataSourceConfigurationTest.java
+++ 
b/kernel/data-pipeline/api/src/test/java/org/apache/shardingsphere/data/pipeline/api/datasource/config/impl/ShardingSpherePipelineDataSourceConfigurationTest.java
@@ -17,25 +17,43 @@
 
 package org.apache.shardingsphere.data.pipeline.api.datasource.config.impl;
 
+import org.apache.shardingsphere.infra.util.yaml.YamlEngine;
 import org.apache.shardingsphere.infra.yaml.config.pojo.YamlRootConfiguration;
 import org.junit.Test;
 
 import java.util.Arrays;
+import java.util.HashMap;
 import java.util.Map;
+import java.util.Map.Entry;
 
 import static org.hamcrest.CoreMatchers.instanceOf;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 
 public final class ShardingSpherePipelineDataSourceConfigurationTest {
     
     @Test
     public void assertCreate() {
-        ShardingSpherePipelineDataSourceConfiguration actual = new 
ShardingSpherePipelineDataSourceConfiguration(getDataSourceYaml());
+        YamlRootConfiguration rootConfig = 
YamlEngine.unmarshal(getDataSourceYaml(), YamlRootConfiguration.class, true);
+        Map<String, Object> backupDs0 = new 
HashMap<>(rootConfig.getDataSources().get("ds_0"));
+        Map<String, Object> backupDs1 = new 
HashMap<>(rootConfig.getDataSources().get("ds_1"));
+        ShardingSpherePipelineDataSourceConfiguration actual = new 
ShardingSpherePipelineDataSourceConfiguration(rootConfig);
+        assertParameterUnchanged(backupDs0, 
rootConfig.getDataSources().get("ds_0"));
+        assertParameterUnchanged(backupDs1, 
rootConfig.getDataSources().get("ds_1"));
         assertGetConfig(actual);
     }
     
+    private void assertParameterUnchanged(final Map<String, Object> backup, 
final Map<String, Object> handled) {
+        assertThat(handled.size(), is(backup.size()));
+        for (Entry<String, Object> entry : backup.entrySet()) {
+            Object actual = handled.get(entry.getKey());
+            assertNotNull("value of '" + entry.getKey() + "' doesn't exist", 
actual);
+            assertThat("value of '" + entry.getKey() + "' doesn't match", 
actual, is(entry.getValue()));
+        }
+    }
+    
     private void assertGetConfig(final 
ShardingSpherePipelineDataSourceConfiguration actual) {
         assertThat(actual.getDatabaseType().getType(), is("MySQL"));
         assertThat(actual.getType(), 
is(ShardingSpherePipelineDataSourceConfiguration.TYPE));
diff --git 
a/kernel/data-pipeline/api/src/test/java/org/apache/shardingsphere/data/pipeline/api/datasource/config/impl/StandardPipelineDataSourceConfigurationTest.java
 
b/kernel/data-pipeline/api/src/test/java/org/apache/shardingsphere/data/pipeline/api/datasource/config/impl/StandardPipelineDataSourceConfigurationTest.java
index 3e75482cdfe..d4cd8d32821 100644
--- 
a/kernel/data-pipeline/api/src/test/java/org/apache/shardingsphere/data/pipeline/api/datasource/config/impl/StandardPipelineDataSourceConfigurationTest.java
+++ 
b/kernel/data-pipeline/api/src/test/java/org/apache/shardingsphere/data/pipeline/api/datasource/config/impl/StandardPipelineDataSourceConfigurationTest.java
@@ -24,9 +24,11 @@ import org.junit.Test;
 
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Map.Entry;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.Assert.assertNotNull;
 
 public final class StandardPipelineDataSourceConfigurationTest {
     
@@ -52,7 +54,9 @@ public final class 
StandardPipelineDataSourceConfigurationTest {
         yamlDataSourceConfig.put("password", PASSWORD);
         yamlDataSourceConfig.put("dataSourceClassName", 
"com.zaxxer.hikari.HikariDataSource");
         yamlDataSourceConfig.put("minPoolSize", "20");
+        Map<String, Object> backup = new HashMap<>(yamlDataSourceConfig);
         StandardPipelineDataSourceConfiguration actual = new 
StandardPipelineDataSourceConfiguration(yamlDataSourceConfig);
+        assertParameterUnchanged(backup, yamlDataSourceConfig);
         assertGetConfig(actual);
         yamlDataSourceConfig.remove("url");
         yamlDataSourceConfig.put("jdbcUrl", JDBC_URL);
@@ -60,6 +64,15 @@ public final class 
StandardPipelineDataSourceConfigurationTest {
         assertGetConfig(actual);
     }
     
+    private void assertParameterUnchanged(final Map<String, Object> backup, 
final Map<String, Object> handled) {
+        assertThat(handled.size(), is(backup.size()));
+        for (Entry<String, Object> entry : backup.entrySet()) {
+            Object actual = handled.get(entry.getKey());
+            assertNotNull("value of '" + entry.getKey() + "' doesn't exist", 
actual);
+            assertThat("value of '" + entry.getKey() + "' doesn't match", 
actual, is(entry.getValue()));
+        }
+    }
+    
     private void assertGetConfig(final StandardPipelineDataSourceConfiguration 
actual) {
         assertThat(actual.getDatabaseType().getType(), is("MySQL"));
         assertThat(actual.getType(), 
is(StandardPipelineDataSourceConfiguration.TYPE));

Reply via email to