[MINOR] docs(fileset): Restructure the fileset catalog pages around a runnable path - #12434
[MINOR] docs(fileset): Restructure the fileset catalog pages around a runnable path#12434yuqi1129 wants to merge 6 commits into
Conversation
… runnable path Split the fileset documentation along one axis: shared reference material lives in exactly one place, while the per-backend pages each keep a complete runnable path so a newcomer never has to assemble a working setup from three pages. - fileset-catalog.md is now the shared reference and carries a storage-backend table (bundle jar, location scheme, backend properties) instead of a bare list of links. - The five per-backend pages are regenerated from one template so they stay strictly parallel. Each merges the three former property tables (catalog, Java client, Python client) into one, which also makes the hyphen-vs-underscore difference visible at a glance, and drops the deprecated filesystem-providers / default-filesystem-provider rows that were listed as required. - Each page now uses one consistent set of names end to end, so the examples can be run in order rather than needing rewrites between steps. Fixes along the way: - Python catalog properties dict was missing a comma. - The schema example loaded "hive_catalog" instead of the catalog it just created. - SparkSession.builder chains had no line continuations and could not be run. - A stray quote in the Python GVFS example. - "hadoop dfs" replaced with "hadoop fs". - The Java client section linked to the Python client's anchor. - Dead anchors into manage-fileset-metadata-using-gravitino.md left behind by the earlier manage-* page split (catalog-operations, schema-operations, placeholder, manage-filesets-across-multiple-clusters). - Tencent Cloud COS was missing from the index page and from the GVFS page.
There was a problem hiding this comment.
Pull request overview
This PR restructures the fileset catalog documentation to separate shared reference material (properties/semantics/inheritance) from per-backend pages that each provide a complete runnable “start-to-finish” path (bundle jar → catalog/schema/fileset → access via GVFS clients/Spark/Hadoop/Python/pandas), and updates cross-doc links/anchors accordingly.
Changes:
- Reworked
fileset-catalog.mdinto the shared reference page and added a backend summary table (bundle jar, URI scheme, backend properties). - Rebuilt each cloud-backend page (S3/GCS/ADLS/OSS/COS) into a consistent runnable template with merged property tables and aligned examples.
- Updated GVFS and related docs to reference the new per-backend property sections and fixed several anchors/wording issues.
Reviewed changes
Copilot reviewed 9 out of 9 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| docs/how-to-use-gvfs.md | Updates GVFS docs to point to per-backend property sections and refreshes multi-cluster wording. |
| docs/hive-catalog-with-cloud-storage.md | Fixes catalog-operations link target to the correct management doc. |
| docs/fileset-catalog.md | Converts to shared reference and adds a backend summary table plus updated ops/placeholder links. |
| docs/fileset-catalog-with-s3.md | Rewrites S3 page as an end-to-end runnable guide with unified property table and updated examples. |
| docs/fileset-catalog-with-oss.md | Rewrites OSS page as an end-to-end runnable guide with unified property table and updated examples. |
| docs/fileset-catalog-with-gcs.md | Rewrites GCS page as an end-to-end runnable guide with unified property table and updated examples. |
| docs/fileset-catalog-with-cos.md | Rewrites COS page as an end-to-end runnable guide with unified property table and updated examples. |
| docs/fileset-catalog-with-adls.md | Rewrites ADLS page as an end-to-end runnable guide with unified property table and updated examples. |
| docs/fileset-catalog-index.md | Updates cloud-backend index section to include COS and emphasize runnable per-backend pages. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Code Coverage Report
Files
|
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 9 out of 9 changed files in this pull request and generated no new comments.
Suppressed comments (19)
docs/fileset-catalog-with-cos.md:460
- The Python GVFS implementation has no
cosnstorage type or COS storage handler (gvfs_storage_handler.pyonly registers HDFS, local, GCS, S3A, OSS, and ABS). This example therefore fails when the resolved fileset location iscosn://...; pandas and the later Python credential-vending example fail for the same reason. Keep the unsupported-data-plane note instead, or add COS support to the Python client before documenting these paths.
fs = gvfs.GravitinoVirtualFileSystem(server_uri="http://localhost:8090",
metalake_name="metalake",
options=options)
fs.ls("gvfs://fileset/cos_catalog/cos_schema/example_fileset/")
docs/how-to-use-gvfs.md:445
- This Python-client note refers to the Java/Hadoop key spelling. The property immediately above is
fs_path_config_<name>, so users following this sentence would supply an unrecognized option.
of the different clusters, using the `fs.path.config.<name>` properties described above.
docs/fileset-catalog-with-cos.md:494
- This link has an empty fragment and only navigates to the top of
credential-vending.md; that document currently has no COS section. Point to a real COS credential section after adding one, or remove the backend-specific link.
[COS credentials](./security/credential-vending.md#) for the properties
docs/fileset-catalog-with-s3.md:537
- The vending configuration creates
s3_catalog_with_vending, but this access example still targetss3_catalog. As a result it exercises the original catalog rather than the configureds3-tokenprovider (and the new catalog has no schema/fileset). Make the vending section configure and access the same complete catalog path.
Path filesetPath = new Path("gvfs://fileset/s3_catalog/s3_schema/example_fileset/new_dir");
docs/fileset-catalog-with-oss.md:529
- The vending configuration creates
oss_catalog_with_vending, but this access example still targetsoss_catalog. It therefore exercises the original catalog rather than the configuredoss-tokenprovider, while the newly created catalog has no schema/fileset. Make the vending section configure and access one complete catalog path.
Path filesetPath = new Path("gvfs://fileset/oss_catalog/oss_schema/example_fileset/new_dir");
docs/fileset-catalog-with-gcs.md:495
- The vending configuration creates
gcs_catalog_with_vending, but this access example still targetsgcs_catalog; the configured catalog also has no schema or fileset. Thus the runnable sequence never accesses the catalog it just configured. Make the vending section configure and access the same complete catalog path.
Path filesetPath = new Path("gvfs://fileset/gcs_catalog/gcs_schema/example_fileset/new_dir");
docs/fileset-catalog-with-adls.md:523
- The vending configuration creates
adls_catalog_with_vending, but this access example still targetsadls_catalog. It therefore does not exercise the configuredadls-tokenprovider, and the new catalog has no schema/fileset. Make the vending section configure and access one complete catalog path.
Path filesetPath = new Path("gvfs://fileset/adls_catalog/adls_schema/example_fileset/new_dir");
docs/fileset-catalog-with-cos.md:536
- The vending configuration creates
cos_catalog_with_vending, but this access example still targetscos_catalog. It therefore does not exercise the configuredcos-secret-keyprovider, and the new catalog has no schema/fileset. Make the vending section configure and access one complete catalog path.
Path filesetPath = new Path("gvfs://fileset/cos_catalog/cos_schema/example_fileset/new_dir");
docs/fileset-catalog-with-s3.md:479
- Spark does not create a file named
part-00000.csvhere;DataFrameWriter.csvemits a generated name such aspart-00000-<uuid>-c000.csv. This read therefore fails after running the preceding Spark example. Discover the generatedpart-*.csvfile (for example via fsspec/GVFS globbing) before passing it to pandas.
ds = pd.read_csv("gvfs://fileset/s3_catalog/s3_schema/example_fileset/people/part-00000.csv",
storage_options=storage_options)
docs/fileset-catalog-with-oss.md:471
- Spark does not create a file named
part-00000.csvhere;DataFrameWriter.csvemits a generated name such aspart-00000-<uuid>-c000.csv. This read therefore fails after running the preceding Spark example. Discover the generatedpart-*.csvfile before passing it to pandas.
ds = pd.read_csv("gvfs://fileset/oss_catalog/oss_schema/example_fileset/people/part-00000.csv",
storage_options=storage_options)
docs/fileset-catalog-with-gcs.md:450
- Spark does not create a file named
part-00000.csvhere;DataFrameWriter.csvemits a generated name such aspart-00000-<uuid>-c000.csv. This read therefore fails after running the preceding Spark example. Discover the generatedpart-*.csvfile before passing it to pandas.
ds = pd.read_csv("gvfs://fileset/gcs_catalog/gcs_schema/example_fileset/people/part-00000.csv",
storage_options=storage_options)
docs/fileset-catalog-with-adls.md:464
- Spark does not create a file named
part-00000.csvhere;DataFrameWriter.csvemits a generated name such aspart-00000-<uuid>-c000.csv. This read therefore fails after running the preceding Spark example. Discover the generatedpart-*.csvfile before passing it to pandas.
ds = pd.read_csv("gvfs://fileset/adls_catalog/adls_schema/example_fileset/people/part-00000.csv",
storage_options=storage_options)
docs/fileset-catalog-with-cos.md:482
- Even once COS support exists in Python GVFS, Spark does not create
part-00000.csv; it emits a generated name such aspart-00000-<uuid>-c000.csv. This read would therefore still fail after the preceding Spark example. Discover the generatedpart-*.csvfile before passing it to pandas.
ds = pd.read_csv("gvfs://fileset/cos_catalog/cos_schema/example_fileset/people/part-00000.csv",
storage_options=storage_options)
docs/fileset-catalog-with-s3.md:247
- This overstates the jar requirement: the Python GVFS and pandas clients below are fsspec-based and do not use Java jars. Limit this statement to Java/Hadoop-based clients so Python users are not instructed to install irrelevant artifacts.
Every client needs `gravitino-filesystem-hadoop3-runtime`, which is published on Maven Central,
plus the Amazon S3 filesystem implementation. Only the latter differs by environment:
docs/fileset-catalog-with-oss.md:238
- This overstates the jar requirement: the Python GVFS and pandas clients below are fsspec-based and do not use Java jars. Limit this statement to Java/Hadoop-based clients so Python users are not instructed to install irrelevant artifacts.
Every client needs `gravitino-filesystem-hadoop3-runtime`, which is published on Maven Central,
plus the Alibaba Cloud OSS filesystem implementation. Only the latter differs by environment:
docs/fileset-catalog-with-gcs.md:235
- This overstates the jar requirement: the Python GVFS and pandas clients below are fsspec-based and do not use Java jars. Limit this statement to Java/Hadoop-based clients so Python users are not instructed to install irrelevant artifacts.
Every client needs `gravitino-filesystem-hadoop3-runtime`, which is published on Maven Central,
plus the Google Cloud Storage filesystem implementation. Only the latter differs by environment:
docs/fileset-catalog-with-adls.md:239
- This overstates the jar requirement: the Python GVFS and pandas clients below are fsspec-based and do not use Java jars. Limit this statement to Java/Hadoop-based clients so Python users are not instructed to install irrelevant artifacts.
Every client needs `gravitino-filesystem-hadoop3-runtime`, which is published on Maven Central,
plus the Azure Data Lake Storage filesystem implementation. Only the latter differs by environment:
docs/fileset-catalog-with-cos.md:245
- This overstates the jar requirement: Python GVFS/pandas clients do not use Java jars (and currently do not support COS at all). Limit this statement to Java/Hadoop-based clients.
Every client needs `gravitino-filesystem-hadoop3-runtime`, which is published on Maven Central,
plus the Tencent Cloud COS filesystem implementation. Only the latter differs by environment:
docs/fileset-catalog-with-s3.md:495
- This list omits the supported
aws-irsaprovider that the consolidated property table now lists andcredential-vending.mddocuments. Include it here so the backend page does not contradict its own reference table.
The supported providers are `s3-token`, which vends a short-lived STS token, and
`s3-secret-key`, which vends the static access key configured on the catalog. The example below uses
`s3-token`.
jerryshao
left a comment
There was a problem hiding this comment.
Two issues found on the COS page while reviewing the runnable-path restructuring.
| ``` | ||
|
|
||
| ### Access the Fileset with the GVFS Python Client / Pandas | ||
| ### GVFS Python client |
There was a problem hiding this comment.
This section removes the previous (accurate) warning that the GVFS Python client does not ship a COS storage handler, and replaces it with a working-looking fs.ls("gvfs://fileset/cos_catalog/...") / pandas.read_csv("gvfs://...") example.
I checked clients/client-python/gravitino/filesystem/gvfs_storage_handler.py: StorageType only defines HDFS, LOCAL, GCS, S3A, OSS, ABS — there's no COS/cosn entry, and get_storage_handler_by_path raises GravitinoRuntimeException("Storage type doesn't support now. Path:...") for any unmatched prefix. Following this example as written will throw at runtime, not produce the shown output. Since the goal of this PR is a page that can be run end to end, this section looks like it should keep the old "not supported" note (or the Python client actually needs COS support added first).
There was a problem hiding this comment.
Restore the word that COS does not support Python GVFS/pandas.
| With credential vending the catalog holds the Tencent Cloud COS credentials and the Gravitino server hands | ||
| out a credential per request, so clients never hold cloud keys of their own. See | ||
| [Credential Vending](./security/credential-vending.md) for the general mechanism and | ||
| [COS credentials](./security/credential-vending.md#) for the properties |
There was a problem hiding this comment.
[COS credentials](./security/credential-vending.md#) — the anchor is empty (#). docs/security/credential-vending.md has sections for S3, OSS, ADLS and GCS, but no COS section at all, so there's no target this could point to yet. Either add a COS section there, or drop this link/leave a TODO instead of a dead anchor.
There was a problem hiding this comment.
Removed the dead link.
I will modify them as in the replies above. |
What changes were proposed in this pull request?
Restructures the fileset catalog documentation along a single axis: shared reference material lives in exactly one place, while each per-backend page keeps a complete runnable path.
fileset-catalog.mdbecomes the shared reference and gains a storage-backend table (bundle jar, location scheme, backend properties) in place of a bare list of links.filesystem-providers/default-filesystem-providerrows that were listed as required.Corrections made along the way:
hive_cataloginstead of the catalog it had just created.SparkSession.builderchains with no line continuations, which could not be run as written.hadoop dfsreplaced withhadoop fs.manage-*page split:#catalog-operations,#schema-operations,#placeholderand#manage-filesets-across-multiple-clusters.This is an alternative take on #12399. That PR removes the duplication between the five per-backend pages, which is real — 116 lines are byte-identical across all five of them. The difference here is where the removed procedure lands: this PR keeps it on each backend page rather than consolidating it away, on the view that a page a newcomer follows to get something running is worth duplicating, while property semantics and inheritance rules are not.
Why are the changes needed?
The per-backend pages could not be followed end to end. Names changed between steps, several code samples did not parse, and deprecated properties were marked as required. Anyone new to filesets had to reconstruct a working setup from three pages.
Does this PR introduce any user-facing change?
Documentation only. No property keys or APIs change.
How was this patch tested?
Tabs/TabItemand table-column balance across every touched page.