fix(backend): Neustart gegen die eigene Datenbank, /info als Lebendprobe
Der Dienst lief einmal und stuerzte danach in einer Schleife: MODE=PostgreSQL laesst H2 unquotierte Bezeichner klein anlegen, Liquibase sucht seine Verwaltungstabellen gross, findet nichts, legt sie an — "Table databasechangelog already exists". Der erste Start ging, jeder weitere nicht. Gemessen mit dem echten Jar: ohne den Modus laufen beide. Liquibase auf Kleinschreibung zu konfigurieren half nicht, es korrigiert den Namen selbst zurueck — deshalb weicht der Modus ganz. Die Testsuite konnte das nicht finden (jeder Test bekommt eine frische In-Memory-DB), und der Regressionstest dafuer hat zweimal gelogen: erst reichte er die URL als Default-Property herein, die die application.yaml ueberstimmt; dann als Argument, aber damit pruefte er eine URL, die er sich selbst ausgedacht hatte. Jetzt hat die URL einen Regler (werkbaum.data-dir), der Test ueberschreibt nur den, und die Gegenprobe faellt. Dieselbe Sorte Fehler eine Ebene hoeher: Die Testkonfiguration hiess application.yaml und verdeckte damit die Hauptkonfiguration vollstaendig. Sie ist jetzt eine Profil-Ueberlagerung. Dazu GET /api/v1/info mit Name, Version und Bauzeitpunkt. Die Lebendprobe erwartete bisher eine 404 von einem Dokument, das es nicht gibt — ein erwarteter Fehler ist eine schlechte Zusicherung, dieselbe 404 liefert auch ein falsch konfigurierter Proxy. 138 Backend-Tests. Gegenprobe: MODE=PostgreSQL zurueck -> genau der Neustart-Test faellt. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
78901793f0
commit
dea904814b
@@ -190,14 +190,16 @@ REMOTE
|
||||
# ---- 4) Nachsehen, ob er wirklich antwortet ----
|
||||
if [ "$RESTART" -eq 1 ]; then
|
||||
echo "==> Warten, bis der Dienst antwortet"
|
||||
# Es gibt (noch) keinen Health-Endpunkt — der steht als eigener Knoten im
|
||||
# Plan (`#be.scaffold.ci`). Bis dahin ist die ehrlichste Lebendprobe eine
|
||||
# Anfrage nach einem Dokument, das es nicht gibt: 404 heißt, die Anwendung
|
||||
# ist oben und beantwortet Anfragen.
|
||||
PROBE="http://127.0.0.1:${PORT}/api/v1/documents/00000000-0000-0000-0000-000000000000"
|
||||
# `GET /api/v1/info` — offen, ohne Nebenwirkung, und sagt zugleich, welcher
|
||||
# Stand läuft. Vorher stand hier eine Anfrage nach einem nicht existierenden
|
||||
# Dokument mit der Erwartung 404; ein erwarteter **Fehler** ist eine schlechte
|
||||
# Zusicherung, weil ihn auch ein falsch konfigurierter Proxy liefert.
|
||||
PROBE="http://127.0.0.1:${PORT}/api/v1/info"
|
||||
if ssh "$SSH_TARGET" "for i in \$(seq 1 45); do
|
||||
code=\$(curl -s -o /dev/null -w '%{http_code}' --max-time 3 '$PROBE' || true)
|
||||
if [ \"\$code\" = '404' ]; then echo \" oben nach \${i}s (HTTP 404 wie erwartet)\"; exit 0; fi
|
||||
body=\$(curl -s --max-time 3 '$PROBE' || true)
|
||||
case \"\$body\" in
|
||||
*'\"version\"'*) echo \" oben nach \${i}s: \$body\"; exit 0 ;;
|
||||
esac
|
||||
sleep 1
|
||||
done
|
||||
echo ' ! antwortet nicht.'; exit 1"; then
|
||||
|
||||
Reference in New Issue
Block a user