fix(backup): smaller forgejo dump chunks with per-chunk retries
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:
parent
ae85effd0c
commit
dd6dc38e1e
1 changed files with 19 additions and 2 deletions
|
|
@ -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}"
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue