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

   Thanks @SEZ9 for the follow-up. I re-checked each "remaining ask" against 
the current head (`d3a8a348ddb0`) and most of them are already in the branch 
(no new commit since my last review, so this is the same code you can look at 
now):
   
   - **Lazy applier creation** - done. `MultiTableSink.createWriter()` / 
`restoreWriter()` no longer build appliers. 
`createSchemaChangeApplier(TablePath)` (`MultiTableSink.java:253-289`) builds 
exactly one applier for the selected table, only when the engine dispatches a 
coordinated DDL. Jobs that never hit a schema change create none, so there is 
no parallelism x table-count footprint.
   - **Deterministic resolution and consistent keying** - done. The method 
first looks up the logical key, then falls back to a physical-path match via 
`resolvePhysicalSinkTable(...)`. If more than one logical table maps to the 
same physical table it throws an `IOException` listing the sorted logical 
tables instead of picking the first `HashMap` hit. The applier is always 
created for the resolved physical path.
   - **Identifier-safety javadoc** - done in `SchemaChangeApplier.apply()`: 
event-derived identifiers are untrusted, must be validated/quoted through the 
sink dialect, and must not be concatenated raw into DDL. The same javadoc also 
states that re-delivery after recovery must be idempotent.
   - **Writer contract enforcement** - done. `FlinkSink.java:103-120` fails 
fast when a sink that declares coordinated support creates a writer that does 
not implement `SupportSchemaRefreshSinkWriter`, closing the writer first.
   - **Docs and upgrade note** - done in both languages: 
`docs/{en,zh}/developer/sink-connector-development.md`, 
`docs/{en,zh}/introduction/configuration/schema-evolution.md`, and the 
checkpoint/savepoint restore note in 
`docs/{en,zh}/introduction/concepts/incompatible-changes.md`.
   
   The one item that is genuinely still open is the small one we agreed on in 
the inline thread: a javadoc line on 
`SupportCoordinatedSchemaEvolutionSink.supportsCoordinatedSchemaEvolution()` 
explaining why a plain `instanceof` is not enough (`MultiTableSink` implements 
the interface itself, so the composite must answer "all children support it"). 
It is non-blocking. @dybyte, could you add that line when you next push?
   
   Separately, the apache-side `Build` check is red only because there is no 
`Build` run in the fork for this head (the previous head had a fully green fork 
run). @dybyte, please enable GitHub Actions workflows in your fork and 
push/re-trigger so the check can run on `d3a8a348ddb0`.
   
   If you see a specific scenario in the code above that I mis-traced, please 
point me at the line and I will re-check. Thanks again for the careful review!


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