[HWORKS-3017] File-based credentials for user-created Trino catalogs (wallets, keystores) - #636
[HWORKS-3017] File-based credentials for user-created Trino catalogs (wallets, keystores)#636ErmiasG wants to merge 10 commits into
Conversation
There was a problem hiding this comment.
Pull request overview
Adds documentation for the new “mountable secrets” feature used by Trino catalogs that require file-based credentials (wallets/keystores), and updates existing Trino docs to reflect the current approval workflow and credential handling.
Changes:
- Adds a new user guide page describing mountable secrets, creation rules/limits, reference syntax, and an Oracle wallet example.
- Updates the Trino Query Engine user guide to point users to mountable secrets for file-based connector auth and to use “Pending approval” terminology.
- Expands the Trino admin guide with mountable secret internals, operational considerations (mount sidecar, SA changes, backup/diagnostics), and updates “sync” → “approve” terminology; adds a nav entry for the new page.
Reviewed changes
Copilot reviewed 4 out of 16 changed files in this pull request and generated 3 comments.
| File | Description |
|---|---|
mkdocs.yml |
Adds navigation entry for the new Mountable Secrets user guide page. |
docs/user_guides/projects/trino/query_engine.md |
Updates user-facing Trino catalog workflow terminology and links to mountable secrets for file-based credentials. |
docs/user_guides/projects/trino/mountable_secrets.md |
New page documenting mountable secret bundles, usage, limits, and an Oracle worked example. |
docs/setup_installation/admin/trino.md |
Updates admin workflow terminology and documents cluster-level mechanics/operations for mountable secrets (mounting, config, backup, diagnostics). |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
| - A `${HOPSWORKS_SECRET:<name>}` reference is stored verbatim in the `trino_catalog` database row and is resolved to its value only at approval time. The database row never holds the value. | ||
| - A literal value typed straight into the properties editor is stored as-is in the `trino_catalog` database row, in cleartext, and is captured by database backups. Use a secret reference for any credential you do not want in the database. | ||
| - Either way, the synced file holds the resolved plaintext, because Trino reads the credential from the catalog file itself. | ||
| - Either way, the written file holds the resolved plaintext, because Trino reads the credential from the catalog file itself. |
| An **already approved catalog keeps working only as far as its definition**. | ||
| Its reference still resolves to a path, but nothing populates that path any more. | ||
| For a connector that opens its files when a connection is made, such as Oracle, the coordinator starts cleanly and queries fail. | ||
| Sync does not consult the flag, by design, so switching the store off does not quarantine catalogs that already use it. |
| Deleting a catalog follows the same path in reverse. | ||
| The catalog is marked for removal immediately and disappears from your Catalogs tab, an administrator's next sync removes it from the Query Engine's configuration, and it stops being queryable at the next restart, because a running Trino keeps the catalogs it started with. | ||
| The catalog is marked for removal immediately and disappears from your Catalogs tab, an administrator's next approval removes it from the Query Engine's configuration, and it stops being queryable at the next restart, because a running Trino keeps the catalogs it started with. | ||
| A catalog you have deleted can therefore still answer queries for a while. |
|
All three taken, in 8cd5121. Two of them caught a word this branch itself made wrong. "an administrator's next approval removes it" was incorrect. A deletion is applied, not approved, and this branch's own admin guide already said so, so the two pages contradicted each other. The cluster agrees with the admin guide: with only removals waiting, the alert reads "Nothing needs your approval" and the action button relabels itself to "Apply removals (N)". The user guide now says an administrator applies the removal. "Sync does not consult the flag" kept the old name for the step this branch renamed to approval, in the paragraph about turning the store off. Now reads "Approval does not consult the flag". Note the other The list items now match their neighbour. The third bullet under "Where catalog credentials are stored" already used a continuation line for its second sentence; the first two did not. They do now. |
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 4 out of 16 changed files in this pull request and generated no new comments.
Suppressed comments (2)
docs/user_guides/projects/trino/query_engine.md:149
- The admin guide distinguishes between approving catalogs and applying removals (deletions are Pending removal and are applied, not approved). This sentence says an administrator’s next approval removes a deleted catalog, which conflicts with the documented workflow and could confuse users about which action they’re waiting for.
Deleting a catalog follows the same path in reverse.
The catalog is marked for removal immediately and disappears from your Catalogs tab, an administrator then applies the removal rather than approving it, and it stops being queryable at the next restart, because a running Trino keeps the catalogs it started with.
docs/setup_installation/admin/trino.md:245
- This section consistently uses the new “approval” terminology, but this sentence still refers to “Sync”, which can be read as the old workflow name. Align it with the rest of the page to avoid ambiguity.
Its reference still resolves to a path, but nothing populates that path any more.
https://hopsworks.atlassian.net/browse/HWORKS-3017 The admin UI no longer calls this step a sync. An administrator approves a catalog a project wrote, then restarts Trino to load it, so the admin and user guides follow: Pending sync becomes Pending approval, Synced becomes Approved, and the "Syncing" section becomes "Approving". The screenshots are retaken against a cluster running the new build. A deletion is documented separately, because it is not an approval. The owner has already decided, there is no definition for an administrator to vouch for, and refusing a removal would mean keeping a catalog, and the credentials it has loaded, that the project deleted. Deletions are listed as Pending removal, are excluded from the count of catalogs needing approval, and are applied rather than approved. A new figure shows that state. Wording that describes the GitOps sense of sync is left alone, as is the mechanism itself: the backend state is still PENDING_SYNC and no API changed, so nothing here documents a behaviour change. catalog-pending-sync.png is renamed to catalog-pending-approval.png since the status it shows no longer exists. Signed-off-by: Ermias Gebremeskel <ermias@hopsworks.ai> Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…(wallets, keystores) https://hopsworks.atlassian.net/browse/HWORKS-3017 Document mountable secrets, the project-scoped bundles of credential files that let a connector authenticate with a wallet or a keystore rather than with a password. Nothing described the feature, and the query engine guide told users the opposite of what now ships. Add a user guide page covering how a bundle is created, why it cannot be edited, the two reference forms and the rule that a reference cannot be extended with a path, the per-project limits with their defaults, and the Data Owner and API-key scope it takes. It ends on an Oracle Autonomous Database worked example, because three things there cause most of the failures and none of them name themselves: the alias before the question mark comes from the wallet's own tnsnames.ora rather than the OCI console, ORA-12506 means either a rejected source address or a wallet the client never loaded, and a downloaded sqlnet.ora retries for about a minute so a rejected address presents as a hang. Correct the query engine guide, which said a connector needing a local file had to be served by an administrator. That was true before this feature and is now the thing the new page describes, so the paragraph points there instead. The admin guide gains what the store adds to a cluster: where bundles live and why the tree is keyed by project id, the privileged FUSE sidecar that mounts them read-only on the coordinator, the workers and the test coordinator, the Kyverno exception and the two ServiceAccounts an upgrade introduces, why OpenShift is unsupported, and what turning the store off does to a catalog that was already approved. Backup is called out because bundles are HopsFS files rather than Kubernetes objects, so the object backup that captures the catalog Secrets does not cover them. A short runbook follows, since there is no admin endpoint for the store: the checks are kubectl exec, and the mount is worth checking on a worker rather than only on the coordinator, because a missing mount is otherwise invisible. Four screenshots come from the running cluster, and taking them corrected the page twice: the button is New rather than Create, and the page sits under Project Settings, Mountable Secrets. The page also states two things the first draft left out, both now in a warning: file contents can never be read back, and where a cluster runs the Trino test coordinator every bundle on it is readable from that coordinator, so a bundle should be treated as readable by the cluster rather than by one project. The claim that the delete confirmation names the referencing catalogs is softened to what was actually checked, which is that the listing names them. The delete dialog was deliberately not opened: a bundle's files cannot be read back, so a misclick there would have destroyed a wallet that could not be restored. Every fact here was read out of the merged code or verified against a cluster running it, including the eight configuration variables and their defaults, three of which are seeded rows while five fall back to coded defaults until an administrator adds them. Signed-off-by: Ermias Gebremeskel <ermias@hopsworks.ai> Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…(wallets, keystores) https://hopsworks.atlassian.net/browse/HWORKS-3017 Retake the catalog-recovery figure against a query engine that is actually failing, and say in the caption what the picture shows. The earlier screenshot retake in this branch replaced an image of the failure with one taken on a healthy cluster: no pending catalogs, no banner, nothing wrong. It matched its caption, which spoke only about the restart action staying available, but it illustrated none of the paragraph above it, which is about pods stuck in CrashLoopBackOff because a catalog will not load. A section called "Recovering a catalog Trino cannot load" had no picture of a catalog Trino cannot load. The state is reproduced rather than staged. A postgresql catalog carrying one property the connector does not accept was created, approved and loaded, which stopped the coordinator and one worker in CrashLoopBackOff while the previous pods kept serving. The new figure is that cluster: the banner naming the cause and the pod count, no catalogs pending, and the restart action offered as "Restart Trino (recover)". The caption now describes both halves. Recovery then ran through the same button, which removed the catalog, marked it Failed with the connector's own error, and brought the engine back. Signed-off-by: Ermias Gebremeskel <ermias@hopsworks.ai> Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…(wallets, keystores) https://hopsworks.atlassian.net/browse/HWORKS-3017 Correct three statements a review of this branch found wrong. Each was checked against the source or the cluster rather than reasoned about. The mountable secret settings were added to a list introduced by "to modify these settings, navigate to Cluster Settings", which for two of them is advice that breaks a cluster. The store root and the mount root are seeded by the chart from one Helm value that also presets the HopsFS directory and feeds the mount sidecar, so editing either row alone points the backend at a path nothing is mounted from, which the setting's own source comment says in as many words. They now sit in their own section that names the Helm value to change instead, alongside the fact that the five per-project limits have no seeded row, so searching Cluster Settings for them finds nothing on a fresh cluster and that is expected. The flag's coded fallback is false while the chart seeds true, so that is stated too. The Oracle retry parameters were attributed to sqlnet.ora. They are in tnsnames.ora, once per alias, inside the connect descriptor: on a wallet mounted in a running coordinator, retry_count appears five times in tnsnames.ora and not once in sqlnet.ora, which holds only the wallet location and the server DN check. Editing the file the page named would have left the minute-long delay in place, which is the whole reason the paragraph exists. Deleting a bundle was described as breaking a catalog "the next time Trino loads it". The Query Engine sees the store through a live mount and a driver-time connector reads its files when it opens a connection, so the failure arrives on the next query with no restart involved. The page now says that, and says what to do when an interruption is unacceptable: put the replacement under a new name, repoint the catalog, and delete the old bundle once the new one is loaded. The admin guide already described the equivalent case correctly, so the two pages had disagreed. Reviewed-by: OpenAI Codex (GPT-5 via codex-plugin-cc 1.0.4) <codex@openai.com> Signed-off-by: Ermias Gebremeskel <ermias@hopsworks.ai> Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…(wallets, keystores) https://hopsworks.atlassian.net/browse/HWORKS-3017 Give the connection URL that carries the retry setting, instead of telling the reader to edit a wallet and upload it again. The previous wording named the right file but the wrong remedy: editing tnsnames.ora inside a wallet means rebuilding the archive, deleting the bundle and creating it again, which is a great deal of work to see an error message. The Oracle driver takes a connect descriptor where an alias would go, so the descriptor can be pasted into connection-url with retry_count=0 and the wallet still authenticates through TNS_ADMIN. Test connection then answers at once rather than after about a minute. The form is not hypothetical. The catalog used to verify this feature on a cluster is written exactly this way, so the page now shows it with the host and service name as placeholders, says where to copy them from, and notes that a catalog can keep the descriptor permanently, which also records the consumer group it connects to rather than leaving it to an alias name. Signed-off-by: Ermias Gebremeskel <ermias@hopsworks.ai> Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…(wallets, keystores) https://hopsworks.atlassian.net/browse/HWORKS-3017 Drop retry_delay from the diagnostic connect descriptor, and say why. The example carried (retry_count=0)(retry_delay=3), copied across from a real catalog where the delay was left behind when the count was zeroed. It is meaningless there: retry_delay only spaces out retries, so with no retries to space out it is a value that reads as significant and is not. The example now sets retry_count=0 alone, and the surrounding text tells the reader to leave retry_delay behind when copying a descriptor out of a wallet. Signed-off-by: Ermias Gebremeskel <ermias@hopsworks.ai> Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…(wallets, keystores) https://hopsworks.atlassian.net/browse/HWORKS-3017 Take the three review comments. Two are about a word this branch itself made wrong, and one is the style rule applied to list items. A deletion is applied, not approved. The user guide said an administrator's next approval removes the catalog, which contradicts the same branch's admin guide, where deletions are listed as Pending removal and are applied rather than approved. The cluster agrees with the admin guide: with only removals waiting, the alert reads that nothing needs approval and the action relabels itself to "Apply removals". The user guide now says an administrator applies the removal. "Sync does not consult the flag" kept the old name for the step this branch renamed to approval, in a paragraph about turning the store off. It now reads approval. The GitOps sync mentioned in the recovery section is a different thing and stays as it is. The two remaining bullets under where catalog credentials are stored had two sentences on one line each, which the third bullet in the same list already avoided with a continuation line. They now match it. Reviewed-by: GitHub Copilot <Copilot@users.noreply.github.com> Signed-off-by: Ermias Gebremeskel <ermias@hopsworks.ai> Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…(wallets, keystores) https://hopsworks.atlassian.net/browse/HWORKS-3017 Retake the restart confirmation against a cluster with a query running, which is what its caption has always claimed to show. The figure said "No queries are currently running", while the caption promises that the dialog reports the running queries a restart will interrupt. It demonstrated the zero case, so the sentence a reader is being pointed at was the one sentence not in the picture. This is the same defect as the recovery figure earlier on this branch, in the same retake, so the remaining three images from it were checked as well: catalogs-pending, catalogs-pending-restart and catalogs-pending-removal each show the state their caption describes and are left alone. The new figure was taken with a six billion row scan in flight, and the dialog reads "1 running or queued query will be interrupted". Signed-off-by: Ermias Gebremeskel <ermias@hopsworks.ai> Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…(wallets, keystores) https://hopsworks.atlassian.net/browse/HWORKS-3017 HWORKS-3045 landed first and changed the model these pages were written against. Applying a pending catalog is now one Restart Trino action rather than a sync followed by a restart, a scheduled restart applies pending changes with no administrator involved, and the dialog shown after a catalog is created depends on the viewer: a cluster administrator is offered Restart query engine now alongside the live query count, while a project user is told the next scheduled restart in their own timezone. The pages are rewritten for that model and every screenshot is retaken against the current UI. query_engine.md loses its Managing Catalogs section. It duplicated the catalogs page that HWORKS-3045 added, and contradicted it, since logicalclocks#634 introduced catalogs.md without touching query_engine.md. The content that existed only there moves rather than being dropped: the installed connector list and the rejected internal connectors, the rule that a secret reference resolves against its creator's own secrets, the warning that a secret created from an uploaded file holds base64 and cannot be referenced, the latin1 constraint on property values, and the per-role grants on a user-created catalog. What remains on the page is a pointer. catalogs.md becomes the single user-facing catalog page and gains the screenshots it never had. Creating a catalog by hand is now its own section instead of a bullet, the five statuses the list actually shows are named, and When changes take effect is folded into When the catalog goes live so the lifecycle is explained once. mountable_secrets.md is cut by a third, mostly by reducing the Oracle retry_count explanation from nine paragraphs to three sentences and the connect-descriptor example, and it no longer says a bundle change needs an administrator to approve it. On the administrator page, two passages still described select-then-sync-then-restart, the confirmation dialog now asks for a typed confirm, and the claim about the mountable secret store root is corrected: the backend checks owner, group and mode on a project's first bundle and before deleting a project's tree, not on every upload. The screenshots were taken on a cluster with two accounts so the role split is real rather than described. A project Data Owner who is not a cluster administrator creates an Oracle catalog over a wallet bundle and is told it goes live at the next scheduled restart; the administrator sees that request on the cluster Catalogs tab and applies it immediately. A catalog carrying a property the connector does not accept was created through the API, since the dialog will not enable Create until the connection test passes, and it quarantined the query engine on the next restart, which is where the failed-catalog and recovery figures come from. Two figures are dropped: one showed the two-step apply that no longer exists, the other was committed and referenced by nothing. A figure of a project's own catalog allowance is added, because the setting is a section of the project configuration form rather than a page, and the previous wording read as though there were something named Query Engine to click. Also fixed in passing, having hit it while building the docs: the repository's own agent instructions told the reader to install from a requirements-docs.txt that no longer exists, and omitted that a mkdocs serve needs the docs/javadoc stub. Testing: strict mkdocs build clean with no warnings, markdownlint clean on all four pages, snakeoil clean on the Python blocks, and the cross-page heading links verified to resolve in the build output. Signed-off-by: Ermias Gebremeskel <ermias@hopsworks.ai> Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…(wallets, keystores) https://hopsworks.atlassian.net/browse/HWORKS-3017 Move Mountable Secrets out of the Query Engine section and up to the project level, next to Secrets. A bundle belongs to the project, is managed from Project Settings, and the store is deliberately not Trino-owned: Trino asks the store for a mount rather than owning it, so any service could be given read-only access to one. Nesting the page under Query Engine (Trino) presented a project-level capability as though it were part of one service. The page and its four figures move out of the trino paths as well, to user_guides/projects/mountable_secrets/ and assets/images/guides/mountable_secrets/, so the location agrees with the placement. Nothing else has to change: the pages that link to it do so by heading id rather than by path, and the page sits at the same depth, so its image references keep the same number of levels. Signed-off-by: Ermias Gebremeskel <ermias@hopsworks.ai> Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 7 out of 35 changed files in this pull request and generated no new comments.
Suppressed comments (1)
docs/user_guides/projects/trino/catalogs.md:11
- The navigation path here contradicts
query_engine.md, which now says the UI entry is Queries under Analytics (with Catalogs as a tab). To avoid confusing readers, align this page’s first instruction with the updated UI naming/path.
HWORKS-3017
Documents mountable secrets, the project-scoped bundles of credential files that let a connector authenticate with a wallet or a keystore instead of a password, and rewrites the Trino documentation around them for the lifecycle that #634 shipped.
Why the other pages are rewritten and not merely extended
HWORKS-3045 landed while this branch was open and changed the model these pages described. Applying a pending catalog is now one Restart Trino action instead of a sync followed by a restart, a scheduled restart applies pending changes with no administrator involved, and the dialog shown after a catalog is created depends on the viewer: a cluster administrator is offered Restart query engine now alongside the live query count, while a project user is told the next scheduled restart in their own timezone.
#634 added
catalogs.mdwithout touchingquery_engine.md, somaincurrently carries two accounts of the same feature and the older one is wrong. That is the largest change here.query_engine.mdLoses its
Managing Catalogssection, which duplicated and contradicted the catalogs page. The content that existed only there moves rather than being dropped: the installed connector list and the rejected internal connectors, the rule that a secret reference resolves against its creator's own secrets, the warning that a secret created from an uploaded file holds base64 and cannot be referenced, the latin1 constraint on property values, and the per-role grants on a user-created catalog. What is left on the page is a pointer.Retaking its figures corrected the surrounding prose in five places, all of which described an older UI:
catalogs.mdBecomes the single user-facing catalog page and gains the screenshots it never had. Creating a catalog by hand is its own section instead of a bullet, the five statuses the list actually shows are named (Approved, Pending approval, Pending restart, Pending removal, Failed), and
When changes take effectis folded intoWhen the catalog goes liveso the lifecycle is explained once rather than twice.mountable_secrets.mdNew page, at project level next to Secrets rather than under Query Engine. A bundle belongs to the project, is managed from Project Settings, and the store is deliberately not Trino-owned: Trino asks the store for a mount rather than owning it, so any service could be given read-only access to one. It covers creating a bundle from files or a flat zip, why a bundle cannot be edited and what to do instead, the two reference forms and the rule that a reference cannot be extended with a path, the per-project limits with their defaults, and the Data Owner role and
MOUNTABLE_SECRETscope it takes.It ends on an Oracle Autonomous Database worked example, because three things there cause most of the failures and none of them name themselves:
?comes from the wallet's owntnsnames.ora, not the service name in the OCI consoleORA-12506means either a source address the database does not accept or a wallet the client never loaded, and the two look identical from outsidetnsnames.oracarries(retry_count=20)(retry_delay=3)inside its connect descriptor, so a rejected address presents as a minute-long hang rather than an errorsetup_installation/admin/trino.mdA new section covers what the store adds to a cluster: where bundles live and why the tree is keyed by project id, the privileged FUSE sidecar that mounts them read-only on the coordinator, the workers and the test coordinator, the Kyverno exception and the two ServiceAccounts an upgrade introduces (a binding that named
defaultto reach Trino has to be repointed), why OpenShift is unsupported, and what turning the store off does to a catalog that already went live.Backup is called out separately because bundles are HopsFS files, so the Kubernetes object backup that captures the catalog Secrets does not cover them. A short runbook follows, since there is no admin endpoint for the store: the checks are
kubectl exec, and the mount is worth checking on a worker rather than only the coordinator, because a missing mount is otherwise invisible (the sidecar mounts into its own filesystem and both containers report ready).Eight configuration variables are documented with their defaults. Three are seeded rows; five fall back to coded defaults until an administrator adds them, which is why they do not appear in Cluster Settings on a fresh install.
Three existing passages are also corrected. Two still described select-then-sync-then-restart. The restart confirmation now asks for a typed
confirm. And the sentence about the store root claimed the backend checks it "before it writes a bundle or deletes a project's tree ... so a root created by hand with the wrong mode fails every upload": the check sits insideif (!dfso.exists(projectPath)), so it runs on a project's first bundle and again before a project's tree is deleted, not on every upload, and it compares owner, group and mode rather than two of the three.Screenshots
26 figures added or replaced, 2 removed, every one captured today against a cluster running this build. The two removed showed states that no longer exist: the two-step apply, and a catalog "Pending sync".
The role split is demonstrated with two accounts rather than described. A project Data Owner who is not a cluster administrator creates an Oracle catalog over a wallet bundle and is told it goes live at the next scheduled restart; the administrator sees that request on the cluster Catalogs tab and applies it immediately, behind the confirmation that names what it interrupts.
A catalog carrying a property the connector does not accept was created through the API, because the dialog will not enable Create until the connection test passes. It quarantined the query engine on the next restart, which is where the failed-catalog and recovery figures come from, and the engine was recovered with the same Restart Trino action the page documents.
A figure of a project's own catalog allowance is added, because the previous wording (
edit Query Engine, Trino catalogs) read as though there were something named Query Engine to click. It is a section of the project configuration form, after the Kafka topic quota, reached through Edit configuration on the project's row.Verification
Strict
mkdocs build -spasses locally with no warnings,markdownlint-cli2reports 0 errors on all four pages,snakeoilis clean on the Python blocks, and the cross-page heading links were confirmed to resolve in the build output rather than assumed.Every fact was read out of the merged code or checked against a cluster running it: the error codes and caps from
RESTCodes.javaandSettings.java, the name pattern[A-Za-z0-9][A-Za-z0-9._-]{0,62}, theDATA_OWNERand@ProjectObserversNotAllowedannotations, the ownership gate inMountableSecretsController, thepayara:hdfsmode750preset incharts/hopsfs/templates/preset_job.yaml, and the variables confirmed live (mountable_secrets_path=/apps/mountable-secrets,trino_mountable_secrets_root=/opt/hopsworks/mounts). The Oracle examples are configurations that connected on that cluster.Prose follows the repo conventions: one sentence per line, links by heading ID rather than relative path, and every new page is in
mkdocs.yml.Corrections an earlier adversarial review found
Kept here because each was checked against the source or the running cluster rather than argued about.
The mountable secret settings were listed under "to modify these settings, navigate to Cluster Settings". For two of them that advice breaks a cluster: the store root and the mount root are seeded by the chart from one Helm value that also presets the HopsFS directory and feeds the mount sidecar, so editing either row alone points the backend at a path nothing is mounted from. They now have their own section naming the Helm value, together with the fact that the five per-project limits have no seeded row. The flag's coded fallback is
falsewhile the chart seedstrue, which is now stated.The Oracle retry parameters were attributed to
sqlnet.ora. They are intnsnames.ora, once per alias, inside the connect descriptor. Checked on the wallet mounted in a running coordinator:retry_countappears five times intnsnames.oraand not once insqlnet.ora, which holds only the wallet location and the DN check. Editing the file the page named would have left the minute-long delay in place, which is the only reason that paragraph exists.Deleting a bundle was described as breaking a catalog "the next time Trino loads it". The query engine sees the store through a live mount and a driver-time connector reads its files when it opens a connection, so the failure arrives on the next query with no restart involved. The page now says so, and says what to do when an interruption is unacceptable. The admin guide already had this right, so the two pages had disagreed.
The review upheld two things it was asked to attack: the backup statement, and the retaken recovery figure, whose banner, caption and surrounding prose it found consistent.
Also in this branch
The repository's own agent instructions told the reader to install from a
requirements-docs.txtthat no longer exists (it isuv syncnow) and omitted that a localmkdocs serveneeds thedocs/javadocstub. Fixed in passing, having hit both while building these pages.Not covered
The Add Trino Catalog action on a data source is documented but has no figure: neither project on the verification cluster has a data source that maps to a Trino connector, so there was nothing to photograph, and that section arrived with #634 already accurate.
🤖 Generated with Claude Code