Conversation
So we can better see why it decides to do a local vs remote join. Spawning from [investigating a join issue on `matrix.org`](https://matrix.to/#/!SGNQGPGUwtcPBUotTL:matrix.org/$Odvd47QtkRscxilzkhcFOsDZWNvJUSEhSrD8GpukKWo?via=jki.re&via=element.io&via=matrix.org).
…mages being chosen over local) (#19475) Fix remote images being chosen over the local ones we just built with Complement in CI (any Docker environment using the `containerd` image store). This problem means that Complement jobs in CI don't actually test against the code from the PR (since 2026-02-10). This PR approaches the problem the same way that @AndrewFerr proposed in element-hq/synapse#18210. This is better than the alternative listed below as we can just make our code compatible with whatever image store is being used. ### Problem Spawning from element-hq/synapse#19460 (comment) where we found that our Complement jobs in CI don't actually test against the code from the PR at the moment. This is caused by a change in Docker Engine 29.0.0: > `containerd` image store is now the default for **fresh installs**. This doesn't apply to daemons configured with `userns-remap` (see [moby#47377](moby/moby#47377)). > > *-- 29.0.0 (2025-11-10), https://docs.docker.com/engine/release-notes/29/#2900* And our `ubuntu-latest` GitHub runner (`Current runner version: '2.331.0'`) [points](https://github.com/actions/runner-images/blob/ubuntu24/20260209.23/images/ubuntu/Ubuntu2404-Readme.md) to using Docker client/server `29.1.5` 🎯 This Docker version bump happened on actions/runner-images@416418d (2026-02-10) (`28.0.4` -> `29.1.5`). Specific PR: actions/runner-images#13633 --- I found this because I reviewed and remembered element-hq/synapse#18210 was a thing that @AndrewFerr ran into. And then running `dockers system prune` also revealed the problematic `containerd` in CI. Checking the Docker changelogs, I found the new default culprit and then could trace down where the GitHub runners made the dependency update. --------- Co-authored-by: Andrew Ferrazzutti <andrewf@element.io>
Bumps [pillow](https://github.com/python-pillow/Pillow) from 12.0.0 to 12.1.1. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/python-pillow/Pillow/releases">pillow's releases</a>.</em></p> <blockquote> <h2>12.1.1</h2> <p><a href="https://pillow.readthedocs.io/en/stable/releasenotes/12.1.1.html">https://pillow.readthedocs.io/en/stable/releasenotes/12.1.1.html</a></p> <h2>Dependencies</h2> <ul> <li>Patch libavif for svt-av1 4.0 compatibility <a href="https://redirect.github.com/python-pillow/Pillow/issues/9413">#9413</a> [<a href="https://github.com/hugovk"><code>@hugovk</code></a>]</li> </ul> <h2>Other changes</h2> <ul> <li>Fix OOB Write with invalid tile extents <a href="https://redirect.github.com/python-pillow/Pillow/issues/9427">#9427</a> [<a href="https://github.com/radarhere"><code>@radarhere</code></a>]</li> </ul> <h2>12.1.0</h2> <p><a href="https://pillow.readthedocs.io/en/stable/releasenotes/12.1.0.html">https://pillow.readthedocs.io/en/stable/releasenotes/12.1.0.html</a></p> <h2>Deprecations</h2> <ul> <li>Deprecate getdata(), in favour of new get_flattened_data() <a href="https://redirect.github.com/python-pillow/Pillow/issues/9292">#9292</a> [<a href="https://github.com/radarhere"><code>@radarhere</code></a>]</li> </ul> <h2>Documentation</h2> <ul> <li>Specify APNG duration type when opening <a href="https://redirect.github.com/python-pillow/Pillow/issues/9368">#9368</a> [<a href="https://github.com/radarhere"><code>@radarhere</code></a>]</li> <li>Added release notes for <a href="https://redirect.github.com/python-pillow/Pillow/issues/9350">#9350</a> <a href="https://redirect.github.com/python-pillow/Pillow/issues/9366">#9366</a> [<a href="https://github.com/radarhere"><code>@radarhere</code></a>]</li> <li>Update ImageMorph documentation <a href="https://redirect.github.com/python-pillow/Pillow/issues/9349">#9349</a> [<a href="https://github.com/radarhere"><code>@radarhere</code></a>]</li> <li>Docs: update major bump cadence <a href="https://redirect.github.com/python-pillow/Pillow/issues/9334">#9334</a> [<a href="https://github.com/hugovk"><code>@hugovk</code></a>]</li> <li>Add release notes for <a href="https://redirect.github.com/python-pillow/Pillow/issues/9070">#9070</a> <a href="https://redirect.github.com/python-pillow/Pillow/issues/9320">#9320</a> [<a href="https://github.com/radarhere"><code>@radarhere</code></a>]</li> <li>Updated Ubuntu version <a href="https://redirect.github.com/python-pillow/Pillow/issues/9306">#9306</a> [<a href="https://github.com/radarhere"><code>@radarhere</code></a>]</li> <li>Update macOS tested Pillow versions <a href="https://redirect.github.com/python-pillow/Pillow/issues/9265">#9265</a> [<a href="https://github.com/radarhere"><code>@radarhere</code></a>]</li> </ul> <h2>Dependencies</h2> <ul> <li>Update harfbuzz to 12.3.0 <a href="https://redirect.github.com/python-pillow/Pillow/issues/9355">#9355</a> [<a href="https://github.com/radarhere"><code>@radarhere</code></a>]</li> <li>Update xz to 5.8.2 <a href="https://redirect.github.com/python-pillow/Pillow/issues/9343">#9343</a> [<a href="https://github.com/radarhere"><code>@radarhere</code></a>]</li> <li>Updated libjpeg-turbo to 3.1.3 <a href="https://redirect.github.com/python-pillow/Pillow/issues/9333">#9333</a> [<a href="https://github.com/radarhere"><code>@radarhere</code></a>]</li> <li>Updated zlib-ng to 2.3.2 <a href="https://redirect.github.com/python-pillow/Pillow/issues/9324">#9324</a> [<a href="https://github.com/radarhere"><code>@radarhere</code></a>]</li> <li>Updated libpng to 1.6.53 <a href="https://redirect.github.com/python-pillow/Pillow/issues/9325">#9325</a> [<a href="https://github.com/radarhere"><code>@radarhere</code></a>]</li> <li>Update actions/checkout action to v6 <a href="https://redirect.github.com/python-pillow/Pillow/issues/9323">#9323</a> [@<a href="https://github.com/apps/renovate">renovate[bot]</a>]</li> <li>Update dependency mypy to v1.19.0 <a href="https://redirect.github.com/python-pillow/Pillow/issues/9322">#9322</a> [@<a href="https://github.com/apps/renovate">renovate[bot]</a>]</li> <li>Updated libpng to 1.6.51 <a href="https://redirect.github.com/python-pillow/Pillow/issues/9305">#9305</a> [<a href="https://github.com/radarhere"><code>@radarhere</code></a>]</li> <li>Updated brotli to 1.2.0 <a href="https://redirect.github.com/python-pillow/Pillow/issues/9284">#9284</a> [<a href="https://github.com/radarhere"><code>@radarhere</code></a>]</li> <li>Update libimagequant to 4.4.1 <a href="https://redirect.github.com/python-pillow/Pillow/issues/9301">#9301</a> [<a href="https://github.com/radarhere"><code>@radarhere</code></a>]</li> <li>Update zlib-ng to 2.3.1, except on manylinux2014 aarch64 <a href="https://redirect.github.com/python-pillow/Pillow/issues/9312">#9312</a> [<a href="https://github.com/radarhere"><code>@radarhere</code></a>]</li> <li>Updated harfbuzz to 12.2.0 <a href="https://redirect.github.com/python-pillow/Pillow/issues/9289">#9289</a> [<a href="https://github.com/radarhere"><code>@radarhere</code></a>]</li> <li>Update github-actions <a href="https://redirect.github.com/python-pillow/Pillow/issues/9277">#9277</a> [@<a href="https://github.com/apps/renovate">renovate[bot]</a>]</li> </ul> <h2>Testing</h2> <ul> <li>Replace pre-commit with prek <a href="https://redirect.github.com/python-pillow/Pillow/issues/9360">#9360</a> [<a href="https://github.com/hugovk"><code>@hugovk</code></a>]</li> <li>Test PyQt6 on Python 3.14 on Windows <a href="https://redirect.github.com/python-pillow/Pillow/issues/9353">#9353</a> [<a href="https://github.com/radarhere"><code>@radarhere</code></a>]</li> <li>Test 32-bit Windows on Windows Server 2022 <a href="https://redirect.github.com/python-pillow/Pillow/issues/9345">#9345</a> [<a href="https://github.com/radarhere"><code>@radarhere</code></a>]</li> <li>Correct variable type <a href="https://redirect.github.com/python-pillow/Pillow/issues/9335">#9335</a> [<a href="https://github.com/radarhere"><code>@radarhere</code></a>]</li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/python-pillow/Pillow/commit/5158d98c807e719c5938aa3886913ef0ea6814e9"><code>5158d98</code></a> 12.1.1 version bump</li> <li><a href="https://github.com/python-pillow/Pillow/commit/9000313cc5d4a31bdcdd6d7f0781101abab553aa"><code>9000313</code></a> Fix OOB Write with invalid tile extents (<a href="https://redirect.github.com/python-pillow/Pillow/issues/9427">#9427</a>)</li> <li><a href="https://github.com/python-pillow/Pillow/commit/cd0111849fb32c40860e3ee3d57b9b1cee4260cf"><code>cd01118</code></a> Patch libavif for svt-av1 4.0 compatibility</li> <li><a href="https://github.com/python-pillow/Pillow/commit/46f45f674d47b5d8bc54230dda8fe9e214598b87"><code>46f45f6</code></a> 12.1.0 version bump</li> <li><a href="https://github.com/python-pillow/Pillow/commit/c9ac097edb5594f63c40acd9afe6802547200379"><code>c9ac097</code></a> Simplify band splitting (<a href="https://redirect.github.com/python-pillow/Pillow/issues/9291">#9291</a>)</li> <li><a href="https://github.com/python-pillow/Pillow/commit/3baedf264804d199bc19458d11bcff02ce7598eb"><code>3baedf2</code></a> Deprecate getdata(), in favour of new get_flattened_data() (<a href="https://redirect.github.com/python-pillow/Pillow/issues/9292">#9292</a>)</li> <li><a href="https://github.com/python-pillow/Pillow/commit/b51a0366852c1d519d108dfec8fc2d738cd8080f"><code>b51a036</code></a> Specify APNG duration type when opening (<a href="https://redirect.github.com/python-pillow/Pillow/issues/9368">#9368</a>)</li> <li><a href="https://github.com/python-pillow/Pillow/commit/8d08e31533065b623399a54bc92b39a756599ad4"><code>8d08e31</code></a> Add release notes for <a href="https://redirect.github.com/python-pillow/Pillow/issues/9348">#9348</a> (<a href="https://redirect.github.com/python-pillow/Pillow/issues/9369">#9369</a>)</li> <li><a href="https://github.com/python-pillow/Pillow/commit/432707ea810ae619e2a9e4a9737c169cacaa8eda"><code>432707e</code></a> Added release notes for <a href="https://redirect.github.com/python-pillow/Pillow/issues/9348">#9348</a></li> <li><a href="https://github.com/python-pillow/Pillow/commit/2d589107fb3a4aba8389932a65ff771bf9b4deb1"><code>2d58910</code></a> Specify APNG duration type when opening</li> <li>Additional commits viewable in <a href="https://github.com/python-pillow/Pillow/compare/12.0.0...12.1.1">compare view</a></li> </ul> </details> <br /> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/element-hq/synapse/network/alerts). </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Quentin Gliech <quenting@element.io>
Bumps the patches group with 2 updates: [anyhow](https://github.com/dtolnay/anyhow) and [regex](https://github.com/rust-lang/regex). Updates `anyhow` from 1.0.100 to 1.0.101 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/dtolnay/anyhow/releases">anyhow's releases</a>.</em></p> <blockquote> <h2>1.0.101</h2> <ul> <li>Add #[inline] to anyhow::Ok helper (<a href="https://redirect.github.com/dtolnay/anyhow/issues/437">#437</a>, thanks <a href="https://github.com/Ibitier"><code>@Ibitier</code></a>)</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/dtolnay/anyhow/commit/80bfe291b16071c70f141e90e67e7032d966826b"><code>80bfe29</code></a> Release 1.0.101</li> <li><a href="https://github.com/dtolnay/anyhow/commit/dff8c432f95095cac19aa446da5047880b8ebdf3"><code>dff8c43</code></a> Merge pull request <a href="https://redirect.github.com/dtolnay/anyhow/issues/437">#437</a> from Ibitier/inline-ok-helper</li> <li><a href="https://github.com/dtolnay/anyhow/commit/85d9ea9a1c7d7490578865e16ff64787efc7d01d"><code>85d9ea9</code></a> Add #[inline] to anyhow::Ok helper</li> <li><a href="https://github.com/dtolnay/anyhow/commit/54036cc289b754775b884485f486e000bcda2875"><code>54036cc</code></a> Update ui test suite to nightly-2026-01-21</li> <li><a href="https://github.com/dtolnay/anyhow/commit/cce0579d85fd1f6352a5955a9c134fc8655c853d"><code>cce0579</code></a> Update actions/upload-artifact@v5 -> v6</li> <li><a href="https://github.com/dtolnay/anyhow/commit/f2c598ca0e8ffd7ffcbcf93b8a6ad4df57c719fd"><code>f2c598c</code></a> Update actions/upload-artifact@v4 -> v5</li> <li><a href="https://github.com/dtolnay/anyhow/commit/2c0bda4ce944d943e7141f0316b0ea996602238e"><code>2c0bda4</code></a> Update to 2021 edition</li> <li><a href="https://github.com/dtolnay/anyhow/commit/0d822681293d71c72440c9cdd635b4f15da064c4"><code>0d82268</code></a> Remove rustc version requirement from readme</li> <li><a href="https://github.com/dtolnay/anyhow/commit/67df01216d29bc3bede925ab4483353b66c159f2"><code>67df012</code></a> Merge pull request <a href="https://redirect.github.com/dtolnay/anyhow/issues/436">#436</a> from dtolnay/up</li> <li><a href="https://github.com/dtolnay/anyhow/commit/c8984880a87ae4fd4b04c956cfdc9af5f69eab55"><code>c898488</code></a> Raise required compiler to Rust 1.68</li> <li>Additional commits viewable in <a href="https://github.com/dtolnay/anyhow/compare/1.0.100...1.0.101">compare view</a></li> </ul> </details> <br /> Updates `regex` from 1.12.2 to 1.12.3 <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/rust-lang/regex/blob/master/CHANGELOG.md">regex's changelog</a>.</em></p> <blockquote> <h1>1.12.3 (2025-02-03)</h1> <p>This release excludes some unnecessary things from the archive published to crates.io. Specifically, fuzzing data and various shell scripts are now excluded. If you run into problems, please file an issue.</p> <p>Improvements:</p> <ul> <li><a href="https://redirect.github.com/rust-lang/regex/pull/1319">#1319</a>: Switch from a Cargo <code>exclude</code> list to an <code>include</code> list, and exclude some unnecessary stuff.</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/rust-lang/regex/commit/b028e4f40eac8959d05e82abf8404906b1c565c0"><code>b028e4f</code></a> 1.12.3</li> <li><a href="https://github.com/rust-lang/regex/commit/5e195de266e203441b2c8001d6ebefab1161a59e"><code>5e195de</code></a> regex-automata-0.4.14</li> <li><a href="https://github.com/rust-lang/regex/commit/a3433f691863d80300dfd6a52e332cb5a568e895"><code>a3433f6</code></a> regex-syntax-0.8.9</li> <li><a href="https://github.com/rust-lang/regex/commit/0c07fae444adf0802d84455e689f1143d2dd7790"><code>0c07fae</code></a> regex-lite-0.1.9</li> <li><a href="https://github.com/rust-lang/regex/commit/6a810068f030c023a12c93ccae49bc5fd907c4f6"><code>6a81006</code></a> cargo: exclude development scripts and fuzzing data</li> <li><a href="https://github.com/rust-lang/regex/commit/4733e28ba4f281f643ce93e4089eccbb9a9d5a5a"><code>4733e28</code></a> automata: fix <code>onepass::DFA::try_search_slots</code> panic when too many slots are ...</li> <li>See full diff in <a href="https://github.com/rust-lang/regex/compare/1.12.2...1.12.3">compare view</a></li> </ul> </details> <br /> Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore <dependency name> major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself) - `@dependabot ignore <dependency name> minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself) - `@dependabot ignore <dependency name>` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself) - `@dependabot unignore <dependency name>` will remove all of the ignore conditions of the specified dependency - `@dependabot unignore <dependency name> <ignore condition>` will remove the ignore condition of the specified dependency and ignore conditions </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…t as a test. (#19486) This fixes one of the 2 blockers to using pytest instead of Trial (which is not formally-motivated, but sometimes seems like an interesting idea because pytest has seen a lot of developer experience features that Trial hasn't. It would also removes one more coupling to the Twisted framework.) --- The `test_` prefix to this test helper makes it appear as a test to pytest. We *can* set a `__test__ = False` attribute on the test, but it felt cleaner to just rename it (as I also thought it would be a test from that name!). This was previously reported as: element-hq/synapse#18665 --------- Signed-off-by: Olivier 'reivilibre <oliverw@matrix.org>
…efore issuing an access token. (#18518) Fixes: #18503 --------- Signed-off-by: Olivier 'reivilibre <oliverw@matrix.org> Co-authored-by: Quentin Gliech <quenting@element.io>
Deleting devices should be fairly rare, and if someone gets logged out it's helpful to grep logs for a user id or device id and see where it died.
Spawning from element-hq/synapse-small-hosts#348 where some test appears to be flaky because some homeserver objects are frozen in the garbage collector. We set [`freeze=False`](https://github.com/element-hq/synapse-small-hosts/blob/a9a6869aa9a67176bdddc3b8ae2d0de0996d8cf4/multi_synapse/app/shard.py#L319-L321) in the [Synapse Pro for small hosts](https://docs.element.io/latest/element-server-suite-pro/synapse-pro-for-small-hosts/overview/) code but I just want to use this log to make extra sure this isn't being run somehow. The follow-up here would be to see what else would cause something to be frozen in the garbage collector.
…#19127) Co-authored-by: Olivier 'reivilibre' <oliverw@element.io>
… group (#19493) Bumps the minor-and-patches group with 1 update: [docker/login-action](https://github.com/docker/login-action). Updates `docker/login-action` from 3.6.0 to 3.7.0 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/docker/login-action/releases">docker/login-action's releases</a>.</em></p> <blockquote> <h2>v3.7.0</h2> <ul> <li>Add <code>scope</code> input to set scopes for the authentication token by <a href="https://github.com/crazy-max"><code>@crazy-max</code></a> in <a href="https://redirect.github.com/docker/login-action/pull/912">docker/login-action#912</a></li> <li>Add support for AWS European Sovereign Cloud ECR by <a href="https://github.com/dphi"><code>@dphi</code></a> in <a href="https://redirect.github.com/docker/login-action/pull/914">docker/login-action#914</a></li> <li>Ensure passwords are redacted with <code>registry-auth</code> input by <a href="https://github.com/crazy-max"><code>@crazy-max</code></a> in <a href="https://redirect.github.com/docker/login-action/pull/911">docker/login-action#911</a></li> <li>build(deps): bump lodash from 4.17.21 to 4.17.23 in <a href="https://redirect.github.com/docker/login-action/pull/915">docker/login-action#915</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/docker/login-action/compare/v3.6.0...v3.7.0">https://github.com/docker/login-action/compare/v3.6.0...v3.7.0</a></p> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/docker/login-action/commit/c94ce9fb468520275223c153574b00df6fe4bcc9"><code>c94ce9f</code></a> Merge pull request <a href="https://redirect.github.com/docker/login-action/issues/915">#915</a> from docker/dependabot/npm_and_yarn/lodash-4.17.23</li> <li><a href="https://github.com/docker/login-action/commit/8339c958ce8511f38d0c474c1886a87c802bf1ef"><code>8339c95</code></a> Merge pull request <a href="https://redirect.github.com/docker/login-action/issues/912">#912</a> from docker/scope</li> <li><a href="https://github.com/docker/login-action/commit/c83e9320c8beb50b77dd007c46d5c8161f0cac4a"><code>c83e932</code></a> build(deps): bump lodash from 4.17.21 to 4.17.23</li> <li><a href="https://github.com/docker/login-action/commit/b268aa57e39ff0a5386d2fd1eded4e2e1d60d705"><code>b268aa5</code></a> chore: update generated content</li> <li><a href="https://github.com/docker/login-action/commit/a60322927812ddc99316dd6252b4fba6d8f09ac1"><code>a603229</code></a> documentation for scope input</li> <li><a href="https://github.com/docker/login-action/commit/7567f92a74b2639be1bd8bc932a112a0d81283da"><code>7567f92</code></a> Add scope input to set scopes for the authentication token</li> <li><a href="https://github.com/docker/login-action/commit/0567fa5ae8c9a197cb207537dc5cbb43ca3d803f"><code>0567fa5</code></a> Merge pull request <a href="https://redirect.github.com/docker/login-action/issues/914">#914</a> from dphi/add-support-for-amazonaws.eu</li> <li><a href="https://github.com/docker/login-action/commit/f6ef57754547a85003a0e18f789be661346d4a6e"><code>f6ef577</code></a> feat: add support for AWS European Sovereign Cloud ECR registries</li> <li><a href="https://github.com/docker/login-action/commit/916386b00027d425839f8da46d302dab33f5875b"><code>916386b</code></a> Merge pull request <a href="https://redirect.github.com/docker/login-action/issues/911">#911</a> from crazy-max/ensure-redact</li> <li><a href="https://github.com/docker/login-action/commit/5b3f94a294ea5478af3af437baa6ad0d3dcd04fd"><code>5b3f94a</code></a> chore: update generated content</li> <li>Additional commits viewable in <a href="https://github.com/docker/login-action/compare/v3.6.0...c94ce9fb468520275223c153574b00df6fe4bcc9">compare view</a></li> </ul> </details> <br /> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore <dependency name> major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself) - `@dependabot ignore <dependency name> minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself) - `@dependabot ignore <dependency name>` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself) - `@dependabot unignore <dependency name>` will remove all of the ignore conditions of the specified dependency - `@dependabot unignore <dependency name> <ignore condition>` will remove the ignore condition of the specified dependency and ignore conditions </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
MSC4380 has now completed FCP, so we can add stable support for it. Co-authored-by: Quentin Gliech <quenting@element.io>
…he Rust HTTP client (#19498) Spawning from [looking](https://matrix.to/#/!cnVVNLKqgUzNTOFQkz:matrix.org/$XOVFm5mjCzzmhUaGc202zGdSq8eWgjr00MJqNSfzHiA?via=element.io&via=matrix.org&via=one.ems.host) at some traces and seeing the Synapse Rust HTTP client taking way longer than what the Synapse Pro Event Cache claims it was able to respond in (added some [better tracing](element-hq/synapse-pro-modules#38) for that). I don't think this specific change will have a meaningful impact but just something I saw (pre-optimization).
When a worker gets very busy some of these loops can get large and end up taking hundreds of ms to complete. To help keep the reactor tick times reasonable we add a periodic yield into these loops. These were found by doing a `py-spy` and speedscope.net (in time order) to see where we were spending blocks of time
…. (#19515) Use non-deprecated imports for collections Other than being deprecated, these legacy imports also don't seem to be compatible with [Ty](https://github.com/astral-sh/ty) --------- Signed-off-by: Olivier 'reivilibre <oliverw@matrix.org>
Bumps the patches group with 1 update: [futures](https://github.com/rust-lang/futures-rs). Updates `futures` from 0.3.31 to 0.3.32 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/rust-lang/futures-rs/releases">futures's releases</a>.</em></p> <blockquote> <h2>0.3.32</h2> <ul> <li>Bump MSRV of utility crates to 1.71. (<a href="https://redirect.github.com/rust-lang/futures-rs/issues/2989">#2989</a>)</li> <li>Soft-deprecate <code>ready!</code> macro in favor of <code>std::task::ready!</code> added in Rust 1.64 (<a href="https://redirect.github.com/rust-lang/futures-rs/issues/2925">#2925</a>)</li> <li>Soft-deprecate <code>pin_mut!</code> macro in favor of <code>std::pin::pin!</code> added in Rust 1.68 (<a href="https://redirect.github.com/rust-lang/futures-rs/issues/2929">#2929</a>)</li> <li>Add <code>FuturesOrdered::clear</code> (<a href="https://redirect.github.com/rust-lang/futures-rs/issues/2927">#2927</a>)</li> <li>Add <code>mpsc::*Receiver::recv</code> (<a href="https://redirect.github.com/rust-lang/futures-rs/issues/2947">#2947</a>)</li> <li>Add <code>mpsc::*Receiver::try_recv</code> and deprecate <code>mpsc::*Receiver::::try_next</code> (<a href="https://redirect.github.com/rust-lang/futures-rs/issues/2944">#2944</a>)</li> <li>Implement <code>FusedStream</code> for <code>sink::With</code> (<a href="https://redirect.github.com/rust-lang/futures-rs/issues/2948">#2948</a>)</li> <li>Add <code>no_std</code> support for <code>shared</code> (<a href="https://redirect.github.com/rust-lang/futures-rs/issues/2868">#2868</a>)</li> <li>Make <code>Mutex::new()</code> const (<a href="https://redirect.github.com/rust-lang/futures-rs/issues/2956">#2956</a>)</li> <li>Add <code>#[clippy::has_significant_drop]</code> to guards (<a href="https://redirect.github.com/rust-lang/futures-rs/issues/2967">#2967</a>)</li> <li>Remove dependency to <code>pin-utils</code> (<a href="https://redirect.github.com/rust-lang/futures-rs/issues/2929">#2929</a>)</li> <li>Remove dependency on <code>num_cpus</code> (<a href="https://redirect.github.com/rust-lang/futures-rs/issues/2946">#2946</a>)</li> <li>Performance improvements (<a href="https://redirect.github.com/rust-lang/futures-rs/issues/2983">#2983</a>)</li> <li>Documentation improvements (<a href="https://redirect.github.com/rust-lang/futures-rs/issues/2925">#2925</a>, <a href="https://redirect.github.com/rust-lang/futures-rs/issues/2926">#2926</a>, <a href="https://redirect.github.com/rust-lang/futures-rs/issues/2940">#2940</a>, <a href="https://redirect.github.com/rust-lang/futures-rs/issues/2971">#2971</a>)</li> </ul> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/rust-lang/futures-rs/blob/master/CHANGELOG.md">futures's changelog</a>.</em></p> <blockquote> <h1>0.3.32 - 2026-02-15</h1> <ul> <li>Bump MSRV of utility crates to 1.71. (<a href="https://redirect.github.com/rust-lang/futures-rs/issues/2989">#2989</a>)</li> <li>Soft-deprecate <code>ready!</code> macro in favor of <code>std::task::ready!</code> added in Rust 1.64 (<a href="https://redirect.github.com/rust-lang/futures-rs/issues/2925">#2925</a>)</li> <li>Soft-deprecate <code>pin_mut!</code> macro in favor of <code>std::pin::pin!</code> added in Rust 1.68 (<a href="https://redirect.github.com/rust-lang/futures-rs/issues/2929">#2929</a>)</li> <li>Add <code>FuturesOrdered::clear</code> (<a href="https://redirect.github.com/rust-lang/futures-rs/issues/2927">#2927</a>)</li> <li>Add <code>mpsc::*Receiver::recv</code> (<a href="https://redirect.github.com/rust-lang/futures-rs/issues/2947">#2947</a>)</li> <li>Add <code>mpsc::*Receiver::try_recv</code> and deprecate <code>mpsc::*Receiver::::try_next</code> (<a href="https://redirect.github.com/rust-lang/futures-rs/issues/2944">#2944</a>)</li> <li>Implement <code>FusedStream</code> for <code>sink::With</code> (<a href="https://redirect.github.com/rust-lang/futures-rs/issues/2948">#2948</a>)</li> <li>Add <code>no_std</code> support for <code>shared</code> (<a href="https://redirect.github.com/rust-lang/futures-rs/issues/2868">#2868</a>)</li> <li>Make <code>Mutex::new()</code> const (<a href="https://redirect.github.com/rust-lang/futures-rs/issues/2956">#2956</a>)</li> <li>Add <code>#[clippy::has_significant_drop]</code> to guards (<a href="https://redirect.github.com/rust-lang/futures-rs/issues/2967">#2967</a>)</li> <li>Remove dependency to <code>pin-utils</code> (<a href="https://redirect.github.com/rust-lang/futures-rs/issues/2929">#2929</a>)</li> <li>Remove dependency on <code>num_cpus</code> (<a href="https://redirect.github.com/rust-lang/futures-rs/issues/2946">#2946</a>)</li> <li>Performance improvements (<a href="https://redirect.github.com/rust-lang/futures-rs/issues/2983">#2983</a>)</li> <li>Documentation improvements (<a href="https://redirect.github.com/rust-lang/futures-rs/issues/2925">#2925</a>, <a href="https://redirect.github.com/rust-lang/futures-rs/issues/2926">#2926</a>, <a href="https://redirect.github.com/rust-lang/futures-rs/issues/2940">#2940</a>, <a href="https://redirect.github.com/rust-lang/futures-rs/issues/2971">#2971</a>)</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/rust-lang/futures-rs/commit/d9bba94c239daa1175a5bb2958f37a5c72db3f6a"><code>d9bba94</code></a> Release 0.3.32</li> <li><a href="https://github.com/rust-lang/futures-rs/commit/151e0b90dec62103df5239f0612f42467994f406"><code>151e0b9</code></a> Add comments on rust-version field in Cargo.toml</li> <li><a href="https://github.com/rust-lang/futures-rs/commit/4aaf00c35176d7180557559f54b0c151e2e608aa"><code>4aaf00c</code></a> Bump MSRV of utility crates to 1.71</li> <li><a href="https://github.com/rust-lang/futures-rs/commit/a4cce12c55942c6e1f2a507061fc6ca94c5b8862"><code>a4cce12</code></a> perf: improve AtomicWaker::wake performance (<a href="https://redirect.github.com/rust-lang/futures-rs/issues/2983">#2983</a>)</li> <li><a href="https://github.com/rust-lang/futures-rs/commit/ba9d102ca6e4a941a5068a1a8dcf0ff3a6c9085a"><code>ba9d102</code></a> Add <code>#[clippy::has_significant_drop]</code> to guards (<a href="https://redirect.github.com/rust-lang/futures-rs/issues/2967">#2967</a>)</li> <li><a href="https://github.com/rust-lang/futures-rs/commit/20396a83eff35414d17320dc35858243e54f0bc8"><code>20396a8</code></a> Fix rustdoc::broken_intra_doc_links warning</li> <li><a href="https://github.com/rust-lang/futures-rs/commit/815f6eb4e40ca9ff81d7d9a25a863d3c1ffdb79e"><code>815f6eb</code></a> Fix documentation of <code>BiLock::lock</code> (<a href="https://redirect.github.com/rust-lang/futures-rs/issues/2971">#2971</a>)</li> <li><a href="https://github.com/rust-lang/futures-rs/commit/0f0db0421d4edc9fc56c3643f7e7f3bd23058023"><code>0f0db04</code></a> futures-util: make <code>Mutex::new()</code> const (<a href="https://redirect.github.com/rust-lang/futures-rs/issues/2956">#2956</a>)</li> <li><a href="https://github.com/rust-lang/futures-rs/commit/5d6fc5e4083f5da376ccc7a50403d842e553e286"><code>5d6fc5e</code></a> ci: Test big-endian target (s390x Linux)</li> <li><a href="https://github.com/rust-lang/futures-rs/commit/9f739fe40b9c3e80b8f40054a739a220428a4675"><code>9f739fe</code></a> Ignore dead_code lint on Fn1 trait</li> <li>Additional commits viewable in <a href="https://github.com/rust-lang/futures-rs/compare/0.3.31...0.3.32">compare view</a></li> </ul> </details> <br /> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore <dependency name> major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself) - `@dependabot ignore <dependency name> minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself) - `@dependabot ignore <dependency name>` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself) - `@dependabot unignore <dependency name>` will remove all of the ignore conditions of the specified dependency - `@dependabot unignore <dependency name> <ignore condition>` will remove the ignore condition of the specified dependency and ignore conditions </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
This is a manual lock bump, as it looks like Dependabot is currently timing out updating dependencies. This should hopefully unlock it, as it will have fewer dependencies to update. Two outstanding exceptions: - pympler upgrade adds a pywin32 deps, which is missing sdist (so CI is complaining) - pysaml2 for some unknown reason pinned the MAX version of pyopenssl, which duplicates pyopenssl and cryptography, which obviously breaks stuff
*This PR was originally only to enable [MSC4222](matrix-org/matrix-spec-proposals#4222) Complement tests (`/sync` `state_after`) but after merging the [fix PR](element-hq/synapse#19463), we discovered that while the tests pass locally, [fail in CI](element-hq/synapse#19460 (comment)). To unblock the RC, we decided to revert the fix PR (see element-hq/synapse#19474 (comment) for more info). To better ensure tests actually pass in CI, we're re-introducing the fix here in the same PR that we enable the tests in.* --- Fix `/sync` missing membership in `state_after`. This applies to any scenario where the first membership has a different `sender` compared to the `state_key` and then the second membership has the same `sender`/`state_key`. Like someone inviting another person and then them joining. Or someone being kicked and then they leave. This bug has been present since the MSC4222 implementation was introduced into the codebase (element-hq/synapse#17888). --- Fix element-hq/synapse#19455 Fix element-hq/customer-success#656 I have a feeling, this might also fix these issues (will close and see how people report back): Fix element-hq/synapse#18182 Fix element-hq/synapse#19478 ### Testing strategy Complement tests: matrix-org/complement#842 We will need element-hq/synapse#19460 to merge in order to enable the Complement tests in Synapse but this PR should be merged first so they pass in the first place. I've tested locally that the Complement tests pass with this fix. ### Dev notes [MSC4222](matrix-org/matrix-spec-proposals#4222) has already been merged into the spec and is already part of Matrix v1.16 but we haven't [stabilized support in Synapse yet](element-hq/synapse#19414). --- In the same ballpark: - element-hq/synapse#19455 - element-hq/synapse#17050 - element-hq/synapse#17430 - element-hq/synapse#16940 - element-hq/synapse#18182 - element-hq/synapse#18793 - element-hq/synapse#19478 --- Docker builds preferring remote image over the local image we just built, element-hq/synapse#19460 (comment) `containerd` image store (storage driver, driver type) -> element-hq/synapse#19475 ### Todo - [x] Wait for element-hq/synapse#19463 to merge so the Complement tests all pass - [x] Wait for element-hq/synapse#19475 to merge ### Pull Request Checklist <!-- Please read https://element-hq.github.io/synapse/latest/development/contributing_guide.html before submitting your pull request --> * [x] Pull request is based on the develop branch * [x] Pull request includes a [changelog file](https://element-hq.github.io/synapse/latest/development/contributing_guide.html#changelog). The entry should: - Be a short description of your change which makes sense to users. "Fixed a bug that prevented receiving messages from other servers." instead of "Moved X method from `EventStore` to `EventWorkerStore`.". - Use markdown where necessary, mostly for `code blocks`. - End with either a period (.) or an exclamation mark (!). - Start with a capital letter. - Feel free to credit yourself, by adding a sentence "Contributed by @github_username." or "Contributed by [Your Name]." to the end of the entry. * [x] [Code style](https://element-hq.github.io/synapse/latest/code_style.html) is correct (run the [linters](https://element-hq.github.io/synapse/latest/development/contributing_guide.html#run-the-linters)) --------- Co-authored-by: Andrew Morgan <1342360+anoadragon453@users.noreply.github.com> Co-authored-by: Andrew Ferrazzutti <andrewf@element.io>
*As suggested by @sandhose in element-hq/synapse#19498 (comment) Simplify Rust HTTP client response streaming and limiting ### Dev notes Synapse's Rust HTTP client was introduced in element-hq/synapse#18357 ### Pull Request Checklist <!-- Please read https://element-hq.github.io/synapse/latest/development/contributing_guide.html before submitting your pull request --> * [x] Pull request is based on the develop branch * [x] Pull request includes a [changelog file](https://element-hq.github.io/synapse/latest/development/contributing_guide.html#changelog). The entry should: - Be a short description of your change which makes sense to users. "Fixed a bug that prevented receiving messages from other servers." instead of "Moved X method from `EventStore` to `EventWorkerStore`.". - Use markdown where necessary, mostly for `code blocks`. - End with either a period (.) or an exclamation mark (!). - Start with a capital letter. - Feel free to credit yourself, by adding a sentence "Contributed by @github_username." or "Contributed by [Your Name]." to the end of the entry. * [x] [Code style](https://element-hq.github.io/synapse/latest/code_style.html) is correct (run the [linters](https://element-hq.github.io/synapse/latest/development/contributing_guide.html#run-the-linters))
To address element-hq/synapse#19541 ### Pull Request Checklist <!-- Please read https://element-hq.github.io/synapse/latest/development/contributing_guide.html before submitting your pull request --> * [x] Pull request is based on the develop branch * [x] Pull request includes a [changelog file](https://element-hq.github.io/synapse/latest/development/contributing_guide.html#changelog). The entry should: - Be a short description of your change which makes sense to users. "Fixed a bug that prevented receiving messages from other servers." instead of "Moved X method from `EventStore` to `EventWorkerStore`.". - Use markdown where necessary, mostly for `code blocks`. - End with either a period (.) or an exclamation mark (!). - Start with a capital letter. - Feel free to credit yourself, by adding a sentence "Contributed by @github_username." or "Contributed by [Your Name]." to the end of the entry. * [x] [Code style](https://element-hq.github.io/synapse/latest/code_style.html) is correct (run the [linters](https://element-hq.github.io/synapse/latest/development/contributing_guide.html#run-the-linters))
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## master #244 +/- ##
==========================================
- Coverage 80.14% 80.14% -0.01%
==========================================
Files 501 501
Lines 71375 71549 +174
Branches 10732 10751 +19
==========================================
+ Hits 57204 57342 +138
- Misses 10918 10947 +29
- Partials 3253 3260 +7
... and 2 files with indirect coverage changes Continue to review full report in Codecov by Sentry.
🚀 New features to boost your workflow:
|
There was a problem hiding this comment.
Pull request overview
Release bump to Synapse v1.149.1 with Famedly packaging notes, plus upstream changes around request cancellation, response caching, and experimental MSC4388 rendezvous support (Rust-backed), alongside CI/Docker workflow updates.
Changes:
- Add experimental MSC4388 rendezvous endpoint (Rust handler + Python servlets/config/tests) and advertise it via
/versions. - Rework
ResponseCachetimeouts to useDuration, add inflight pruning/cancellation behavior, and extend cancellation-related tests/helpers. - Misc maintenance: wheel timer
Durationsupport, event-cache loop yielding, Docker/complement image tagging fixes, dependency/version bumps, and updated release notes.
Reviewed changes
Copilot reviewed 66 out of 68 changed files in this pull request and generated 9 comments.
Show a summary per file
| File | Description |
|---|---|
| tests/util/test_wheel_timer.py | Update WheelTimer bucket size type |
| tests/util/test_async_helpers.py | Improve ObservableDeferred cancellation tests |
| tests/util/caches/test_response_cache.py | Add ResponseCache cancellation/error tests |
| tests/test_server.py | Rename disconnect helper usage |
| tests/synapse_rust/test_http_client.py | Add response-limit exceeded test |
| tests/rest/client/test_sync.py | Add /sync cancellation tests |
| tests/rest/client/test_msc4388_rendezvous.py | New MSC4388 rendezvous tests |
| tests/rest/admin/test_user.py | Add missing-user admin-login test |
| tests/replication/http/test__base.py | Rename disconnect helper usage |
| tests/http/test_servlet.py | Rename disconnect helper usage |
| tests/http/server/_base.py | Rename helper to avoid pytest discovery |
| tests/handlers/test_room_member.py | Update invite blocking constants/errcodes |
| tests/federation/transport/server/test__base.py | Rename disconnect helper usage |
| synapse/util/wheel_timer.py | Bucket size now Duration |
| synapse/util/clock.py | Make sleep resilient to cancellation race |
| synapse/util/caches/response_cache.py | Duration timeout + inflight pruning/cancel |
| synapse/util/caches/init.py | Modernize Counter typing import |
| synapse/util/background_queue.py | Yield periodically to avoid tight loop |
| synapse/util/async_helpers.py | Observer removal on cancellation + helpers |
| synapse/types/handlers/sliding_sync.py | Modernize ChainMap typing import |
| synapse/synapse_rust/msc4388_rendezvous.pyi | New Rust handler type stubs |
| synapse/storage/databases/main/stats.py | Modernize Counter import |
| synapse/storage/databases/main/roommember.py | Await local event-cache fetch |
| synapse/storage/databases/main/events_worker.py | Make local-cache fetch async + yielding |
| synapse/storage/databases/main/account_data.py | MSC4380 invite config now stable key |
| synapse/storage/controllers/stats.py | Modernize Counter import |
| synapse/server.py | Wire MSC4388 rendezvous handler |
| synapse/rest/client/versions.py | Advertise MSC4388; mark MSC4380 stable |
| synapse/rest/client/sync.py | Mark sync servlet cancellable |
| synapse/rest/client/rendezvous.py | Add MSC4388 rendezvous servlets |
| synapse/rest/admin/users.py | Validate user exists before admin login-as |
| synapse/replication/http/_base.py | ResponseCache timeout uses Duration |
| synapse/handlers/typing.py | WheelTimer default Duration bucket size |
| synapse/handlers/sync.py | Sync ResponseCache Duration + cancellation |
| synapse/handlers/sliding_sync/extensions.py | Modernize ChainMap import |
| synapse/handlers/room_member_worker.py | Add tracing decorators to RPC methods |
| synapse/handlers/room_member.py | Add tracing tags + rename invite server var |
| synapse/handlers/room_list.py | ResponseCache timeout uses Duration |
| synapse/handlers/room.py | ResponseCache timeout uses Duration |
| synapse/handlers/device.py | Log device deletion |
| synapse/federation/federation_server.py | ResponseCache timeouts use Duration |
| synapse/event_auth.py | Modernize ChainMap import |
| synapse/config/experimental.py | Add MSC4388 config; drop MSC4380 flag |
| synapse/config/cache.py | Sync cache duration becomes Duration |
| synapse/appservice/api.py | ResponseCache timeout uses Duration |
| synapse/app/_base.py | Log GC freeze rationale |
| synapse/api/errors.py | Invite-blocked errcode becomes stable |
| synapse/api/constants.py | Stable invite permission account data type |
| synapse/api/auth/msc3861_delegated.py | ResponseCache timeout uses Duration |
| synapse/api/auth/mas.py | ResponseCache timeout uses Duration |
| scripts-dev/complement.sh | Use localhost image namespace for CI/dev |
| schema/synapse-config.schema.yaml | Bump schema version id |
| rust/src/msc4388_rendezvous/session.rs | MSC4388 session model/responses |
| rust/src/msc4388_rendezvous/mod.rs | Rust MSC4388 handler implementation |
| rust/src/lib.rs | Register MSC4388 rust module |
| rust/src/http_client.rs | Rework response limiting/body handling |
| rust/src/errors.rs | HttpResponseException now stores Bytes |
| rust/Cargo.toml | Enable pyo3 bytes feature |
| pyproject.toml | Version bump + opentelemetry updates + ruff config |
| docker/complement/conf/workers-shared-extra.yaml.j2 | Enable MSC4222 in complement config |
| docker/README-testing.md | Update local docker image tags |
| debian/changelog | Add 1.149.1 packaging entry |
| Cargo.lock | Dependency lock updates |
| CHANGES.md | Add 1.149.1/1.149.0 release notes |
| .github/workflows/tests.yml | Log docker system info in CI |
| .github/workflows/docker.yml | Bump docker/login-action pin |
| .ci/scripts/calculate_builds.py | Update modpack fcs version |
Comments suppressed due to low confidence (1)
synapse/util/caches/response_cache.py:150
- The docstring for
ResponseCache.__init__still refers totimeout_ms, but the parameter was renamed totimeout: Duration | None. Updating the docstring/arg docs would avoid confusion for future callers and maintainers.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
You can also share your feedback on Copilot code review. Take the survey.
422bd85 to
300aa6b
Compare
300aa6b to
2b91d69
Compare
There was a problem hiding this comment.
Pull request overview
Release bump to Synapse v1.149.1 with Famedly downstream additions, plus upstream changes focused on improved request cancellation handling, response-cache behavior, and adding experimental MSC4388 rendezvous support (Rust-backed), alongside CI/docker/complement workflow adjustments.
Changes:
- Add experimental MSC4388 rendezvous endpoint (Rust handler + Python servlet wiring) and related tests/config plumbing.
- Rework cancellation semantics for
ObservableDeferredandResponseCache, including pruning/timeout behavior for inflight cached work. - Update various infra/release artifacts (Docker/Complement tooling, CI workflows, changelogs, dependency bumps) and multiple minor refactors (Duration-based timeouts, yielding in tight loops).
Reviewed changes
Copilot reviewed 66 out of 68 changed files in this pull request and generated 10 comments.
Show a summary per file
| File | Description |
|---|---|
| tests/util/test_wheel_timer.py | Updates WheelTimer tests to pass Duration bucket sizes. |
| tests/util/test_async_helpers.py | Expands cancellation coverage for ObservableDeferred observers. |
| tests/util/caches/test_response_cache.py | Adds extensive tests for ResponseCache cancellation/error/expiry behavior and updates to timeout: Duration. |
| tests/test_server.py | Renames disconnect helper usage to avoid pytest discovery and updates assertions. |
| tests/synapse_rust/test_http_client.py | Adds test ensuring response-size limiting triggers an error. |
| tests/rest/client/test_sync.py | Adds sync cancellation integration tests via shared cancellation test helper. |
| tests/rest/client/test_msc4388_rendezvous.py | Adds end-to-end tests for MSC4388 rendezvous modes, limits, eviction, and fetch-metadata header behavior. |
| tests/rest/admin/test_user.py | Adds regression test for “login as user” when the user does not exist. |
| tests/replication/http/test__base.py | Updates to renamed disconnect helper. |
| tests/http/test_servlet.py | Updates to renamed disconnect helper. |
| tests/http/server/_base.py | Renames test_disconnect helper and includes cancellation-testing utilities. |
| tests/handlers/test_room_member.py | Updates invite blocking errcodes/account data type names and removes now-obsolete config gating. |
| tests/federation/transport/server/test__base.py | Updates to renamed disconnect helper. |
| synapse/util/wheel_timer.py | Changes WheelTimer bucket sizing to use Duration. |
| synapse/util/clock.py | Adjusts Clock.sleep to tolerate waking cancelled Deferreds. |
| synapse/util/caches/response_cache.py | Refactors ResponseCache to support cancellation-aware inflight pruning; switches API to `timeout: Duration |
| synapse/util/caches/init.py | Updates Counter typing/imports. |
| synapse/util/background_queue.py | Adds periodic yielding to reactor to avoid tight loops. |
| synapse/util/async_helpers.py | Improves ObservableDeferred observer cancellation cleanup; adds observe_deferred. |
| synapse/types/handlers/sliding_sync.py | Updates typing imports (ChainMap). |
| synapse/synapse_rust/msc4388_rendezvous.pyi | Adds type stubs for Rust MSC4388 handler. |
| synapse/storage/databases/main/stats.py | Updates Counter import typing. |
| synapse/storage/databases/main/roommember.py | Awaits async local event-cache lookup. |
| synapse/storage/databases/main/events_worker.py | Makes local event-cache lookup async and yields periodically to reduce reactor stalls. |
| synapse/storage/databases/main/account_data.py | Treats MSC4380 invite config as stable account-data type and removes experimental gating. |
| synapse/storage/controllers/stats.py | Updates Counter import typing. |
| synapse/server.py | Wires new Rust MSC4388 rendezvous handler into HomeServer. |
| synapse/rest/client/versions.py | Exposes MSC4388 capability and marks MSC4380 as stable; clarifies MSC4108 comment. |
| synapse/rest/client/sync.py | Marks /sync servlet handler cancellable. |
| synapse/rest/client/rendezvous.py | Registers MSC4388 rendezvous servlets and optional auth requirement behavior. |
| synapse/rest/admin/users.py | Fixes admin “login as user” to validate user ID and ensure user exists before issuing token. |
| synapse/replication/http/_base.py | Updates ResponseCache construction to timeout=Duration(...). |
| synapse/handlers/typing.py | Adapts to WheelTimer default Duration bucket sizing. |
| synapse/handlers/sync.py | Adapts ResponseCache timeout type; marks internal sync wait path cancellable; fixes state_after membership fetching logic. |
| synapse/handlers/sliding_sync/extensions.py | Updates ChainMap import location. |
| synapse/handlers/room_member_worker.py | Adds tracing decorators to remote membership operations. |
| synapse/handlers/room_member.py | Adds additional tracing/tags; renames invite-server variable for clarity. |
| synapse/handlers/room_list.py | Updates ResponseCache timeout usage to Duration. |
| synapse/handlers/room.py | Updates ResponseCache timeout usage to Duration. |
| synapse/handlers/device.py | Adds log line when deleting devices. |
| synapse/federation/federation_server.py | Updates ResponseCache timeout usage to Duration. |
| synapse/event_auth.py | Updates ChainMap import location. |
| synapse/config/experimental.py | Adds MSC4388 config mode; removes MSC4380 experimental toggle. |
| synapse/config/cache.py | Makes sync_response_cache_duration a Duration. |
| synapse/appservice/api.py | Updates ResponseCache timeout usage to Duration. |
| synapse/app/_base.py | Adds logging around GC freezing behavior. |
| synapse/api/errors.py | Updates invite-blocked errcode to stable M_INVITE_BLOCKED. |
| synapse/api/constants.py | Renames stable invite-permission account data type to m.invite_permission_config. |
| synapse/api/auth/msc3861_delegated.py | Updates ResponseCache timeout usage to Duration. |
| synapse/api/auth/mas.py | Updates ResponseCache timeout usage to Duration. |
| scripts-dev/complement.sh | Namespaces local Docker images under localhost/... and adjusts Complement package selection. |
| schema/synapse-config.schema.yaml | Updates schema $id for v1.149.1. |
| rust/src/msc4388_rendezvous/session.rs | Implements MSC4388 rendezvous session model and responses in Rust. |
| rust/src/msc4388_rendezvous/mod.rs | Implements MSC4388 rendezvous handler logic (limits, eviction, header checks) and Python bindings. |
| rust/src/lib.rs | Registers new Rust MSC4388 module. |
| rust/src/http_client.rs | Refactors response-body limiting/collection strategy; returns bytes::Bytes to Python. |
| rust/src/errors.rs | Adjusts HttpResponseException constructor to accept bytes::Bytes. |
| rust/Cargo.toml | Enables pyo3 bytes feature and adds http-body-util dependency usage. |
| pyproject.toml | Bumps Synapse version and pinned OpenTelemetry dependency versions; adds Ruff config for immutable Duration calls. |
| docker/complement/conf/workers-shared-extra.yaml.j2 | Enables MSC4222 in Complement worker shared config. |
| docker/README-testing.md | Updates local docker image tagging instructions to localhost/.... |
| debian/changelog | Adds 1.149.1 release entry. |
| Cargo.lock | Updates Rust dependency lockfile (incl. futures, anyhow, regex, etc.). |
| CHANGES.md | Adds 1.149.1 changelog section and includes Famedly additions. |
| .github/workflows/tests.yml | Logs docker system info in CI runs. |
| .github/workflows/docker.yml | Bumps docker/login-action pin. |
| .ci/scripts/calculate_builds.py | Updates modpack build matrix to mod022/mod023 and notes unreleased mod020/mod021. |
Comments suppressed due to low confidence (1)
synapse/util/caches/response_cache.py:150
- The
__init__docstring still documentstimeout_ms, but the actual parameter is nowtimeout: Duration | None. Please update the docstring to match the new API so callers know what to pass and whatNonevsDuration(0)means.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
You can also share your feedback on Copilot code review. Take the survey.
Famedly Synapse Release v1.149.1_1
Depends on famedly/complement#12
Famedly additions for v1.149.1_1
Notes for Famedly: