Workload volume declarations: ownership, backup, and retention
Maintainer thường phản hồi trong vòng 1 ngày
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 5/5
- Thời gian dự kiến
- Hơn một tuần
- Mức phù hợp với người mới
- 30/100
- Loại issue
- Tính năng
- Độ rõ ràng
- Khá rõ ràng
- Mức độ hoạt động
- Sôi nổi
- Công nghệ
- docker, go
- Lĩnh vực
- cli, devops, infrastructure
Hướng nghiên cứu
Bắt đầu bằng cách đọc các issue con #141, #142 và #148, sau đó kiểm tra internal/onebox/workload_plan.go, internal/release/retention.go và các call site tiên quyết được nêu trong issue. Được xem là hoàn tất khi hình dạng của mục volume, ranh giới của sản phẩm backup và thứ tự triển khai được quyết định đủ rõ ràng để các issue con có thể tiếp tục mà không có các giả định mâu thuẫn về schema hoặc quyền sở hữu.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
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.
- Ngôn ngữ chính
- Go
- Star
- 3
- Fork
- 0
- Merge trung bình
- 2 giờ 46 phút
- Pull request đã merge (30 ngày)
- 38
Chuẩn bị môi trường
- Không có Dockerfile hay tệp Docker Compose
- Có mẫu pull request
- Đọc hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của labstack/onebox
-
bug
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 80/100
Maintainer thường phản hồi trong vòng 1 ngày
-
bug
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 85/100
Maintainer thường phản hồi trong vòng 1 ngày
-
bug
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 85/100
Maintainer thường phản hồi trong vòng 1 ngày
-
bug
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 65/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 55/100
Maintainer thường phản hồi trong vòng 1 ngày
Tất cả issue của labstack/onebox
Issue tương tự
-
automation models
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 75/100
Maintainer thường phản hồi trong vòng 1 ngày
-
bug llm-stack needs-triage
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Alert email subjects don't identify the host — same container on multiple hosts, identical subjectsĐang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 74/100
Maintainer thường phản hồi trong vòng 1 ngày
-
P3 Type: Bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 76/100
grpc/grpc-go#9483 · 2 bình luận ·
Maintainer thường phản hồi trong vòng 2 ngày
-
needs-area needs-kind needs-priority needs-status needs-triage
Độ khó 2/5 Dưới một giờ Mức phù hợp với người mới 85/100
cncf/automation#736 ·
Maintainer thường phản hồi trong vòng 1 ngày