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

zhonghongsheng 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 e66222ad6c1 CDC support broadcast table (#28999)
e66222ad6c1 is described below

commit e66222ad6c1ca3b97f3f2adea7db76b1562d0302
Author: Xinze Guo <[email protected]>
AuthorDate: Fri Nov 10 17:23:56 2023 +0800

    CDC support broadcast table (#28999)
---
 kernel/data-pipeline/scenario/cdc/core/pom.xml                     | 5 +++++
 .../shardingsphere/data/pipeline/cdc/util/CDCDataNodeUtils.java    | 7 +++++++
 .../shardingsphere/test/e2e/data/pipeline/cases/cdc/CDCE2EIT.java  | 5 +++++
 3 files changed, 17 insertions(+)

diff --git a/kernel/data-pipeline/scenario/cdc/core/pom.xml 
b/kernel/data-pipeline/scenario/cdc/core/pom.xml
index 0baab795693..57140ae56d2 100644
--- a/kernel/data-pipeline/scenario/cdc/core/pom.xml
+++ b/kernel/data-pipeline/scenario/cdc/core/pom.xml
@@ -37,6 +37,11 @@
             <artifactId>shardingsphere-data-pipeline-cdc-protocol</artifactId>
             <version>${project.version}</version>
         </dependency>
+        <dependency>
+            <groupId>org.apache.shardingsphere</groupId>
+            <artifactId>shardingsphere-broadcast-core</artifactId>
+            <version>${project.version}</version>
+        </dependency>
         
         <dependency>
             <groupId>org.apache.shardingsphere</groupId>
diff --git 
a/kernel/data-pipeline/scenario/cdc/core/src/main/java/org/apache/shardingsphere/data/pipeline/cdc/util/CDCDataNodeUtils.java
 
b/kernel/data-pipeline/scenario/cdc/core/src/main/java/org/apache/shardingsphere/data/pipeline/cdc/util/CDCDataNodeUtils.java
index ebd2fdcb73f..7231d64ecce 100644
--- 
a/kernel/data-pipeline/scenario/cdc/core/src/main/java/org/apache/shardingsphere/data/pipeline/cdc/util/CDCDataNodeUtils.java
+++ 
b/kernel/data-pipeline/scenario/cdc/core/src/main/java/org/apache/shardingsphere/data/pipeline/cdc/util/CDCDataNodeUtils.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.data.pipeline.cdc.util;
 
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.broadcast.rule.BroadcastRule;
 import 
org.apache.shardingsphere.data.pipeline.core.exception.param.PipelineInvalidParameterException;
 import org.apache.shardingsphere.infra.datanode.DataNode;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
@@ -28,6 +29,7 @@ import org.apache.shardingsphere.single.rule.SingleRule;
 
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -51,6 +53,7 @@ public final class CDCDataNodeUtils {
         Optional<ShardingRule> shardingRule = 
database.getRuleMetaData().findSingleRule(ShardingRule.class);
         Optional<SingleRule> singleRule = 
database.getRuleMetaData().findSingleRule(SingleRule.class);
         Map<String, List<DataNode>> result = new HashMap<>();
+        Optional<BroadcastRule> broadcastRule = 
database.getRuleMetaData().findSingleRule(BroadcastRule.class);
         // TODO support virtual data source name
         for (String each : tableNames) {
             if (singleRule.isPresent() && 
singleRule.get().getAllDataNodes().containsKey(each)) {
@@ -62,6 +65,10 @@ public final class CDCDataNodeUtils {
                 result.put(each, tableRule.getActualDataNodes());
                 continue;
             }
+            if (broadcastRule.isPresent() && 
broadcastRule.get().findFirstActualTable(each).isPresent()) {
+                result.put(each, 
Collections.singletonList(broadcastRule.get().getTableDataNodes().get(each).iterator().next()));
+                continue;
+            }
             throw new PipelineInvalidParameterException(String.format("Not 
find actual data nodes of `%s`", each));
         }
         return result;
diff --git 
a/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/data/pipeline/cases/cdc/CDCE2EIT.java
 
b/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/data/pipeline/cases/cdc/CDCE2EIT.java
index 5d0d7dea417..34f49f7ddb5 100644
--- 
a/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/data/pipeline/cases/cdc/CDCE2EIT.java
+++ 
b/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/data/pipeline/cases/cdc/CDCE2EIT.java
@@ -103,6 +103,7 @@ class CDCE2EIT {
                 containerComposer.registerStorageUnit(each);
             }
             createOrderTableRule(containerComposer);
+            createBroadcastRule(containerComposer);
             try (Connection connection = 
containerComposer.getProxyDataSource().getConnection()) {
                 initSchemaAndTable(containerComposer, connection, 3);
             }
@@ -153,6 +154,10 @@ class CDCE2EIT {
         Awaitility.await().atMost(20L, TimeUnit.SECONDS).pollInterval(2L, 
TimeUnit.SECONDS).until(() -> !containerComposer.queryForListWithLog("SHOW 
SHARDING TABLE RULE t_order").isEmpty());
     }
     
+    private void createBroadcastRule(final PipelineContainerComposer 
containerComposer) throws SQLException {
+        containerComposer.proxyExecuteWithLog("CREATE BROADCAST TABLE RULE 
t_address", 2);
+    }
+    
     private void initSchemaAndTable(final PipelineContainerComposer 
containerComposer, final Connection connection, final int sleepSeconds) throws 
SQLException {
         containerComposer.createSchema(connection, sleepSeconds);
         String sql = 
containerComposer.getExtraSQLCommand().getCreateTableOrder(SOURCE_TABLE_NAME);

Reply via email to