From 6a92bd3d19ee237846be4bf4505f64442fb93fbb Mon Sep 17 00:00:00 2001 From: sergio Date: Sun, 9 Aug 2026 22:28:30 -0400 Subject: [PATCH] =?UTF-8?q?granja:=20dos=20fallos=20que=20se=20repet=C3=AD?= =?UTF-8?q?an=20id=C3=A9nticos,=20que=20es=20la=20firma=20de=20que=20nadie?= =?UTF-8?q?=20reintenta?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. build-farm.sh — vulkan-loader fallaba con «io: File name too long (os error 36)» en TODOS los ciclos y sella sin una queja ejecutado en serie (comprobado a mano en el worker). La firma no estaba en la lista de colisiones del reintento serial, así que nunca se reintentaba: fallaba, contaba como deuda, y al ciclo siguiente fallaba igual. Un fallo que se repite IDÉNTICO no es intermitente: es uno que nadie está reintentando. Se añade la firma, pero el defecto de fondo era que faltarla fuese MUDO — la lista sólo puede crecer si alguien se entera de que se quedó corta. Ahora lo no reintentado se dice, con las primeras 120 letras del log. 2. farm-up.sh — no sembraba work/farm-sellados.txt. Un worker recién creado arrancaba con el manifiesto rancio horneado en la golden: 1172 contra 1241 del hub, así que reconstruía lo que el hub ya tenía sellado (vulkan-loader entre ellos, y encima fallando). Es el mismo error de método que farm-sync.sh ya se documentó a sí mismo: «lo puse allí, di el bucle por cerrado, y la churn siguió porque hay DOS rutas». Había dos otra vez y sólo una estaba arreglada. Tras el arreglo las cuatro colas dan 1/1 construyen (0 fallan) y el perfil escritorio-kde cierra 162/162. Co-Authored-By: Claude Opus 5 (1M context) --- scripts/build-farm.sh | 16 +++++++++++++++- scripts/farm/farm-up.sh | 11 +++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/scripts/build-farm.sh b/scripts/build-farm.sh index c3e9aede..47851bfc 100755 --- a/scripts/build-farm.sh +++ b/scripts/build-farm.sh @@ -106,7 +106,21 @@ for s in "$FARM"/status/*.fail; do [ -f "$s" ] || continue n=$(basename "$s" .fail); log="$FARM/log/$n.log"; f="$QUEUE/$n.toml" [ -f "$f" ] || continue - grep -qiE "Some other Meson process|already using this build directory|Directory not empty|No such file or directory|gdkconfig\.h" "$log" 2>/dev/null || continue + # ── `File name too long` TAMBIÉN es colisión (2026-08-09) ──────────────────────────────────── + # `vulkan-loader` fallaba con «io: File name too long (os error 36)» en TODOS los ciclos de la + # granja y sella sin una queja ejecutado en serie — comprobado a mano en el worker. La firma no + # estaba en esta lista, así que nunca se reintentaba: fallaba, se contaba como deuda, y al ciclo + # siguiente volvía a fallar igual. Un fallo que se repite idéntico cada vez no es un fallo + # intermitente, es uno que nadie está reintentando. + if ! grep -qiE "Some other Meson process|already using this build directory|Directory not empty|No such file or directory|gdkconfig\.h|File name too long|os error 36" "$log" 2>/dev/null; then + # ── Y LO QUE NO SE REINTENTA, SE DICE ──────────────────────────────────────────────────────── + # El defecto de fondo no era la firma que faltaba sino que faltarla fuese MUDO: la lista sólo + # puede crecer si alguien se entera de que se quedó corta. Sin esta línea, la única señal de que + # una receta es reintentable era que a alguien se le ocurriera correrla a mano. + printf " · %-18s no reintentado (firma no reconocida: %s)\n" "$n" \ + "$(head -c 120 "$log" 2>/dev/null | tr '\n' ' ' | tr -s ' ')" + continue + fi H=$("$HAMMER" --store "$STORE" build "$f" 2>"$log" | tail -1 || true) if [ "${H#b3:}" != "$H" ] && [ -n "$H" ]; then rm -f "$s"; echo "$H" > "$FARM/status/$n.ok"; printf " ✓ (reintento serial) %-18s %s\n" "$n" "$H" diff --git a/scripts/farm/farm-up.sh b/scripts/farm/farm-up.sh index de500e0c..858b41a4 100755 --- a/scripts/farm/farm-up.sh +++ b/scripts/farm/farm-up.sh @@ -74,7 +74,18 @@ for k in $(seq 1 "$N"); do until $SSH root@"$ip" true 2>/dev/null; do sleep 3; done echo " alineando cola con el laptop (rsync código + recipes)…" + # ── EL MANIFIESTO VIAJA ACÁ TAMBIÉN, Y ESTE ERA EL AGUJERO ──────────────────────────────────── + # `farm-sync.sh` ya mandaba `work/farm-sellados.txt` para que el worker no rehiciera lo que el hub + # tiene. Este fichero NO, así que un worker recién creado arrancaba con el manifiesto RANCIO que + # venía horneado en la golden. Medido el 2026-08-09: worker 1172 vs hub 1241 ⇒ el worker construía + # `vulkan-loader` en TODOS los ciclos aunque el hub ya lo tenía sellado, y encima fallaba. + # + # Es literalmente el error de método que este repo ya se documentó a sí mismo en `farm-sync.sh`: + # «lo puse allí, di el bucle por cerrado, y la churn siguió porque hay DOS rutas». Había dos rutas + # otra vez —`farm-sync` y `farm-up`— y sólo una estaba arreglada. Si aparece una tercera, va con + # el mismo include. rsync -az --delete -e "$SSH" \ + --include '/work/' --include '/work/farm-sellados.txt' \ --exclude /work --exclude /store --exclude '/store-*' --exclude /target \ --exclude /dist --exclude /.dev-fs --exclude /.git --exclude /.scratch \ --exclude '*.png' --exclude '/content*' \