Skip to content

[pull] main from MaterializeInc:main - #1419

Merged
pull[bot] merged 13 commits into
transparencies:mainfrom
MaterializeInc:main
Sep 29, 2026
Merged

pull[bot] merged 13 commits into
transparencies:mainfrom
MaterializeInc:main

Conversation

@pull

@pull pull Bot commented Sep 29, 2026 •

Copy link
Copy Markdown

See Commits and Changes for more details.


Created by pull[bot] (v2.0.0-alpha.4)

Can you help keep this open source service alive? 💖 Please sponsor : )

dependabot Bot and others added 13 commits September 29, 2026 16:51
Bumps [itertools](https://github.com/rust-itertools/itertools) from
0.14.0 to 0.15.0.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/rust-itertools/itertools/blob/master/CHANGELOG.md">itertools's
changelog</a>.</em></p>
<blockquote>
<h2>0.15.0</h2>
<h3>Breaking</h3>
<ul>
<li>Restructure <code>Position</code> as struct instead of enum (<a
href="https://redirect.github.com/rust-itertools/itertools/issues/1042">#1042</a>,
<a
href="https://redirect.github.com/rust-itertools/itertools/issues/1043">#1043</a>)</li>
<li>Canonicalize <code>all_equal_value</code>'s error type (<a
href="https://redirect.github.com/rust-itertools/itertools/issues/1032">#1032</a>)</li>
</ul>
<h3>Added</h3>
<ul>
<li>Add <code>*_with_hasher</code> adaptors (<a
href="https://redirect.github.com/rust-itertools/itertools/issues/1007">#1007</a>)</li>
<li>Add strip_prefix and strip_prefix_by methods (<a
href="https://redirect.github.com/rust-itertools/itertools/issues/1104">#1104</a>)</li>
</ul>
<h3>Changed</h3>
<ul>
<li>Remove <code>Clone</code> bounds from
<code>tuple_combinations</code> and <code>array_combinations</code>(<a
href="https://redirect.github.com/rust-itertools/itertools/issues/1011">#1011</a>)</li>
<li><code>must_use</code> for <code>collect_vec</code> (<a
href="https://redirect.github.com/rust-itertools/itertools/issues/1009">#1009</a>)</li>
<li>Make <code>izip!</code> temporary friendly (<a
href="https://redirect.github.com/rust-itertools/itertools/issues/1021">#1021</a>)</li>
<li>Add <code>array_combinations_with_replacement</code> (<a
href="https://redirect.github.com/rust-itertools/itertools/issues/1033">#1033</a>)</li>
<li>Implement <code>Debug</code> for remaining public types (<a
href="https://redirect.github.com/rust-itertools/itertools/issues/1038">#1038</a>)</li>
<li>Specialize <code>ExactlyOneError::count</code> (<a
href="https://redirect.github.com/rust-itertools/itertools/issues/1046">#1046</a>)</li>
<li>Implement <code>PeekingNext</code> for more types, in particular
<code>vec::IntoIter</code> (<a
href="https://redirect.github.com/rust-itertools/itertools/issues/1059">#1059</a>,
<a
href="https://redirect.github.com/rust-itertools/itertools/issues/1073">#1073</a>)</li>
<li>Fix <code>PadUsing::next_back</code> (<a
href="https://redirect.github.com/rust-itertools/itertools/issues/1082">#1082</a>)</li>
<li>Introduce <code>[circular_]array_windows</code>, deprecate
<code>tuple_windows</code> (<a
href="https://redirect.github.com/rust-itertools/itertools/issues/1086">#1086</a>)</li>
<li>Deprecate <code>tuple_combinations</code> (replaced by
<code>array_combinations</code>) (<a
href="https://redirect.github.com/rust-itertools/itertools/issues/1085">#1085</a>)</li>
</ul>
<h3>Notable Internal Changes</h3>
<ul>
<li>Make <code>into_group_map</code> code more idiomatic (<a
href="https://redirect.github.com/rust-itertools/itertools/issues/1027">#1027</a>)</li>
<li>Fix clippy lints (<a
href="https://redirect.github.com/rust-itertools/itertools/issues/1017">#1017</a>,
<a
href="https://redirect.github.com/rust-itertools/itertools/issues/1029">#1029</a>,
<a
href="https://redirect.github.com/rust-itertools/itertools/issues/1076">#1076</a>,
<a
href="https://redirect.github.com/rust-itertools/itertools/issues/1099">#1099</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/rust-itertools/itertools/commit/37bd72aa6d58e594711d127b52418ca5e58b6091"><code>37bd72a</code></a>
Update CHANGELOG.md: strip_prefix[_by]</li>
<li><a
href="https://github.com/rust-itertools/itertools/commit/86ec6359258e57a8af391fafc645d6ffab363bff"><code>86ec635</code></a>
Use <code>ControlFlow</code> in <code>fold_while</code>
implementation</li>
<li><a
href="https://github.com/rust-itertools/itertools/commit/d5897f7bb2283a34b736f539a369fe16dc9f6bb4"><code>d5897f7</code></a>
refactor(strip_prefix): use try_for_each and drop PartialEq, Eq on
StripPrefi...</li>
<li><a
href="https://github.com/rust-itertools/itertools/commit/b2a978abca1dc57f929f60e0be16d83e58f9558f"><code>b2a978a</code></a>
feat(Itertools): add strip_prefix and strip_prefix_by methods</li>
<li><a
href="https://github.com/rust-itertools/itertools/commit/12b6ec6f91eb83eebe4ac150e53aca14365cd894"><code>12b6ec6</code></a>
Update CHANGELOG.md for all_equal_value_error's error type</li>
<li><a
href="https://github.com/rust-itertools/itertools/commit/121821ed16365a39c015449a3872708fd5dcdfdd"><code>121821e</code></a>
AllEqualValueError implements std::error::Error</li>
<li><a
href="https://github.com/rust-itertools/itertools/commit/adac44e4278b087033d23408652e540aef5b22f0"><code>adac44e</code></a>
Introduce AllEqualValueError</li>
<li><a
href="https://github.com/rust-itertools/itertools/commit/5707384b6a3a675c65e12b96e71335e9ce857b16"><code>5707384</code></a>
Update CHANGELOG.md</li>
<li><a
href="https://github.com/rust-itertools/itertools/commit/df60ff016bf31f5752827808b375d36b0a101e33"><code>df60ff0</code></a>
Update CHANGELOG.md</li>
<li><a
href="https://github.com/rust-itertools/itertools/commit/113b850b9d68406dda7c428d31992002c77eebad"><code>113b850</code></a>
Update CHANGELOG.md to include with_hasher</li>
<li>Additional commits viewable in <a
href="https://github.com/rust-itertools/itertools/compare/v0.14.0...v0.15.0">compare
view</a></li>
</ul>
</details>
<br />


> **Note**
> Automatic rebases have been disabled on this pull request as it has
been open for over 30 days.

Co-authored-by: Moritz Hoffmann <antiguru@gmail.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…ction (#39300)

## Motivation

Both listeners build a new `SslConnector` for every connection they
proxy over TLS to environmentd. `SslConnector::builder` loads and parses
the system CA bundle into a new X509 store, and the connection holds
that store for its whole lifetime. Verification is disabled on the next
line, so the store is never used.

That makes memory use per connection much higher than it needs to be,
and it spends CPU parsing PEM on every connection. CPU profiles of
balancerd show certificate parsing (`PEM_read_bio`, `d2i_X509`,
`X509_load_cert_crl_file_ex`, reached through `SslConnector::builder` →
`set_default_verify_paths`) as a noticeable share of connection setup.

## Solution

Build the connector once in `BalancerService::serve` and share it with
both listeners. `internal_tls` goes from `bool` to
`Option<SslConnector>`. Cloning it only shares the reference-counted
context. Each connection now just calls `configure()?.into_ssl(addr)`.

A failure to build the connector is now a startup error rather than a
per-connection `expect`.

## Testing

No tests are added. The existing balancerd tests cover the internal-TLS
pgwire and HTTPS paths.

I measured the memory cost per connection locally, running the
`balancerd` binary with `--internal-tls` in front of a TLS upstream. I
opened N HTTPS connections, held them, and sampled RSS at each step.
Both builds are from this branch, with and without the change.

| held connections | before | after |
| --- | --- | --- |
| 250 | +207 MiB | +24 MiB |
| 500 | +408 MiB | +42 MiB |
| 1000 | +808 MiB | +78 MiB |
| 1500 | +1,208 MiB | +114 MiB |

That is about 824 KiB per connection before and about 75-100 KiB after.

These numbers are from a debug build on macOS with the system allocator,
with `SSL_CERT_FILE` pointed at a real CA bundle. The vendored OpenSSL
does not find macOS's bundle on its own. The connections were idle, so
buffers under real traffic add some on top. These numbers differ
drastically with production, but the rough shape of the improvement
should hold.

## Notes for the reviewer

- Behavior is unchanged: the same `SslMethod::tls()` connector with
`SslVerifyMode::NONE`, and the same SNI and hostname passed to
`into_ssl`. Clients do not share TLS sessions, since OpenSSL's session
cache is off on the client side by default.
- A lower cost per connection also leaves more headroom under
`balancerd_max_connections` for a given memory limit.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
SQLAlchemy 2.1 (bumped in #39281) connects a plain `postgresql://` URL
through psycopg 3. That dialect's first connect sends `SAVEPOINT`, which
Materialize doesn't support, so `test_sqlalchemy` has failed in every
nightly since. This PR names the psycopg2 driver in the test's
`create_engine` URL, which restores what the test covered on SQLAlchemy
2.0. The other tests keep the plain libpq URL.

The user-facing problem with psycopg 3 is tracked in
[SQL-483](https://linear.app/materializeinc/issue/SQL-483).

Modified test: `test_sqlalchemy` in `test/lang/python/smoketest.py`. It
runs only in the nightly (`:python:`), not in PR CI.

Closes: [QAR-212](https://linear.app/materializeinc/issue/QAR-212)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
SQLAlchemy 2.1 (released 2026-09-24) connects plain `postgresql://` URLs
through psycopg 3, and that path fails against Materialize on first
connect with `Expected a keyword at the beginning of a statement, found
identifier "savepoint"` (tracked in
[SQL-483](https://linear.app/materializeinc/issue/SQL-483) and
[SQL-736](https://linear.app/materializeinc/issue/SQL-736)). Our docs
don't mention SQLAlchemy anywhere.

This adds a SQLAlchemy section to the Python cheatsheet, under "Python
ORMs": connect with the `psycopg2` driver (`postgresql+psycopg2://`),
the error users see otherwise, and the psycopg 3 workaround
(`use_native_hstore=False`). The client-libraries table links to it.
Both the snippet and the workaround were run against v26.44.0-rc.1 with
SQLAlchemy 2.1.1.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…#39332)

Problem:
The curated `mz_metric_arrangement_sizes` sink folded operators of
dataflows without a catalog export (its own dataflow, the introspection
subscribes, the logging dataflows) into an `unattributable` series. That
put the sink's own arrangement sizes on its input: every change to its
arrangements changed their logged size, which it read on the next
logging tick, so the whole dataflow re-ran every tick for the replica's
lifetime.

Across the 41 replicas that the kafka-matrix creates, it pushed over
capacity, and after a restart the catalog server's indexes took minutes
to hydrate, so the status checks timed out.

Solution:
Count only dataflows with a non-transient export. Map each operator to
its export before joining the raw logs, and join each raw log through
its existing index, so no arrangement the sink owns ever holds rows
about its own operators. The attributed series are unchanged. The
`unattributable` series is gone.

Testing:
Re-enable the curated sinks in kafka-matrix.

Fixes [SQL-730](https://linear.app/materializeinc/issue/SQL-730).
Problem: `ALTER SYSTEM SET disabled_metric_sinks = ''` panicked the
coordinator. The value parsed as a single empty identifier, which is
stored as `""`. Re-parsing that from the catalog fails, and the apply
path panics.

Solution: a lone '' now parses as the empty list. An empty identifier
mixed with other values, like 'a', '', is rejected at SET time.

Testing: a unit test checks that `Vec<Ident>` values survive the catalog
round-trip, and vars.slt sets disabled_metric_sinks to ''.

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
dynfmt 0.2 adds `format_into` and updates its dependencies, without
parser changes. It moves to erased-serde 0.4 and thiserror 2, so the
erased-serde 0.3.26 skip in deny.toml goes away.

Posted by Claude Code.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
mz-deploy uses crossterm only for cursor and screen control, which 0.29
leaves unchanged. crossterm moves to rustix 1.

Posted by Claude Code.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
junit-report 0.9 moves to the workspace's quick-xml and drops
strip-ansi-escapes, which 0.8 applied only to system-out and system-err.
testdrive, sqllogictest and mz-deploy set neither. With quick-xml 0.31
gone, deny.toml loses both quick-xml skips and the RUSTSEC-2026-0194 and
RUSTSEC-2026-0195 ignores.

Posted by Claude Code.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
mz-testdrive moves to similar 3, which similar-asserts 2 already uses.
insta 1.48, the latest release, still depends on similar 2, so deny.toml
skips similar 2.7.0.

Posted by Claude Code.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Replaces #39273. Takes its minor and patch updates and reformats sources
for prettier 3.9. Deduplicating `@codemirror/*` keeps one
`@codemirror/language` instance. Otherwise lang-json nests its own copy
and breaks the `LanguageSupport` types.

Held back because they need code changes or break tests:
* @codemirror-toolkit/react 0.7 removes `createCodeMirrorWithContext`.
* kysely 0.29 and kysely-codegen 0.20 change the query builder types.
* msw 2.15, downshift 9.4, react-hook-form 7.88 and @frontegg/react 7.17
tighten types that existing code relies on.
* jotai-devtools 0.14 requires jotai 2.20, and jotai 2.20 fails about a
fifth of the unit tests.
* eslint-plugin-react-refresh 0.5 requires a flat ESLint config and
moves with the ESLint update.

*Posted by Claude Code.*

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Replaces #36594. TypeScript 6 deprecates `baseUrl`. Every `paths` entry
is already relative to the tsconfig, so the only dependent was a bare
`types/materialize` import, which now uses the `~/types` alias.
TypeScript 6 also checks side-effect imports by default, so the
stylesheet-only `@fontsource/roboto-mono` package needs a declaration.

*Posted by Claude Code.*

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Replaces #35735 and #36593. @hookform/resolvers 5 imports `zod/v4/core`,
which only zod 3.25 and later provide, so both move together. Zod 4
replaces `required_error` and `errorMap` with the `error` option. The
query history date range schema moves its custom refine message to
`error` as well.

*Posted by Claude Code.*

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
@pull pull Bot locked and limited conversation to collaborators Sep 29, 2026
@pull pull Bot added the ⤵️ pull label Sep 29, 2026
@pull
pull Bot merged commit e3ecfb4 into transparencies:main Sep 29, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants