From 199ce9b9dd518fa02d3e9bd034fe299700565574 Mon Sep 17 00:00:00 2001 From: sergio Date: Mon, 29 Jun 2026 22:52:24 -0400 Subject: [PATCH] =?UTF-8?q?Etapa=20G:=20harvest=20lock=20STALE-AWARE=20(PI?= =?UTF-8?q?D;=20roba=20si=20el=20due=C3=B1o=20muri=C3=B3)=20=E2=80=94=20un?= =?UTF-8?q?=20lock=20hu=C3=A9rfano=20bloque=C3=B3=20el=20cron=2016h?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit + dolt: corregido, necesita ICU4C (go-icu-regex), no oniguruma. oniguruma queda en el corpus (útil p/ otros regex). --- scripts/farm/harvest-go.sh | 15 ++++++++++++--- tandas/staged-fallidos/dolt.toml | 4 +++- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/scripts/farm/harvest-go.sh b/scripts/farm/harvest-go.sh index 881ade73..041eca0a 100755 --- a/scripts/farm/harvest-go.sh +++ b/scripts/farm/harvest-go.sh @@ -39,13 +39,22 @@ SSH="ssh -i $SSH_KEY -o StrictHostKeyChecking=accept-new -o ConnectTimeout=20" export GIT_SSH_COMMAND="ssh -i $SSH_KEY -o IdentitiesOnly=yes -o StrictHostKeyChecking=accept-new" STAMP() { date -u +%FT%TZ; } -# Lock: una sola cosecha a la vez (el cron no se solapa). +# Lock: una sola cosecha a la vez (el cron no se solapa). STALE-AWARE: si el proceso dueño murió sin +# correr su trap (matado / teardown), el lock quedaría huérfano y BLOQUEARÍA todo cron futuro (pasó: +# un harvest viejo murió con el lock tomado → 16h de cron no-op). Por eso guardamos el PID y, si el +# dueño ya no vive, robamos el lock. LOCK="$ROOT/work/.harvest-go.lock" mkdir -p "$ROOT/work" if ! mkdir "$LOCK" 2>/dev/null; then - echo "$(STAMP) harvest-go: ya hay una cosecha en curso ($LOCK) ⇒ salgo"; exit 0 + oldpid=$(cat "$LOCK/pid" 2>/dev/null) + if [ -n "$oldpid" ] && kill -0 "$oldpid" 2>/dev/null; then + echo "$(STAMP) harvest-go: ya hay una cosecha en curso (pid $oldpid) ⇒ salgo"; exit 0 + fi + echo "$(STAMP) harvest-go: lock huérfano (pid ${oldpid:-?} muerto) ⇒ lo robo" + rm -rf "$LOCK"; mkdir "$LOCK" 2>/dev/null || { echo "$(STAMP) no pude tomar el lock"; exit 0; } fi -trap 'rmdir "$LOCK" 2>/dev/null' EXIT INT TERM +echo "$$" > "$LOCK/pid" +trap 'rm -rf "$LOCK" 2>/dev/null' EXIT INT TERM echo "==================================================================" echo "$(STAMP) harvest-go: arranco (VPS=$VPS)" diff --git a/tandas/staged-fallidos/dolt.toml b/tandas/staged-fallidos/dolt.toml index b843cac2..0ce484af 100644 --- a/tandas/staged-fallidos/dolt.toml +++ b/tandas/staged-fallidos/dolt.toml @@ -1,3 +1,4 @@ +# DIFERIDA (frontera): subdir=go + cgo OK (llega al compile cgo), pero go-icu-regex necesita ICU4C (unicode/uregex.h), lib C++ GRANDE — NO oniguruma. Falta receta icu4c. # Importada de nixpkgs por `hammer import-nix` (Etapa G). PUNTO DE PARTIDA, no final: # - el build usa el lab de hammer (zig-cc / musl estático), NO el stdenv de nix ⇒ revisá # compiler/link/phases y adaptá hasta que compile. @@ -14,8 +15,9 @@ compiler = "zig-cc" target = "x86_64-linux-musl" link = "static" subdir = "go" +cgo = true # go-mysql-server internal/regex usa cgo+oniguruma flags = [] # buildInputs de nix (no usados con CGO off): go, icu4c [deps] -build = ["go"] +build = ["go", "oniguruma", "pkgconf"]