granja: watchdog purga caches Go cuando disco >=82%

El 'go mod vendor' acumula GOMODCACHE (~/go/pkg/mod) sin tope: una tanda Go
grande lo llevo a 31G y lleno el disco de 80G -> I/O-wait disparo el load a 23
(cuello real, no CPU/RAM). El watchdog ahora purga 'go clean -modcache/-cache'
cuando el disco supera DISK_HIGH% (def 82). El vendor/ local de cada receta ya
tiene lo necesario; si pisa un vendor en curso, esa receta reintenta.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-26 17:36:05 -04:00
co-authored by Claude Opus 4.8
parent 7883bbf804
commit 64f4a20072
+11
View File
@@ -17,6 +17,12 @@ IDLE_SLEEP="${IDLE_SLEEP:-300}"
# --- watchdog de disco: cada 3 min borra work/sources/* que ningún bwrap activo bind-monta
# (seguro: sellada=store CAS, en-cola=se re-extrae sola). Evita que el vendoring llene el disco.
# Además, si el disco supera DISK_HIGH%, purga los CACHES Go (GOMODCACHE ~/go/pkg/mod + gocache):
# el `go mod vendor` de las recetas Go acumula ahí decenas de GB sin tope (el vendor/ local de cada
# receta ya tiene lo que el build necesita; el modcache sólo se usa DURANTE el vendor). Si la purga
# pisa un vendor en curso, esa receta reintenta el próximo ciclo (cache-hit el resto). Sin esto, una
# tanda Go grande llena el disco de 80G y el I/O-wait dispara el load (cuello real, no CPU/RAM).
DISK_HIGH="${DISK_HIGH:-82}"
(
while :; do
sleep 180
@@ -26,6 +32,11 @@ IDLE_SLEEP="${IDLE_SLEEP:-300}"
printf '%s\n' "$active" | grep -qxF "$dd" && continue
rm -rf "$dd"
done
use=$(df --output=pcent "$HAMMER_DIR" 2>/dev/null | tr -dc '0-9')
if [ -n "$use" ] && [ "$use" -ge "$DISK_HIGH" ]; then
echo "$(date -u +%FT%TZ) watchdog: disco ${use}% ≥ ${DISK_HIGH}% ⇒ purgo caches Go"
go clean -modcache 2>/dev/null; go clean -cache 2>/dev/null
fi
done
) &