Skip to content

[HWORKS-2973] Superset is not captured by backups and cannot be restored - #640

Open
jimdowling wants to merge 1 commit into
logicalclocks:mainfrom
jimdowling:HWORKS-2973
Open

[HWORKS-2973] Superset is not captured by backups and cannot be restored#640
jimdowling wants to merge 1 commit into
logicalclocks:mainfrom
jimdowling:HWORKS-2973

Conversation

@jimdowling

Copy link
Copy Markdown
Contributor

https://hopsworks.atlassian.net/browse/HWORKS-2973

Documents Superset backup and restore on the disaster-recovery page, and narrows the multi-service backup claim to what the independent schedules actually provide.

Pairs with logicalclocks/hopsworks-helm#2245, which implements it. Merge that first: this page describes behaviour that does not exist until the chart ships.

What is documented

Superset joins the backed-up services. The intro list said a consistent backup covers RonDB, HopsFS, OpenSearch and Kubernetes objects. Superset was absent, which was accurate before this ticket and is now the gap the chart closes. It gains an entry naming what lives in the Superset metadata database and stating plainly that it is a separate MySQL from RonDB.

A backup section covering what the dump contains, where it lands (superset_backup/<backup-id>/, the same object storage as the other backups), the two objects each run writes, and the metadata index. It explains why the secret key must be restored alongside the database, since connection passwords are encrypted with it, and gives the command to list the backups that were taken. Operators who supply the Superset Secrets themselves are told to add the Velero selector label, because the chart only labels the Secrets it creates.

A restore section covering the two-step procedure that the declarative design requires: set the restore flag with a backup id and upgrade, wait for the terminal phase, then clear the flag and upgrade again so the workloads resume. It covers finding a backup id, the fresh-cluster variant and why it needs the Velero Restore name, re-running a restore, reading the audit trail, and clearing the maintenance fence without destroying that trail.

ArgoCD. Both the Superset Secrets and the Trino auth Secrets need ignoreDifferences plus RespectIgnoreDifferences=true in the Application sync options. Without the sync option, ignoreDifferences only changes the diff ArgoCD displays and a sync still reapplies the rendered values over the restored ones.

Limitations, stated rather than implied. No cross-service point-in-time guarantee, because the backups run on independent schedules. Credential rotation is unsupported for clusters intended for in-place restore. Restoring Superset and RonDB to points far apart can leave a user's copied Trino password stale, which does not self-heal, so the check and the one-step repair (delete the connection and let the backend recreate it) are given.

Notes

The upstream merge in this branch resolves against the HWORKS-2971 Trino documentation, which landed while this sat on a fork. It added a ### Trino authentication section and extended the Kubernetes-objects bullet with Trino. Both are kept alongside the Superset content.

markdownlint-cli2 reports 0 issues on the page and mkdocs build -s passes.

Also corrects the setup command in this repo's own .claude notes, which still pointed at a requirements-docs.txt that no longer exists (dependencies moved to pyproject.toml, so the command is uv sync).

Signed-off-by: Jim Dowling jim@logicalclocks.com
Co-Authored-By: Claude Opus 5 (1M context) noreply@anthropic.com

https://hopsworks.atlassian.net/browse/HWORKS-2973

Superset keeps all of its state in a bundled MySQL database that no backup
path captured: the native database backup covers RonDB only, the
Kubernetes-object backup takes no volume data, and Superset's own Secrets
were not labelled for it. An uninstall, a lost volume or a disaster
recovery therefore destroyed every dashboard, chart, saved query and
database connection, and because Superset encrypts stored connection
passwords with its secret key, a database recovered without that key left
every connection present but unusable. The chart change adds a scheduled
backup, brings the three Secrets into the platform backup, and adds a
restore behind a declarative writer barrier.

Document the operator side of that on the disaster-recovery page. Superset
joins the list of services a consistent backup covers, with a backup
section describing what the dump contains, where it lands, and why the
secret key has to travel with the database.

The restore procedure is two steps, and the page says so rather than
implying one: setting the flag holds every Superset process at zero
replicas and a Job reloads and migrates the database, then clearing the
flag and upgrading again brings Superset back. It also covers finding a
backup id, the fresh-cluster variant and why that one needs the Velero
Restore name, re-running a restore, and reading the audit trail.

Two ConfigMaps are described because the split is load-bearing. Execution
state is cluster-local, since a restored completion marker would otherwise
let a real restore report success over a database that never received it,
and only the append-only audit trail is captured by the backup. Phase
progress moves forward only, which is what makes the documented claim true
that a retry does not repeat destructive work.

The limitations are stated rather than left to be discovered: no
cross-service point-in-time guarantee, credential rotation unsupported for
clusters intended for in-place restore, and a Trino connection password
that can go stale if Superset and RonDB are restored to points far apart,
with the check and the one-step repair.

Signed-off-by: Jim Dowling <jim@logicalclocks.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@jimdowling
jimdowling requested a review from maismail August 27, 2026 17:22
@jimdowling
jimdowling marked this pull request as ready for review August 27, 2026 17:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant