Merge branch 'release-v1.77' into develop
This commit is contained in:
commit
dccae64083
|
@ -50,7 +50,16 @@ def cpython(wheel_file: str, name: str, version: Version, tag: Tag) -> str:
|
|||
|
||||
check_is_abi3_compatible(wheel_file)
|
||||
|
||||
abi3_tag = Tag(tag.interpreter, "abi3", tag.platform)
|
||||
# HACK: it seems that some older versions of pip will consider a wheel marked
|
||||
# as macosx_11_0 as incompatible with Big Sur. I haven't done the full archaeology
|
||||
# here; there are some clues in
|
||||
# https://github.com/pantsbuild/pants/pull/12857
|
||||
# https://github.com/pypa/pip/issues/9138
|
||||
# https://github.com/pypa/packaging/pull/319
|
||||
# Empirically this seems to work, note that macOS 11 and 10.16 are the same,
|
||||
# both versions are valid for backwards compatibility.
|
||||
platform = tag.platform.replace("macosx_11_0", "macosx_10_16")
|
||||
abi3_tag = Tag(tag.interpreter, "abi3", platform)
|
||||
|
||||
dirname = os.path.dirname(wheel_file)
|
||||
new_wheel_file = os.path.join(
|
||||
|
|
|
@ -148,7 +148,7 @@ jobs:
|
|||
env:
|
||||
# Skip testing for platforms which various libraries don't have wheels
|
||||
# for, and so need extra build deps.
|
||||
CIBW_TEST_SKIP: pp3{7,9}-* *i686* *musl*
|
||||
CIBW_TEST_SKIP: pp3*-* *i686* *musl*
|
||||
# Fix Rust OOM errors on emulated aarch64: https://github.com/rust-lang/cargo/issues/10583
|
||||
CARGO_NET_GIT_FETCH_WITH_CLI: true
|
||||
CIBW_ENVIRONMENT_PASS_LINUX: CARGO_NET_GIT_FETCH_WITH_CLI
|
||||
|
|
62
CHANGES.md
62
CHANGES.md
|
@ -1,3 +1,65 @@
|
|||
Synapse 1.77.0rc1 (2023-02-07)
|
||||
==============================
|
||||
|
||||
Features
|
||||
--------
|
||||
|
||||
- Experimental support for [MSC3952](https://github.com/matrix-org/matrix-spec-proposals/pull/3952): intentional mentions. ([\#14823](https://github.com/matrix-org/synapse/issues/14823), [\#14943](https://github.com/matrix-org/synapse/issues/14943), [\#14957](https://github.com/matrix-org/synapse/issues/14957), [\#14958](https://github.com/matrix-org/synapse/issues/14958))
|
||||
- Experimental support to suppress notifications from message edits ([MSC3958](https://github.com/matrix-org/matrix-spec-proposals/pull/3958)). ([\#14960](https://github.com/matrix-org/synapse/issues/14960), [\#15016](https://github.com/matrix-org/synapse/issues/15016))
|
||||
- Add profile information, devices and connections to the command line [user data export tool](https://matrix-org.github.io/synapse/v1.77/usage/administration/admin_faq.html#how-can-i-export-user-data). ([\#14894](https://github.com/matrix-org/synapse/issues/14894))
|
||||
- Improve performance when joining or sending an event in large rooms. ([\#14962](https://github.com/matrix-org/synapse/issues/14962))
|
||||
- Improve performance of joining and leaving large rooms with many local users. ([\#14971](https://github.com/matrix-org/synapse/issues/14971))
|
||||
|
||||
|
||||
Bugfixes
|
||||
--------
|
||||
|
||||
- Fix a bug introduced in Synapse 1.53.0 where `next_batch` tokens from `/sync` could not be used with the `/relations` endpoint. ([\#14866](https://github.com/matrix-org/synapse/issues/14866))
|
||||
- Fix a bug introduced in Synapse 1.35.0 where the module API's `send_local_online_presence_to` would fail to send presence updates over federation. ([\#14880](https://github.com/matrix-org/synapse/issues/14880))
|
||||
- Fix a bug introduced in Synapse 1.70.0 where the background updates to add non-thread unique indexes on receipts could fail when upgrading from 1.67.0 or earlier. ([\#14915](https://github.com/matrix-org/synapse/issues/14915))
|
||||
- Fix a regression introduced in Synapse 1.69.0 which can result in database corruption when database migrations are interrupted on sqlite. ([\#14926](https://github.com/matrix-org/synapse/issues/14926))
|
||||
- Fix a bug introduced in Synapse 1.68.0 where we were unable to service remote joins in rooms with `@room` notification levels set to `null` in their (malformed) power levels. ([\#14942](https://github.com/matrix-org/synapse/issues/14942))
|
||||
- Fix a bug introduced in Synapse 1.64.0 where boolean power levels were erroneously permitted in [v10 rooms](https://spec.matrix.org/v1.5/rooms/v10/). ([\#14944](https://github.com/matrix-org/synapse/issues/14944))
|
||||
- Fix a long-standing bug where sending messages on servers with presence enabled would spam "Re-starting finished log context" log lines. ([\#14947](https://github.com/matrix-org/synapse/issues/14947))
|
||||
- Fix a bug introduced in Synapse 1.68.0 where logging from the Rust module was not properly logged. ([\#14976](https://github.com/matrix-org/synapse/issues/14976))
|
||||
- Fix various long-standing bugs in Synapse's config, event and request handling where booleans were unintentionally accepted where an integer was expected. ([\#14945](https://github.com/matrix-org/synapse/issues/14945))
|
||||
|
||||
|
||||
Internal Changes
|
||||
----------------
|
||||
|
||||
- Add missing type hints. ([\#14879](https://github.com/matrix-org/synapse/issues/14879), [\#14886](https://github.com/matrix-org/synapse/issues/14886), [\#14887](https://github.com/matrix-org/synapse/issues/14887), [\#14904](https://github.com/matrix-org/synapse/issues/14904), [\#14927](https://github.com/matrix-org/synapse/issues/14927), [\#14956](https://github.com/matrix-org/synapse/issues/14956), [\#14983](https://github.com/matrix-org/synapse/issues/14983), [\#14984](https://github.com/matrix-org/synapse/issues/14984), [\#14985](https://github.com/matrix-org/synapse/issues/14985), [\#14987](https://github.com/matrix-org/synapse/issues/14987), [\#14988](https://github.com/matrix-org/synapse/issues/14988), [\#14990](https://github.com/matrix-org/synapse/issues/14990), [\#14991](https://github.com/matrix-org/synapse/issues/14991), [\#14992](https://github.com/matrix-org/synapse/issues/14992), [\#15007](https://github.com/matrix-org/synapse/issues/15007))
|
||||
- Use `StrCollection` to avoid potential bugs with `Collection[str]`. ([\#14922](https://github.com/matrix-org/synapse/issues/14922))
|
||||
- Allow running the complement tests suites with the asyncio reactor enabled. ([\#14858](https://github.com/matrix-org/synapse/issues/14858))
|
||||
- Improve performance of `/sync` in a few situations. ([\#14908](https://github.com/matrix-org/synapse/issues/14908), [\#14970](https://github.com/matrix-org/synapse/issues/14970))
|
||||
- Document how to handle Dependabot pull requests. ([\#14916](https://github.com/matrix-org/synapse/issues/14916))
|
||||
- Fix typo in release script. ([\#14920](https://github.com/matrix-org/synapse/issues/14920))
|
||||
- Update build system requirements to allow building with poetry-core 1.5.0. ([\#14949](https://github.com/matrix-org/synapse/issues/14949), [\#15019](https://github.com/matrix-org/synapse/issues/15019))
|
||||
- Add an [lnav](https://lnav.org) config file for Synapse logs to `/contrib/lnav`. ([\#14953](https://github.com/matrix-org/synapse/issues/14953))
|
||||
- Faster joins: Refactor internal handling of servers in room to never store an empty list. ([\#14954](https://github.com/matrix-org/synapse/issues/14954))
|
||||
- Faster joins: tag `v2/send_join/` requests to indicate if they served a partial join response. ([\#14950](https://github.com/matrix-org/synapse/issues/14950))
|
||||
- Allow running `cargo` without the `extension-module` option. ([\#14965](https://github.com/matrix-org/synapse/issues/14965))
|
||||
- Preparatory work for adding a denormalised event stream ordering column in the future. Contributed by Nick @ Beeper (@fizzadar). ([\#14979](https://github.com/matrix-org/synapse/issues/14979), [9cd7610](https://github.com/matrix-org/synapse/commit/9cd7610f86ab5051c9365dd38d1eec405a5f8ca6), [f10caa7](https://github.com/matrix-org/synapse/commit/f10caa73eee0caa91cf373966104d1ededae2aee); see [\#15014](https://github.com/matrix-org/synapse/issues/15014))
|
||||
- Add tests for `_flatten_dict`. ([\#14981](https://github.com/matrix-org/synapse/issues/14981), [\#15002](https://github.com/matrix-org/synapse/issues/15002))
|
||||
|
||||
<details><summary>Dependabot updates</summary>
|
||||
|
||||
- Bump dtolnay/rust-toolchain from e645b0cf01249a964ec099494d38d2da0f0b349f to 9cd00a88a73addc8617065438eff914dd08d0955. ([\#14968](https://github.com/matrix-org/synapse/issues/14968))
|
||||
- Bump docker/build-push-action from 3 to 4. ([\#14952](https://github.com/matrix-org/synapse/issues/14952))
|
||||
- Bump ijson from 3.1.4 to 3.2.0.post0. ([\#14935](https://github.com/matrix-org/synapse/issues/14935))
|
||||
- Bump types-pyyaml from 6.0.12.2 to 6.0.12.3. ([\#14936](https://github.com/matrix-org/synapse/issues/14936))
|
||||
- Bump types-jsonschema from 4.17.0.2 to 4.17.0.3. ([\#14937](https://github.com/matrix-org/synapse/issues/14937))
|
||||
- Bump types-pillow from 9.4.0.3 to 9.4.0.5. ([\#14938](https://github.com/matrix-org/synapse/issues/14938))
|
||||
- Bump hiredis from 2.0.0 to 2.1.1. ([\#14939](https://github.com/matrix-org/synapse/issues/14939))
|
||||
- Bump hiredis from 2.1.1 to 2.2.1. ([\#14993](https://github.com/matrix-org/synapse/issues/14993))
|
||||
- Bump types-setuptools from 65.6.0.3 to 67.1.0.0. ([\#14994](https://github.com/matrix-org/synapse/issues/14994))
|
||||
- Bump prometheus-client from 0.15.0 to 0.16.0. ([\#14995](https://github.com/matrix-org/synapse/issues/14995))
|
||||
- Bump anyhow from 1.0.68 to 1.0.69. ([\#14996](https://github.com/matrix-org/synapse/issues/14996))
|
||||
- Bump serde_json from 1.0.91 to 1.0.92. ([\#14997](https://github.com/matrix-org/synapse/issues/14997))
|
||||
- Bump isort from 5.11.4 to 5.11.5. ([\#14998](https://github.com/matrix-org/synapse/issues/14998))
|
||||
- Bump phonenumbers from 8.13.4 to 8.13.5. ([\#14999](https://github.com/matrix-org/synapse/issues/14999))
|
||||
</details>
|
||||
|
||||
Synapse 1.76.0 (2023-01-31)
|
||||
===========================
|
||||
|
||||
|
|
|
@ -1 +0,0 @@
|
|||
Experimental support for [MSC3952](https://github.com/matrix-org/matrix-spec-proposals/pull/3952): intentional mentions.
|
|
@ -1 +0,0 @@
|
|||
Run the integration test suites with the asyncio reactor enabled in CI.
|
|
@ -1 +0,0 @@
|
|||
Fix a bug introduced in Synapse 1.53.0 where `next_batch` tokens from `/sync` could not be used with the `/relations` endpoint.
|
|
@ -1 +0,0 @@
|
|||
Add missing type hints.
|
|
@ -1 +0,0 @@
|
|||
Fix a bug when using the `send_local_online_presence_to` module API.
|
|
@ -1 +0,0 @@
|
|||
Add missing type hints.
|
|
@ -1 +0,0 @@
|
|||
Add missing type hints.
|
|
@ -1 +0,0 @@
|
|||
Adds profile information, devices and connections to the user data export via command line.
|
|
@ -1 +0,0 @@
|
|||
Add missing type hints.
|
|
@ -1 +0,0 @@
|
|||
Improve performance of `/sync` in a few situations.
|
|
@ -1 +0,0 @@
|
|||
Fix a bug introduced in Synapse 1.70.0 where the background updates to add non-thread unique indexes on receipts could fail when upgrading from 1.67.0 or earlier.
|
|
@ -1 +0,0 @@
|
|||
Document how to handle Dependabot pull requests.
|
|
@ -1 +0,0 @@
|
|||
Fix typo in release script.
|
|
@ -1 +0,0 @@
|
|||
Use `StrCollection` to avoid potential bugs with `Collection[str]`.
|
|
@ -1 +0,0 @@
|
|||
Fix a regression introduced in Synapse 1.69.0 which can result in database corruption when database migrations are interrupted on sqlite.
|
|
@ -1 +0,0 @@
|
|||
Add missing type hints.
|
|
@ -1 +0,0 @@
|
|||
Bump ijson from 3.1.4 to 3.2.0.post0.
|
|
@ -1 +0,0 @@
|
|||
Bump types-pyyaml from 6.0.12.2 to 6.0.12.3.
|
|
@ -1 +0,0 @@
|
|||
Bump types-jsonschema from 4.17.0.2 to 4.17.0.3.
|
|
@ -1 +0,0 @@
|
|||
Bump types-pillow from 9.4.0.3 to 9.4.0.5.
|
|
@ -1 +0,0 @@
|
|||
Bump hiredis from 2.0.0 to 2.1.1.
|
|
@ -1 +0,0 @@
|
|||
Fix a bug introduced in Synapse 1.68.0 where we were unable to service remote joins in rooms with `@room` notification levels set to `null` in their (malformed) power levels.
|
|
@ -1 +0,0 @@
|
|||
Experimental support for [MSC3952](https://github.com/matrix-org/matrix-spec-proposals/pull/3952): intentional mentions.
|
|
@ -1 +0,0 @@
|
|||
Fix a bug introduced in Synapse v1.64 where boolean power levels were erroneously permitted in [v10 rooms](https://spec.matrix.org/v1.5/rooms/v10/).
|
|
@ -1 +0,0 @@
|
|||
Fix various long-standing bugs in Synapse's config, event and request handling where booleans were unintentionally accepted where an integer was expected.
|
|
@ -1 +0,0 @@
|
|||
Fix a long-standing bug where sending messages on servers with presence enabled would spam "Re-starting finished log context" log lines.
|
|
@ -1 +0,0 @@
|
|||
Update build system requirements to allow building with poetry-core==1.5.0.
|
|
@ -1 +0,0 @@
|
|||
Faster joins: tag `v2/send_join/` requests to indicate if they served a partial join response.
|
|
@ -1 +0,0 @@
|
|||
Bump docker/build-push-action from 3 to 4.
|
|
@ -1 +0,0 @@
|
|||
Add an [lnav](https://lnav.org) config file for Synapse logs to `/contrib/lnav`.
|
|
@ -1 +0,0 @@
|
|||
Faster room joins: Refactor internal handling of servers in room to never store an empty list.
|
|
@ -1 +0,0 @@
|
|||
Add missing type hints.
|
|
@ -1 +0,0 @@
|
|||
Experimental support for [MSC3952](https://github.com/matrix-org/matrix-spec-proposals/pull/3952): intentional mentions.
|
|
@ -1 +0,0 @@
|
|||
Experimental support for [MSC3952](https://github.com/matrix-org/matrix-spec-proposals/pull/3952): intentional mentions.
|
|
@ -1 +0,0 @@
|
|||
Experimental support to suppress notifications from message edits ([MSC3958](https://github.com/matrix-org/matrix-spec-proposals/pull/3958)).
|
|
@ -1 +0,0 @@
|
|||
Improve performance when joining or sending an event large rooms.
|
|
@ -1 +0,0 @@
|
|||
Allow running `cargo` without the `extension-module` option.
|
|
@ -1 +0,0 @@
|
|||
Bump dtolnay/rust-toolchain from e645b0cf01249a964ec099494d38d2da0f0b349f to 9cd00a88a73addc8617065438eff914dd08d0955.
|
|
@ -1 +0,0 @@
|
|||
Improve performance of `/sync` in a few situations.
|
|
@ -1 +0,0 @@
|
|||
Improve performance of joining and leaving large rooms with many local users.
|
|
@ -1 +0,0 @@
|
|||
Fix a bug introduced in Synapse 1.68.0 where logging from the Rust module was not properly logged.
|
|
@ -1 +0,0 @@
|
|||
Add denormalised event stream ordering column to membership state tables for future use. Contributed by Nick @ Beeper (@fizzadar).
|
|
@ -1 +0,0 @@
|
|||
Add tests for `_flatten_dict`.
|
|
@ -1 +0,0 @@
|
|||
Improve type hints.
|
|
@ -1 +0,0 @@
|
|||
Improve type hints.
|
|
@ -1 +0,0 @@
|
|||
Improve type hints.
|
|
@ -1 +0,0 @@
|
|||
Improve type hints.
|
|
@ -1 +0,0 @@
|
|||
Improve type hints.
|
|
@ -1 +0,0 @@
|
|||
Improve type hints.
|
|
@ -1 +0,0 @@
|
|||
Improve type hints.
|
|
@ -1 +0,0 @@
|
|||
Improve type hints.
|
|
@ -1 +0,0 @@
|
|||
Bump hiredis from 2.1.1 to 2.2.1.
|
|
@ -1 +0,0 @@
|
|||
Bump types-setuptools from 65.6.0.3 to 67.1.0.0.
|
|
@ -1 +0,0 @@
|
|||
Bump prometheus-client from 0.15.0 to 0.16.0.
|
|
@ -1 +0,0 @@
|
|||
Bump anyhow from 1.0.68 to 1.0.69.
|
|
@ -1 +0,0 @@
|
|||
Bump serde_json from 1.0.91 to 1.0.92.
|
|
@ -1 +0,0 @@
|
|||
Bump isort from 5.11.4 to 5.11.5.
|
|
@ -1 +0,0 @@
|
|||
Bump phonenumbers from 8.13.4 to 8.13.5.
|
|
@ -1 +0,0 @@
|
|||
Add tests for `_flatten_dict`.
|
|
@ -1 +0,0 @@
|
|||
Improve type hints.
|
|
@ -1,3 +1,9 @@
|
|||
matrix-synapse-py3 (1.77.0~rc1) stable; urgency=medium
|
||||
|
||||
* New Synapse release 1.77.0rc1.
|
||||
|
||||
-- Synapse Packaging team <packages@matrix.org> Tue, 07 Feb 2023 13:45:14 +0000
|
||||
|
||||
matrix-synapse-py3 (1.76.0) stable; urgency=medium
|
||||
|
||||
* New Synapse release 1.76.0.
|
||||
|
|
|
@ -89,7 +89,7 @@ manifest-path = "rust/Cargo.toml"
|
|||
|
||||
[tool.poetry]
|
||||
name = "matrix-synapse"
|
||||
version = "1.76.0"
|
||||
version = "1.77.0rc1"
|
||||
description = "Homeserver for the Matrix decentralised comms protocol"
|
||||
authors = ["Matrix.org Team and Contributors <packages@matrix.org>"]
|
||||
license = "Apache-2.0"
|
||||
|
|
|
@ -76,7 +76,7 @@ pub const BASE_APPEND_OVERRIDE_RULES: &[PushRule] = &[
|
|||
pattern_type: None,
|
||||
},
|
||||
))]),
|
||||
actions: Cow::Borrowed(&[Action::DontNotify]),
|
||||
actions: Cow::Borrowed(&[]),
|
||||
default: true,
|
||||
default_enabled: true,
|
||||
},
|
||||
|
|
|
@ -1147,15 +1147,11 @@ class PersistEventsStore:
|
|||
# been inserted into room_memberships.
|
||||
txn.execute_batch(
|
||||
"""INSERT INTO current_state_events
|
||||
(room_id, type, state_key, event_id, membership, event_stream_ordering)
|
||||
VALUES (
|
||||
?, ?, ?, ?,
|
||||
(SELECT membership FROM room_memberships WHERE event_id = ?),
|
||||
(SELECT stream_ordering FROM events WHERE event_id = ?)
|
||||
)
|
||||
(room_id, type, state_key, event_id, membership)
|
||||
VALUES (?, ?, ?, ?, (SELECT membership FROM room_memberships WHERE event_id = ?))
|
||||
""",
|
||||
[
|
||||
(room_id, key[0], key[1], ev_id, ev_id, ev_id)
|
||||
(room_id, key[0], key[1], ev_id, ev_id)
|
||||
for key, ev_id in to_insert.items()
|
||||
],
|
||||
)
|
||||
|
@ -1182,15 +1178,11 @@ class PersistEventsStore:
|
|||
if to_insert:
|
||||
txn.execute_batch(
|
||||
"""INSERT INTO local_current_membership
|
||||
(room_id, user_id, event_id, membership, event_stream_ordering)
|
||||
VALUES (
|
||||
?, ?, ?,
|
||||
(SELECT membership FROM room_memberships WHERE event_id = ?),
|
||||
(SELECT stream_ordering FROM events WHERE event_id = ?)
|
||||
)
|
||||
(room_id, user_id, event_id, membership)
|
||||
VALUES (?, ?, ?, (SELECT membership FROM room_memberships WHERE event_id = ?))
|
||||
""",
|
||||
[
|
||||
(room_id, key[1], ev_id, ev_id, ev_id)
|
||||
(room_id, key[1], ev_id, ev_id)
|
||||
for key, ev_id in to_insert.items()
|
||||
if key[0] == EventTypes.Member and self.is_mine_id(key[1])
|
||||
],
|
||||
|
@ -1798,7 +1790,6 @@ class PersistEventsStore:
|
|||
table="room_memberships",
|
||||
keys=(
|
||||
"event_id",
|
||||
"event_stream_ordering",
|
||||
"user_id",
|
||||
"sender",
|
||||
"room_id",
|
||||
|
@ -1809,7 +1800,6 @@ class PersistEventsStore:
|
|||
values=[
|
||||
(
|
||||
event.event_id,
|
||||
event.internal_metadata.stream_ordering,
|
||||
event.state_key,
|
||||
event.user_id,
|
||||
event.room_id,
|
||||
|
@ -1842,7 +1832,6 @@ class PersistEventsStore:
|
|||
keyvalues={"room_id": event.room_id, "user_id": event.state_key},
|
||||
values={
|
||||
"event_id": event.event_id,
|
||||
"event_stream_ordering": event.internal_metadata.stream_ordering,
|
||||
"membership": event.membership,
|
||||
},
|
||||
)
|
||||
|
|
|
@ -17,7 +17,7 @@ from typing import TYPE_CHECKING, Dict, List, Optional, Sequence, Set, Tuple, ca
|
|||
|
||||
import attr
|
||||
|
||||
from synapse.api.constants import EventContentFields, EventTypes, RelationTypes
|
||||
from synapse.api.constants import EventContentFields, RelationTypes
|
||||
from synapse.api.room_versions import KNOWN_ROOM_VERSIONS
|
||||
from synapse.events import make_event_from_dict
|
||||
from synapse.storage._base import SQLBaseStore, db_to_json, make_in_list_sql_clause
|
||||
|
@ -71,10 +71,6 @@ class _BackgroundUpdates:
|
|||
|
||||
EVENTS_JUMP_TO_DATE_INDEX = "events_jump_to_date_index"
|
||||
|
||||
POPULATE_MEMBERSHIP_EVENT_STREAM_ORDERING = (
|
||||
"populate_membership_event_stream_ordering"
|
||||
)
|
||||
|
||||
|
||||
@attr.s(slots=True, frozen=True, auto_attribs=True)
|
||||
class _CalculateChainCover:
|
||||
|
@ -103,10 +99,6 @@ class EventsBackgroundUpdatesStore(SQLBaseStore):
|
|||
):
|
||||
super().__init__(database, db_conn, hs)
|
||||
|
||||
self.db_pool.updates.register_background_update_handler(
|
||||
_BackgroundUpdates.POPULATE_MEMBERSHIP_EVENT_STREAM_ORDERING,
|
||||
self._populate_membership_event_stream_ordering,
|
||||
)
|
||||
self.db_pool.updates.register_background_update_handler(
|
||||
_BackgroundUpdates.EVENT_ORIGIN_SERVER_TS_NAME,
|
||||
self._background_reindex_origin_server_ts,
|
||||
|
@ -1506,97 +1498,3 @@ class EventsBackgroundUpdatesStore(SQLBaseStore):
|
|||
)
|
||||
|
||||
return batch_size
|
||||
|
||||
async def _populate_membership_event_stream_ordering(
|
||||
self, progress: JsonDict, batch_size: int
|
||||
) -> int:
|
||||
def _populate_membership_event_stream_ordering(
|
||||
txn: LoggingTransaction,
|
||||
) -> bool:
|
||||
|
||||
if "max_stream_ordering" in progress:
|
||||
max_stream_ordering = progress["max_stream_ordering"]
|
||||
else:
|
||||
txn.execute("SELECT max(stream_ordering) FROM events")
|
||||
res = txn.fetchone()
|
||||
if res is None or res[0] is None:
|
||||
return True
|
||||
else:
|
||||
max_stream_ordering = res[0]
|
||||
|
||||
start = progress.get("stream_ordering", 0)
|
||||
stop = start + batch_size
|
||||
|
||||
sql = f"""
|
||||
SELECT room_id, event_id, stream_ordering
|
||||
FROM events
|
||||
WHERE
|
||||
type = '{EventTypes.Member}'
|
||||
AND stream_ordering >= ?
|
||||
AND stream_ordering < ?
|
||||
"""
|
||||
txn.execute(sql, (start, stop))
|
||||
|
||||
rows: List[Tuple[str, str, int]] = cast(
|
||||
List[Tuple[str, str, int]], txn.fetchall()
|
||||
)
|
||||
|
||||
event_ids: List[Tuple[str]] = []
|
||||
event_stream_orderings: List[Tuple[int]] = []
|
||||
|
||||
for _, event_id, event_stream_ordering in rows:
|
||||
event_ids.append((event_id,))
|
||||
event_stream_orderings.append((event_stream_ordering,))
|
||||
|
||||
self.db_pool.simple_update_many_txn(
|
||||
txn,
|
||||
table="current_state_events",
|
||||
key_names=("event_id",),
|
||||
key_values=event_ids,
|
||||
value_names=("event_stream_ordering",),
|
||||
value_values=event_stream_orderings,
|
||||
)
|
||||
|
||||
self.db_pool.simple_update_many_txn(
|
||||
txn,
|
||||
table="room_memberships",
|
||||
key_names=("event_id",),
|
||||
key_values=event_ids,
|
||||
value_names=("event_stream_ordering",),
|
||||
value_values=event_stream_orderings,
|
||||
)
|
||||
|
||||
# NOTE: local_current_membership has no index on event_id, so only
|
||||
# the room ID here will reduce the query rows read.
|
||||
for room_id, event_id, event_stream_ordering in rows:
|
||||
txn.execute(
|
||||
"""
|
||||
UPDATE local_current_membership
|
||||
SET event_stream_ordering = ?
|
||||
WHERE room_id = ? AND event_id = ?
|
||||
""",
|
||||
(event_stream_ordering, room_id, event_id),
|
||||
)
|
||||
|
||||
self.db_pool.updates._background_update_progress_txn(
|
||||
txn,
|
||||
_BackgroundUpdates.POPULATE_MEMBERSHIP_EVENT_STREAM_ORDERING,
|
||||
{
|
||||
"stream_ordering": stop,
|
||||
"max_stream_ordering": max_stream_ordering,
|
||||
},
|
||||
)
|
||||
|
||||
return stop > max_stream_ordering
|
||||
|
||||
finished = await self.db_pool.runInteraction(
|
||||
"_populate_membership_event_stream_ordering",
|
||||
_populate_membership_event_stream_ordering,
|
||||
)
|
||||
|
||||
if finished:
|
||||
await self.db_pool.updates._end_background_update(
|
||||
_BackgroundUpdates.POPULATE_MEMBERSHIP_EVENT_STREAM_ORDERING
|
||||
)
|
||||
|
||||
return batch_size
|
||||
|
|
|
@ -1,21 +0,0 @@
|
|||
/* Copyright 2022 Beeper
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
ALTER TABLE current_state_events ADD COLUMN event_stream_ordering BIGINT;
|
||||
ALTER TABLE local_current_membership ADD COLUMN event_stream_ordering BIGINT;
|
||||
ALTER TABLE room_memberships ADD COLUMN event_stream_ordering BIGINT;
|
||||
|
||||
INSERT INTO background_updates (update_name, progress_json) VALUES
|
||||
('populate_membership_event_stream_ordering', '{}');
|
Loading…
Reference in New Issue