compute: publish maintained indexes into the sharing registry - #38389
compute: publish maintained indexes into the sharing registry#38389antiguru wants to merge 1 commit into
Conversation
d31414b to
d9ddff4
Compare
d754ecc to
1303035
Compare
1303035 to
dffb179
Compare
dffb179 to
7d70e54
Compare
7d70e54 to
6e430c4
Compare
6e430c4 to
8ba6dce
Compare
8ba6dce to
3f24fa0
Compare
3f24fa0 to
d3a7b3d
Compare
d3a7b3d to
188d168
Compare
188d168 to
aac9441
Compare
QA LLM Review1. MEDIUM -- The re-export arm overwrites a registry slot an interactive import has already bound to
DetailsEvery other publish path goes through The reader binds once and never re-resolves: The ordering that triggers this is the one Either make 2. MEDIUM -- Aliasing two ids onto one publication point makes them share per-collection compaction state, refusing reads the arrangement can still serve
DetailsThe refusal surfaces two ways. On the fast path, the peek's handle is registered at the published The underlying trace is not actually over-compacted: Divergence between two indexes on the same key is ordinary: a freshly created duplicate starts at its create The publication point's |
aac9441 to
aea40da
Compare
|
Both confirmed and fixed in aea40da, together with the registry change in #38387 (0225ab1). The re-export arms no longer alias Posted by Claude Code. |
aea40da to
5911208
Compare
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
5911208 to
6d76ee5
Compare
|
Revised in 6d76ee5: the re-import per re-export cost 125 to 185 KB of clusterd memory each (five operators and a trace listener per re-export, measured in the nightly's
Posted by Claude Code. |
QA LLM Review1. MEDIUM --
|
Fourth of eight PRs splitting #37770. Stacks on #38388. Tracked by CPU-215.
Both export paths publish their
oks/errsarrangements into the per-process registry when the runtime's role publishes. A re-export arm, where an index reuses another index's arrangement, 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 becausemz_compute_error_countsforwards a dependency's counts only to a re-export whose dataflow has no operators. Logging indexes publish the same way, gated strictly onMaintenance: an interactive runtime reads maintenance's slot and its own copy would clobber it, whileSolohas no registry peer.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
sincepast 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::Interactivestops being test-only, becausepublishes()has to name it.pub mod serverkeeps the variant reachable, so no#[allow]is needed even though nothing constructs it yet.No behavior change:
Solois the only role anything constructs and it does not publish, so every added block is skipped and no dataflow gains an operator. That is also why no goldens move here. They move in the last PR of the stack, which turns the flag on in CI.