Retry Immich restore during Postgres startup
This commit is contained in:
@@ -97,15 +97,47 @@ done
|
|||||||
# gewuenschte Datenbank noch im Entrypoint entsteht. Der Smoke-Test legt
|
# gewuenschte Datenbank noch im Entrypoint entsteht. Der Smoke-Test legt
|
||||||
# die isolierte Test-DB deshalb defensiv an und akzeptiert nur das Rennen,
|
# die isolierte Test-DB deshalb defensiv an und akzeptiert nur das Rennen,
|
||||||
# in dem die DB parallel bereits erzeugt wurde.
|
# in dem die DB parallel bereits erzeugt wurde.
|
||||||
docker exec restoretest-immich-postgres sh -lc \
|
db_ok=0
|
||||||
'createdb -U immich immich 2>/tmp/immich-createdb.err || grep -q "already exists" /tmp/immich-createdb.err'
|
for attempt in $(seq 1 12); do
|
||||||
|
if docker exec restoretest-immich-postgres sh -lc \
|
||||||
|
'createdb -U immich immich 2>/tmp/immich-createdb.err || grep -q "already exists" /tmp/immich-createdb.err'; then
|
||||||
|
db_ok=1
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
sleep 5
|
||||||
|
done
|
||||||
|
|
||||||
# Stufe 2: Dump in Test-Postgres importieren
|
if [ "$db_ok" -ne 1 ]; then
|
||||||
# Hinweis: pg_restore mit --clean --if-exists, damit die Operation idempotent ist.
|
docker exec restoretest-immich-postgres sh -lc 'cat /tmp/immich-createdb.err >&2' || true
|
||||||
# --no-owner / --no-privileges, weil im Test-Postgres kein produktiver User existiert.
|
exit 1
|
||||||
docker exec -i restoretest-immich-postgres \
|
fi
|
||||||
pg_restore -U immich -d immich --clean --if-exists --no-owner --no-privileges \
|
|
||||||
< "$RESTORE_ROOT/dumps/latest/immich.dump"
|
# Stufe 2: Dump in Test-Postgres importieren.
|
||||||
|
# Der Postgres-Entrypoint kann kurz nach "ready" noch vom Init-Server auf
|
||||||
|
# den finalen Server wechseln; pg_restore toleriert deshalb nur transiente
|
||||||
|
# Start-/Shutdown-Fehler und versucht danach erneut.
|
||||||
|
restore_ok=0
|
||||||
|
for attempt in $(seq 1 12); do
|
||||||
|
if docker exec -i restoretest-immich-postgres \
|
||||||
|
pg_restore -U immich -d immich --clean --if-exists --no-owner --no-privileges \
|
||||||
|
< "$RESTORE_ROOT/dumps/latest/immich.dump" 2>/tmp/immich-pg-restore.err; then
|
||||||
|
restore_ok=1
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
|
||||||
|
if grep -qiE "starting up|shutting down|connection refused|database .* does not exist" /tmp/immich-pg-restore.err; then
|
||||||
|
sleep 5
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
cat /tmp/immich-pg-restore.err >&2
|
||||||
|
exit 1
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ "$restore_ok" -ne 1 ]; then
|
||||||
|
cat /tmp/immich-pg-restore.err >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
# Stufe 3: Immich-Server starten (ohne ML)
|
# Stufe 3: Immich-Server starten (ohne ML)
|
||||||
docker compose -f "$COMPOSE_FILE" up -d restoretest-immich-server >/dev/null
|
docker compose -f "$COMPOSE_FILE" up -d restoretest-immich-server >/dev/null
|
||||||
|
|||||||
Reference in New Issue
Block a user