li3zhi4 commented on PR #11885: URL: https://github.com/apache/seatunnel/pull/11885#issuecomment-5598876185
@SEZ9 Reposting the portion of @DanielLeens' review above that gets truncated in some views — the findings mapping it contains, verbatim: - **F1/F6 (serializer wiring / test bypass)**: `connector-cdc-base` has no `PendingSplitsStateSerializer` class at all. `IncrementalSource` does not override `getEnumeratorStateSerializer()`, so the engine uses the interface default `DefaultSerializer`, whose `serialize()`/`deserialize()` call `SerializationUtils` — plain `ObjectOutputStream`/`ObjectInputStream` over the `Serializable` object graph. A plain field on a `Serializable` class with unchanged `serialVersionUID` is picked up automatically; there is no separate serializer to "wire" in this codebase. `IncrementalPhaseStateTest.shouldPreserveStopOffsetThroughJavaSerializationRoundTrip` exercises exactly this real persistence path, and `shouldDefaultStopOffsetToNullOnLegacySerializedState` covers the legacy (field-absent) checkpoint. Resolved. - **F2 (single authoritative resolution point)**: the current design resolves inside `createIncrementalSplit()`, guarded by `resolvedStopOffset == null` — `HybridSplitAssigner` only creates incremental splits after snapshot completion, so there is exactly one resolution point and every split from one assignment shares the cached value. Resolved. - **F5 (retry with backoff)**: `resolveLatestStopOffsetWithRetry()` in `IncrementalSplitAssigner.java` retries up to 3 attempts with 300ms/600ms backoff before wrapping and throwing. Resolved. - **F3 (E2E readiness gate)**: `runLatestStopStartupMode` waits for row id=1 at the sink, then defensively asserts row id=2000 is NOT yet in the sink before proceeding — it verifies the structural guarantee at runtime and fails loudly instead of producing a false data-loss failure. Resolved. - **F4/F7/F8 (docs / PR description)**: `docs/en|zh/MySQL-CDC.md` document the snapshot-completion semantics with a worked example, and the PR description names the enumerator-side mechanism (`IncrementalSplitAssigner.createIncrementalSplit()`). -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected]
