granja: dos fallos que se repetían idénticos, que es la firma de que nadie reintenta
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) <noreply@anthropic.com>
This commit is contained in:
+15
-1
@@ -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"
|
||||
|
||||
@@ -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*' \
|
||||
|
||||
Reference in New Issue
Block a user