Deploying voyager 3 without its edge worker: the no-edge marker, history replayed into the catalog
deploy.sh and the nightly resume leave the edge stopped while .cache/no-edge exists (range by range it would split releases at every edge with no merger left). deploy/replay-window.sh takes DB and OUT and passes REPLAY_INTO_CATALOG=1, which lets replay:corpus write a database not named *_replay or *_scratch (never the test one). Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
1 parent
91984d3625
commit
8f5f83b4ea
5 files changed
+34
-13
No files matched your search
+9
-1
@@ -690,7 +690,15 @@ ranges are all stored is replayed once with the window's bounds as
|
||||
`--from`/`--to` (the corpus holds other windows of the same group), 4
|
||||
groups at a time, logs and `.done` markers in `.cache/replay/`, looping
|
||||
until the window is done (LOG.md 2026-10-26 (111) has the first local
|
||||
numbers, (112) the homelab run).
|
||||
numbers, (112) the homelab run). **Deployed 2026-10-26** (LOG.md (116)):
|
||||
voyager 3 runs on homelab without its edge worker (`.cache/no-edge`:
|
||||
deploy.sh and the nightly resume leave it stopped, since range by range
|
||||
it would split releases at every edge with no merger left), and history
|
||||
comes from the corpus through this driver into the catalog itself
|
||||
(`DB=usenet_rebuild OUT=.cache/replay-catalog`, the harness allowed by
|
||||
`REPLAY_INTO_CATALOG=1`), the prober's ladder, the merger and the judge
|
||||
working on it as it fills; the scratch run's numbers (63 groups) were
|
||||
read before (LOG.md (115)). The tail waits for the window worker.
|
||||
|
||||
Next: the replay on homelab over the 2016 window (the NVMe bytes per
|
||||
header for real), the ordered range leases with the carried window in
|
||||
|
||||
@@ -13,9 +13,12 @@ import { fromWire, type WireBatch } from '#lib/edge/index'
|
||||
|
||||
/**
|
||||
* Only a database named like one of these is written: the replay leases and finishes ranges and fills the catalog.
|
||||
* Not the test database: the rows left behind failed 27 functional tests (LOG.md 2026-10-26 (111)).
|
||||
* Not the test database: the rows left behind failed 27 functional tests (LOG.md 2026-10-26 (111)). With
|
||||
* REPLAY_INTO_CATALOG=1 any database but the test one: voyager 3 deployed, history replayed from the corpus into
|
||||
* the catalog itself (deploy/replay-window.sh, LOG.md (116)).
|
||||
*/
|
||||
const SCRATCH_DB = /_(replay|scratch)$/
|
||||
const TEST_DB = /_test$/
|
||||
const NODE_NAME = 'replay'
|
||||
|
||||
interface StoredRange {
|
||||
@@ -79,9 +82,10 @@ export default class ReplayCorpus extends BaseCommand {
|
||||
|
||||
async run() {
|
||||
const database = db.connection().getReadClient().client.config.connection.database as string
|
||||
if (!SCRATCH_DB.test(database)) {
|
||||
const intoCatalog = process.env.REPLAY_INTO_CATALOG === '1' && !TEST_DB.test(database)
|
||||
if (!SCRATCH_DB.test(database) && !intoCatalog) {
|
||||
this.logger.error(
|
||||
`The replay writes the catalog: it only runs against a database named *_replay or *_scratch (this is "${database}")`
|
||||
`The replay writes the catalog: it only runs against a database named *_replay or *_scratch (this is "${database}"; REPLAY_INTO_CATALOG=1 allows it)`
|
||||
)
|
||||
this.exitCode = 1
|
||||
return
|
||||
|
||||
+8
-1
@@ -51,7 +51,14 @@ if [ -e "$CACHE/paused" ]; then
|
||||
docker compose up -d --no-deps node-api web
|
||||
else
|
||||
docker compose up -d --no-deps node-api web coordinator prober merger judge spotter spot-inspector
|
||||
docker compose up -d --no-deps edge
|
||||
if [ -e "$CACHE/no-edge" ]; then
|
||||
# Voyager 3 (2026-10-26, LOG.md (116)): the worker indexes range by range, without the carried window, and
|
||||
# would split releases at every range edge with nothing to join them; history comes from the corpus through
|
||||
# deploy/replay-window.sh until the window worker is built. Remove the marker to start it again.
|
||||
echo "== no-edge: the edge worker left stopped"
|
||||
else
|
||||
docker compose up -d --no-deps edge
|
||||
fi
|
||||
fi
|
||||
echo "$SHA $(date -Is)" >> "$ROOT/deployed.log"
|
||||
# The images this replaced (321 MB each; the root filesystem is the NVMe, with a 10 GB floor).
|
||||
|
||||
@@ -8,13 +8,17 @@
|
||||
# from the deployment root:
|
||||
# setsid nohup deploy/replay-window.sh > .cache/replay/driver.log 2>&1 &
|
||||
# No new group starts while the nightly pause is on (.cache/paused); the running ones finish.
|
||||
# DB=usenet_rebuild replays into the catalog itself (voyager 3 deployed, 2026-10-26: history comes from the corpus
|
||||
# this way until the window worker is built); the harness then needs REPLAY_INTO_CATALOG=1, passed here. OUT keeps
|
||||
# a run's logs and markers apart (.cache/replay-catalog for the catalog's).
|
||||
set -u
|
||||
ROOT=${ROOT:-/mnt/bulk/usenet-rebuild}
|
||||
PRIORITY=${PRIORITY:-0}
|
||||
PARALLEL=${PARALLEL:-4}
|
||||
MEMORY=${MEMORY:-12g}
|
||||
IMAGE=${IMAGE:-usenet-voyager3:latest}
|
||||
OUT=$ROOT/.cache/replay
|
||||
DB=${DB:-usenet_replay}
|
||||
OUT=${OUT:-$ROOT/.cache/replay}
|
||||
mkdir -p "$OUT"
|
||||
cd "$ROOT" || exit 1
|
||||
|
||||
@@ -34,7 +38,7 @@ replay() {
|
||||
say "$group: replaying $from–$to"
|
||||
if docker run --rm --name "replay-${group//./-}" --network usenet-rebuild --env-file .env \
|
||||
-e NODE_ENV=production -e HOST=0.0.0.0 -e PORT=3334 -e APP_URL=http://web:3334 -e SPOOL_DIR=/spool -e CORPUS_DIR=/corpus \
|
||||
-e DB_HOST=postgres -e DB_PORT=5432 -e DB_DATABASE=usenet_replay -e CHUNK_TABLESPACE=pg_default \
|
||||
-e DB_HOST=postgres -e DB_PORT=5432 -e DB_DATABASE="$DB" -e CHUNK_TABLESPACE=pg_default -e REPLAY_INTO_CATALOG=1 \
|
||||
-v "$ROOT/corpus:/corpus:ro" --memory "$MEMORY" "$IMAGE" \
|
||||
node ace replay:corpus --group "$group" --from "$from" --to "$to" > "$OUT/$group.log" 2>&1; then
|
||||
touch "$OUT/$group.done"
|
||||
|
||||
@@ -6,13 +6,11 @@ exec 9>.cache/deploy.lock
|
||||
flock 9
|
||||
rm -f .cache/paused
|
||||
date "+%F %T resuming"
|
||||
if [ -e .cache/v2-reset ]; then
|
||||
# The voyager 2 catalog is reset (2026-10-26, LOG.md (112)): only the coordinator (the corpus fill) runs until voyager 3
|
||||
# is deployed; the edge, prober, merger, judge, spotter and spot inspector would fill the old catalog again.
|
||||
echo "v2 reset: only the coordinator"
|
||||
docker compose up -d --no-deps coordinator
|
||||
docker compose up -d --no-deps coordinator prober merger judge spotter spot-inspector
|
||||
if [ -e .cache/no-edge ]; then
|
||||
# Voyager 3 without its window worker yet (deploy.sh, LOG.md (116)): the edge stays stopped.
|
||||
echo "no-edge: the edge worker left stopped"
|
||||
else
|
||||
docker compose up -d --no-deps coordinator prober merger judge spotter spot-inspector
|
||||
docker compose up -d --no-deps edge
|
||||
fi
|
||||
docker compose ps --format "{{.Service}} {{.Status}}"
|
||||
Reference in new issue
Block a user