test: fall back to writable temp files for logs/status in /tmp (#6743)

A fixed /tmp path (log file, final heal status, warp log) can be owned by
another user on the shared runner (e.g. a previous root run), which made the
github-runner user fail: tee could not append the test log, the final heal
status write killed step 6 with EACCES, and upload-artifact could not read
stale root-owned warp logs. The heal scenario itself had passed
(summary=finished, vm002 reached the target) before the status-save died.

- Log files fall back to a unique mktemp path when the configured path is not
  writable (heal + pool scripts).
- The final heal status is written to a mktemp file (best effort).
- Workflow artifact uploads use globs for the fallback names.
This commit is contained in:
hector
2026-08-27 19:16:52 +08:00
committed by GitHub
parent 7c4e514ec9
commit f1de19fc14
4 changed files with 19 additions and 3 deletions
+1 -1
View File
@@ -109,7 +109,7 @@ jobs:
with:
name: rustfs-heal-test-${{ github.run_id }}
path: |
/tmp/rustfs-heal-test.log
/tmp/rustfs-heal-test*.log
/tmp/rustfs-warp.*.log
if-no-files-found: warn
@@ -154,7 +154,7 @@ jobs:
with:
name: rustfs-pool-test-${{ github.run_id }}
path: |
/tmp/rustfs-pool-test.log
/tmp/rustfs-pool-test*.log
/tmp/rustfs-warp.*.log
if-no-files-found: warn
+11 -1
View File
@@ -900,7 +900,11 @@ step6_monitor_heal() {
if printf '%s' "${summary}" | grep -qiE '^(finished|completed|success|done)$' \
&& [ "${vm002_used}" -ge "${HEAL_TARGET_GB}" ]; then
log "heal done: summary=${summary} failed=0 ${NODES[${OUTAGE_NODE_INDEX}]}_used=${vm002_used}GB >= ${HEAL_TARGET_GB}GB"
printf '%s\n' "${body}" > "${TMPDIR:-/tmp}/rustfs-heal-final-status.json"
final_status_file="$(mktemp "${TMPDIR:-/tmp}/rustfs-heal-final-status.XXXXXX.json" 2>/dev/null \
|| printf '%s' "${TMPDIR:-/tmp}/rustfs-heal-final-status.$$.json")"
printf '%s\n' "${body}" > "${final_status_file}" 2>/dev/null \
&& log "final heal status saved: ${final_status_file}" \
|| warn "could not save final heal status to ${final_status_file}"
return 0
fi
sleep "${POLL_INTERVAL}"
@@ -1068,6 +1072,12 @@ main() {
trap 'rm -f "${ADMIN_API_CODE_FILE}"' EXIT
if [ -n "${LOG_FILE}" ]; then
mkdir -p "$(dirname "${LOG_FILE}")"
if ! touch "${LOG_FILE}" 2>/dev/null; then
# A fixed /tmp path may be owned by another user (e.g. a previous root
# run); fall back to a unique, always-writable temp file.
LOG_FILE="$(mktemp "${TMPDIR:-/tmp}/rustfs-heal-test.XXXXXX.log")"
warn "log file not writable; using ${LOG_FILE}"
fi
exec > >(tee -a "${LOG_FILE}") 2>&1
fi
if [ "${RESET}" -eq 1 ]; then
+6
View File
@@ -1128,6 +1128,12 @@ main() {
trap 'rm -f "${ADMIN_API_CODE_FILE}"' EXIT
if [ -n "${LOG_FILE}" ]; then
mkdir -p "$(dirname "${LOG_FILE}")"
if ! touch "${LOG_FILE}" 2>/dev/null; then
# A fixed /tmp path may be owned by another user (e.g. a previous root
# run); fall back to a unique, always-writable temp file.
LOG_FILE="$(mktemp "${TMPDIR:-/tmp}/rustfs-pool-test.XXXXXX.log")"
warn "log file not writable; using ${LOG_FILE}"
fi
exec > >(tee -a "${LOG_FILE}") 2>&1
fi
if [ "${RESET}" -eq 1 ]; then