Etapa G (granja): watchdog protege árboles calientes — cura corrupción de deps transitivas
El watchdog de disco purgaba work/sources/* protegiendo solo árboles bind-montados por bwrap (prot.1) o cuyo nombre coincide con la receta en vuelo (prot.2). Una dep transitiva (cairo bajo pango/gtk4) se extrae host-side ANTES del bwrap y con nombre que no coincide con la receta ⇒ el rm -rf competía con el tar y dejaba el árbol a medias: 'Cannot mkdir' durante la extracción, luego 'Directory not empty' para siempre (falla rápido antes de bwrap, nunca se recupera). Prot.3: no purgar árboles modificados hace <2 min (extrayéndose ahora); los fríos se purgan y re-extraen limpio. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -38,6 +38,12 @@ DISK_HIGH="${DISK_HIGH:-82}"
|
||||
printf '%s\n' "$active" | grep -qxF "$dd" && continue
|
||||
nm=$(basename "$dd"); nm=${nm%-*} # work/sources/<name>-<sha40> → <name> (el sha no trae '-')
|
||||
printf '%s\n' "$building" | grep -qxF "$nm" && continue
|
||||
# Protección 3: árbol CALIENTE (modificado hace <2 min) ⇒ se está extrayendo AHORA. Una dep
|
||||
# transitiva (p.ej. cairo bajo pango/gtk4) se extrae host-side ANTES del bwrap y con un nombre
|
||||
# que NO coincide con la receta en vuelo ⇒ protecciones 1 y 2 no la cubren. Sin esto, el rm -rf
|
||||
# compite con el tar y deja el árbol a medias ("Cannot mkdir" / luego "Directory not empty" para
|
||||
# siempre). Un árbol en frío (extracción ya fallida/terminada) queda purgable ⇒ se re-extrae limpio.
|
||||
[ -n "$(find "$dd" -mmin -2 -print -quit 2>/dev/null)" ] && continue
|
||||
rm -rf "$dd"
|
||||
done
|
||||
use=$(df --output=pcent "$HAMMER_DIR" 2>/dev/null | tr -dc '0-9')
|
||||
|
||||
Reference in New Issue
Block a user