mirror of
https://github.com/R0m1k3/Loki.git
synced 2026-10-22 22:48:11 +02:00
Moteur : un refus de LOAD_GUARD n'est plus relancé en boucle par systemd
Le refus d'un chargement résident trop gros pour la RAM faisait sortir « loki serve » en erreur (code 1) ; l'unité loki-engine (Restart=on-failure, RestartSec=3) le relançait toutes les trois secondes, sans fin, pour un échec qui ne dépend que du preset et de la machine. - Le refus sort avec un code dédié, 78 (EX_CONFIG) ; mustExit respecte le code porté par l'erreur, toutes les autres gardent 1. - L'unité écrite par « loki install » porte RestartPreventExitStatus=78 ; les autres échecs restent relancés. - Unité d'une version précédente (« loki update » ne réécrit pas les unités, il tourne sans droits root) : reconnue à coup sûr (parent systemd, INVOCATION_ID, unité et compléments lus sans la directive), le refus y sort sans erreur pour ne pas boucler, avec la marche à suivre au journal. Même chose sous launchd, qui relance toute sortie non nulle. - Le moteur d'essai de l'optimiseur garde toujours le vrai code. Le conteneur ne relance jamais le moteur de lui-même : rien à y changer, la raison reste au journal et l'interface la montre (modelLoadError). - Tests : directive reconnue (et seulement elle), code de sortie du refus, enveloppé ou non, unité générée (Linux). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
d50c8a56c6
commit
a4db6d4da1
9 files changed
+194
-3
No files matched your search
+22
-1
@@ -4,6 +4,7 @@
|
||||
package loki
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"os"
|
||||
"path/filepath"
|
||||
@@ -202,10 +203,30 @@ Env:
|
||||
func mustExit(err error) {
|
||||
if err != nil {
|
||||
fmt.Fprintln(os.Stderr, "[err]", err)
|
||||
os.Exit(1)
|
||||
os.Exit(exitStatusOf(err))
|
||||
}
|
||||
}
|
||||
|
||||
// exitStatusError : une erreur qui choisit son code de sortie. Seul usage :
|
||||
// le refus de LOAD_GUARD, que le superviseur du moteur ne doit pas relancer
|
||||
// (voir loadGuardExitStatus).
|
||||
type exitStatusError struct {
|
||||
code int
|
||||
err error
|
||||
}
|
||||
|
||||
func (e *exitStatusError) Error() string { return e.err.Error() }
|
||||
func (e *exitStatusError) Unwrap() error { return e.err }
|
||||
|
||||
// exitStatusOf : le code choisi par l'erreur, 1 sinon — comme toujours.
|
||||
func exitStatusOf(err error) int {
|
||||
var es *exitStatusError
|
||||
if errors.As(err, &es) {
|
||||
return es.code
|
||||
}
|
||||
return 1
|
||||
}
|
||||
|
||||
// LokiHome resolves the Loki data directory.
|
||||
// Précédence : $LOKI_HOME → /etc/default/loki (unix) → défaut plateforme.
|
||||
func LokiHome() string {
|
||||
|
||||
Reference in new issue
Block a user