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

lzljs3620320 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/paimon.git


The following commit(s) were added to refs/heads/master by this push:
     new a0727bd4e [cdc] Add flink execution mode check for cdc table sync 
action. (#4378)
a0727bd4e is described below

commit a0727bd4e213b525449bda32809dfb032f283af3
Author: HunterXHunter <[email protected]>
AuthorDate: Tue Oct 29 12:38:51 2024 +0800

    [cdc] Add flink execution mode check for cdc table sync action. (#4378)
---
 .../action/cdc/SynchronizationActionBase.java      | 10 +++++++
 .../action/cdc/mysql/MySqlSyncDatabaseAction.java  |  1 +
 .../action/cdc/mysql/MySqlSyncTableAction.java     |  1 +
 .../flink/action/cdc/CdcActionITCaseBase.java      | 10 +++++++
 .../cdc/mysql/MySqlSyncTableActionITCase.java      | 35 ++++++++++++++++++++++
 .../src/test/resources/mysql/sync_table_setup.sql  | 11 +++++++
 6 files changed, 68 insertions(+)

diff --git 
a/paimon-flink/paimon-flink-cdc/src/main/java/org/apache/paimon/flink/action/cdc/SynchronizationActionBase.java
 
b/paimon-flink/paimon-flink-cdc/src/main/java/org/apache/paimon/flink/action/cdc/SynchronizationActionBase.java
index 2b9b08917..f10339638 100644
--- 
a/paimon-flink/paimon-flink-cdc/src/main/java/org/apache/paimon/flink/action/cdc/SynchronizationActionBase.java
+++ 
b/paimon-flink/paimon-flink-cdc/src/main/java/org/apache/paimon/flink/action/cdc/SynchronizationActionBase.java
@@ -32,10 +32,12 @@ import org.apache.paimon.options.Options;
 import org.apache.paimon.schema.SchemaChange;
 import org.apache.paimon.table.FileStoreTable;
 
+import org.apache.flink.api.common.RuntimeExecutionMode;
 import org.apache.flink.api.common.eventtime.WatermarkStrategy;
 import org.apache.flink.api.common.functions.FlatMapFunction;
 import org.apache.flink.api.connector.source.Source;
 import org.apache.flink.configuration.Configuration;
+import org.apache.flink.configuration.ExecutionOptions;
 import org.apache.flink.streaming.api.datastream.DataStream;
 import org.apache.flink.streaming.api.datastream.DataStreamSource;
 import org.apache.flink.streaming.api.functions.source.SourceFunction;
@@ -53,6 +55,7 @@ import static 
org.apache.paimon.flink.FlinkConnectorOptions.SCAN_WATERMARK_ALIGN
 import static 
org.apache.paimon.flink.FlinkConnectorOptions.SCAN_WATERMARK_ALIGNMENT_MAX_DRIFT;
 import static 
org.apache.paimon.flink.FlinkConnectorOptions.SCAN_WATERMARK_ALIGNMENT_UPDATE_INTERVAL;
 import static 
org.apache.paimon.flink.FlinkConnectorOptions.SCAN_WATERMARK_IDLE_TIMEOUT;
+import static org.apache.paimon.utils.Preconditions.checkArgument;
 
 /** Base {@link Action} for table/database synchronizing job. */
 public abstract class SynchronizationActionBase extends ActionBase {
@@ -137,6 +140,13 @@ public abstract class SynchronizationActionBase extends 
ActionBase {
                 "Unsupported timestamp extractor for current cdc source.");
     }
 
+    protected void validateRuntimeExecutionMode() {
+        checkArgument(
+                env.getConfiguration().get(ExecutionOptions.RUNTIME_MODE)
+                        == RuntimeExecutionMode.STREAMING,
+                "It's only support STREAMING mode for flink-cdc sync table 
action.");
+    }
+
     private DataStreamSource<CdcSourceRecord> buildDataStreamSource(Object 
source) {
         if (source instanceof Source) {
             boolean isAutomaticWatermarkCreationEnabled =
diff --git 
a/paimon-flink/paimon-flink-cdc/src/main/java/org/apache/paimon/flink/action/cdc/mysql/MySqlSyncDatabaseAction.java
 
b/paimon-flink/paimon-flink-cdc/src/main/java/org/apache/paimon/flink/action/cdc/mysql/MySqlSyncDatabaseAction.java
index 01be020f7..f8ea8cdc4 100644
--- 
a/paimon-flink/paimon-flink-cdc/src/main/java/org/apache/paimon/flink/action/cdc/mysql/MySqlSyncDatabaseAction.java
+++ 
b/paimon-flink/paimon-flink-cdc/src/main/java/org/apache/paimon/flink/action/cdc/mysql/MySqlSyncDatabaseAction.java
@@ -188,6 +188,7 @@ public class MySqlSyncDatabaseAction extends 
SyncDatabaseActionBase {
 
     @Override
     protected MySqlSource<CdcSourceRecord> buildSource() {
+        validateRuntimeExecutionMode();
         return MySqlActionUtils.buildMySqlSource(
                 cdcSourceConfig,
                 tableList(
diff --git 
a/paimon-flink/paimon-flink-cdc/src/main/java/org/apache/paimon/flink/action/cdc/mysql/MySqlSyncTableAction.java
 
b/paimon-flink/paimon-flink-cdc/src/main/java/org/apache/paimon/flink/action/cdc/mysql/MySqlSyncTableAction.java
index a05832b1d..d73d9702f 100644
--- 
a/paimon-flink/paimon-flink-cdc/src/main/java/org/apache/paimon/flink/action/cdc/mysql/MySqlSyncTableAction.java
+++ 
b/paimon-flink/paimon-flink-cdc/src/main/java/org/apache/paimon/flink/action/cdc/mysql/MySqlSyncTableAction.java
@@ -102,6 +102,7 @@ public class MySqlSyncTableAction extends 
SyncTableActionBase {
 
     @Override
     protected MySqlSource<CdcSourceRecord> buildSource() {
+        validateRuntimeExecutionMode();
         String tableList =
                 String.format(
                         "(%s)\\.(%s)",
diff --git 
a/paimon-flink/paimon-flink-cdc/src/test/java/org/apache/paimon/flink/action/cdc/CdcActionITCaseBase.java
 
b/paimon-flink/paimon-flink-cdc/src/test/java/org/apache/paimon/flink/action/cdc/CdcActionITCaseBase.java
index 082895690..00a8b2361 100644
--- 
a/paimon-flink/paimon-flink-cdc/src/test/java/org/apache/paimon/flink/action/cdc/CdcActionITCaseBase.java
+++ 
b/paimon-flink/paimon-flink-cdc/src/test/java/org/apache/paimon/flink/action/cdc/CdcActionITCaseBase.java
@@ -38,6 +38,7 @@ import org.apache.paimon.types.DataField;
 import org.apache.paimon.types.RowType;
 
 import org.apache.flink.api.common.JobStatus;
+import org.apache.flink.api.common.RuntimeExecutionMode;
 import org.apache.flink.core.execution.JobClient;
 import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
 import org.junit.jupiter.api.AfterEach;
@@ -214,6 +215,15 @@ public class CdcActionITCaseBase extends ActionITCaseBase {
     }
 
     public JobClient runActionWithDefaultEnv(ActionBase action) throws 
Exception {
+        env.setRuntimeMode(RuntimeExecutionMode.STREAMING);
+        action.withStreamExecutionEnvironment(env).build();
+        JobClient client = env.executeAsync();
+        waitJobRunning(client);
+        return client;
+    }
+
+    public JobClient runActionWithBatchEnv(ActionBase action) throws Exception 
{
+        env.setRuntimeMode(RuntimeExecutionMode.BATCH);
         action.withStreamExecutionEnvironment(env).build();
         JobClient client = env.executeAsync();
         waitJobRunning(client);
diff --git 
a/paimon-flink/paimon-flink-cdc/src/test/java/org/apache/paimon/flink/action/cdc/mysql/MySqlSyncTableActionITCase.java
 
b/paimon-flink/paimon-flink-cdc/src/test/java/org/apache/paimon/flink/action/cdc/mysql/MySqlSyncTableActionITCase.java
index ce18d0b1f..861dec33d 100644
--- 
a/paimon-flink/paimon-flink-cdc/src/test/java/org/apache/paimon/flink/action/cdc/mysql/MySqlSyncTableActionITCase.java
+++ 
b/paimon-flink/paimon-flink-cdc/src/test/java/org/apache/paimon/flink/action/cdc/mysql/MySqlSyncTableActionITCase.java
@@ -1497,4 +1497,39 @@ public class MySqlSyncTableActionITCase extends 
MySqlActionITCaseBase {
                                         + scanStartupMode
                                         + "'. Valid scan.startup.mode for 
MySQL CDC are [initial, earliest-offset, latest-offset, specific-offset, 
timestamp, snapshot]"));
     }
+
+    @Test
+    @Timeout(60)
+    public void testRuntimeExecutionModeCheckForCdcSync() throws Exception {
+        Map<String, String> mySqlConfig = getBasicMySqlConfig();
+        mySqlConfig.put("database-name", 
"check_cdc_sync_runtime_execution_mode");
+        mySqlConfig.put("table-name", "t");
+
+        Map<String, String> tableConfig = getBasicTableConfig();
+        tableConfig.put(CoreOptions.WRITE_ONLY.key(), "true");
+
+        MySqlSyncTableAction action = 
syncTableActionBuilder(mySqlConfig).build();
+
+        assertThatThrownBy(() -> runActionWithBatchEnv(action))
+                .satisfies(
+                        anyCauseMatches(
+                                IllegalArgumentException.class,
+                                "It's only support STREAMING mode for 
flink-cdc sync table action"));
+
+        runActionWithDefaultEnv(action);
+
+        FileStoreTable table = getFileStoreTable();
+
+        try (Statement statement = getStatement()) {
+            statement.executeUpdate("USE 
check_cdc_sync_runtime_execution_mode");
+            statement.executeUpdate("INSERT INTO t VALUES (1, 'one'), (2, 
'two')");
+            RowType rowType =
+                    RowType.of(
+                            new DataType[] {DataTypes.INT().notNull(), 
DataTypes.VARCHAR(10)},
+                            new String[] {"k", "v1"});
+            List<String> primaryKeys = Collections.singletonList("k");
+            List<String> expected = Arrays.asList("+I[1, one]", "+I[2, two]");
+            waitForResult(expected, table, rowType, primaryKeys);
+        }
+    }
 }
diff --git 
a/paimon-flink/paimon-flink-cdc/src/test/resources/mysql/sync_table_setup.sql 
b/paimon-flink/paimon-flink-cdc/src/test/resources/mysql/sync_table_setup.sql
index 965f884ec..10a0f20d4 100644
--- 
a/paimon-flink/paimon-flink-cdc/src/test/resources/mysql/sync_table_setup.sql
+++ 
b/paimon-flink/paimon-flink-cdc/src/test/resources/mysql/sync_table_setup.sql
@@ -445,3 +445,14 @@ CREATE TABLE t (
     k INT PRIMARY KEY,
     v1 VARCHAR(10)
 );
+
+-- 
################################################################################
+--  testRuntimeExecutionModeCheckForCdcSync
+-- 
################################################################################
+
+CREATE DATABASE check_cdc_sync_runtime_execution_mode;
+USE check_cdc_sync_runtime_execution_mode;
+CREATE TABLE t (
+                   k INT PRIMARY KEY,
+                   v1 VARCHAR(10)
+);
\ No newline at end of file

Reply via email to