Maintain previously resolved manifests when bundle resolution fails
維護者通常 1 天內回覆
還沒有人認領這個 Issue。
評估
- 難度
- 4/5
- 預估耗時
- 3-5 天
- 新手友好度
- 46/100
研究方向
Start with clusterextension_reconcile_steps.go, following the resolution failure, fallback, pull, and active rollout paths; then read the Helm and Boxcutter maintenance paths and the linked recovery e2e scenario. Trace how persisted revisions and manifests reach each applier, and run the acceptance scenarios for both appliers. Done means resolution failures remain visible while stored content and active rollouts are maintained without applying newer config or creating an unresolved revision.
由索引模型根據 Issue 內容生成。
描述
Summary
When bundle resolution fails, continue maintaining and progressing content that was successfully resolved earlier, regardless of the failure reason. Do not apply the current ClusterExtension generation's .spec.config to a bundle resolved under an earlier generation. Maintenance of existing content must not be mistaken for successful resolution of the current request.
Current behavior
handleResolutionError uses catalog existence and a literal comparison of the requested version string with the installed version to decide whether to retry or fall back. If no matching catalog exists, it selects the installed bundle and returns no error. A subsequent successful apply can report Progressing=Succeeded, hiding the resolution failure and foregoing an error-driven retry.
Fallback also does not guarantee preservation of the previously rendered manifests. UnpackBundle still attempts to pull the installed bundle's image. If the pull succeeds, the applier receives bundle content together with the current ClusterExtension spec. Thus, a bundle resolved and rendered at generation 1 can be re-rendered with generation 2's config even though resolution failed at generation 2. The existing stored-manifest maintenance paths are taken only when contentFS is nil.
The active-rollout path skips fresh resolution but also proceeds through image pull and apply with the latest spec. It needs to preserve the already-resolved rollout's manifests when a newer generation changes render-dependent config.
Relevant code:
- Resolution failure and fallback
- Pull after fallback
- Active-rollout path
- Helm stored-release maintenance and Boxcutter stored-revision maintenance
Expected behavior
- If an active rollout has already been resolved, continue progressing its persisted revision and manifests. Do not replace it with an older installed revision or re-render it with newer config.
- Otherwise, if an installed revision exists and resolution fails, maintain its persisted manifests regardless of the error cause, catalog existence, or whether an upgrade or config change was requested. Do not create a new revision or apply the unresolved generation's config.
- If there is no previously resolved content, report the resolution failure without attempting an install.
- When resolution was attempted and failed, keep that failure visible in status even if maintenance succeeds. Retain appropriate retry or terminal-error behavior; report maintenance failures as well. Once resolution succeeds, render and apply the then-current desired config normally.
Suggested approach
Make "maintain previously resolved content" an explicit reconcile path. On resolution failure, choose the appropriate persisted revision and use its stored manifests, rather than pulling and re-rendering an old bundle with the current spec. Carry the resolution error through maintenance so successful maintenance cannot overwrite it with Progressing=Succeeded. Remove catalog existence and literal version comparison from the generic maintenance decision.
Do not simply return on resolution error. PR #2439 (implementation commit 5652b14, merged as 6e4f192) introduced workload resilience after catalog deletion. Preserve its key guarantees: existing resources self-heal, Helm corrects drift from the stored release, Boxcutter maintains its stored revision, and an already-started rollout continues. Review discussion explicitly calls for resolution failures not to stop reconciliation of managed objects.
Acceptance tests
- Install with generation 1 config. Change
.spec.configat generation 2 and fail resolution while the old image remains pullable. Verify the persisted manifests do not change, no new revision is created, existing resources are maintained, and the resolution failure is visible. Restore resolution and verify generation 2 config is applied. Cover Helm and Boxcutter. - Repeat with the old image unavailable. Stored-manifest maintenance and drift recovery must still work.
- Request a different bundle version while resolution fails. Maintain prior content without installing the requested version, and report the unresolved request.
- Change
.spec.configwhile a previously resolved revision is rolling out. Verify that the rollout continues with its persisted manifests. - With no previously resolved content, report the resolution failure without attempting an install.
Status compatibility to review
The catalog-deletion e2e scenario currently expects Progressing=Succeeded after a preflight-only spec update while the catalog is absent. This expectation must be reviewed and changed deliberately if failed resolution remains visible as Progressing=Retrying; the scenario does not establish that new .spec.config can safely be applied without resolution. The RFC linked by PR #2439 also illustrates Installed=True alongside Progressing=Retrying during maintenance of previously installed content.
- 主要語言
- Go
- 星號
- 215
- 分支
- 86
- 平均合併
- 1 天 6 小時
- 30 天內合併 PR
- 124
環境準備
- 沒有 Dockerfile 或 Docker Compose 檔案
- 有 Pull Request 範本
- 閱讀貢獻指南
從這裡開始
- 先讀完整個 Issue,再讀專案的貢獻指南。
- 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
- Fork 儲存庫,在一個分支上完成修改。
- 送出 Pull Request,並在描述裡引用這個 Issue 編號。
operator-framework/operator-controller 的其他 Issue
-
難度 5/5 一週以上 新手友好度 25/100
operator-framework/operator-controller#3056 · 4 則留言 ·
維護者通常 1 天內回覆
-
lifecycle/stale
難度 4/5 3-5 天 新手友好度 52/100
operator-framework/operator-controller#2861 · 1 則留言 ·
維護者通常 1 天內回覆
-
Add OCIImage SourceType to ClusterExtension API可能重新可做 @grokspawn 於 58 天前認領,目前沒有進行中的 PR。 未關閉
operator-framework/operator-controller#2686 · 2 則留言 · 已指派 1 人 ·
維護者通常 1 天內回覆
-
難度 4/5 3-5 天 新手友好度 48/100
operator-framework/operator-controller#2680 · 2 則留言 · 1 個 reaction ·
維護者通常 1 天內回覆
-
[epic] OLMv1: Support feature-gated APIs可能重新可做 @tmshort 於 541 天前認領,目前沒有進行中的 PR。 未關閉epic v1.x
operator-framework/operator-controller#1975 · 3 則留言 · 已指派 1 人 ·
維護者通常 1 天內回覆
查看 operator-framework/operator-controller 的全部 Issue
相似的 Issue
-
難度 1/5 1 小時以內 新手友好度 85/100
-
NodeOpUpgrade copies Pod resolv.conf into host OS, causing CoreDNS loops and image-pull failures未關閉area/operator bug chore
難度 2/5 1-3 小時 新手友好度 76/100
維護者通常 1 天內回覆
-
model:sonnet runtime:claude security size:S
難度 2/5 1-3 小時 新手友好度 75/100
FootprintAI/Containarium#3671 ·
維護者通常 1 天內回覆
-
tech-debt
難度 2/5 1-3 小時 新手友好度 85/100
維護者通常 1 天內回覆
-
難度 2/5 1-3 小時 新手友好度 74/100
維護者通常 5 天內回覆