Skip to content

Commit 4368817

Browse files
committed
[FLINK-38061][mysql] Make defensive copies of collections in SnapshotPendingSplitsState to prevent concurrent modification issues
1 parent 13cd198 commit 4368817

1 file changed

Lines changed: 9 additions & 6 deletions

File tree

flink-cdc-connect/flink-cdc-source-connectors/flink-connector-mysql-cdc/src/main/java/org/apache/flink/cdc/connectors/mysql/source/assigners/state/SnapshotPendingSplitsState.java

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@
2727
import io.debezium.relational.TableId;
2828
import io.debezium.relational.history.TableChanges.TableChange;
2929

30+
import java.util.ArrayList;
31+
import java.util.HashMap;
3032
import java.util.LinkedHashMap;
3133
import java.util.List;
3234
import java.util.Map;
@@ -84,15 +86,16 @@ public SnapshotPendingSplitsState(
8486
boolean isTableIdCaseSensitive,
8587
boolean isRemainingTablesCheckpointed,
8688
ChunkSplitterState chunkSplitterState) {
87-
this.alreadyProcessedTables = alreadyProcessedTables;
88-
this.remainingSplits = remainingSplits;
89-
this.assignedSplits = assignedSplits;
90-
this.splitFinishedOffsets = splitFinishedOffsets;
89+
// FLINK-38061: make defensive copy to avoid potential concurrent modification of the collections.
90+
this.alreadyProcessedTables = new ArrayList<>(alreadyProcessedTables);
91+
this.remainingSplits = new ArrayList<>(remainingSplits);
92+
this.assignedSplits = new LinkedHashMap<>(assignedSplits);
93+
this.splitFinishedOffsets = new HashMap<>(splitFinishedOffsets);
9194
this.assignerStatus = assignerStatus;
92-
this.remainingTables = remainingTables;
95+
this.remainingTables = new ArrayList<>(remainingTables);
9396
this.isTableIdCaseSensitive = isTableIdCaseSensitive;
9497
this.isRemainingTablesCheckpointed = isRemainingTablesCheckpointed;
95-
this.tableSchemas = tableSchemas;
98+
this.tableSchemas = new HashMap<>(tableSchemas);
9699
this.chunkSplitterState = chunkSplitterState;
97100
}
98101

0 commit comments

Comments
 (0)