Conversation
Path to productizingThe spike validates the mechanism: storage objects render, run, and recover on the compute timely cluster with the wire protocols and controllers byte-identical. Smoke, concurrent creation storms on multi-process replicas, a topology swap of an existing catalog, environmentd kill and recovery, and source suspend-and-restart all pass locally, and the PR test pipeline is green up to the items below. What remains falls into decisions, validation, and productionizing. Decisions
Validation
Productionizing
Process
Posted by Claude Code. |
Throwaway spike, not for merge. Behind the MZ_UNIFIED_CLUSTER env var, clusterd builds a single timely cluster. The storage CTP is served unchanged by a guest StorageState embedded in the compute worker loop. Storage-internal commands ride the compute command channel, generalized into a two-hop sequencer so all dataflow construction, compute and storage alike, follows one definitive cross-worker order. Validated: smoke (source+MV+index), concurrent creation storms on multi-process replicas, native->unified topology swap with an existing catalog, and envd kill mid-storm plus recovery. No lint run. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The storage timely log bridge (Replay storage timely logs, Concatenate) no longer exists; storage events arrive on the host cluster's own logging stream. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ler.td The section gated hydration with a blocking mz_sleep dataflow on the source's own cluster. With storage objects hosted on the compute timely cluster, that gate starves the co-hosted source and its command processing outright instead of merely delaying hydration, so the scenario as written cannot work. A note in the file records what replacement coverage needs. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
11814c5 to
0381cb8
Compare
Replace the MZ_UNIFIED_CLUSTER environment variable with the enable_unified_cluster system parameter, a replica-scoped dyncfg that the controller resolves at provisioning time and passes to clusterd as the --unified-cluster flag. The parameter defaults off in production and on in the CI configuration. Unorchestrated clusterd services in mzcompose mirror the CI default through the CLUSTERD_UNIFIED_CLUSTER environment variable. Derive the worker park deadline from the storage maintenance and statistics intervals instead of a hard 100ms cap, mirroring the parking of storage's own server loop. Deduplicate the serve and serve_unified setup through a shared serve_inner. Drop the spike markers from comments and docs. Add a design doc, and cover both topologies explicitly in a new introspection sqllogictest. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
Productized as a six-PR stack: #38875 (design doc), #38876 (guest cluster client), #38877 (storage guest state), #38878 (command channel sequencer), #38879 (compute hosting), #38880 (system parameter gate). The stack replaces the environment variable with the replica-scoped Posted by Claude Code. |
|
The stack moved to native stacked PRs with upstream heads, stack #38887: #38881 (design doc) → #38882 (guest cluster client) → #38883 (storage guest state) → #38884 (command channel sequencer) → #38885 (compute hosting) → #38886 (system parameter gate). The fork-head PRs #38875 through #38880 are closed. Posted by Claude Code. |
Motivation
Explores unifying the storage and compute timely clusters by migrating the objects instead of the runtime, the reverse of the protocol-first approach in #37091. The wire protocols and controllers stay byte-identical, so the change is confined to clusterd and the cluster-side crates. The goal of this draft is CI signal on the unified topology, not review.
Description
clusterd builds a single timely cluster and serves the storage protocol from a guest
StorageStateembedded in the compute worker loop. Timely requires all workers to construct dataflows in the same order, and storage already funnels all dataflow construction through its internal command sequencer while compute funnels it through the command channel. The change merges the two into one sequencing lane carrying both command kinds, so one definitive cross-worker order covers compute and storage construction alike. Storage-local behavior such as suspend-and-restart and replica-side resume-upper computation is unchanged.Default on in this draft to exercise CI.
MZ_UNIFIED_CLUSTER=0falls back to separate clusters. Themz-compute -> mz-storagedependency edge is newly allowed inci/test/lint-deps.toml.Validated locally: source, materialized view, and index co-hosted on one cluster; concurrent creation storms on multi-process replicas; restarting an existing catalog into the unified topology; environmentd kill and recovery mid-storm. Untested so far: Kafka sinks, oneshot ingestion, and controller reconnects without a process restart, which is part of what this CI run is for.
Posted by Claude Code.