102 lines
2.6 KiB
Bash
Executable file
102 lines
2.6 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
# Maximize nats LXC resources + RAM-disk JetStream, run the NS1 study, then
|
|
# put product streams back on ZFS. Cores/RAM/max_mem stay raised.
|
|
# Must run on NS1.GEORGELAMBERT.ORG.
|
|
set -euo pipefail
|
|
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
|
|
export PATH="/usr/sbin:/usr/bin:/bin:/usr/local/bin:$PATH"
|
|
|
|
HOST="$(hostname -f 2>/dev/null || hostname)"
|
|
case "$HOST" in
|
|
NS1.GEORGELAMBERT.ORG|NS1|ns1.georgelambert.org|ns1) ;;
|
|
*)
|
|
echo "refusing: maximize-ns1-study.sh must run on NS1, got '$HOST'" >&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
CORES="${CORES:-8}"
|
|
MEMORY="${MEMORY:-16384}"
|
|
TMPFS_SIZE="${TMPFS_SIZE:-8G}"
|
|
NATS_VMS=(511 512 513)
|
|
ALL_VMS=(510 511 512 513)
|
|
|
|
apply_resources() {
|
|
local v
|
|
for v in "${ALL_VMS[@]}"; do
|
|
echo "pct set $v --cores $CORES --memory $MEMORY"
|
|
sudo pct set "$v" --cores "$CORES" --memory "$MEMORY"
|
|
done
|
|
}
|
|
|
|
patch_max_mem() {
|
|
local v
|
|
for v in "${NATS_VMS[@]}"; do
|
|
sudo pct exec "$v" -- sed -i -E 's/max_mem:[[:space:]]*[0-9]+[MmGg]/max_mem: 8G/' /etc/nats/nats.conf
|
|
sudo pct exec "$v" -- grep -n max_mem /etc/nats/nats.conf
|
|
done
|
|
}
|
|
|
|
mount_tmpfs() {
|
|
local v
|
|
for v in "${NATS_VMS[@]}"; do
|
|
sudo pct exec "$v" -- bash -lc "
|
|
set -e
|
|
systemctl stop nats-server
|
|
mkdir -p /var/lib/nats/jetstream
|
|
if ! mountpoint -q /var/lib/nats/jetstream; then
|
|
mount -t tmpfs -o size=${TMPFS_SIZE} nats-js /var/lib/nats/jetstream
|
|
fi
|
|
chown nats:nats /var/lib/nats/jetstream
|
|
chmod 755 /var/lib/nats/jetstream
|
|
systemctl start nats-server
|
|
mount | grep jetstream
|
|
"
|
|
done
|
|
}
|
|
|
|
unmount_tmpfs() {
|
|
local v
|
|
for v in "${NATS_VMS[@]}"; do
|
|
sudo pct exec "$v" -- bash -lc '
|
|
set -e
|
|
systemctl stop nats-server || true
|
|
if mountpoint -q /var/lib/nats/jetstream; then
|
|
umount /var/lib/nats/jetstream
|
|
fi
|
|
mkdir -p /var/lib/nats/jetstream
|
|
chown nats:nats /var/lib/nats/jetstream
|
|
systemctl start nats-server
|
|
'
|
|
done
|
|
}
|
|
|
|
wait_cluster() {
|
|
local n=0
|
|
until sudo pct exec 511 -- curl -fsS --max-time 2 http://127.0.0.1:8222/varz >/dev/null 2>&1; do
|
|
n=$((n + 1))
|
|
[[ $n -lt 30 ]] || { echo "nats-a varz not up" >&2; return 1; }
|
|
sleep 1
|
|
done
|
|
sleep 2
|
|
}
|
|
|
|
restore_durable() {
|
|
echo "restoring ZFS JetStream (product streams)"
|
|
unmount_tmpfs
|
|
wait_cluster
|
|
bash "$ROOT/scripts/ensure-streams.sh" || true
|
|
}
|
|
|
|
apply_resources
|
|
patch_max_mem
|
|
mount_tmpfs
|
|
wait_cluster
|
|
trap restore_durable EXIT
|
|
|
|
export JS_EXTRA_MEMORY=1
|
|
export COMPARE_DIR="${COMPARE_DIR:-$ROOT/results/20260912T051237Z}"
|
|
# recorded in host-before by appending after dump starts — study script reads pct config live
|
|
bash "$ROOT/scripts/study-on-ns1.sh"
|
|
|
|
echo "maximize study finished; trap will restore ZFS jetstream"
|