farm: JOBS=1 en el worker-loop mientras el ADR 0012 esté sin decidir
`build-farm.sh` usa `xargs -P$JOBS`; con >1, dos recetas que comparten dep disparan la carrera del árbol de fuentes del ADR 0012 y el árbol queda roto para siempre. Se vio a escala: al invalidar libdrm, 118 de las 205 recetas KDE pasaron de cache-hit a rebuild real y ~93 murieron con "/src/.zwrap/cc is not a full path to an existing compiler tool" — el wrapper de zig que la receta deja en el ÁRBOL DE FUENTE, barrido por el fetch concurrente de otra receta sobre el mismo qtbase. El reintento serial de build-farm tampoco las recupera: el árbol ya quedó inconsistente. La caché estaba ocultando la carrera, no evitándola. Serializar es la única mitigación correcta hasta que el ADR 0012 elija salida. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -12,7 +12,17 @@ set -uo pipefail
|
||||
HAMMER_DIR="${HAMMER_DIR:-/opt/hammer}"
|
||||
cd "$HAMMER_DIR"
|
||||
. "$HOME/.cargo/env" 2>/dev/null || true
|
||||
JOBS="${JOBS:-$(nproc)}"
|
||||
# JOBS=1 MIENTRAS EL ADR 0012 ESTÉ SIN DECIDIR (2026-07-22). `build-farm.sh` usa `xargs -P$JOBS`, y
|
||||
# con >1 dos recetas que compartan dep disparan la carrera del árbol de fuentes: ambas hacen fetch
|
||||
# del mismo `work/sources/<dep>-<sha>`, una borra mientras la otra usa, y el árbol queda ROTO PARA
|
||||
# SIEMPRE. Se vio a escala: al invalidar libdrm, 118 de las 205 recetas KDE tuvieron que reconstruir
|
||||
# de verdad (antes eran cache-hits que ocultaban el problema) y ~93 murieron con
|
||||
# "/src/.zwrap/cc is not a full path to an existing compiler tool" — el wrapper de zig que la receta
|
||||
# deja EN EL ÁRBOL DE FUENTE, barrido por el fetch concurrente de otra receta sobre el mismo qtbase.
|
||||
# El reintento serial de build-farm tampoco las salva, porque el árbol ya quedó inconsistente.
|
||||
# Serializar es la única mitigación correcta hasta que el ADR 0012 elija (lock por árbol / árbol
|
||||
# privado / caché inmutable + copia). Subirlo otra vez sin resolver eso reintroduce el bug.
|
||||
JOBS="${JOBS:-1}"
|
||||
IDLE_SLEEP="${IDLE_SLEEP:-300}"
|
||||
# Fichero de lock compartido con campana-deuda.sh (mismo path en los dos, o no hay exclusión).
|
||||
LOCK_FARM="${LOCK_FARM:-$HAMMER_DIR/work/.farm-build.lock}"
|
||||
|
||||
Reference in New Issue
Block a user