You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@flink.apache.org by "YangyangHu (Jira)" <ji...@apache.org> on 2026/07/21 09:36:00 UTC
[jira] [Commented] (FLINK-40202) HybridSplitAssigner may initialize enumerator metrics concurrently with snapshot split assignment
[ https://issues.apache.org/jira/browse/FLINK-40202?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18097798#comment-18097798 ]
YangyangHu commented on FLINK-40202:
------------------------------------
Please assign this to me, thanks!
> HybridSplitAssigner may initialize enumerator metrics concurrently with snapshot split assignment
> -------------------------------------------------------------------------------------------------
>
> Key: FLINK-40202
> URL: https://issues.apache.org/jira/browse/FLINK-40202
> Project: Flink
> Issue Type: Bug
> Components: Flink CDC
> Affects Versions: cdc-3.5.0
> Reporter: Hongshun Wang
> Priority: Major
> Fix For: cdc-3.6.0
>
>
> h3. Problem
> {{The issue has been observed with the following exception:}}
>
> {code:java}
> java.util.ConcurrentModificationException: null
> at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:1043) ~[?:?]
> at java.util.ArrayList$Itr.next(ArrayList.java:997) ~[?:?]
> at org.apache.flink.cdc.connectors.base.source.assigner.SnapshotSplitAssigner.initEnumeratorMetrics(SnapshotSplitAssigner.java:305)
> ~[ververica-connector-sqlserver-1.20-vvr-11.7.0-4-jdk11-jar-with-dependencies.jar:1.20-vvr-11.7.0-4-jdk11] {code}
> {{}}
>
> h3. *Root Cause*
> h3. HybridSplitAssigner#open
> {code:java}
> snapshotSplitAssigner.open();
> // init enumerator metrics
> snapshotSplitAssigner.initEnumeratorMetrics(enumeratorMetrics); {code}
> {{SnapshotSplitAssigner#open}}
>
> {code:java}
> chunkSplitter.open();
> discoveryCaptureTables();
> captureNewlyAddedTables();
> startAsynchronouslySplit(); {code}
> {{}}
>
> # `SnapshotSplitAssigner#open` starts asynchronous snapshot splitting via `startAsynchronouslySplit()`.
> # enumerator metrics are initialized only after `snapshotSplitAssigner.open()` returns.
> # This leaves a race window where the background splitting thread can mutate split state while `initEnumeratorMetrics()` is traversing it.
> In the observed failure, the concurrent modification happens while iterating an `ArrayList`, resulting in `ConcurrentModificationException`.
> h3. {{}}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)