controller v0.265.0: R-634 cause fixed, held apps say so, OOM storm alarm, R-647 leftovers
gates / gates (push) Successful in 27s
gates / gates (push) Successful in 27s
R-634: a whole-box backup no longer stops/restarts a DEPLOYING app (the measured cause of containers running under 'not deployed'); StopStack and StartStack refuse a deploying stack for every caller. R-625: held badge 'Stopped - restore needed', no Update button. R-636: kernel oom_kill counter; 20+ in 30 min -> one app_oom_storm. R-647: held error per reader, copy_holds key, two log wordings. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS
This commit is contained in:
@@ -1147,6 +1147,12 @@ func (m *Manager) StartStack(name string) error {
|
||||
if !ok {
|
||||
return fmt.Errorf("stack %q not found", name)
|
||||
}
|
||||
if stack.Deploying {
|
||||
// R-634: a second `compose up -d` beside the deploy's own is the race that left apps running
|
||||
// under „not deployed". The deploy brings the app up itself; nothing else may.
|
||||
m.logger.Printf("[WARN] [stacks] StartStack %s refused: the app's deploy is still running (R-634)", name)
|
||||
return fmt.Errorf("starting stack %s: %w", name, ErrStackDeploying)
|
||||
}
|
||||
|
||||
if m.isDebug() {
|
||||
m.logger.Printf("[DEBUG] [stacks] StartStack %s: current state=%s deployed=%v", name, stack.State, stack.Deployed)
|
||||
@@ -1229,6 +1235,13 @@ func (m *Manager) StopStack(name string) error {
|
||||
if !ok {
|
||||
return fmt.Errorf("stack %q not found", name)
|
||||
}
|
||||
if stack.Deploying {
|
||||
// R-634, the backstop for EVERY caller (backup, quiesce, restore, export, storage, the Stop
|
||||
// button): `compose down` in the middle of a deploy was measured to make the deploy fail and
|
||||
// record „not deployed" while the caller's own restart brought the containers back.
|
||||
m.logger.Printf("[WARN] [stacks] StopStack %s refused: the app's deploy is still running (R-634)", name)
|
||||
return fmt.Errorf("stopping stack %s: %w", name, ErrStackDeploying)
|
||||
}
|
||||
|
||||
if m.isDebug() {
|
||||
m.logger.Printf("[DEBUG] [stacks] StopStack %s: current state=%s deployed=%v containers=%d", name, stack.State, stack.Deployed, len(stack.Containers))
|
||||
|
||||
Reference in New Issue
Block a user