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));