diff --git a/tools/cmd/forgejo-backup b/tools/cmd/forgejo-backup index 45812f8..83a61cd 100755 --- a/tools/cmd/forgejo-backup +++ b/tools/cmd/forgejo-backup @@ -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}"