DanielLeens commented on PR #11382:
URL: https://github.com/apache/seatunnel/pull/11382#issuecomment-5662011788

   Thanks @SEZ9 — sorry about the apparent cut-off again. Since it happened 
right at the F8 bullet both times now, I suspect it's something about how a 
"show more"/collapsed-comment render interacts with a bullet that's followed 
immediately by more bullets rather than a paragraph break, rather than anything 
on GitHub's storage side (I re-pulled the raw stored body via the API again 
just now and it's intact end-to-end). Rather than debug the renderer further, 
here's F4-F7 restated on their own, short and separated, plus a genuinely new 
item below that I want to flag as valid:
   
   **F4 (drain-ready is process-memory only)** — open, tied to F2. 
`schemaChangeDrainReady` is still guard-local in-memory state with no snapshot 
of its own; the coordinator's replay of `latestCompletedCheckpoint` on restart 
is what currently substitutes for it, but that dependency is only established 
in review discussion, not stated in the source. Close together with F2's 
javadoc fix.
   
   **F5 (typed abort call site)** — resolved. 
`SinkFlowLifeCycle.notifyCheckpointAborted(long, CheckpointType)` 
(`SinkFlowLifeCycle.java:356`) calls 
`schemaChangeDrainGuard.checkpointAborted(...)`, so the guard's abort-cleanup 
path has a real, coordinator-driven caller.
   
   **F6 (single-slot tracking)** — open, unchanged. 
`schemaChangeBeforeCheckpointId` is still a single `long`; two overlapping 
schema-change-before/after pairs still can't be distinguished.
   
   **F7 (wiring/e2e coverage)** — open, unchanged. Current tests exercise the 
guard directly or stub `notifyCompleted`; nothing exercises the real 
`SinkFlowLifeCycle` -> `SeaTunnelTask` -> `CheckpointFinishedOperation` 
serialization/dispatch round trip, and there's no schema-evolution-with-restart 
e2e.
   
   **On your F3 wire-format point — you're right, and I should have caught this 
as its own item rather than folding it into F8.** I went back to 
`CheckpointFinishedOperation.java` (current head `1ee22aced026`) and traced it 
explicitly:
   
   ```java
   protected void writeInternal(ObjectDataOutput out) throws IOException {
       super.writeInternal(out);
       out.writeLong(checkpointId);
       out.writeBoolean(successful);
       ...
       out.writeString(checkpointType.getName());   // new trailing field, :91
   }
   
   protected void readInternal(ObjectDataInput in) throws IOException {
       super.readInternal(in);
       checkpointId = in.readLong();
       successful = in.readBoolean();
       checkpointType = CheckpointType.fromName(in.readString());   // 
unconditionally expects the field, :99
   }
   ```
   
   `readInternal` unconditionally reads the trailing `checkpointType` string 
with no length/presence guard. In a mixed-version rolling upgrade — an 
old-binary writer sends the pre-this-PR two-field wire format to a new-binary 
reader — `readInternal` will attempt to read a string that was never written, 
which fails the deserialization rather than degrading gracefully. That's a 
real, unaddressed backward-compat gap distinct from F8 (F8 is about an 
unrecognized *value* for a field that's present; this is about the field being 
*absent* from an older peer's stream). Given this repo's priority on 
rolling-upgrade compatibility for checkpoint/RPC wire formats, I'm elevating 
this to its own tracked item and keeping it open alongside F2 as a blocker, not 
folding it into F8 anymore. Thanks for pushing on it.
   
   Net status, restated cleanly: **F2 (javadoc) and the wire-format 
version-guard (formerly folded into F8, now its own item) are the two remaining 
blockers; F4 rides with F2; F8 (value-side), F6, F7 are open non-blocking; 
F1/F3(write-side)/F5 are resolved.**
   
   On CI: this diff's head (`1ee22aced026`) still shows the apache-side `Build` 
check as it was in my last comment — the one real failure in the fork run is 
`CouchbaseIT` container bootstrap in an `all-connectors-it-6` shard, which 
doesn't touch anything under this PR's files and matches a known recurring 
flake on that shard; the `windows-latest` unit-test flakes I flagged earlier 
have since cleared on their own. That doesn't change the merit-side conclusion 
above.
   


-- 
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]

Reply via email to