0054d4bd69
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
50 lines
2.4 KiB
Go
50 lines
2.4 KiB
Go
package stacks
|
|
|
|
import (
|
|
"errors"
|
|
|
|
"gitea.dooplex.hu/admin/felhom-controller/internal/i18n"
|
|
)
|
|
|
|
// R-553 — the deploy path's refusals carry a KIND, so the API can pick its status code without
|
|
// reading the customer's Hungarian sentence. The sentences themselves are unchanged (a test pins
|
|
// each one byte-for-byte); `internal/util.KindErrorf` builds the message exactly as fmt.Errorf did.
|
|
//
|
|
// Before this, internal/api/router.go matched „kötelező", „memória", "does not exist" and
|
|
// "already deployed" in the error text — so localisation slice 2 would have turned every validation
|
|
// refusal into a 500.
|
|
var (
|
|
// ErrAlreadyDeployed — the stack is already deployed (API: 409).
|
|
ErrAlreadyDeployed = errors.New("stack already deployed")
|
|
// ErrRequiredField — a required (or password) field was left empty (API: 400).
|
|
ErrRequiredField = errors.New("required field empty")
|
|
// ErrPathMissing — a path field names something that is not on the filesystem (API: 400).
|
|
ErrPathMissing = errors.New("path field does not exist")
|
|
// ErrNotEnoughMemory — the memory verdict refused the deploy (API: 400).
|
|
ErrNotEnoughMemory = errors.New("not enough memory")
|
|
// ErrStackDeploying — R-634 (v0.265.0): a stop or start was asked of a stack whose deploy is still
|
|
// running. Refused, because a `compose down` or a second `compose up -d` in the middle of the
|
|
// deploy's own `up` makes BOTH fail, and the deploy then records „not deployed" over whatever
|
|
// containers the race left behind. Pinned by TestR634_StopAndStartRefuseADeployingStack.
|
|
ErrStackDeploying = errors.New("stack is being deployed")
|
|
)
|
|
|
|
// msgHU renders a bundle message in Hungarian.
|
|
//
|
|
// It exists for the few strings this package returns as TEXT rather than as an error — the soft
|
|
// overcommit warning is the only one today. Those are display strings with no error to carry a key,
|
|
// so the copy lives in the bundle (a translator sees it, and scripts/i18n_go_parity.py pins it) while
|
|
// the value handed back is still Hungarian. **The consequence, stated rather than hidden: such a
|
|
// string renders Hungarian on an English page.** Filed as R-575; the fix is for the caller to carry
|
|
// the key the way Alert and UpdateRefusal do, not for this helper to guess a language it cannot know.
|
|
func msgHU(key string, args ...interface{}) string {
|
|
b, err := i18n.Shared()
|
|
if err != nil {
|
|
return key
|
|
}
|
|
if len(args) == 0 {
|
|
return b.Msg(i18n.Default, key)
|
|
}
|
|
return b.Msgf(i18n.Default, key, args...)
|
|
}
|