Repository navigation
v26.48.0 release notes - #40113
Open
bosconi wants to merge 8 commits into
Open
v26.48.0 release notes#40113bosconi wants to merge 8 commits into
bosconi wants to merge 8 commits into
Conversation
Adds the v26.48.0 section to doc/user/content/releases/_index.md and the v26.48 row to the self-managed operator compatibility table. Dates are provisional (Cloud 2026-10-29, Self-Managed 2026-10-30) and are set for real by the final snapshot. Draft with PR links: https://github.com/MaterializeInc/mz-skills/blob/main/data/mz-release-notes/v26.48.0/rc.1/release_notes.md
…-notes # Conflicts: # doc/user/content/releases/_index.md # doc/user/data/self_managed/self_managed_operator_compatibility.yml
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
| - **External autoscaling for the connection balancer**: The `Materialize` resource gains a `balancerdExternallyScaled` field, and `Balancer` an `externallyScaled` field, that stop the Kubernetes operator from reasserting the balancerd Deployment's replica count on every reconcile, so a HorizontalPodAutoscaler can own it; `balancerdReplicas` then only seeds the count when the Deployment is first created. | ||
|
|
||
| ### Guides {#v26.48-guides} | ||
| - [Transactional downstream updates using Kafka](/export-data/patterns/transactional-downstream-updates-kafka/) |
Contributor
Contributor
|
Pushed two commits to this branch for the Kafka sink headers GA:
Related:
🤖 Generated with Claude Code |
No published increment: the rc.2 snapshot covered one materialize PR (upsert v2 drain performance), held at Borderline because it only runs behind the enable_upsert_v2 dyncfg, which defaults to false at the v26.48.0-rc.2 tag. The four agent-skills PRs in the window were automated docs syncs and were omitted. Provisional dates are unchanged from rc.1 (Cloud 2026-10-29, Self-Managed 2026-10-30), so neither _index.md nor the operator compatibility table changes. This empty commit records that rc.2 was applied so later runs do not re-sweep it.
Adds the rc.3 increment: one Improvements entry for #40065, which makes a read-only environmentd restart in place rather than exit its container when it reboots to pick up DDL changes during zero-downtime upgrade catch-up, so Kubernetes no longer applies crash-restart backoff. Provisional dates are unchanged from rc.1 and rc.2 (Cloud 2026-10-29, Self-Managed 2026-10-30), so the operator compatibility table is untouched.
### Motivation Adds the upsert source hydration improvement to the v26.48.0 release notes. This PR targets the release notes branch of #40113, not `main`. ### Description - New feature section, **Improved hydration times and memory efficiency for upsert sources** (`{#v26.48-upsert-hydration}`), placed first under `## v26.48.0`. - New chart `doc/user/static/images/releases/v2648_upsert_hydration.png`, comparing old and new hydration time and peak memory plus disk usage. - Hydration time comes from the "Catch-up" row of the benchmark run (206.1 min old vs 107.9–113.3 min new across four tested configurations). The peak memory plus disk figures (542 GiB old vs 183–208 GiB new) were supplied separately. - Links to the blog post: https://materialize.com/blog/materialize-out-of-core/ ### Verification Checked the rendered chart image and the Markdown section by hand. --- _Generated by [Claude Code](https://claude.ai/code/session_016DcnmrsjsfSMzxGBGkmEuK)_ --------- Co-authored-by: Claude <noreply@anthropic.com>
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Release notes for the v26.48.0 train. Dates in RC snapshots are provisional until the release ships. One commit is added per snapshot; the
finalsnapshot sets the real dates. Applied so far:rc.1,rc.2,rc.3.v26.48.0-rc.1tag (2026-10-23T02:19:41Z).v26.48, release date2026-10-30. Unchanged by rc.2 and rc.3.main, whose newest published section was## v26.46.1when this branch was cut; v26.47.0 and v26.47.1 have since merged in.v26.48.0stays at the top of the list.rc.3 increment
One Improvement, for #40065: a read-only
environmentdthat reboots to pick up DDL changes during zero-downtime upgrade catch-up now restarts in place rather than exiting its container, so Kubernetes no longer applies crash-restart backoff. Not inherited from rc.1 — rc.1 correctly omitted the first attempt (#40029) together with its revert (#40061) as a no-op onmain; rc.3 re-lands the behavior in narrowed form, verified as a real change by comparingentrypoint.shat thev26.47.0tag (no retry loop) againstv26.48.0-rc.3(re-exec on exit 75). The draft's closing "so zero-downtime upgrades catch up faster" was cut: no cited PR measures an upgrade duration, so the entry claims only the mechanism.MZ_RESTARTED_IN_PLACEmarker check keeps it from booting writable, so it cannot fence the leader — the failure Revert "environmentd: restart halts within the container (#40029)" #40061 reverted. Worth watching if 0dt reports look odd after this ships.K8s recovery: envd on failing node— the nightly environmentd: restart halts within the container #40029 broke — was not run on the branch (it needs the cloudtest kind cluster and image builds). Worth a glance at the nightly for this RC before thefinalsnapshot, since that job is what sank the first attempt.rc.2 increment — empty, by design
rc.2's commit is empty: no entry was published and the provisional dates did not move. It exists so later runs can see from the commit subject that rc.2 was applied.
The snapshot's single materialize PR, #40189 (upsert drain goes from quadratic to linear — a 400-timestamp tail drains in 0.67 s, 6.5 s → 0.15 s at 100 timestamps), is held at Borderline. It runs only on the v2 upsert path, and
enable_upsert_v2defaults tofalseat thev26.48.0-rc.2tag (src/storage-types/src/dyncfgs.rs:504-509); the headline 4x figure needs two further flags on top. The author's own declaration is "Release notes: None. Upsert v2 is gated behindenable_upsert_v2".v26.44.0-rc.1(#39041) andv26.45.0-rc.1(#39044) were both held onenable_upsert_v2, andv26.44.0/finalre-verified the default asfalseat its ship tag. The repetition is itself the thing worth raising. Cutting the other way: the PR names a real production incident (CPU-320) — a source that could not catch up on any replica size — which suggests the lever is on somewhere via LaunchDarkly. Is upsert v2 on for any customer at release? The author wrote both the incident description and the "no note" line in the same body, so this needs the release owner, not a rubric call.rc.1 — standing warnings
mainfor v26.48.0. Four of the seven shipped to Cloud in v26.47.0 on 2026-10-22 — #37653, #39910, #39927, #40036 — so republishing any of them would put duplicate text in front of customers eight days later. The other three (#39903, #39906, #40046) were held at Borderline in v26.47.0 and are held again here, each reason re-checked rather than inherited. The "snapshots are disjoint by construction" guarantee holds within a train, not across trains, so this was caught mechanically by grepping every PR number in the issue against the v26.47.0 snapshot directories. All seven are listed under their own heading inrc.1/omitted.md.Open questions for the release owner
enable_upsert_v2.enable_mcp_protocol_2026_07_28defaults tofalseat the tag. The authors say the flag "stays off in production until mcp: answer server/discover on 2026-07-28 requests (DEX-75) #39759 lands", which it now has, so it may well be flipped. Is it on for customers at release? If so this deserves a Feature section rather than an Improvement bullet, since it is what moves auto-mode clients such as Claude Code onto the new revision. Drafted wording is inrc.1/omitted.md.cluster-details-page-cns-173is on in Staging only and "Production needs it too before the preview can be offered there." Self-managed pins it off. Is the preview reachable in Production for v26.48.0?Resolved since rc.1: the Kafka sink headers framing question — the GA section on this branch answers it.
Verification notes — rc.1's Step 5 pass cut one drafted entry and rewrote four:
mz_persist_lease_timeout_readcannot distinguish a dead reader from a stuck one — and the follow-up it names is a Cloud alerting change. Nothing a customer observes changes.AT TIME ZONE. Reworded to what the table supports.environmentdaccept backlog (server-core: Raise the listen backlog to 1024 #40035): the author's hedge is kept — "less likely to be restarted", not eliminated, because the PR says "This makes the queue fill later, not never."Judgment calls a reviewer may want to revisit — #39605 is filed as an Improvement, not a Bug Fix: nothing was incorrect, an unbounded operation gained a bound and a knob. #40101 is filed as a Bug Fix rather than omitted under the internal-logging rule, because credentials reaching the logs is a security defect with a user-visible remedy; only credentials a user inlined rather than wrapped in a
SECRETwere affected.Snapshot drafts (with PR links) in mz-skills:
Borderline PRs omitted: rc.1: 12 — omitted.md#borderline, rc.2: 1 — omitted.md#borderline, rc.3: 0
🤖 Generated with Claude Code