Hongshun Wang created FLINK-35859:
-------------------------------------

             Summary: [flink-cdc] Fix: The assigner is not ready to offer 
finished split information, this should not be called
                 Key: FLINK-35859
                 URL: https://issues.apache.org/jira/browse/FLINK-35859
             Project: Flink
          Issue Type: Bug
          Components: Flink CDC
    Affects Versions: cdc-3.1.1
            Reporter: Hongshun Wang
             Fix For: cdc-3.2.0


When use CDC with newly added table,  an error occurs: 
{code:java}
The assigner is not ready to offer finished split information, this should not 
be called. {code}
It's because:
1. when stop then restart the job , the status is 
NEWLY_ADDED_ASSIGNING_SNAPSHOT_FINISHED.
 
2. Then Enumerator will send each reader with 
BinlogSplitUpdateRequestEvent to update binlog. (see 
org.apache.flink.cdc.connectors.mysql.source.enumerator.MySqlSourceEnumerator#syncWithReaders).
3. The Reader will suspend binlog reader then send BinlogSplitMetaRequestEvent 
to Enumerator.
4. The Enumerator found that some tables are not sent, an error will occur
{code:java}
private void sendBinlogMeta(int subTask, BinlogSplitMetaRequestEvent 
requestEvent) {
    // initialize once
    if (binlogSplitMeta == null) {
        final List<FinishedSnapshotSplitInfo> finishedSnapshotSplitInfos =
                splitAssigner.getFinishedSplitInfos();
        if (finishedSnapshotSplitInfos.isEmpty()) {
            LOG.error(
                    "The assigner offers empty finished split information, this 
should not happen");
            throw new FlinkRuntimeException(
                    "The assigner offers empty finished split information, this 
should not happen");
        }
        binlogSplitMeta =
                Lists.partition(
                        finishedSnapshotSplitInfos, 
sourceConfig.getSplitMetaGroupSize());
   } 
}{code}
 



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to