From 97023c33061ae413f2e1a096fd605a7eca70fa93 Mon Sep 17 00:00:00 2001 From: Sergio Date: Fri, 4 Sep 2026 13:11:47 +0000 Subject: [PATCH] =?UTF-8?q?granja:=20PODA=5FFUENTES=20nace=20encendida=20y?= =?UTF-8?q?=20respeta=20el=20=C3=A1rbol=20de=20la=20receta=20que=20fall?= =?UTF-8?q?=C3=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Causa raíz de la deuda KDE de hoy: la cascada del 2026-09-03 corrió campana-deuda SIN PODA_FUENTES=1 (cero menciones en su log). Los 71 árboles de fuentes se acumularon en /dev/sdc a ~300 MB cada uno y lo llenaron en la receta 52; las 8 últimas murieron por disco, no por receta. Un default que hay que acordarse de encender no es una defensa. No poda tras un ✗: el árbol de la receta fallida es el post-mortem, y es justo el caso en que alguien va a mirarlo. Mismo criterio que el suelo de 24 h de poda-fuentes.sh, aplicado por resultado en vez de por edad. Probado: sobrevive tras ✗, poda tras ✓, y PODA_FUENTES=0 sigue apagándola. --- scripts/farm/campana-deuda.sh | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/scripts/farm/campana-deuda.sh b/scripts/farm/campana-deuda.sh index 6a82c712..10aaaa99 100755 --- a/scripts/farm/campana-deuda.sh +++ b/scripts/farm/campana-deuda.sh @@ -69,7 +69,7 @@ if ! flock -w "$LOCK_WAIT" 9; then exit 0 fi echo "$(ts) campaña-deuda: lock de build tomado (el worker-loop espera su turno)" | tee -a "$LOG" -total=$(echo "$DEUDA" | wc -w); i=0; ok=0; fail=0; falladas="" +total=$(echo "$DEUDA" | wc -w); i=0; ok=0; fail=0; falladas=""; ultimo_rc=0 echo "$(ts) campaña-deuda arranca: $total recetas | go=$(command -v go || echo AUSENTE)" | tee -a "$LOG" # ── GUARDIÁN DE DISCO (2026-09-04) ────────────────────────────────────────────────────────────── @@ -119,9 +119,9 @@ for r in $DEUDA; do # build-timed.sh mide la pared y registra la duración en $STORE/.times (sólo builds reales), para # el camino crítico pesado de yupana. Transparente: sale con el mismo código que `hammer build`. if HAMMER="$HAMMER" STORE="$STORE" "$HAMMER_DIR/scripts/farm/build-timed.sh" "$f" >>"$LOG" 2>&1; then - ok=$((ok + 1)); echo "$(ts) [$i/$total] ✓ $r" | tee -a "$LOG" + ultimo_rc=0; ok=$((ok + 1)); echo "$(ts) [$i/$total] ✓ $r" | tee -a "$LOG" else - fail=$((fail + 1)); falladas="$falladas $r"; echo "$(ts) [$i/$total] ✗ $r" | tee -a "$LOG" + ultimo_rc=1; fail=$((fail + 1)); falladas="$falladas $r"; echo "$(ts) [$i/$total] ✗ $r" | tee -a "$LOG" fi # PODA_FUENTES=1 — borra el árbol de fuentes DENTRO del bucle, que es el único sitio donde es # seguro: acá tenemos el lock Y acabamos de terminar un build, así que no hay ningún `bwrap` @@ -130,7 +130,15 @@ for r in $DEUDA; do # No cuesta nada: `fetch.rs` borra y re-extrae el árbol en CADA build, no lo reutiliza jamás. # Nace en la cascada de kcoreaddons (2026-09-03), 71 recetas KDE en una máquina con 16 G libres: # a ~300 MB de árbol por receta, sin esto la campaña se come el disco antes de la onda 4. - if [ "${PODA_FUENTES:-0}" = 1 ]; then + # + # POR DEFECTO 1 (2026-09-04). Nació apagado y la cascada KDE del 2026-09-03 corrió sin ponerlo: + # 71 recetas × ~300 MB de árbol llenaron /dev/sdc en la 52 y se llevaron puestas las 8 últimas. + # Un default que hay que acordarse de encender no es una defensa. Apagar con PODA_FUENTES=0. + # + # NO se poda tras un ✗: el árbol de una receta que falló es el post-mortem — sin él no se puede + # leer qué generó cmake ni con qué flags murió, y es justo el caso en que alguien va a mirar. + # Es el mismo criterio del suelo de 24 h de poda-fuentes.sh, aplicado por resultado y no por edad. + if [ "${PODA_FUENTES:-1}" = 1 ] && [ "$ultimo_rc" = 0 ]; then rm -rf "$HAMMER_DIR"/work/sources/* 2>/dev/null || true fi done