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