You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
compute: publish maintained indexes into the sharing registry
Both export paths now publish their `oks`/`errs` arrangements into the per-process
registry when the runtime's role publishes. A re-export arm has no streams of its
own, so it registers its id as an alias of the arrangement's existing publication
point, which leaves the re-export's dataflow without operators, as it is on a
runtime that does not publish. A reader that bound the re-export's id before the
render holds its own unbacked point, which only a publisher into it can back, so
that case re-imports the shared traces and publishes them under the new id, and
logs the imported errors because `mz_compute_error_counts` forwards a dependency's
counts only to a re-export whose dataflow has no operators. Logging indexes
publish the same way, gated strictly on `Maintenance`: an interactive runtime
reads maintenance's slot, and its own copy would clobber it, while `Solo` has no
registry peer at all.
An alias shares its target's frontiers while the target lives: the alias dataflow
imports the target, so the controller never advances the target's `since` past an
alias's, and the target's frontier bounds every reader of the shared point. Once
the target drops, the meet of the remaining aliases' frontiers governs the point,
since the shared trace then compacts to exactly that meet. Seal notifications fan
out from the target to its aliases, since a reader waits under the id it imported.
`ComputeRuntimeRole::Interactive` stops being test-only. Nothing constructs it
yet, but `publishes()` has to name it, and `pub mod server` keeps the variant
reachable so dead-code analysis is satisfied without an attribute. The stale
`owns_process_globals` note claiming every constructible role owns the globals
goes with it.
Carrying the role and the registry to the render path is what the rest of this
change is: `Config` and `Worker` gain both, `ComputeState` stores them and
exposes `role()`, and clusterd builds one registry per process. Per process, not
per runtime, because a reader on one runtime looks up the slot a publisher on
another filled.
No behavior change. `Solo` is the only role anything constructs and it does not
publish, so every added block is skipped and no dataflow gains an operator.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VDm7opomJLxbNUEP3r9BLk
0 commit comments