Skip to content

Runs as worker-owned rows, held waits for runs that cannot pause, and the speed plan - #53

Merged
qfeuilla merged 5 commits into
mainfrom
deploy
Oct 8, 2026
Merged

qfeuilla merged 5 commits into
mainfrom
deploy

Conversation

@qfeuilla

@qfeuilla qfeuilla commented Oct 8, 2026

Copy link
Copy Markdown
Contributor

The speed and foundations plan, plus its review rounds.

  • Runs are rows the worker owns (run / run_log), written by the worker's lanes in batches (weft_record_batch). Fast runs (the default) wait for their record only where weft acts on it; durable: true keeps every finished step across a worker death. Upgrading from an older install wipes the run history once (setup.sh asks, --yes answers); projects, settings, connections and infra stay.
  • A run that cannot pause (a caller still on the line without outlivesCaller, recorded: false, or a bus open) holds ctx.await_signal in the node's call. The hold clock runs only while every step waits; holdSecs (default 60, 0 fails at once, at most 30 days) gives the wait up as a catchable error, recorded so a replay fails the same, and the wait is withdrawn. Route's defaultHoldSecs is gone.
  • Shutdown: a run that can pause is handed back after its running steps end (5 s at most); a run that cannot carries on until the platform stops the process.
  • Waits name their run (a check constraint), a queued answer stays a wait's one answer, run endings page past failures, the search index pauses only when one broker's record pool is full.
  • ExecPython documents what its shared Python processes keep between scripts.
  • Migrations: exec_event (waits_name_their_run, born_runs_hold_no_waits) and parked_fire (waits_name_their_run) on top of the branch's earlier ones.

Every check the PR runs passed locally first, and the full e2e suite passed on this branch before the last review round (155/155); the review fixes reran their named e2e tests.

…e the gate

The Rust and JS checks each run on their own runner, gathered under the two names the main ruleset requires, so a PR waits for the slowest check instead of their sum. On main the binaries, the .vsix and the browser zips build while the suite runs; the images, the release and every store publish still wait for it to pass.
… the worker owns, and review fixes

A run that cannot pause (a caller still on the line, recorded off, or a bus open)
holds ctx.await_signal in the node's call instead of failing: the hold clock runs
only while every step waits, `holdSecs` (default 60, 0 fails at once, at most 30
days) gives the wait up as a catchable error, recorded so a replay fails the same,
and the wait is withdrawn. Unrecorded runs hold their waits; Route's
defaultHoldSecs is gone.

Review fixes: the node's call records the answer it took and early answers wait
for their step; the last word never overtakes a chunk and is queued under the lock
it is taken under; a run let go of is claimed again once its last drive here left;
a queued answer stays the wait's one answer; a wait needs its run's row; run
endings page past failures; the search index pauses on one full broker; a run that
cannot pause carries on through a worker's shutdown until the process goes.
ExecPython documents what its shared processes keep.
Comment thread catalog/postgres/database/images/credential/bootstrap.py Fixed
Comment thread crates/weft-broker/tests/caller_auth.rs Dismissed
Comment thread crates/weft-broker/tests/caller_auth.rs Dismissed
Comment thread crates/weft-cli/src/commands/connect.rs Dismissed
@qfeuilla
qfeuilla merged commit af26247 into main Oct 8, 2026
22 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants