diff --git a/scripts/farm/farm-sync.sh b/scripts/farm/farm-sync.sh index 29e7e03a..36e6ec50 100755 --- a/scripts/farm/farm-sync.sh +++ b/scripts/farm/farm-sync.sh @@ -27,7 +27,24 @@ rsync -az --delete -e "$SSH" \ ./ "$VPS:$REMOTE/" echo "==> 2. bajando artefactos sellados del worker" -rsync -az -e "$SSH" "$VPS:$REMOTE/store/" ./store/ +# ── ⚠ NO BAJAR LO QUE YA PODAMOS: era un BUCLE DE CHURN DE 24 G ──────────────────────────────── +# Medido el 2026-08-07: `store-gc.sh` borró 362 artefactos superados (24 G) por la mañana y por la +# tarde volvió a borrar **los mismos 362** — solapamiento del 100%. No era casualidad: este rsync +# bajaba el store del worker ENTERO, y el worker nunca se poda, así que conservaba los superados y +# nos los devolvía en cada cosecha. Podar → cosechar → vuelven → podar. El disco pagaba 24 G por +# vuelta y la métrica de espacio libre mentía sobre el progreso. +# +# El registro `work/store-gc-superados.txt` es la unión de todos los manifiestos de poda: nombres +# `-` de artefactos que YA decidimos que sobran. Como el store es CAS —los nombres +# son inmutables y un artefacto superado no vuelve a ser vigente salvo que una receta retroceda— +# excluirlos es seguro; y si una receta retrocediera, su artefacto se reconstruye, que es barato. +LEDGER="work/store-gc-superados.txt" +if [ -s "$LEDGER" ]; then + echo " (excluyendo $(wc -l < "$LEDGER") artefactos ya podados — ver la nota del bucle de churn)" + rsync -az -e "$SSH" --exclude-from="$LEDGER" "$VPS:$REMOTE/store/" ./store/ +else + rsync -az -e "$SSH" "$VPS:$REMOTE/store/" ./store/ +fi if [ "${2:-}" = "--no-promote" ]; then echo "✓ store sincronizado (sin promote)"; exit 0 diff --git a/scripts/store-gc.sh b/scripts/store-gc.sh index 6638530b..c8684e06 100755 --- a/scripts/store-gc.sh +++ b/scripts/store-gc.sh @@ -132,4 +132,13 @@ if [ "$QUEDAN" -gt 0 ]; then echo "==> libres: $ANTES → $AHORA" exit 1 fi +# ── REGISTRO ACUMULADO, para que lo podado NO VUELVA ─────────────────────────────────────────── +# 2026-08-07: se podaron 362 artefactos (24 G) por la mañana y por la tarde volvieron a aparecer LOS +# MISMOS 362 — solapamiento del 100%. La causa no estaba acá sino en `farm/farm-sync.sh`, que bajaba +# el store del worker entero; el worker no se poda, así que nos devolvía lo borrado en cada cosecha. +# Podar → cosechar → vuelven. Este registro es la memoria que le faltaba al sistema: `farm-sync` lo +# usa como `--exclude-from`. Sin él, el gc es una rueda de hámster que informa éxito cada vez. +LEDGER="work/store-gc-superados.txt" +cat "$OBJETIVO" "$LEDGER" 2>/dev/null | sort -u > "$LEDGER.tmp" && mv "$LEDGER.tmp" "$LEDGER" +echo "==> registro acumulado: $(wc -l < "$LEDGER") artefactos que NO deben volver ($LEDGER)" echo "==> $PEDIDOS artefactos borrados y VERIFICADOS (0 sobrevivientes) · libres: $ANTES → $AHORA"