|
19 | 19 |
|
20 | 20 | import org.apache.flink.api.connector.source.SourceEvent;
|
21 | 21 | import org.apache.flink.cdc.common.annotation.Experimental;
|
| 22 | +import org.apache.flink.cdc.common.annotation.VisibleForTesting; |
22 | 23 | import org.apache.flink.cdc.connectors.base.config.SourceConfig;
|
23 | 24 | import org.apache.flink.cdc.connectors.base.dialect.DataSourceDialect;
|
24 | 25 | import org.apache.flink.cdc.connectors.base.source.meta.events.FinishedSnapshotSplitsAckEvent;
|
@@ -261,13 +262,14 @@ private void addSplits(List<SourceSplitBase> splits, boolean checkTableChangeFor
|
261 | 262 | for (SourceSplitBase split : splits) {
|
262 | 263 | if (split.isSnapshotSplit()) {
|
263 | 264 | SnapshotSplit snapshotSplit = split.asSnapshotSplit();
|
264 |
| - if (snapshotSplit.isSnapshotReadFinished()) { |
265 |
| - finishedUnackedSplits.put(snapshotSplit.splitId(), snapshotSplit); |
266 |
| - } else if (dialect.isIncludeDataCollection( |
267 |
| - sourceConfig, snapshotSplit.getTableId())) { |
268 |
| - unfinishedSplits.add(split); |
| 265 | + if (dialect.isIncludeDataCollection(sourceConfig, snapshotSplit.getTableId())) { |
| 266 | + if (snapshotSplit.isSnapshotReadFinished()) { |
| 267 | + finishedUnackedSplits.put(snapshotSplit.splitId(), snapshotSplit); |
| 268 | + } else { |
| 269 | + unfinishedSplits.add(split); |
| 270 | + } |
269 | 271 | } else {
|
270 |
| - LOG.debug( |
| 272 | + LOG.info( |
271 | 273 | "The subtask {} is skipping split {} because it does not match new table filter.",
|
272 | 274 | subtaskId,
|
273 | 275 | split.splitId());
|
@@ -320,8 +322,9 @@ private void addSplits(List<SourceSplitBase> splits, boolean checkTableChangeFor
|
320 | 322 | // add all un-finished splits (including binlog split) to SourceReaderBase
|
321 | 323 | if (!unfinishedSplits.isEmpty()) {
|
322 | 324 | super.addSplits(unfinishedSplits);
|
323 |
| - } else if (suspendedStreamSplit |
324 |
| - != null) { // only request new snapshot split if the stream split is suspended |
| 325 | + } else if (suspendedStreamSplit != null |
| 326 | + || getNumberOfCurrentlyAssignedSplits() |
| 327 | + <= 1) { // only request new snapshot split if the stream split is suspended |
325 | 328 | context.sendSplitRequest();
|
326 | 329 | }
|
327 | 330 | }
|
@@ -541,4 +544,9 @@ private void logCurrentStreamOffsets(List<SourceSplitBase> splits, long checkpoi
|
541 | 544 | LOG.info("Stream split offset on checkpoint {}: {}", checkpointId, offset);
|
542 | 545 | }
|
543 | 546 | }
|
| 547 | + |
| 548 | + @VisibleForTesting |
| 549 | + public Map<String, SnapshotSplit> getFinishedUnackedSplits() { |
| 550 | + return finishedUnackedSplits; |
| 551 | + } |
544 | 552 | }
|
0 commit comments