yunfengzhou-hub opened a new pull request, #10706:
URL: https://github.com/apache/paimon/pull/10706

   ### Purpose
   
   Closes #10692, part of the PIP-39 umbrella #10690.
   
   This adds the engine-neutral part of 
[PIP-39](https://cwiki.apache.org/confluence/spaces/PAIMON/pages/398000424): 
the two options that make a table a lake-stream table, and the catalog guards 
that keep such a table's identity and data intact. No engine routes a read or a 
write yet.
   
   - `lakestream.store` (catalog option) names the Lakestream Store 
implementation.
   - `lakestream.enabled` (table option) marks a table as a lake-stream table. 
It is mutable, so the mode can be turned off again with `ALTER TABLE` instead 
of by dropping the table.
   - `renameTable` and `replaceTable` are rejected while the option is `true`. 
The identifier is what resolves the corresponding table in the store, so a 
rename breaks that lookup, and a replace can discard data the store has not 
tiered into Paimon yet, or drop the option without the store being told. The 
rejection says to turn the option off first.
   - Column changes stay allowed and still update only the Paimon table; 
reconciling the store's schema is the store's own responsibility.
   
   The guards sit in `AbstractCatalog`, and additionally in `JdbcCatalog` and 
`RESTCatalog`, because those two override `renameTable` / `replaceTable` 
without delegating to `super`. `FileSystemCatalog` and `HiveCatalog` only 
override the `*Impl` hooks, which `AbstractCatalog` calls after the guard, so 
they need no change; `CachingCatalog` and `DelegateCatalog` delegate.
   
   The generated configuration reference is updated for both options. 
Regenerating also reorders one unrelated entry 
(`continuous-compaction.initial-scan-mode`) that sits out of alphabetical order 
in the committed file; that hunk is left out to keep this change to what it is 
about.
   
   ### Tests
   
   Six cases added to `CatalogTestBase`, so they run for every catalog 
implementation rather than only the filesystem one:
   
   - `testRenameLakeStreamTableIsRejected`, which also asserts the table is 
untouched: the original name still resolves and the target name was never 
created
   - `testRenameTableWithLakeStreamDisabledIsAllowed`
   - `testAlterLakeStreamTableColumnIsAllowed`
   - `testReplaceLakeStreamTableIsRejected`, which also asserts the option is 
still `true` afterwards
   - `testDropLakeStreamTableIsAllowed`, because a mis-configured table has to 
stay correctable and dropping never consults the store
   - `testDisableLakeStreamModeThenRenameIsAllowed`
   


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