[ 
https://issues.apache.org/jira/browse/FLINK-41313?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Yanquan Lv resolved FLINK-41313.
--------------------------------
    Fix Version/s: cdc-3.8.0
         Assignee: liting liu
       Resolution: Fixed

Merged in master via 49fec143631bd045b69882e132b5115032baea7c.

> Fluss pipeline source fails to recover from checkpoints referencing dropped 
> or expired partitions
> -------------------------------------------------------------------------------------------------
>
>                 Key: FLINK-41313
>                 URL: https://issues.apache.org/jira/browse/FLINK-41313
>             Project: Flink
>          Issue Type: Bug
>          Components: Flink CDC
>            Reporter: liting liu
>            Assignee: liting liu
>            Priority: Major
>              Labels: pull-request-available
>             Fix For: cdc-3.8.0
>
>
> h2. Problem
> Restoring a Fluss pipeline source from a checkpoint may fail to resume data 
> consumption if a referenced partition was dropped or expired after the 
> checkpoint was taken, even though the table and other partitions still exist.
> Recovery should skip absent partitions and resume the surviving partitions 
> from their checkpointed positions.
> h2. Reproduction
> # Create a partitioned Fluss primary-key table with at least two partitions 
> and multiple buckets. Enable periodic discovery in the CDC pipeline.
> # Start the pipeline, consume data from both partitions, and complete a 
> retained externalized checkpoint.
> # Cancel the whole job and wait for termination.
> # Drop one partition through the Fluss Admin API, or allow it to expire. Keep 
> the logical table and another partition available.
> # Write new rows to the surviving partition.
> # Restore the whole job from the earlier checkpoint with the same operator 
> UIDs. The source should skip the absent partition and continue from the 
> surviving partition's checkpoint position.
> h2. Root cause
> * Discovery reconciles logical-table subscriptions and initializes new 
> physical partitions, but does not filter absent partitions from restored 
> coordinator state.
> * Assigned reader splits and their consumption positions are restored 
> independently from reader operator state. Cleaning the enumerator's pending 
> assignments alone cannot remove these obsolete reader splits.
> * A table-level subscription snapshot cannot distinguish a live restored 
> split from one belonging to an absent partition. An obsolete split can 
> therefore reach the SDK scanner and trigger repeated metadata requests for 
> the missing partition ID, delaying valid splits handled by the same reader.
> h2. Proposed fix
> * Obtain a complete physical-partition inventory from the first successful 
> discovery. A failed metadata query must not imply partition deletion.
> * Remove absent partitions from restored coordinator assignments and pending 
> splits before publishing the first subscription snapshot.
> * Keep independently restored reader splits staged until that first snapshot 
> arrives, then filter absent partitions before SDK activation.
> * Preserve normal runtime split activation, initialization callbacks, 
> checkpoint serializer versions, and split IDs. Same-name partition recreation 
> with a new physical ID remains a separate concern.
> * Scope this issue to whole-job checkpoint recovery. Continuous inventory 
> refresh, stale-split handling, and retirement of already-active partitions 
> belong to FLINK-41312.



--
This message was sent by Atlassian Jira
(v10.3.26#10030026)

Reply via email to