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

terrymanu 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 86c324080a2 Move Pipeline data source YAML conversion to construction 
(#39933)
86c324080a2 is described below

commit 86c324080a2d73d6f0fe5f19daa3383c9ca41e9d
Author: Liang Zhang <[email protected]>
AuthorDate: Thu Sep 24 00:04:55 2026 +0800

    Move Pipeline data source YAML conversion to construction (#39933)
---
 ...rdingSpherePipelineDataSourceConfiguration.java | 60 +++++-----------------
 ...gSpherePipelineDataSourceConfigurationTest.java | 31 +++++++++++
 ...PipelineDataSourceConfigurationFactoryTest.java |  3 +-
 3 files changed, 46 insertions(+), 48 deletions(-)

diff --git 
a/kernel/data-pipeline/api/src/main/java/org/apache/shardingsphere/data/pipeline/api/type/ShardingSpherePipelineDataSourceConfiguration.java
 
b/kernel/data-pipeline/api/src/main/java/org/apache/shardingsphere/data/pipeline/api/type/ShardingSpherePipelineDataSourceConfiguration.java
index 03ffb396c6d..928935b9128 100644
--- 
a/kernel/data-pipeline/api/src/main/java/org/apache/shardingsphere/data/pipeline/api/type/ShardingSpherePipelineDataSourceConfiguration.java
+++ 
b/kernel/data-pipeline/api/src/main/java/org/apache/shardingsphere/data/pipeline/api/type/ShardingSpherePipelineDataSourceConfiguration.java
@@ -18,6 +18,7 @@
 package org.apache.shardingsphere.data.pipeline.api.type;
 
 import com.google.common.base.Preconditions;
+import lombok.AccessLevel;
 import lombok.EqualsAndHashCode;
 import lombok.Getter;
 import lombok.Setter;
@@ -60,9 +61,12 @@ public final class 
ShardingSpherePipelineDataSourceConfiguration implements Pipe
     
     private final String databaseName;
     
-    private volatile Map<String, DataSourcePoolProperties> 
dataSourcePoolPropertiesMap;
+    @Getter(AccessLevel.NONE)
+    private final Map<String, Map<String, Object>> dataSources;
     
-    private volatile Collection<RuleConfiguration> ruleConfigurations;
+    private final Map<String, DataSourcePoolProperties> 
dataSourcePoolPropertiesMap;
+    
+    private final Collection<RuleConfiguration> ruleConfigurations;
     
     private final DatabaseType databaseType;
     
@@ -76,6 +80,9 @@ public final class 
ShardingSpherePipelineDataSourceConfiguration implements Pipe
         Map<String, Object> props = 
rootConfig.getDataSources().values().iterator().next();
         databaseType = DatabaseTypeFactory.get(getJdbcUrl(props));
         databaseName = rootConfig.getDatabaseName();
+        dataSources = rootConfig.getDataSources();
+        dataSourcePoolPropertiesMap = 
createDataSourcePoolPropertiesMap(dataSources);
+        ruleConfigurations = new 
YamlRuleConfigurationSwapperEngine().swapToRuleConfigurations(rootConfig.getRules());
     }
     
     public ShardingSpherePipelineDataSourceConfiguration(final 
YamlRootConfiguration rootConfig) {
@@ -123,51 +130,11 @@ public final class 
ShardingSpherePipelineDataSourceConfiguration implements Pipe
         Optional<JdbcQueryPropertiesExtension> extension = 
DatabaseTypedSPILoader.findService(JdbcQueryPropertiesExtension.class, 
databaseType);
         dataSources.forEach((key, value) -> {
             Map<String, Object> customPoolProps = (Map<String, Object>) 
value.get("customPoolProps");
-            result.put(key, 
adjustDataSourcePoolProperties(swapper.swapToDataSourcePoolProperties(value), 
extension,
-                    null == customPoolProps ? Collections.emptyMap() : 
customPoolProps));
+            result.put(key, 
adjustDataSourcePoolProperties(swapper.swapToDataSourcePoolProperties(value), 
extension, null == customPoolProps ? Collections.emptyMap() : customPoolProps));
         });
         return result;
     }
     
-    /**
-     * Get data source pool properties.
-     *
-     * @return data source pool properties
-     */
-    public Map<String, DataSourcePoolProperties> 
getDataSourcePoolPropertiesMap() {
-        Map<String, DataSourcePoolProperties> result = 
dataSourcePoolPropertiesMap;
-        if (null == result) {
-            synchronized (this) {
-                result = dataSourcePoolPropertiesMap;
-                if (null == result) {
-                    YamlRootConfiguration rootConfig = 
YamlEngine.unmarshal(parameter, YamlRootConfiguration.class, true);
-                    result = 
createDataSourcePoolPropertiesMap(rootConfig.getDataSources());
-                    dataSourcePoolPropertiesMap = result;
-                }
-            }
-        }
-        return result;
-    }
-    
-    /**
-     * Get rule configurations.
-     *
-     * @return rule configurations
-     */
-    public Collection<RuleConfiguration> getRuleConfigurations() {
-        Collection<RuleConfiguration> result = ruleConfigurations;
-        if (null == result) {
-            synchronized (this) {
-                result = ruleConfigurations;
-                if (null == result) {
-                    result = new 
YamlRuleConfigurationSwapperEngine().swapToRuleConfigurations(YamlEngine.unmarshal(parameter,
 YamlRootConfiguration.class, true).getRules());
-                    ruleConfigurations = result;
-                }
-            }
-        }
-        return result;
-    }
-    
     /**
      * Get rule configurations for data source creation.
      *
@@ -179,7 +146,6 @@ public final class 
ShardingSpherePipelineDataSourceConfiguration implements Pipe
     
     @Override
     public Object getDataSourceConfiguration() {
-        getDataSourcePoolPropertiesMap();
         return this;
     }
     
@@ -195,9 +161,9 @@ public final class 
ShardingSpherePipelineDataSourceConfiguration implements Pipe
      * @return actual data source configuration
      */
     public StandardPipelineDataSourceConfiguration 
getActualDataSourceConfiguration(final String actualDataSourceName) {
-        YamlRootConfiguration rootConfig = YamlEngine.unmarshal(parameter, 
YamlRootConfiguration.class, true);
-        Map<String, Object> dataSourceConfig = 
rootConfig.getDataSources().get(actualDataSourceName);
-        Preconditions.checkNotNull(dataSourceConfig, "actualDataSourceName 
'{}' does not exist", actualDataSourceName);
+        Map<String, Object> sourceDataSourceConfig = 
dataSources.get(actualDataSourceName);
+        Preconditions.checkNotNull(sourceDataSourceConfig, 
"actualDataSourceName '{}' does not exist", actualDataSourceName);
+        Map<String, Object> dataSourceConfig = new 
LinkedHashMap<>(sourceDataSourceConfig);
         StandardPipelineDataSourceConfiguration adjusted = new 
StandardPipelineDataSourceConfiguration(dataSourceConfig);
         String jdbcUrlKey = dataSourceConfig.containsKey("url") ? "url" : 
"jdbcUrl";
         dataSourceConfig.put(jdbcUrlKey, adjusted.getUrl());
diff --git 
a/kernel/data-pipeline/api/src/test/java/org/apache/shardingsphere/data/pipeline/api/type/ShardingSpherePipelineDataSourceConfigurationTest.java
 
b/kernel/data-pipeline/api/src/test/java/org/apache/shardingsphere/data/pipeline/api/type/ShardingSpherePipelineDataSourceConfigurationTest.java
index af73f44e4b5..c8db64f77a9 100644
--- 
a/kernel/data-pipeline/api/src/test/java/org/apache/shardingsphere/data/pipeline/api/type/ShardingSpherePipelineDataSourceConfigurationTest.java
+++ 
b/kernel/data-pipeline/api/src/test/java/org/apache/shardingsphere/data/pipeline/api/type/ShardingSpherePipelineDataSourceConfigurationTest.java
@@ -31,6 +31,7 @@ import 
org.apache.shardingsphere.test.infra.framework.extension.mock.StaticMockS
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
 import org.mockito.MockedConstruction;
+import org.mockito.MockedStatic;
 
 import java.util.Collections;
 import java.util.HashMap;
@@ -47,9 +48,13 @@ import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.CALLS_REAL_METHODS;
 import static org.mockito.Mockito.doAnswer;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.mockConstruction;
+import static org.mockito.Mockito.mockStatic;
+import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.when;
 
 @ExtendWith(AutoMockExtension.class)
@@ -129,6 +134,32 @@ class ShardingSpherePipelineDataSourceConfigurationTest {
         
assertThat(config.getDataSourcePoolPropertiesMap().get("ds_0").getAllLocalProperties().get("minimumIdle"),
 is(7));
     }
     
+    @Test
+    void assertRuntimeReadsDoNotParsePersistedParameter() {
+        ShardingSpherePipelineDataSourceConfiguration config = new 
ShardingSpherePipelineDataSourceConfiguration(
+                
SystemResourceFileUtils.readFile("yaml/shardingsphere-pipeline-datasource-config.yaml"));
+        try (MockedStatic<YamlEngine> yamlEngine = 
mockStatic(YamlEngine.class, CALLS_REAL_METHODS)) {
+            config.getDataSourceConfiguration();
+            config.getDataSourcePoolPropertiesMap();
+            config.getRuleConfigurations();
+            config.getActualDataSourceConfiguration("ds_0");
+            yamlEngine.verify(() -> YamlEngine.unmarshal(anyString(), 
eq(YamlRootConfiguration.class), eq(true)), never());
+        }
+    }
+    
+    @Test
+    void assertPersistedParameterRestoresRuntimeConfiguration() {
+        YamlRootConfiguration rootConfig = 
YamlEngine.unmarshal(SystemResourceFileUtils.readFile("yaml/shardingsphere-pipeline-datasource-config.yaml"),
 YamlRootConfiguration.class, true);
+        rootConfig.getDataSources().get("ds_0").put("customPoolProps", 
Collections.singletonMap("connectionTimeout", 30000));
+        ShardingSpherePipelineDataSourceConfiguration original = new 
ShardingSpherePipelineDataSourceConfiguration(rootConfig);
+        ShardingSpherePipelineDataSourceConfiguration actual = new 
ShardingSpherePipelineDataSourceConfiguration(original.getParameter());
+        
assertThat(actual.getDataSourcePoolPropertiesMap().get("ds_0").getAllLocalProperties().get("connectionTimeout"),
 is(30000));
+        assertThat(actual.getActualDataSourceConfiguration("ds_0").getUrl(), 
is("jdbc:mock://127.0.0.1/ds_0"));
+        YamlRootConfiguration persisted = 
YamlEngine.unmarshal(actual.getParameter(), YamlRootConfiguration.class, true);
+        assertThat(persisted.getDataSources().get("ds_0").get("minPoolSize"), 
is(20));
+        assertThat(((Map<?, ?>) 
persisted.getDataSources().get("ds_0").get("customPoolProps")).get("connectionTimeout"),
 is(30000));
+    }
+    
     @Test
     void assertAppendJdbcQueryPropertiesAfterPersistingParameter() {
         JdbcQueryPropertiesExtension queryPropsExtension = 
mock(JdbcQueryPropertiesExtension.class);
diff --git 
a/kernel/data-pipeline/core/src/test/java/org/apache/shardingsphere/data/pipeline/core/datasource/config/PipelineDataSourceConfigurationFactoryTest.java
 
b/kernel/data-pipeline/core/src/test/java/org/apache/shardingsphere/data/pipeline/core/datasource/config/PipelineDataSourceConfigurationFactoryTest.java
index 0ded7d251c7..e89f4437172 100644
--- 
a/kernel/data-pipeline/core/src/test/java/org/apache/shardingsphere/data/pipeline/core/datasource/config/PipelineDataSourceConfigurationFactoryTest.java
+++ 
b/kernel/data-pipeline/core/src/test/java/org/apache/shardingsphere/data/pipeline/core/datasource/config/PipelineDataSourceConfigurationFactoryTest.java
@@ -36,7 +36,8 @@ class PipelineDataSourceConfigurationFactoryTest {
     
     @Test
     void assertNewInstanceForShardingSpherePipelineDataSourceConfiguration() {
-        
assertThat(PipelineDataSourceConfigurationFactory.newInstance(ShardingSpherePipelineDataSourceConfiguration.TYPE,
 "dataSources:\n" + "  foo_ds:\n" + "    url: jdbc:mock://127.0.0.1/foo_db"),
+        
assertThat(PipelineDataSourceConfigurationFactory.newInstance(ShardingSpherePipelineDataSourceConfiguration.TYPE,
+                "dataSources:\n" + "  foo_ds:\n" + "    url: 
jdbc:mock://127.0.0.1/foo_db\n" + "    dataSourceClassName: 
com.zaxxer.hikari.HikariDataSource"),
                 isA(ShardingSpherePipelineDataSourceConfiguration.class));
     }
     

Reply via email to