From 7d27ff19180a35c2eed3f5b3bdf1e434befd5aa4 Mon Sep 17 00:00:00 2001 From: Claude Agent Date: Tue, 4 Aug 2026 16:23:28 +0200 Subject: [PATCH] fix list-restorable.sh process-substitution infinite loop in volume-keys read loop Regression from d896378e: putting < <(...) on `read` re-runs the producer each iteration. Capture required volume keys once and feed via done<<<. --- list-restorable.sh | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/list-restorable.sh b/list-restorable.sh index 60d8e763..7dca113c 100755 --- a/list-restorable.sh +++ b/list-restorable.sh @@ -121,7 +121,6 @@ while IFS= read -r entry; do fi compose_file=$(echo "$entry" | jq -r '.compose_file') - volumes=$(echo "$entry" | jq -r '.volumes[]') # Check if compose file exists compose_path="${dir}/${compose_file}.yml" @@ -134,9 +133,12 @@ while IFS= read -r entry; do missing_volumes=() backup_info=() - # Get required persistent volumes (excluding ephemeral and optional) - # Use process substitution to avoid subshell issues - while IFS= read -r volume < <(get_required_volume_keys "$compose_path"); do + # Required persistent volumes only (exclude ephemeral + optional). + # Must feed the loop via done<<< / done< <(...) — putting < <(...) on + # `read` re-runs the producer every iteration and infinite-loops on the + # first key (vibe regression 2026-08-04 d896378e). + volumes=$(get_required_volume_keys "$compose_path") + while IFS= read -r volume; do volume_name="rpc_${volume}" # jwt/secrets volumes are regenerated at create-node — never backed up by # design, so they must not gate restorability (kept plasma marked