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 223b6ceaca4 Refactor PipelineRequiredColumnsExtractor to use rule 
configurations (#39843)
223b6ceaca4 is described below

commit 223b6ceaca428b4b473171b5329f0540b7bc1d7d
Author: Liang Zhang <[email protected]>
AuthorDate: Mon Sep 14 16:40:30 2026 +0800

    Refactor PipelineRequiredColumnsExtractor to use rule configurations 
(#39843)
---
 .../importer/PipelineRequiredColumnsExtractor.java | 10 +--
 .../sharding/PipelineShardingColumnsExtractor.java | 11 ++-
 .../PipelineShardingColumnsExtractorTest.java      | 78 ++++++++++------------
 .../shardingsphere/data/pipeline/cdc/CDCJob.java   |  7 +-
 .../data/pipeline/cdc/CDCJobTest.java              | 24 ++++++-
 .../migration/MigrationJobExecutorCallback.java    |  8 ++-
 .../MigrationJobExecutorCallbackTest.java          | 48 +++++++++++++
 .../pipeline/core/util/PipelineContextUtils.java   |  6 +-
 8 files changed, 126 insertions(+), 66 deletions(-)

diff --git 
a/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/importer/PipelineRequiredColumnsExtractor.java
 
b/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/importer/PipelineRequiredColumnsExtractor.java
index 3a36a04aa35..d04a3866d5f 100644
--- 
a/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/importer/PipelineRequiredColumnsExtractor.java
+++ 
b/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/importer/PipelineRequiredColumnsExtractor.java
@@ -17,10 +17,10 @@
 
 package org.apache.shardingsphere.data.pipeline.core.importer;
 
+import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
 import 
org.apache.shardingsphere.infra.metadata.identifier.ShardingSphereIdentifier;
 import org.apache.shardingsphere.infra.spi.annotation.SingletonSPI;
 import org.apache.shardingsphere.infra.spi.type.ordered.OrderedSPI;
-import 
org.apache.shardingsphere.infra.yaml.config.pojo.rule.YamlRuleConfiguration;
 
 import java.util.Collection;
 import java.util.Map;
@@ -28,17 +28,17 @@ import java.util.Map;
 /**
  * Pipeline required columns extractor.
  * 
- * @param <T> type of YAML rule configuration
+ * @param <T> type of rule configuration
  */
 @SingletonSPI
-public interface PipelineRequiredColumnsExtractor<T extends 
YamlRuleConfiguration> extends OrderedSPI<T> {
+public interface PipelineRequiredColumnsExtractor<T extends RuleConfiguration> 
extends OrderedSPI<T> {
     
     /**
      * Get table and required columns map.
      *
-     * @param yamlRuleConfig YAML rule configuration
+     * @param ruleConfig rule configuration
      * @param logicTableNames logic table names
      * @return table and required columns map
      */
-    Map<ShardingSphereIdentifier, Collection<String>> 
getTableAndRequiredColumnsMap(T yamlRuleConfig, 
Collection<ShardingSphereIdentifier> logicTableNames);
+    Map<ShardingSphereIdentifier, Collection<String>> 
getTableAndRequiredColumnsMap(T ruleConfig, 
Collection<ShardingSphereIdentifier> logicTableNames);
 }
diff --git 
a/kernel/data-pipeline/feature/sharding/src/main/java/org/apache/shardingsphere/data/pipeline/sharding/PipelineShardingColumnsExtractor.java
 
b/kernel/data-pipeline/feature/sharding/src/main/java/org/apache/shardingsphere/data/pipeline/sharding/PipelineShardingColumnsExtractor.java
index f647a08207c..42e847a2774 100644
--- 
a/kernel/data-pipeline/feature/sharding/src/main/java/org/apache/shardingsphere/data/pipeline/sharding/PipelineShardingColumnsExtractor.java
+++ 
b/kernel/data-pipeline/feature/sharding/src/main/java/org/apache/shardingsphere/data/pipeline/sharding/PipelineShardingColumnsExtractor.java
@@ -26,8 +26,6 @@ import 
org.apache.shardingsphere.sharding.api.config.strategy.sharding.ComplexSh
 import 
org.apache.shardingsphere.sharding.api.config.strategy.sharding.ShardingStrategyConfiguration;
 import 
org.apache.shardingsphere.sharding.api.config.strategy.sharding.StandardShardingStrategyConfiguration;
 import org.apache.shardingsphere.sharding.constant.ShardingOrder;
-import 
org.apache.shardingsphere.sharding.yaml.config.YamlShardingRuleConfiguration;
-import 
org.apache.shardingsphere.sharding.yaml.swapper.YamlShardingRuleConfigurationSwapper;
 
 import java.util.Arrays;
 import java.util.Collection;
@@ -40,12 +38,11 @@ import java.util.concurrent.ConcurrentHashMap;
 /**
  * Pipeline sharding columns extractor.
  */
-public final class PipelineShardingColumnsExtractor implements 
PipelineRequiredColumnsExtractor<YamlShardingRuleConfiguration> {
+public final class PipelineShardingColumnsExtractor implements 
PipelineRequiredColumnsExtractor<ShardingRuleConfiguration> {
     
     @Override
-    public Map<ShardingSphereIdentifier, Collection<String>> 
getTableAndRequiredColumnsMap(final YamlShardingRuleConfiguration 
yamlRuleConfig,
+    public Map<ShardingSphereIdentifier, Collection<String>> 
getTableAndRequiredColumnsMap(final ShardingRuleConfiguration ruleConfig,
                                                                                
            final Collection<ShardingSphereIdentifier> logicTableNames) {
-        ShardingRuleConfiguration ruleConfig = new 
YamlShardingRuleConfigurationSwapper().swapToObject(yamlRuleConfig);
         Set<String> defaultDatabaseShardingColumns = 
extractShardingColumns(ruleConfig.getDefaultDatabaseShardingStrategy());
         Set<String> defaultTableShardingColumns = 
extractShardingColumns(ruleConfig.getDefaultTableShardingStrategy());
         // TODO check is it need to be ConcurrentHashMap?
@@ -85,7 +82,7 @@ public final class PipelineShardingColumnsExtractor 
implements PipelineRequiredC
     }
     
     @Override
-    public Class<YamlShardingRuleConfiguration> getTypeClass() {
-        return YamlShardingRuleConfiguration.class;
+    public Class<ShardingRuleConfiguration> getTypeClass() {
+        return ShardingRuleConfiguration.class;
     }
 }
diff --git 
a/kernel/data-pipeline/feature/sharding/src/test/java/org/apache/shardingsphere/data/pipeline/sharding/PipelineShardingColumnsExtractorTest.java
 
b/kernel/data-pipeline/feature/sharding/src/test/java/org/apache/shardingsphere/data/pipeline/sharding/PipelineShardingColumnsExtractorTest.java
index d54f95e150e..79a7ad64665 100644
--- 
a/kernel/data-pipeline/feature/sharding/src/test/java/org/apache/shardingsphere/data/pipeline/sharding/PipelineShardingColumnsExtractorTest.java
+++ 
b/kernel/data-pipeline/feature/sharding/src/test/java/org/apache/shardingsphere/data/pipeline/sharding/PipelineShardingColumnsExtractorTest.java
@@ -20,12 +20,11 @@ package org.apache.shardingsphere.data.pipeline.sharding;
 import 
org.apache.shardingsphere.data.pipeline.core.importer.PipelineRequiredColumnsExtractor;
 import 
org.apache.shardingsphere.infra.metadata.identifier.ShardingSphereIdentifier;
 import org.apache.shardingsphere.infra.spi.type.ordered.OrderedSPILoader;
-import 
org.apache.shardingsphere.sharding.yaml.config.YamlShardingRuleConfiguration;
-import 
org.apache.shardingsphere.sharding.yaml.config.rule.YamlShardingAutoTableRuleConfiguration;
-import 
org.apache.shardingsphere.sharding.yaml.config.rule.YamlTableRuleConfiguration;
-import 
org.apache.shardingsphere.sharding.yaml.config.strategy.sharding.YamlComplexShardingStrategyConfiguration;
-import 
org.apache.shardingsphere.sharding.yaml.config.strategy.sharding.YamlShardingStrategyConfiguration;
-import 
org.apache.shardingsphere.sharding.yaml.config.strategy.sharding.YamlStandardShardingStrategyConfiguration;
+import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
+import 
org.apache.shardingsphere.sharding.api.config.rule.ShardingAutoTableRuleConfiguration;
+import 
org.apache.shardingsphere.sharding.api.config.rule.ShardingTableRuleConfiguration;
+import 
org.apache.shardingsphere.sharding.api.config.strategy.sharding.ComplexShardingStrategyConfiguration;
+import 
org.apache.shardingsphere.sharding.api.config.strategy.sharding.StandardShardingStrategyConfiguration;
 import org.junit.jupiter.api.Test;
 
 import java.util.Arrays;
@@ -36,66 +35,59 @@ import java.util.Map;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.Matchers.containsInAnyOrder;
 import static org.hamcrest.Matchers.is;
+import static org.hamcrest.Matchers.isA;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
 class PipelineShardingColumnsExtractorTest {
     
     @SuppressWarnings("unchecked")
-    private final 
PipelineRequiredColumnsExtractor<YamlShardingRuleConfiguration> extractor = 
OrderedSPILoader.getServicesByClass(
-            PipelineRequiredColumnsExtractor.class, 
Collections.singleton(YamlShardingRuleConfiguration.class)).get(YamlShardingRuleConfiguration.class);
+    private final PipelineRequiredColumnsExtractor<ShardingRuleConfiguration> 
extractor = OrderedSPILoader.getServicesByClass(
+            PipelineRequiredColumnsExtractor.class, 
Collections.singleton(ShardingRuleConfiguration.class)).get(ShardingRuleConfiguration.class);
+    
+    @Test
+    void assertOrderedSPILoader() {
+        assertThat(extractor, isA(PipelineShardingColumnsExtractor.class));
+    }
     
     @Test
     void assertGetTableAndRequiredColumnsMap() {
-        YamlShardingRuleConfiguration yamlConfig = new 
YamlShardingRuleConfiguration();
-        
yamlConfig.setDefaultDatabaseStrategy(createYAMLStandardStrategyConfiguration("default_db_col"));
-        
yamlConfig.setDefaultTableStrategy(createYAMLStandardStrategyConfiguration("default_tbl_col"));
-        yamlConfig.getTables().put("t_explicit", 
getYamlExplicitTableRuleConfiguration());
-        yamlConfig.getTables().put("t_default", 
getYamlTableRuleConfiguration("t_default"));
-        yamlConfig.getTables().put("t_ignored", 
getYamlTableRuleConfiguration("t_ignored"));
-        yamlConfig.getAutoTables().put("t_auto", 
getYamlShardingAutoTableRuleConfiguration("t_auto"));
-        yamlConfig.getAutoTables().put("t_ignored_auto", 
getYamlShardingAutoTableRuleConfiguration("t_ignored_auto"));
+        ShardingRuleConfiguration ruleConfig = new ShardingRuleConfiguration();
+        
ruleConfig.setDefaultDatabaseShardingStrategy(createStandardShardingStrategyConfiguration("default_db_col"));
+        
ruleConfig.setDefaultTableShardingStrategy(createStandardShardingStrategyConfiguration("default_tbl_col"));
+        ruleConfig.getTables().add(getExplicitTableRuleConfiguration());
+        ruleConfig.getTables().add(getTableRuleConfiguration("t_default"));
+        ruleConfig.getTables().add(getTableRuleConfiguration("t_ignored"));
+        
ruleConfig.getAutoTables().add(getShardingAutoTableRuleConfiguration("t_auto"));
+        
ruleConfig.getAutoTables().add(getShardingAutoTableRuleConfiguration("t_ignored_auto"));
         Collection<ShardingSphereIdentifier> logicTables = Arrays.asList(
-                new ShardingSphereIdentifier("t_explicit"), new 
ShardingSphereIdentifier("t_default"), new ShardingSphereIdentifier("t_auto"));
-        Map<ShardingSphereIdentifier, Collection<String>> actual = 
extractor.getTableAndRequiredColumnsMap(yamlConfig, logicTables);
+                new ShardingSphereIdentifier("T_EXPLICIT"), new 
ShardingSphereIdentifier("t_default"), new ShardingSphereIdentifier("t_auto"));
+        Map<ShardingSphereIdentifier, Collection<String>> actual = 
extractor.getTableAndRequiredColumnsMap(ruleConfig, logicTables);
         assertThat(actual.size(), is(3));
         assertThat(actual.get(new ShardingSphereIdentifier("t_explicit")), 
containsInAnyOrder("user_id", "order_id", "item_id"));
         assertThat(actual.get(new ShardingSphereIdentifier("t_default")), 
containsInAnyOrder("default_db_col", "default_tbl_col"));
         assertTrue(actual.get(new 
ShardingSphereIdentifier("t_auto")).isEmpty());
     }
     
-    private YamlTableRuleConfiguration getYamlExplicitTableRuleConfiguration() 
{
-        YamlTableRuleConfiguration result = new YamlTableRuleConfiguration();
-        result.setLogicTable("t_explicit");
-        
result.setDatabaseStrategy(createYAMLComplexStrategyConfiguration("user_id,order_id"));
-        
result.setTableStrategy(createYAMLComplexStrategyConfiguration("item_id"));
+    private ShardingTableRuleConfiguration getExplicitTableRuleConfiguration() 
{
+        ShardingTableRuleConfiguration result = new 
ShardingTableRuleConfiguration("t_explicit", "ds_0.t_explicit");
+        
result.setDatabaseShardingStrategy(createComplexShardingStrategyConfiguration("user_id,order_id"));
+        
result.setTableShardingStrategy(createComplexShardingStrategyConfiguration("item_id"));
         return result;
     }
     
-    private YamlTableRuleConfiguration getYamlTableRuleConfiguration(final 
String tableName) {
-        YamlTableRuleConfiguration result = new YamlTableRuleConfiguration();
-        result.setLogicTable(tableName);
-        return result;
+    private ShardingTableRuleConfiguration getTableRuleConfiguration(final 
String tableName) {
+        return new ShardingTableRuleConfiguration(tableName, "ds_0." + 
tableName);
     }
     
-    private YamlShardingAutoTableRuleConfiguration 
getYamlShardingAutoTableRuleConfiguration(final String tableName) {
-        YamlShardingAutoTableRuleConfiguration result = new 
YamlShardingAutoTableRuleConfiguration();
-        result.setLogicTable(tableName);
-        return result;
+    private ShardingAutoTableRuleConfiguration 
getShardingAutoTableRuleConfiguration(final String tableName) {
+        return new ShardingAutoTableRuleConfiguration(tableName, "ds_0");
     }
     
-    private YamlShardingStrategyConfiguration 
createYAMLStandardStrategyConfiguration(final String column) {
-        YamlShardingStrategyConfiguration result = new 
YamlShardingStrategyConfiguration();
-        YamlStandardShardingStrategyConfiguration standard = new 
YamlStandardShardingStrategyConfiguration();
-        standard.setShardingColumn(column);
-        result.setStandard(standard);
-        return result;
+    private StandardShardingStrategyConfiguration 
createStandardShardingStrategyConfiguration(final String column) {
+        return new StandardShardingStrategyConfiguration(column, 
"foo_algorithm");
     }
     
-    private YamlShardingStrategyConfiguration 
createYAMLComplexStrategyConfiguration(final String columns) {
-        YamlShardingStrategyConfiguration result = new 
YamlShardingStrategyConfiguration();
-        YamlComplexShardingStrategyConfiguration complex = new 
YamlComplexShardingStrategyConfiguration();
-        complex.setShardingColumns(columns);
-        result.setComplex(complex);
-        return result;
+    private ComplexShardingStrategyConfiguration 
createComplexShardingStrategyConfiguration(final String columns) {
+        return new ComplexShardingStrategyConfiguration(columns, 
"foo_algorithm");
     }
 }
diff --git 
a/kernel/data-pipeline/scenario/cdc/core/src/main/java/org/apache/shardingsphere/data/pipeline/cdc/CDCJob.java
 
b/kernel/data-pipeline/scenario/cdc/core/src/main/java/org/apache/shardingsphere/data/pipeline/cdc/CDCJob.java
index d5624f749b8..d7a54de4d30 100644
--- 
a/kernel/data-pipeline/scenario/cdc/core/src/main/java/org/apache/shardingsphere/data/pipeline/cdc/CDCJob.java
+++ 
b/kernel/data-pipeline/scenario/cdc/core/src/main/java/org/apache/shardingsphere/data/pipeline/cdc/CDCJob.java
@@ -64,10 +64,11 @@ import 
org.apache.shardingsphere.data.pipeline.core.ratelimit.JobRateLimitAlgori
 import 
org.apache.shardingsphere.data.pipeline.core.registrycenter.repository.PipelineGovernanceFacade;
 import org.apache.shardingsphere.data.pipeline.core.task.PipelineTask;
 import org.apache.shardingsphere.elasticjob.api.ShardingContext;
+import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
 import 
org.apache.shardingsphere.infra.metadata.identifier.ShardingSphereIdentifier;
 import org.apache.shardingsphere.infra.spi.type.ordered.OrderedSPILoader;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
-import 
org.apache.shardingsphere.infra.yaml.config.pojo.rule.YamlRuleConfiguration;
+import 
org.apache.shardingsphere.infra.yaml.config.swapper.rule.YamlRuleConfigurationSwapperEngine;
 
 import java.util.Collection;
 import java.util.HashMap;
@@ -163,9 +164,9 @@ public final class CDCJob implements PipelineJob {
     @SuppressWarnings({"rawtypes", "unchecked"})
     private Map<ShardingSphereIdentifier, Collection<String>> 
getTableAndRequiredColumnsMap(final CDCJobConfiguration jobConfig) {
         Map<ShardingSphereIdentifier, Collection<String>> result = new 
HashMap<>();
-        Collection<YamlRuleConfiguration> yamlRuleConfigs = 
jobConfig.getDataSourceConfig().getRootConfig().getRules();
+        Collection<RuleConfiguration> ruleConfigs = new 
YamlRuleConfigurationSwapperEngine().swapToRuleConfigurations(jobConfig.getDataSourceConfig().getRootConfig().getRules());
         Collection<ShardingSphereIdentifier> targetTableNames = 
jobConfig.getSchemaTableNames().stream().map(ShardingSphereIdentifier::new).collect(Collectors.toSet());
-        for (Entry<YamlRuleConfiguration, PipelineRequiredColumnsExtractor> 
entry : OrderedSPILoader.getServices(PipelineRequiredColumnsExtractor.class, 
yamlRuleConfigs).entrySet()) {
+        for (Entry<RuleConfiguration, PipelineRequiredColumnsExtractor> entry 
: OrderedSPILoader.getServices(PipelineRequiredColumnsExtractor.class, 
ruleConfigs).entrySet()) {
             
result.putAll(entry.getValue().getTableAndRequiredColumnsMap(entry.getKey(), 
targetTableNames));
         }
         return result;
diff --git 
a/kernel/data-pipeline/scenario/cdc/core/src/test/java/org/apache/shardingsphere/data/pipeline/cdc/CDCJobTest.java
 
b/kernel/data-pipeline/scenario/cdc/core/src/test/java/org/apache/shardingsphere/data/pipeline/cdc/CDCJobTest.java
index eac44d4a422..a2f161eae5b 100644
--- 
a/kernel/data-pipeline/scenario/cdc/core/src/test/java/org/apache/shardingsphere/data/pipeline/cdc/CDCJobTest.java
+++ 
b/kernel/data-pipeline/scenario/cdc/core/src/test/java/org/apache/shardingsphere/data/pipeline/cdc/CDCJobTest.java
@@ -60,6 +60,7 @@ import 
org.apache.shardingsphere.data.pipeline.core.util.PipelineDistributedBarr
 import org.apache.shardingsphere.elasticjob.api.ShardingContext;
 import org.apache.shardingsphere.elasticjob.infra.spi.ElasticJobServiceLoader;
 import 
org.apache.shardingsphere.infra.algorithm.core.config.AlgorithmConfiguration;
+import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
 import org.apache.shardingsphere.infra.datanode.DataNode;
 import org.apache.shardingsphere.infra.instance.metadata.InstanceType;
 import 
org.apache.shardingsphere.infra.metadata.identifier.ShardingSphereIdentifier;
@@ -67,6 +68,7 @@ import 
org.apache.shardingsphere.infra.spi.type.ordered.OrderedSPILoader;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 import org.apache.shardingsphere.infra.yaml.config.pojo.YamlRootConfiguration;
 import 
org.apache.shardingsphere.infra.yaml.config.pojo.rule.YamlRuleConfiguration;
+import 
org.apache.shardingsphere.infra.yaml.config.swapper.rule.YamlRuleConfigurationSwapperEngine;
 import 
org.apache.shardingsphere.test.infra.framework.extension.mock.AutoMockExtension;
 import 
org.apache.shardingsphere.test.infra.framework.extension.mock.StaticMockSettings;
 import org.junit.jupiter.api.Test;
@@ -87,6 +89,7 @@ import java.util.concurrent.atomic.AtomicReference;
 
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.Matchers.is;
+import static org.hamcrest.Matchers.sameInstance;
 import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
 import static org.junit.jupiter.api.Assertions.assertThrows;
 import static org.mockito.ArgumentMatchers.any;
@@ -195,14 +198,28 @@ class CDCJobTest {
         
when(PipelineAPIFactory.getPipelineGovernanceFacade(CONTEXT_KEY)).thenReturn(mock(PipelineGovernanceFacade.class,
 RETURNS_DEEP_STUBS));
         
when(PipelineDistributedBarrier.getInstance(CONTEXT_KEY)).thenReturn(mock(PipelineDistributedBarrier.class));
         when(PipelineDataSourceConfigurationFactory.newInstance(anyString(), 
anyString())).thenReturn(mock(PipelineDataSourceConfiguration.class));
-        YamlRuleConfiguration ruleConfig = mock(YamlRuleConfiguration.class);
+        YamlRuleConfiguration yamlRuleConfig = 
mock(YamlRuleConfiguration.class);
+        Collection<YamlRuleConfiguration> yamlRuleConfigs = 
Collections.singleton(yamlRuleConfig);
+        
jobConfig.getDataSourceConfig().getRootConfig().setRules(yamlRuleConfigs);
+        RuleConfiguration ruleConfig = mock(RuleConfiguration.class);
+        Collection<RuleConfiguration> ruleConfigs = 
Collections.singleton(ruleConfig);
         PipelineRequiredColumnsExtractor extractor = 
mock(PipelineRequiredColumnsExtractor.class);
         Map<ShardingSphereIdentifier, Collection<String>> requiredColumns = 
Collections.singletonMap(new ShardingSphereIdentifier("logic_tbl"), 
Collections.singleton("id"));
         when(extractor.getTableAndRequiredColumnsMap(eq(ruleConfig), 
anyCollection())).thenReturn(requiredColumns);
-        
when(OrderedSPILoader.getServices(eq(PipelineRequiredColumnsExtractor.class), 
anyCollection())).thenReturn(Collections.singletonMap(ruleConfig, extractor));
+        AtomicReference<Collection<RuleConfiguration>> capturedRuleConfigs = 
new AtomicReference<>();
+        
when(OrderedSPILoader.getServices(eq(PipelineRequiredColumnsExtractor.class), 
anyCollection())).thenAnswer(invocation -> {
+            capturedRuleConfigs.set(invocation.getArgument(1));
+            return Collections.singletonMap(ruleConfig, extractor);
+        });
+        AtomicReference<Collection<YamlRuleConfiguration>> 
capturedYamlRuleConfigs = new AtomicReference<>();
         AtomicReference<CDCJobItemContext> capturedContext = new 
AtomicReference<>();
         try (
                 MockedStatic<TypedSPILoader> typedSPILoader = 
mockStatic(TypedSPILoader.class);
+                MockedConstruction<YamlRuleConfigurationSwapperEngine> 
ignoredRuleConfigSwapper = mockConstruction(
+                        YamlRuleConfigurationSwapperEngine.class, (mock, 
context) -> 
when(mock.swapToRuleConfigurations(anyCollection())).thenAnswer(invocation -> {
+                            
capturedYamlRuleConfigs.set(invocation.getArgument(0));
+                            return ruleConfigs;
+                        }));
                 MockedConstruction<PipelineProcessConfigurationPersistService> 
ignoredProcess = mockPersistService(processConfig);
                 MockedConstruction<CDCJobPreparer> ignoredPreparer = 
mockConstruction(CDCJobPreparer.class, (mock, context) -> doAnswer(invocation 
-> {
                     CDCJobItemContext jobItemContext = 
((Collection<CDCJobItemContext>) invocation.getArgument(0)).iterator().next();
@@ -222,6 +239,9 @@ class CDCJobTest {
             new CDCJob(mock(PipelineSink.class)).execute(shardingContext);
         }
         assertThat(capturedContext.get().getStatus(), 
is(JobStatus.EXECUTE_INCREMENTAL_TASK));
+        assertThat(capturedYamlRuleConfigs.get(), 
sameInstance(yamlRuleConfigs));
+        assertThat(capturedRuleConfigs.get(), sameInstance(ruleConfigs));
+        
assertThat(capturedContext.get().getTaskConfig().getImporterConfig().getShardingColumns("logic_tbl"),
 is(Collections.singleton("id")));
     }
     
     @SuppressWarnings("unchecked")
diff --git 
a/kernel/data-pipeline/scenario/migration/core/src/main/java/org/apache/shardingsphere/data/pipeline/scenario/migration/MigrationJobExecutorCallback.java
 
b/kernel/data-pipeline/scenario/migration/core/src/main/java/org/apache/shardingsphere/data/pipeline/scenario/migration/MigrationJobExecutorCallback.java
index 35c4d125ec9..15723ed22ff 100644
--- 
a/kernel/data-pipeline/scenario/migration/core/src/main/java/org/apache/shardingsphere/data/pipeline/scenario/migration/MigrationJobExecutorCallback.java
+++ 
b/kernel/data-pipeline/scenario/migration/core/src/main/java/org/apache/shardingsphere/data/pipeline/scenario/migration/MigrationJobExecutorCallback.java
@@ -47,13 +47,14 @@ import 
org.apache.shardingsphere.database.connector.core.metadata.identifier.Ide
 import 
org.apache.shardingsphere.database.connector.core.metadata.identifier.IdentifierNormalizeEngine;
 import 
org.apache.shardingsphere.database.connector.core.metadata.identifier.IdentifierScope;
 import 
org.apache.shardingsphere.database.connector.core.type.DatabaseTypeRegistry;
+import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
 import org.apache.shardingsphere.infra.datanode.DataNode;
 import 
org.apache.shardingsphere.infra.datasource.pool.props.domain.DataSourcePoolProperties;
 import 
org.apache.shardingsphere.infra.metadata.database.resource.unit.StorageUnit;
 import org.apache.shardingsphere.infra.metadata.database.schema.QualifiedTable;
 import 
org.apache.shardingsphere.infra.metadata.identifier.ShardingSphereIdentifier;
 import org.apache.shardingsphere.infra.spi.type.ordered.OrderedSPILoader;
-import 
org.apache.shardingsphere.infra.yaml.config.pojo.rule.YamlRuleConfiguration;
+import 
org.apache.shardingsphere.infra.yaml.config.swapper.rule.YamlRuleConfigurationSwapperEngine;
 
 import java.sql.SQLException;
 import java.util.Collection;
@@ -127,9 +128,10 @@ public final class MigrationJobExecutorCallback implements 
DistributedPipelineJo
     @SuppressWarnings({"rawtypes", "unchecked"})
     private Map<ShardingSphereIdentifier, Collection<String>> 
getTableAndRequiredColumnsMap(final MigrationJobConfiguration jobConfig) {
         Map<ShardingSphereIdentifier, Collection<String>> result = new 
HashMap<>();
-        Collection<YamlRuleConfiguration> yamlRuleConfigs = 
((ShardingSpherePipelineDataSourceConfiguration) 
jobConfig.getTarget()).getRootConfig().getRules();
+        Collection<RuleConfiguration> ruleConfigs = new 
YamlRuleConfigurationSwapperEngine().swapToRuleConfigurations(
+                ((ShardingSpherePipelineDataSourceConfiguration) 
jobConfig.getTarget()).getRootConfig().getRules());
         Collection<ShardingSphereIdentifier> targetTableNames = 
jobConfig.getTargetTableNames().stream().map(ShardingSphereIdentifier::new).collect(Collectors.toSet());
-        for (Entry<YamlRuleConfiguration, PipelineRequiredColumnsExtractor> 
entry : OrderedSPILoader.getServices(PipelineRequiredColumnsExtractor.class, 
yamlRuleConfigs).entrySet()) {
+        for (Entry<RuleConfiguration, PipelineRequiredColumnsExtractor> entry 
: OrderedSPILoader.getServices(PipelineRequiredColumnsExtractor.class, 
ruleConfigs).entrySet()) {
             
result.putAll(entry.getValue().getTableAndRequiredColumnsMap(entry.getKey(), 
targetTableNames));
         }
         return result;
diff --git 
a/kernel/data-pipeline/scenario/migration/core/src/test/java/org/apache/shardingsphere/data/pipeline/scenario/migration/MigrationJobExecutorCallbackTest.java
 
b/kernel/data-pipeline/scenario/migration/core/src/test/java/org/apache/shardingsphere/data/pipeline/scenario/migration/MigrationJobExecutorCallbackTest.java
index beeadf15773..bd0ec4a0cf7 100644
--- 
a/kernel/data-pipeline/scenario/migration/core/src/test/java/org/apache/shardingsphere/data/pipeline/scenario/migration/MigrationJobExecutorCallbackTest.java
+++ 
b/kernel/data-pipeline/scenario/migration/core/src/test/java/org/apache/shardingsphere/data/pipeline/scenario/migration/MigrationJobExecutorCallbackTest.java
@@ -28,6 +28,7 @@ import 
org.apache.shardingsphere.data.pipeline.core.datanode.JobDataNodeLine;
 import 
org.apache.shardingsphere.data.pipeline.core.datasource.PipelineDataSource;
 import 
org.apache.shardingsphere.data.pipeline.core.datasource.PipelineDataSourceManager;
 import 
org.apache.shardingsphere.data.pipeline.core.importer.ImporterConfiguration;
+import 
org.apache.shardingsphere.data.pipeline.core.importer.PipelineRequiredColumnsExtractor;
 import org.apache.shardingsphere.data.pipeline.core.job.api.PipelineAPIFactory;
 import org.apache.shardingsphere.data.pipeline.core.job.id.PipelineJobIdUtils;
 import 
org.apache.shardingsphere.data.pipeline.core.job.progress.config.PipelineProcessConfiguration;
@@ -44,13 +45,18 @@ import 
org.apache.shardingsphere.database.connector.core.metadata.identifier.Ide
 import org.apache.shardingsphere.database.connector.core.type.DatabaseType;
 import 
org.apache.shardingsphere.database.connector.core.type.DatabaseTypeFactory;
 import 
org.apache.shardingsphere.database.connector.core.type.DatabaseTypeRegistry;
+import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
 import org.apache.shardingsphere.infra.datanode.DataNode;
 import 
org.apache.shardingsphere.infra.datasource.pool.props.domain.DataSourcePoolProperties;
 import org.apache.shardingsphere.infra.instance.metadata.InstanceType;
 import 
org.apache.shardingsphere.infra.metadata.database.resource.unit.StorageUnit;
 import org.apache.shardingsphere.infra.metadata.database.schema.QualifiedTable;
+import 
org.apache.shardingsphere.infra.metadata.identifier.ShardingSphereIdentifier;
+import org.apache.shardingsphere.infra.spi.type.ordered.OrderedSPILoader;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 import org.apache.shardingsphere.infra.yaml.config.pojo.YamlRootConfiguration;
+import 
org.apache.shardingsphere.infra.yaml.config.pojo.rule.YamlRuleConfiguration;
+import 
org.apache.shardingsphere.infra.yaml.config.swapper.rule.YamlRuleConfigurationSwapperEngine;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.junit.jupiter.api.Test;
 import org.mockito.MockedConstruction;
@@ -60,10 +66,13 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.LinkedHashMap;
 import java.util.Map;
+import java.util.concurrent.atomic.AtomicReference;
 
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.Matchers.is;
+import static org.hamcrest.Matchers.sameInstance;
 import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyCollection;
 import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.ArgumentMatchers.isNull;
@@ -111,6 +120,45 @@ class MigrationJobExecutorCallbackTest {
         }
     }
     
+    @SuppressWarnings({"rawtypes", "unchecked"})
+    @Test
+    void assertBuildJobItemContextWithConvertedRuleConfigurations() {
+        YamlRuleConfiguration yamlRuleConfig = 
mock(YamlRuleConfiguration.class);
+        Collection<YamlRuleConfiguration> yamlRuleConfigs = 
Collections.singleton(yamlRuleConfig);
+        RuleConfiguration ruleConfig = mock(RuleConfiguration.class);
+        Collection<RuleConfiguration> ruleConfigs = 
Collections.singleton(ruleConfig);
+        PipelineRequiredColumnsExtractor extractor = 
mock(PipelineRequiredColumnsExtractor.class);
+        Map<ShardingSphereIdentifier, Collection<String>> requiredColumns = 
Collections.singletonMap(new ShardingSphereIdentifier("t_order"), 
Collections.singleton("id"));
+        when(extractor.getTableAndRequiredColumnsMap(eq(ruleConfig), 
anyCollection())).thenReturn(requiredColumns);
+        AtomicReference<Collection<YamlRuleConfiguration>> 
capturedYamlRuleConfigs = new AtomicReference<>();
+        AtomicReference<Collection<RuleConfiguration>> capturedRuleConfigs = 
new AtomicReference<>();
+        try (
+                MockedConstruction<YamlRuleConfigurationSwapperEngine> 
ignoredRuleConfigSwapper = mockConstruction(
+                        YamlRuleConfigurationSwapperEngine.class, (mock, 
context) -> 
when(mock.swapToRuleConfigurations(anyCollection())).thenAnswer(invocation -> {
+                            
capturedYamlRuleConfigs.set(invocation.getArgument(0));
+                            return ruleConfigs;
+                        }));
+                MockedStatic<OrderedSPILoader> orderedSPILoader = 
mockStatic(OrderedSPILoader.class);
+                MockedStatic<DatabaseTypeFactory> databaseTypeFactory = 
mockStatic(DatabaseTypeFactory.class);
+                MockedStatic<PipelineAPIFactory> pipelineAPIFactory = 
mockStatic(PipelineAPIFactory.class);
+                MockedStatic<PipelineContextManager> pipelineContextManager = 
mockStatic(PipelineContextManager.class)) {
+            orderedSPILoader.when(() -> 
OrderedSPILoader.getServices(eq(PipelineRequiredColumnsExtractor.class), 
anyCollection())).thenAnswer(invocation -> {
+                capturedRuleConfigs.set(invocation.getArgument(1));
+                return Collections.singletonMap(ruleConfig, extractor);
+            });
+            mockDatabaseTypeFactory(databaseTypeFactory);
+            MigrationJobConfiguration jobConfig = createJobConfiguration();
+            ((ShardingSpherePipelineDataSourceConfiguration) 
jobConfig.getTarget()).getRootConfig().setRules(yamlRuleConfigs);
+            mockGovernanceFacade(pipelineAPIFactory, 
createSourceDataSourceYaml(10, 20));
+            mockProxyContext(pipelineContextManager);
+            MigrationJobItemContext actual = new 
MigrationJobExecutorCallback().buildJobItemContext(
+                    jobConfig, 0, null, mockProcessContext(), 
mock(PipelineDataSourceManager.class));
+            assertThat(capturedYamlRuleConfigs.get(), 
sameInstance(yamlRuleConfigs));
+            assertThat(capturedRuleConfigs.get(), sameInstance(ruleConfigs));
+            
assertThat(actual.getTaskConfig().getImporterConfig().getShardingColumns("t_order"),
 is(Collections.singleton("id")));
+        }
+    }
+    
     @Test
     void assertBuildJobItemContextWithoutMigrationSourceStorageUnit() {
         try (
diff --git 
a/test/it/pipeline/src/test/java/org/apache/shardingsphere/test/it/data/pipeline/core/util/PipelineContextUtils.java
 
b/test/it/pipeline/src/test/java/org/apache/shardingsphere/test/it/data/pipeline/core/util/PipelineContextUtils.java
index d61c0d122aa..19eb0dfc313 100644
--- 
a/test/it/pipeline/src/test/java/org/apache/shardingsphere/test/it/data/pipeline/core/util/PipelineContextUtils.java
+++ 
b/test/it/pipeline/src/test/java/org/apache/shardingsphere/test/it/data/pipeline/core/util/PipelineContextUtils.java
@@ -60,7 +60,6 @@ import 
org.apache.shardingsphere.infra.spi.type.ordered.OrderedSPILoader;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 import org.apache.shardingsphere.infra.util.file.SystemResourceFileUtils;
 import org.apache.shardingsphere.infra.yaml.config.pojo.YamlRootConfiguration;
-import 
org.apache.shardingsphere.infra.yaml.config.pojo.rule.YamlRuleConfiguration;
 import 
org.apache.shardingsphere.infra.yaml.config.swapper.mode.YamlModeConfigurationSwapper;
 import 
org.apache.shardingsphere.infra.yaml.config.swapper.resource.YamlDataSourceConfigurationSwapper;
 import 
org.apache.shardingsphere.infra.yaml.config.swapper.rule.YamlRuleConfigurationSwapperEngine;
@@ -221,9 +220,10 @@ public final class PipelineContextUtils {
     @SuppressWarnings({"rawtypes", "unchecked"})
     private static Map<ShardingSphereIdentifier, Collection<String>> 
getTableAndRequiredColumnsMap(final MigrationJobConfiguration jobConfig) {
         Map<ShardingSphereIdentifier, Collection<String>> result = new 
HashMap<>();
-        Collection<YamlRuleConfiguration> yamlRuleConfigs = 
((ShardingSpherePipelineDataSourceConfiguration) 
jobConfig.getTarget()).getRootConfig().getRules();
+        Collection<RuleConfiguration> ruleConfigs = new 
YamlRuleConfigurationSwapperEngine().swapToRuleConfigurations(
+                ((ShardingSpherePipelineDataSourceConfiguration) 
jobConfig.getTarget()).getRootConfig().getRules());
         Set<ShardingSphereIdentifier> targetTableNames = 
jobConfig.getTargetTableNames().stream().map(ShardingSphereIdentifier::new).collect(Collectors.toSet());
-        for (Entry<YamlRuleConfiguration, PipelineRequiredColumnsExtractor> 
entry : OrderedSPILoader.getServices(PipelineRequiredColumnsExtractor.class, 
yamlRuleConfigs).entrySet()) {
+        for (Entry<RuleConfiguration, PipelineRequiredColumnsExtractor> entry 
: OrderedSPILoader.getServices(PipelineRequiredColumnsExtractor.class, 
ruleConfigs).entrySet()) {
             
result.putAll(entry.getValue().getTableAndRequiredColumnsMap(entry.getKey(), 
targetTableNames));
         }
         return result;

Reply via email to