fix(reconciler): recreate an absent stack member when its siblings are live
The periodic reconcile runs ExistingOnly — merely listing a catalog manifest must never install an app — and its only absent-container recovery keyed on the last running-names snapshot, which ages out after a few daemon restarts. An absent member of an installed stack then stays absent forever: .38 ran indeedhub with no minio/postgres for days, nginx down on 'host not found in upstream "minio"', and nothing ever put the members back. A live sibling container is proof the stack is installed on this node, so an absent member is now treated as a hole to repair, not a choice to respect: the recovery guard also fires when another member of the same stack (app_ops::stack_member_app_ids) has a container in any state. A stack with no containers at all is left untouched, and sibling app ids resolve through the loaded-manifest container names (immich-postgres runs as immich_postgres). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5
parent
d5ef4ef76e
commit
92cffe9d46
@@ -75,7 +75,8 @@ pub fn address_caching_dependents(package_id: &str) -> &'static [&'static str] {
|
||||
/// The package whose lifecycle lock covers `app_id`: the stack package when
|
||||
/// `app_id` is a member (RPC ops on "mempool" hold the "mempool" lock while
|
||||
/// they drive archy-mempool-web), otherwise the app itself.
|
||||
fn owning_package(app_id: &str) -> &str {
|
||||
/// Also consulted by the reconciler's absent-stack-member recovery.
|
||||
pub fn owning_package(app_id: &str) -> &str {
|
||||
const STACKS: &[&str] = &[
|
||||
"immich",
|
||||
"indeedhub",
|
||||
|
||||
Reference in New Issue
Block a user