fix(backup): smaller forgejo dump chunks with per-chunk retries
All checks were successful
CI Smoke / host-smoke (push) Successful in 1s
CI Smoke / container-smoke (push) Successful in 3s

Use 4m split chunks and up to 8 retries per chunk to survive
intermittent kubectl cp/exec websocket EOF on large dumps.
This commit is contained in:
tegwick 2026-07-12 01:36:00 +02:00
parent ae85effd0c
commit dd6dc38e1e

View file

@ -135,10 +135,27 @@ else
chunk_dir="$(mktemp -d)"
refresh_prod_pod
parts="$(kubectl exec --request-timeout=120 -n "${FORGEJO_NAMESPACE}" "${PROD_POD}" -c gitea -- \
sh -c "rm -f /tmp/forgejo-backup-part-*; split -b 8m '${DUMP_REMOTE}' /tmp/forgejo-backup-part- && ls /tmp/forgejo-backup-part-*")"
sh -c "rm -f /tmp/forgejo-backup-part-*; split -b 4m '${DUMP_REMOTE}' /tmp/forgejo-backup-part- && ls /tmp/forgejo-backup-part-*")"
for part in ${parts}; do
base="$(basename "${part}")"
copy_from_pod "${part}" "${chunk_dir}/${base}" || { bad "forgejo dump" "chunk copy failed: ${base}"; exit 1; }
local_chunk="${chunk_dir}/${base}"
if [[ -f "${local_chunk}" && -s "${local_chunk}" ]]; then
ok "forgejo dump" "reuse cached chunk ${base}"
continue
fi
chunk_ok=0
for chunk_try in 1 2 3 4 5 6 7 8; do
if copy_from_pod "${part}" "${local_chunk}"; then
chunk_ok=1
ok "forgejo dump" "chunk ${base} (${chunk_try})"
break
fi
sleep $((chunk_try * 3))
done
if [[ "${chunk_ok}" -ne 1 ]]; then
bad "forgejo dump" "chunk copy failed: ${base}"
exit 1
fi
done
cat "${chunk_dir}"/forgejo-backup-part-* > "${DUMP_PLAIN}"
rm -rf "${chunk_dir}"