Workload volume declarations: ownership, backup, and retention
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Idoneità per principianti
- 30/100
- Tipo di issue
- Funzionalità
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Attiva
- Stack tecnologico
- docker, go
- Ambito
- cli, devops, infrastructure
Direzione di ricerca
Inizia leggendo le issue figlie #141, #142 e #148, quindi esamina internal/onebox/workload_plan.go, internal/release/retention.go e i call site prerequisiti indicati nell’issue. Il lavoro è completato quando la forma della voce volume, il confine del prodotto di backup e l’ordine di implementazione sono stati decisi con sufficiente chiarezza perché le issue figlie possano procedere senza assunzioni conflittuali sullo schema o sulla responsabilità.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Why these are tracked together
Three open issues change what a workloads.*.volumes[] entry means, and each was
filed against a different symptom. They share one substrate, so deciding the
entry shape once is cheaper than touching that schema node three times.
- #141 — declarative ownership for bind-mounted host directories. Adds host
provisioning metadata (owner, group, permissions) to an absolute bind source. - #142 —
backup:on workload volumes. Adds a backup contract to a volume
holding durable state. - #148 — retain workloads whose relative bind-mount content is unchanged.
Not a schema change; it makes the planner test the content behind a relative
bind rather than its shape, so an unchanged workload stops being recreated on
every deploy.
#141 and #142 both add properties to the same node. #148 is a defect in the
planner and retention, and is included here because it is the third thing that
turns on what a volume entry means — a mount that is release-scoped versus one
that is external host state.
Verified state on main (checked at 5e03da0)
hasReleasePathDependency(internal/onebox/workload_plan.go:139) marks any
workload with a relative bind non-retainable, and that case is evaluated above
the revision comparison (workload_plan.go:70), soretainis unreachable for
those workloads. #148's reproduction is accurate.RetentionCandidates(internal/release/retention.go:80) protects evidence
ids, active schedule leases, the current release and its predecessor chain, and
the activation and secret checkpoints. It never inspects live container mounts,
so #148's "hard part" is real: a container retained past the chain would mount a
pruned release directory.- A volume entry today has exactly
mode,name,path,source.modeis the
rw/roenum and a relative source is schema-forced toro. backup:exists only under aservicesentry that declares a driver
(properties/services/additionalProperties/anyOf[1]), and its implementation is
wal-g and PostgreSQL specific (internal/engine/backup_postgres.go,
backup_postgres_ops.go, and therenderServicewiring in
internal/app/services.go:350). There is no driver-neutral copy engine to reuse.ob doctoralready names the gap #142 describes
(cmd/ob/doctor.go:496), anddocs/product.md:53lists workload-volume backups
under "Not owned today".
Decisions that belong here rather than in a child
The entry shape, decided once. #141 proposes host_path, uid, gid and
mode. host_path duplicates the existing source, and mode collides with the
existing rw/ro enum on the same node. A nested block — for example
host: {uid, gid, mode} — leaves the existing keys alone and gives #142 a place
to sit beside it. Whatever is chosen, both children should be written against it
before either is implemented.
Which volumes backup: can attach to. #142's proposal attaches it to an
absolute bind source. Sampling the config corpus, most durable workload state is
in named volumes rather than binds — ext-gitea (data), ext-immich
(upload), ext-n8n (storage), ext-plausible (data), ext-paperless
(pgdata, redisdata). A backup contract that reaches only bind sources would
miss the common case. This is also a partial answer to #142's own open question
about whether one application's inventory is representative.
Whether #142 is taken at all. It moves a documented product boundary and
needs a copy engine that does not exist yet. That is a product decision, not a
backlog pull, and it should be settled before the schema work in #141 assumes it.
Where a declared-path check runs. #141's comment proposes the shared host
prerequisite gate. RequireHostPrerequisites
(internal/app/prerequisites.go:182) takes only a Runner and asserts three
constant Docker commands, so project-declared paths need a sibling gate called
from the same three sites — internal/engine/bootstrap.go:83,
internal/app/preflight.go:84 and internal/engine/preflight.go:33 — rather than
a widened signature.
Suggested order
- #141 — smallest, and a directory the platform backs up should be one the
platform provisioned. - #148 — independent of the schema decision and the only one with measured
production cost, so it need not wait on #142. - #142 — only after the product boundary question is answered.
Related, not part of this
- #75 — expose effective persistence settings in canonical and doctor.
- #97 — relative bind source semantics (closed).
- #119 — retain unchanged workloads (closed), whose contract #148 restores.
- Lingua principale
- Go
- Stelle
- 3
- Fork
- 0
- Merge medio
- 2h 40m
- PR unite (30g)
- 63
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di labstack/onebox
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 55/100
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 48/100
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 35/100
-
bug
Difficoltà 3/5 1-2 giorni Idoneità per principianti 76/100
-
bug
Difficoltà 5/5 Più di una settimana Idoneità per principianti 25/100
Tutte le issue di labstack/onebox
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
-
bug group: validation priority: low
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
codecheckers/chekhov#51 ·
-
Creating worktree from an existing remote branch with a slash in it, has unexpected behaviour Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100