|
61 | 61 | import java.util.ArrayList; |
62 | 62 | import java.util.Collections; |
63 | 63 | import java.util.HashMap; |
64 | | -import java.util.HashSet; |
65 | 64 | import java.util.List; |
66 | 65 | import java.util.Map; |
67 | | -import java.util.Set; |
68 | 66 | import java.util.function.Supplier; |
69 | 67 | import java.util.stream.Collectors; |
70 | 68 |
|
@@ -423,15 +421,24 @@ private void fillMetadataForBinlogSplit(BinlogSplitMetaEvent metadataEvent) { |
423 | 421 | binlogSplit, receivedTotalFinishedSplitSize); |
424 | 422 | uncompletedBinlogSplits.put(binlogSplit.splitId(), binlogSplit); |
425 | 423 | } else if (receivedMetaGroupId == expectedMetaGroupId) { |
426 | | - List<FinishedSnapshotSplitInfo> newAddedMetadataGroup; |
427 | | - Set<String> existedSplitsOfLastGroup = |
428 | | - getExistedSplitsOfLastGroup( |
429 | | - binlogSplit.getFinishedSnapshotSplitInfos(), |
430 | | - sourceConfig.getSplitMetaGroupSize()); |
431 | | - newAddedMetadataGroup = |
432 | | - metadataEvent.getMetaGroup().stream() |
| 424 | + int expectedNumberOfAlreadyRetrievedElements = |
| 425 | + binlogSplit.getFinishedSnapshotSplitInfos().size() |
| 426 | + % sourceConfig.getSplitMetaGroupSize(); |
| 427 | + List<byte[]> metaGroup = metadataEvent.getMetaGroup(); |
| 428 | + if (expectedNumberOfAlreadyRetrievedElements > 0) { |
| 429 | + LOG.info( |
| 430 | + "Source reader {} is discarding the first {} out of {} elements of meta group {}.", |
| 431 | + subtaskId, |
| 432 | + expectedNumberOfAlreadyRetrievedElements, |
| 433 | + metaGroup.size(), |
| 434 | + receivedMetaGroupId); |
| 435 | + metaGroup = |
| 436 | + metaGroup.subList( |
| 437 | + expectedNumberOfAlreadyRetrievedElements, metaGroup.size()); |
| 438 | + } |
| 439 | + List<FinishedSnapshotSplitInfo> newAddedMetadataGroup = |
| 440 | + metaGroup.stream() |
433 | 441 | .map(FinishedSnapshotSplitInfo::deserialize) |
434 | | - .filter(r -> !existedSplitsOfLastGroup.contains(r.getSplitId())) |
435 | 442 | .collect(Collectors.toList()); |
436 | 443 |
|
437 | 444 | uncompletedBinlogSplits.put( |
@@ -501,28 +508,6 @@ private MySqlBinlogSplit discoverTableSchemasForBinlogSplit( |
501 | 508 | } |
502 | 509 | } |
503 | 510 |
|
504 | | - private Set<String> getExistedSplitsOfLastGroup( |
505 | | - List<FinishedSnapshotSplitInfo> finishedSnapshotSplits, int metaGroupSize) { |
506 | | - int splitsNumOfLastGroup = |
507 | | - finishedSnapshotSplits.size() % sourceConfig.getSplitMetaGroupSize(); |
508 | | - if (splitsNumOfLastGroup != 0) { |
509 | | - int lastGroupStart = |
510 | | - ((int) (finishedSnapshotSplits.size() / sourceConfig.getSplitMetaGroupSize())) |
511 | | - * metaGroupSize; |
512 | | - // Keep same order with MySqlHybridSplitAssigner.createBinlogSplit() to avoid |
513 | | - // 'invalid request meta group id' error |
514 | | - List<String> sortedFinishedSnapshotSplits = |
515 | | - finishedSnapshotSplits.stream() |
516 | | - .map(FinishedSnapshotSplitInfo::getSplitId) |
517 | | - .sorted() |
518 | | - .collect(Collectors.toList()); |
519 | | - return new HashSet<>( |
520 | | - sortedFinishedSnapshotSplits.subList( |
521 | | - lastGroupStart, lastGroupStart + splitsNumOfLastGroup)); |
522 | | - } |
523 | | - return new HashSet<>(); |
524 | | - } |
525 | | - |
526 | 511 | private void logCurrentBinlogOffsets(List<MySqlSplit> splits, long checkpointId) { |
527 | 512 | if (!LOG.isInfoEnabled()) { |
528 | 513 | return; |
|
0 commit comments