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)