Skip to content

feat(backups): use a stable Restic host and show packed bytes added - #942

Open
Baylem wants to merge 4 commits into
masterfrom
feat/restic-backup-accounting
Open

Baylem wants to merge 4 commits into
masterfrom
feat/restic-backup-accounting

Conversation

@Baylem

@Baylem Baylem commented Nov 12, 2026 •

Copy link
Copy Markdown
Member

Bind new Restic workers to the captured GameServer UID so successive backups of the same source can reuse a parent. Record the packed bytes added by a run separately from logical snapshot size. The field is optional for older and CSI backups and preserves an explicit zero. Both backup lists and the detail drawer display it.

The operator suite, TypeScript build and 68 backup dashboard tests passed. Four browser scenarios checked the packed-byte display. All three updated Pencil screens passed the standard visual comparison. A disposable Restic 0.19.1 repository selected the prior snapshot for a repeated server identity, selected no parent for a replacement identity, and restored the original snapshot by ID byte-for-byte.

Closes #933.

@Baylem
Baylem requested a review from ValgulNecron as a code owner November 12, 2026 05:17
@coderabbitai

coderabbitai Bot commented Nov 12, 2026 •

Copy link
Copy Markdown

Warning

Review limit reached

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Next included review available in 14 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used the included review currently available.

Learn how review limits work.

Review configuration:

Run configuration

Commits

Reviewing files that changed from the base of the PR and between e3826d8 and c5fb5ad.

Files ignored due to path filters: 4

  • assets/design-export/screenshots/DPrYX.png is excluded by !**/*.png
  • assets/design-export/screenshots/pssCT.png is excluded by !**/*.png
  • assets/design-export/screenshots/zhLZN.png is excluded by !**/*.png
  • design.pen is excluded by !**/*.pen
Files selected for processing: 43

  • assets/design-export/json/DPrYX.json
  • assets/design-export/json/pssCT.json
  • assets/design-export/json/zhLZN.json
  • changelog/unreleased/933-restic-backup-accounting.md
  • charts/gameplane/charts/gameplane-crds/crds/gameplane.local_backups.yaml
  • charts/gameplane/charts/gameplane-crds/crds/gameplane.local_backupschedules.yaml
  • charts/gameplane/charts/gameplane-crds/crds/gameplane.local_clusters.yaml
  • charts/gameplane/charts/gameplane-crds/crds/gameplane.local_gameservers.yaml
  • charts/gameplane/charts/gameplane-crds/crds/gameplane.local_gametemplates.yaml
  • charts/gameplane/charts/gameplane-crds/crds/gameplane.local_modules.yaml
  • charts/gameplane/charts/gameplane-crds/crds/gameplane.local_modulesources.yaml
  • charts/gameplane/charts/gameplane-crds/crds/gameplane.local_networkcaptures.yaml
  • charts/gameplane/charts/gameplane-crds/crds/gameplane.local_restores.yaml
  • charts/gameplane/crd-manifests/gameplane.local_backups.yaml
  • charts/gameplane/crd-manifests/gameplane.local_backupschedules.yaml
  • charts/gameplane/crd-manifests/gameplane.local_clusters.yaml
  • charts/gameplane/crd-manifests/gameplane.local_gameservers.yaml
  • charts/gameplane/crd-manifests/gameplane.local_gametemplates.yaml
  • charts/gameplane/crd-manifests/gameplane.local_modules.yaml
  • charts/gameplane/crd-manifests/gameplane.local_modulesources.yaml
  • charts/gameplane/crd-manifests/gameplane.local_networkcaptures.yaml
  • charts/gameplane/crd-manifests/gameplane.local_restores.yaml
  • i18n/locales/en/app.json
  • operator/api/v1alpha1/backup_types.go
  • operator/api/v1alpha1/zz_generated.deepcopy.go
  • operator/config/crd/gameplane.local_backups.yaml
  • operator/internal/controller/backup_budgets_test.go
  • operator/internal/controller/backup_controller.go
  • operator/internal/controller/backup_envtest_test.go
  • operator/internal/controller/backup_snapshot_scrape_test.go
  • operator/internal/controller/backup_worker.go
  • operator/internal/controller/restic_summary.go
  • operator/specs.md
  • web/e2e/screenshots/slice-3.spec.ts
  • web/e2e/screenshots/slice2b.spec.ts
  • web/src/components/backups/BackupDetailDrawer.tsx
  • web/src/components/backups/BackupRow.test.tsx
  • web/src/components/backups/BackupRow.tsx
  • web/src/components/backups/BackupSize.tsx
  • web/src/routes/tabs/Backups.test.tsx
  • web/src/routes/tabs/Backups.tsx
  • web/src/test/handlers.ts
  • web/src/types.ts
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

Share

Signed-off-by: Baylem <zelathis@gmail.com>
@github-actions

github-actions Bot commented Nov 12, 2026 •

Copy link
Copy Markdown

CI Report - 34169a6

run 43162526674 - attempt 1

0 failed - 4 passed - 3 skipped - 26 cancelled - 13m6s elapsed

Test selection: partial - per-suite table

Coverage

no coverage/* commit statuses found on 34169a6

Changed

Area Files +/-
assets/ 6 +587/-282
(root) 1 +313/-8
operator/ 10 +81/-10
web/ 10 +50/-18
charts/ 18 +40/-22
i18n/ 1 +6/-2
changelog/ 1 +3/-0

Slowest jobs

Job Duration
build e2e images (arm64) 10m16s
docs and repository checks 10m5s
build e2e images 10m5s
dependency review 10m5s
vuln (go) 10m5s

e2e buckets run

bot-fast, multicluster, upgrade

Signed-off-by: Baylem <zelathis@gmail.com>

@Baylem Baylem left a comment

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed worker construction, Restic summary parsing, the optional Backup field, CRD copies, both lists, and the detail drawer. A disposable Restic 0.19.1 repository selected the prior snapshot after a worker change, kept a replacement server in its own parent group, and restored the original backup by ID byte-for-byte. Regression tests preserve logical size and distinguish missing packed bytes, measured zero, and a positive byte count with units. Both the operator and dashboard passed their changed-line coverage gates.

@Baylem Baylem self-assigned this Nov 12, 2026

This branch has not been deployed

No deployments
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.

Use a stable Restic parent identity and report bytes added by each backup

1 participant