lucasfang opened a new issue, #426:
URL: https://github.com/apache/paimon-cpp/issues/426

   ## Search before asking
   
   - [x] I searched in the 
[issues](https://github.com/apache/paimon-cpp/issues) and found nothing similar.
   
   ## Motivation
   
   Reading a BlobView field resolves the blob table it points at, the 
dependency table, in `BlobViewLookup::LoadTableDescriptorChunk`. Today that 
read borrows the file system of the downstream read and passes it down through 
`CatalogContext`, which causes two problems.
   
   The dependency table is authenticated as the downstream table. The file 
system handed down issues credentials for the table the read started from, not 
the one about to be read, so a metastore that authorizes per table cannot tell 
them apart. The Java `CatalogEnvironment.dependencyReadContext()` instead 
builds a catalog of its own for the dependency table and, on a REST metastore, 
sends an `X-Paimon-Read-Via` header naming the starting table so the server can 
authorize the dependency through that table's owner. cpp sends no such header.
   
   `BLOB_VIEW_UPSTREAM_WAREHOUSE` is also mandatory: absent it the read fails 
with `invalid config for blob view`. The lookup then probes two candidate 
paths, `<db>.db/<table>` and `<db>/<table>`, and reports `Ambiguous table path` 
when both or neither exist, which a metastore-backed catalog resolves by 
identifier anyway.
   
   ## Solution
   
   - In `ReadContextBuilder::Finish`, when the read goes through a catalog 
naming a table and the metastore is `rest`, add a `header.X-Paimon-Read-Via` 
option carrying the URL-encoded flat JSON `{"database":...,"object":...}` of 
the starting identifier, mirroring the Java serializer. An existing value wins 
so a chain of views reports its outermost one instead of the innermost, and the 
object name keeps any branch suffix.
   - Change `CatalogContext` to carry the `fs_scheme_to_identifier_map` instead 
of a `FileSystem`, and have `BlobViewLookup` create a catalog from those 
options with a null file system so the dependency table is read under its own 
credentials. Drop the custom `GetTableLocation` fallback probing in favor of 
`catalog->GetTableLocation(identifier)` plus `WithCatalog` on the scan and read 
builders.
   - Make `BLOB_VIEW_UPSTREAM_WAREHOUSE` optional: absent it, fall back to the 
warehouse the downstream table itself lives in, stripping its trailing 
`<db>.db/<table>` components, which resolves a co-located upstream table.
   
   ## Anything else?
   
   No storage format or protocol change; the `X-Paimon-Read-Via` header matches 
the Java REST protocol. In `include/paimon/` only the doc comment of 
`Options::BLOB_VIEW_UPSTREAM_WAREHOUSE` changes, but its behavior changes from 
required to optional-with-fallback.
   
   ## Are you willing to submit a PR?
   
   - [x] I'm willing to submit a PR!
   


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