TAKANA_X con caída a HAMMER_X (ADR 0016). No es un sed: estas variables son
contrato de usuario —knobs del instalador, el entorno del worker, mirror-env.sh—
y viven en perfiles de shell y units FUERA del repo, así que un renombre duro no
falla ruidosamente: la variable no aparece, se toma el default y el build se
comporta distinto sin que nada lo diga.
Rust: takana_core::env::{var,var_os} toma el nombre canónico y deriva el viejo
cambiando el prefijo — se le pasa TAKANA_* para que un grep del nombre nuevo
encuentre todas las lecturas. 5 tests, con DOS controles negativos: sin ninguna
de las dos no hay valor, y un nombre sin prefijo no inventa una caída.
Migrados los 17 sitios directos y los indirectos que el grep no mostraba
(bases_de_mirror, las constantes de kernel_cmd, ROOT_ENV de qorpa, env_path de
recover). takana-recover lleva la caída inline: es un mini-binario que se copia
a /usr/sbin y no vale arrastrarle una dep entera por dos líneas.
Scripts: 30 lecturas pasan a default, manteniendo el
nombre INTERNO de la variable para no tocar sus 190 usos.
Y donde el script EXPORTA en vez de leer, se ponen LAS DOS (mirror-env.sh y el
fragmento in-VM de bootstrap): ahí el lector puede ser un binario viejo —worker
sin recompilar, el /usr/bin/hammer pinado del baseline— que sólo conoce HAMMER_*.
La caída sirve para lectores nuevos; los viejos necesitan que la vieja siga puesta.
Verificado de punta a punta con el binario, no sólo con unit tests: HAMMER_LAB
sigue surtiendo efecto, TAKANA_LAB hace lo mismo, y con las dos gana TAKANA_LAB.
605 tests en verde y el hash de zlib sigue en b3:dc363f26… , intacto.
Cambio de comportamiento que va aparte y hay que decir: el hostname por defecto
de una instalación nueva pasa de 'hammer' a 'takana' (sólo si no se fija ninguna
de las dos variables).
NO se tocan: las rutas /var/lib/hammer de sistemas instalados, el volid
HAMMER_LIVE del ISO, ni el namespace HARKAQ_*, que es de otro subsistema.
43 lines
2.2 KiB
Bash
Executable File
43 lines
2.2 KiB
Bash
Executable File
#!/bin/sh
|
|
# build-timed.sh <receta.toml> — corre `hammer build` MIDIENDO la duración de pared y la registra
|
|
# como metadata, para alimentar el camino crítico PESADO de yupana (el peso que le faltaba a las
|
|
# ondas: sin él, critical-path = nº de pasos; con él, ETA real en segundos).
|
|
#
|
|
# DÓNDE VIVE EL DATO. En `$STORE/.times/<hash>-<host>.json` — un SIDECAR del store, NUNCA dentro del
|
|
# artefacto (`<hash>-<name>/`). La duración es NO determinista (varía por máquina y carga) ⇒ no puede
|
|
# tocar el ArtifactHash ni la reproducibilidad. Es metadata SOBRE un build, keyed por el hash del
|
|
# artefacto (CAS-safe: dos workers no se pisan) + host (permite varias muestras por receta). Viaja al
|
|
# hub con el rsync del store que ya hace la cosecha; ninguna herramienta del store lo confunde con un
|
|
# artefacto (no matchea `<hash>-<name>`).
|
|
#
|
|
# SÓLO BUILDS REALES. Un cache-hit devuelve al instante; un build C/KDE tarda minutos. Se registra
|
|
# sólo si la pared supera UMBRAL_TIEMPO (def 3s), así los cache-hits no envenenan la mediana con ~0.
|
|
# Limitación honesta: `hammer build` arrastra deps ⇒ la pared incluye deps NO selladas. Construyendo
|
|
# en orden topológico (drenar) las deps ya están selladas (cache-hit) y la pared mide sobre todo ESTA
|
|
# receta. No es perfecto; es una cota superior buena para pesar. La precisión exacta pediría instrumentar
|
|
# el sellado dentro de hammer-build (Rust), deuda futura.
|
|
#
|
|
# Sale con el MISMO código que `hammer build` (transparente para el llamador).
|
|
set -u
|
|
HAMMER="${TAKANA:-${HAMMER:-./target/release/takana}}"
|
|
STORE="${STORE:-./store}"
|
|
UMBRAL="${UMBRAL_TIEMPO:-3}"
|
|
f="${1:?uso: build-timed.sh <receta.toml>}"
|
|
|
|
h=$("$HAMMER" --store "$STORE" hash "$f" 2>/dev/null) # b3:… (dry-run, ~2ms, no necesita store)
|
|
start=$(date +%s)
|
|
"$HAMMER" --store "$STORE" build "$f"
|
|
rc=$?
|
|
end=$(date +%s)
|
|
elapsed=$((end - start))
|
|
|
|
if [ "$rc" -eq 0 ] && [ "$elapsed" -ge "$UMBRAL" ] && [ -n "$h" ]; then
|
|
name=$(basename "$f" .toml)
|
|
host=$(hostname 2>/dev/null || echo worker)
|
|
hh=${h#b3:}
|
|
mkdir -p "$STORE/.times"
|
|
printf '{"hash":"%s","name":"%s","seconds":%s,"host":"%s","epoch":%s}\n' \
|
|
"$h" "$name" "$elapsed" "$host" "$end" > "$STORE/.times/${hh}-${host}.json"
|
|
fi
|
|
exit "$rc"
|