From 06ba41733696dfe4c5881b60213e74ab1292c5bc Mon Sep 17 00:00:00 2001 From: sergio Date: Fri, 26 Jun 2026 23:32:12 -0400 Subject: [PATCH] =?UTF-8?q?Etapa=20G:=20granja=20Go=20pesada=20=E2=80=94?= =?UTF-8?q?=20watchdog=20no=20purga=20modcache=20con=20vendor=20activo=20+?= =?UTF-8?q?=20syncthing=20main=20en=20cmd/?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit go-12 (terraform/k8s) destapó la race: con árboles de deps de varios GB en paralelo, el disco cruza DISK_HIGH y el watchdog corría 'go clean -modcache' a mitad de los 'go mod vendor' en vuelo (.partial: no such file) ⇒ 5 recetas no convergían. Ahora difiere la purga del modcache si hay un vendor de host activo (la purga de work/sources ya libera lo grueso y es segura). syncthing: main real en ./cmd/syncthing (la raíz tiene build-constraints que excluyen todo). --- recipes/incoming/syncthing.toml | 4 +++- scripts/farm/farm-worker-loop.sh | 15 +++++++++++++-- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/recipes/incoming/syncthing.toml b/recipes/incoming/syncthing.toml index 39c2a4a3..ee2e4052 100644 --- a/recipes/incoming/syncthing.toml +++ b/recipes/incoming/syncthing.toml @@ -13,7 +13,9 @@ commit = "c0c401efebf27af58b91309b381d7d3eae870a64" compiler = "zig-cc" target = "x86_64-linux-musl" link = "static" -flags = [] +# la raíz trae .go con build-constraints (excluyen todos los archivos) ⇒ el main real está en +# ./cmd/syncthing; lo forzamos (gana sobre detect_go_main, que elige la raíz por heurística). +flags = ["./cmd/syncthing"] # buildInputs de nix (no usados con CGO off): go [deps] diff --git a/scripts/farm/farm-worker-loop.sh b/scripts/farm/farm-worker-loop.sh index 7ac297ea..07c317ab 100755 --- a/scripts/farm/farm-worker-loop.sh +++ b/scripts/farm/farm-worker-loop.sh @@ -34,8 +34,19 @@ DISK_HIGH="${DISK_HIGH:-82}" 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 + # OJO: `go clean -modcache` borra ~/go/pkg/mod ENTERO. Si lo corre mientras un `go mod vendor` + # del fetch está bajando módulos, le arranca el cache bajo los pies (`.partial: no such file`) + # y ESE vendor falla — y con tandas pesadas (k8s/azure SDK, varios GB en paralelo) son MUCHOS a + # la vez ⇒ el lote no converge. La purga de work/sources de arriba ya liberó lo grueso (segura: + # saltea bind-montadas). Sólo purgo el modcache si NO hay vendor de host activo; si lo hay, + # difiero al próximo tick (el sandbox `go install` usa GOPATH=/tmp + -mod=vendor ⇒ no toca el + # modcache del host, así que purgar durante un build sandbox sigue siendo seguro). + if pgrep -f 'go mod vendor' >/dev/null 2>&1; then + echo "$(date -u +%FT%TZ) watchdog: disco ${use}% ≥ ${DISK_HIGH}% pero hay vendor activo ⇒ difiero purga modcache" + else + 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 fi done ) &