fix(monitoring): drop run-until-done from GOA ladder
This commit is contained in:
parent
ab8399d034
commit
d2a2caacc8
1 changed files with 34 additions and 40 deletions
|
|
@ -4,16 +4,19 @@
|
|||
# bank.hacktivism.ch flow (landing):
|
||||
# 1) GET /intro/auto-account.json → personal goa-account-* (GOA:0)
|
||||
# 2) Mint pool withdrawals as explorer (shared pool) + confirm when selected
|
||||
# 3) wallet-cli accept-uri + run-until-done
|
||||
# 3) wallet-cli accept-uri only (no run-until-done — hangs / developer ban)
|
||||
# 4) bank confirm when selected; settle = poll balance + bank transfer_done
|
||||
#
|
||||
# Amounts: random within defined ranges, strictly increasing.
|
||||
# Amounts: random strictly increasing; 0 and max fixed.
|
||||
# On first hard failure: stop, print timing report, exit 1.
|
||||
# Soft: GOA:0 / wallet 7006 (no denoms) → WARN and continue.
|
||||
#
|
||||
# Env:
|
||||
# LADDER_STEPS total rungs (default 23) = 0 + (N-2) random + max
|
||||
# LADDER_MAX_AMOUNT fixed last pin (libeufin ceiling 4503599627370496)
|
||||
# LADDER_TIMEOUT_S default 3600
|
||||
# LADDER_LOAD=0 skip host load snapshots
|
||||
# LADDER_SETTLE_ROUNDS / LADDER_SETTLE_SLEEP — balance poll only (no shepherd)
|
||||
# EXP_PW_FILE, LADDER_REPORT_DIR, …
|
||||
#
|
||||
# Path: always [0] → strictly increasing random (log-uniform) → [max]
|
||||
|
|
@ -321,7 +324,7 @@ for AMT in "$@"; do
|
|||
break
|
||||
fi
|
||||
|
||||
# Confirm ASAP when bank status is selected (do NOT block on long run-until-done first).
|
||||
# Confirm ASAP when bank status is selected. No run-until-done (hangs on macOS/wallet).
|
||||
# Server-side auto-confirm only watches landing withdraw-watch.ids — ladder must confirm itself.
|
||||
bank_st() {
|
||||
curl -sS -m 8 "${BANK}/taler-integration/withdrawal-operation/${WID}" 2>/dev/null \
|
||||
|
|
@ -404,20 +407,7 @@ else:
|
|||
break
|
||||
;;
|
||||
esac
|
||||
# short shepherd only — never block tens of seconds on run-until-done
|
||||
if [ $((i % 3)) -eq 1 ]; then
|
||||
if command -v timeout >/dev/null 2>&1; then
|
||||
timeout 4 wcli run-until-done >"$SCRATCH/sel-$tag-$i.out" 2>&1 || true
|
||||
else
|
||||
# macOS: background + kill
|
||||
wcli run-until-done >"$SCRATCH/sel-$tag-$i.out" 2>&1 &
|
||||
wpid=$!
|
||||
sleep 4
|
||||
kill "$wpid" 2>/dev/null || true
|
||||
wait "$wpid" 2>/dev/null || true
|
||||
fi
|
||||
fi
|
||||
# if still pending after a few polls, force bank select once
|
||||
# if still pending after a few polls, force bank select once (no wallet shepherd)
|
||||
if [ "$i" = "4" ] || [ "$i" = "12" ]; then
|
||||
force_select_if_needed "$st"
|
||||
fi
|
||||
|
|
@ -438,18 +428,16 @@ else:
|
|||
fi
|
||||
ok "confirm $AMT ${ms_confirm}ms (client, on selected)"
|
||||
|
||||
# settle coins (zero amount: no balance increase expected)
|
||||
# settle: poll wallet balance + bank transfer_done only — never run-until-done
|
||||
t0=$(now_ms)
|
||||
settled=0
|
||||
xfer="?"
|
||||
if [ "$IS_ZERO" = "1" ]; then
|
||||
# short wallet run only
|
||||
wcli run-until-done >"$SCRATCH/rud-$tag-zero.out" 2>&1 || true
|
||||
settled=1
|
||||
note="zero-amount: no coin delta expected"
|
||||
else
|
||||
for r in $(seq 1 "$LADDER_SETTLE_ROUNDS"); do
|
||||
ladder_over && break
|
||||
wcli run-until-done >"$SCRATCH/rud-$tag-$r.out" 2>&1 || true
|
||||
after=$(wallet_avail)
|
||||
if python3 -c "
|
||||
from decimal import Decimal
|
||||
|
|
@ -459,12 +447,23 @@ sys.exit(0 if Decimal(sys.argv[1]) > Decimal(sys.argv[2]) else 1)
|
|||
settled=1
|
||||
break
|
||||
fi
|
||||
xfer=$(curl -sS -m 10 "${BANK}/taler-integration/withdrawal-operation/${WID}" \
|
||||
| python3 -c 'import json,sys; d=json.load(sys.stdin); print(d.get("transfer_done"), d.get("status"))' 2>/dev/null || echo "?")
|
||||
# bank done is enough to leave settle without hanging on wallet
|
||||
if echo "$xfer" | grep -qi True; then
|
||||
note="bank transfer_done (no run-until-done) avail=${after} $xfer"
|
||||
break
|
||||
fi
|
||||
sleep "$LADDER_SETTLE_SLEEP"
|
||||
done
|
||||
fi
|
||||
ms_settle=$(elapsed_ms "$t0")
|
||||
after=$(wallet_avail)
|
||||
ms_total=$(elapsed_ms "$t_rung")
|
||||
if [ -z "${xfer:-}" ] || [ "$xfer" = "?" ]; then
|
||||
xfer=$(curl -sS -m 10 "${BANK}/taler-integration/withdrawal-operation/${WID}" \
|
||||
| python3 -c 'import json,sys; d=json.load(sys.stdin); print(d.get("transfer_done"), d.get("status"))' 2>/dev/null || echo "?")
|
||||
fi
|
||||
|
||||
if [ "$settled" = "1" ]; then
|
||||
status="OK"
|
||||
|
|
@ -472,18 +471,14 @@ sys.exit(0 if Decimal(sys.argv[1]) > Decimal(sys.argv[2]) else 1)
|
|||
ok "settle $AMT → ${CUR}:${after} (settle ${ms_settle}ms, rung ${ms_total}ms)"
|
||||
OK_N=$((OK_N + 1))
|
||||
echo -e "${rung}\t${range_note}\t${AMT}\t${status}\t${ms_mint}\t${ms_accept}\t${ms_confirm}\t${ms_settle}\t${ms_total}\t${WID}\t${note}" >>"$TSV"
|
||||
else
|
||||
xfer=$(curl -sS -m 10 "${BANK}/taler-integration/withdrawal-operation/${WID}" \
|
||||
| python3 -c 'import json,sys; d=json.load(sys.stdin); print(d.get("transfer_done"), d.get("status"))' 2>/dev/null || echo "?")
|
||||
if echo "$xfer" | grep -qi True; then
|
||||
status="OK_BANK_LAG"
|
||||
note="bank transfer_done avail=${after} $xfer"
|
||||
warn settle "lag after $AMT" \
|
||||
"problem: bank transfer_done but wallet balance not increased yet (avail=${CUR}:${after}, settle ${ms_settle}ms) — coins may still be in flight"
|
||||
elif echo "$xfer" | grep -qi True; then
|
||||
status="OK_BANK"
|
||||
note="bank transfer_done avail=${after} $xfer (no run-until-done)"
|
||||
ok "settle $AMT bank transfer_done (wallet avail=${CUR}:${after}, ${ms_settle}ms)"
|
||||
OK_N=$((OK_N + 1))
|
||||
echo -e "${rung}\t${range_note}\t${AMT}\t${status}\t${ms_mint}\t${ms_accept}\t${ms_confirm}\t${ms_settle}\t${ms_total}\t${WID}\t${note}" >>"$TSV"
|
||||
else
|
||||
note="no coins avail=${after} $xfer"
|
||||
note="no coins / no transfer_done avail=${after} $xfer"
|
||||
err wallet "settle $AMT" "$note"
|
||||
status="FAIL_SETTLE"
|
||||
STOP_REASON="$note"
|
||||
|
|
@ -492,7 +487,6 @@ sys.exit(0 if Decimal(sys.argv[1]) > Decimal(sys.argv[2]) else 1)
|
|||
echo -e "${rung}\t${range_note}\t${AMT}\t${status}\t${ms_mint}\t${ms_accept}\t${ms_confirm}\t${ms_settle}\t${ms_total}\t${WID}\t${note}" >>"$TSV"
|
||||
break
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
ms_phase=$(python3 -c 'import sys,time; print(int((time.time()-float(sys.argv[1]))*1000))' "$SECTION_T0")
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue