diff --git a/scripts/farm/farm-up.sh b/scripts/farm/farm-up.sh index bfa3e5e0..414c648e 100755 --- a/scripts/farm/farm-up.sh +++ b/scripts/farm/farm-up.sh @@ -83,8 +83,20 @@ for k in $(seq 1 "$N"); do $SSH root@"$ip" "mkdir -p /mnt/cosecha mount $dev /mnt/cosecha 2>/dev/null || { mkfs.ext4 -q -F $dev && mount $dev /mnt/cosecha; } mkdir -p /mnt/cosecha/store /mnt/cosecha/verdicts /mnt/cosecha/logs - # el store del worker ES el del volumen: sellar YA es persistir - rm -rf $REMOTE/store 2>/dev/null; ln -sfn /mnt/cosecha/store $REMOTE/store + # el store del worker ES el del volumen: sellar YA es persistir. + # PERO antes hay que RESCATAR el store HORNEADO en la golden (2026-07-21): esto hacía + # \`rm -rf $REMOTE/store\` y tiraba el catálogo cacheado que es la razón de ser de la imagen + # golden ('arranca con TODO el catálogo ⇒ cache-hit instantáneo'). Sin él, el worker mide + # deuda contra un store casi vacío y se pone a reconstruir media distro: en la tanda del + # 2026-07-21 dio 716 recetas de deuda donde el hub medía 37. Es CAS (nombre = hash) ⇒ + # fusionar es seguro por construcción: \`mv -n\` no pisa lo que el volumen ya tiene. + if [ -d $REMOTE/store ] && [ ! -L $REMOTE/store ]; then + n=\$(ls $REMOTE/store 2>/dev/null | wc -l) + [ \"\$n\" -gt 0 ] && mv -n $REMOTE/store/* /mnt/cosecha/store/ 2>/dev/null + echo \" ✓ rescatados \$n artefactos horneados de la golden al volumen\" + rm -rf $REMOTE/store + fi + ln -sfn /mnt/cosecha/store $REMOTE/store grep -q /mnt/cosecha /etc/fstab || echo '$dev /mnt/cosecha ext4 defaults,nofail 0 0' >> /etc/fstab" >/dev/null 2>&1 if $SSH root@"$ip" 'mountpoint -q /mnt/cosecha && test -L '"$REMOTE"'/store' 2>/dev/null; then echo " ✓ store anclado al volumen ($( $SSH root@"$ip" 'ls -d /mnt/cosecha/store/*/ 2>/dev/null | wc -l') artefactos ya presentes)"