mirror of
https://github.com/element-hq/synapse.git
synced 2024-11-29 07:28:55 +03:00
Merge branch 'release-v1.73' into develop
This commit is contained in:
commit
781b14ec69
59 changed files with 91 additions and 135 deletions
74
CHANGES.md
74
CHANGES.md
|
@ -1,3 +1,77 @@
|
||||||
|
Synapse 1.73.0rc2 (2022-12-01)
|
||||||
|
==============================
|
||||||
|
|
||||||
|
Please note that legacy Prometheus metric names have been removed in this release; see [the upgrade notes](https://github.com/matrix-org/synapse/blob/release-v1.73/docs/upgrade.md#legacy-prometheus-metric-names-have-now-been-removed) for more details.
|
||||||
|
|
||||||
|
Bugfixes
|
||||||
|
--------
|
||||||
|
|
||||||
|
- Fix a regression in Synapse 1.73.0rc1 where Synapse's main process would stop responding to HTTP requests when a user with a large number of devices logs in. ([\#14582](https://github.com/matrix-org/synapse/issues/14582))
|
||||||
|
|
||||||
|
|
||||||
|
Synapse 1.73.0rc1 (2022-11-29)
|
||||||
|
==============================
|
||||||
|
|
||||||
|
Features
|
||||||
|
--------
|
||||||
|
|
||||||
|
- Speed-up `/messages` with `filter_events_for_client` optimizations. ([\#14527](https://github.com/matrix-org/synapse/issues/14527))
|
||||||
|
- Improve DB performance by reducing amount of data that gets read in `device_lists_changes_in_room`. ([\#14534](https://github.com/matrix-org/synapse/issues/14534))
|
||||||
|
- Adds support for handling avatar in SSO login. Contributed by @ashfame. ([\#13917](https://github.com/matrix-org/synapse/issues/13917))
|
||||||
|
- Move MSC3030 `/timestamp_to_event` endpoints to stable `v1` location (`/_matrix/client/v1/rooms/<roomID>/timestamp_to_event?ts=<timestamp>&dir=<direction>`, `/_matrix/federation/v1/timestamp_to_event/<roomID>?ts=<timestamp>&dir=<direction>`). ([\#14471](https://github.com/matrix-org/synapse/issues/14471))
|
||||||
|
- Reduce database load of [Client-Server endpoints](https://spec.matrix.org/v1.5/client-server-api/#aggregations) which return bundled aggregations. ([\#14491](https://github.com/matrix-org/synapse/issues/14491), [\#14508](https://github.com/matrix-org/synapse/issues/14508), [\#14510](https://github.com/matrix-org/synapse/issues/14510))
|
||||||
|
- Add unstable support for an Extensible Events room version (`org.matrix.msc1767.10`) via [MSC1767](https://github.com/matrix-org/matrix-spec-proposals/pull/1767), [MSC3931](https://github.com/matrix-org/matrix-spec-proposals/pull/3931), [MSC3932](https://github.com/matrix-org/matrix-spec-proposals/pull/3932), and [MSC3933](https://github.com/matrix-org/matrix-spec-proposals/pull/3933). ([\#14520](https://github.com/matrix-org/synapse/issues/14520), [\#14521](https://github.com/matrix-org/synapse/issues/14521), [\#14524](https://github.com/matrix-org/synapse/issues/14524))
|
||||||
|
- Prune user's old devices on login if they have too many. ([\#14038](https://github.com/matrix-org/synapse/issues/14038), [\#14580](https://github.com/matrix-org/synapse/issues/14580))
|
||||||
|
|
||||||
|
|
||||||
|
Bugfixes
|
||||||
|
--------
|
||||||
|
|
||||||
|
- Fix a long-standing bug where paginating from the start of a room did not work. Contributed by @gnunicorn. ([\#14149](https://github.com/matrix-org/synapse/issues/14149))
|
||||||
|
- Fix a bug introduced in Synapse 1.58.0 where a user with presence state `org.matrix.msc3026.busy` would mistakenly be set to `online` when calling `/sync` or `/events` on a worker process. ([\#14393](https://github.com/matrix-org/synapse/issues/14393))
|
||||||
|
- Fix a bug introduced in Synapse 1.70.0 where a receipt's thread ID was not sent over federation. ([\#14466](https://github.com/matrix-org/synapse/issues/14466))
|
||||||
|
- Fix a long-standing bug where the [List media admin API](https://matrix-org.github.io/synapse/latest/admin_api/media_admin_api.html#list-all-media-in-a-room) would fail when processing an image with broken thumbnail information. ([\#14537](https://github.com/matrix-org/synapse/issues/14537))
|
||||||
|
- Fix a bug introduced in Synapse 1.67.0 where two logging context warnings would be logged on startup. ([\#14574](https://github.com/matrix-org/synapse/issues/14574))
|
||||||
|
- In application service transactions that include the experimental `org.matrix.msc3202.device_one_time_key_counts` key, include a duplicate key of `org.matrix.msc3202.device_one_time_keys_count` to match the name proposed by [MSC3202](https://github.com/matrix-org/matrix-spec-proposals/pull/3202). ([\#14565](https://github.com/matrix-org/synapse/issues/14565))
|
||||||
|
- Fix a bug introduced in Synapse 0.9 where Synapse would fail to fetch server keys whose IDs contain a forward slash. ([\#14490](https://github.com/matrix-org/synapse/issues/14490))
|
||||||
|
|
||||||
|
|
||||||
|
Improved Documentation
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
- Fixed link to 'Synapse administration endpoints'. ([\#14499](https://github.com/matrix-org/synapse/issues/14499))
|
||||||
|
|
||||||
|
|
||||||
|
Deprecations and Removals
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
- Remove legacy Prometheus metrics names. They were deprecated in Synapse v1.69.0 and disabled by default in Synapse v1.71.0. ([\#14538](https://github.com/matrix-org/synapse/issues/14538))
|
||||||
|
|
||||||
|
|
||||||
|
Internal Changes
|
||||||
|
----------------
|
||||||
|
|
||||||
|
- Improve type hinting throughout Synapse. ([\#14055](https://github.com/matrix-org/synapse/issues/14055), [\#14412](https://github.com/matrix-org/synapse/issues/14412), [\#14529](https://github.com/matrix-org/synapse/issues/14529), [\#14452](https://github.com/matrix-org/synapse/issues/14452)).
|
||||||
|
- Remove old stream ID tracking code. Contributed by Nick @Beeper (@fizzadar). ([\#14376](https://github.com/matrix-org/synapse/issues/14376), [\#14468](https://github.com/matrix-org/synapse/issues/14468))
|
||||||
|
- Remove the `worker_main_http_uri` configuration setting. This is now handled via internal replication. ([\#14400](https://github.com/matrix-org/synapse/issues/14400), [\#14476](https://github.com/matrix-org/synapse/issues/14476))
|
||||||
|
- Refactor `federation_sender` and `pusher` configuration loading. ([\#14496](https://github.com/matrix-org/synapse/issues/14496))
|
||||||
|
([\#14509](https://github.com/matrix-org/synapse/issues/14509), [\#14573](https://github.com/matrix-org/synapse/issues/14573))
|
||||||
|
- Faster joins: do not wait for full state when creating events to send. ([\#14403](https://github.com/matrix-org/synapse/issues/14403))
|
||||||
|
- Faster joins: filter out non local events when a room doesn't have its full state. ([\#14404](https://github.com/matrix-org/synapse/issues/14404))
|
||||||
|
- Faster joins: send events to initial list of servers if we don't have the full state yet. ([\#14408](https://github.com/matrix-org/synapse/issues/14408))
|
||||||
|
- Faster joins: use servers list approximation received during `send_join` (potentially updated with received membership events) in `assert_host_in_room`. ([\#14515](https://github.com/matrix-org/synapse/issues/14515))
|
||||||
|
- Fix type logic in TCP replication code that prevented correctly ignoring blank commands. ([\#14449](https://github.com/matrix-org/synapse/issues/14449))
|
||||||
|
- Remove option to skip locking of tables when performing emulated upserts, to avoid a class of bugs in future. ([\#14469](https://github.com/matrix-org/synapse/issues/14469))
|
||||||
|
- `scripts-dev/federation_client`: Fix routing on servers with `.well-known` files. ([\#14479](https://github.com/matrix-org/synapse/issues/14479))
|
||||||
|
- Reduce default third party invite rate limit to 216 invites per day. ([\#14487](https://github.com/matrix-org/synapse/issues/14487))
|
||||||
|
- Refactor conversion of device list changes in room to outbound pokes to track unconverted rows using a `(stream ID, room ID)` position instead of updating the `converted_to_destinations` flag on every row. ([\#14516](https://github.com/matrix-org/synapse/issues/14516))
|
||||||
|
- Add more prompts to the bug report form. ([\#14522](https://github.com/matrix-org/synapse/issues/14522))
|
||||||
|
- Extend editorconfig rules on indent and line length to `.pyi` files. ([\#14526](https://github.com/matrix-org/synapse/issues/14526))
|
||||||
|
- Run Rust CI when `Cargo.lock` changes. This is particularly useful for dependabot updates. ([\#14571](https://github.com/matrix-org/synapse/issues/14571))
|
||||||
|
- Fix a possible variable shadow in `create_new_client_event`. ([\#14575](https://github.com/matrix-org/synapse/issues/14575))
|
||||||
|
- Bump various dependencies in the `poetry.lock` file and in CI scripts. ([\#14557](https://github.com/matrix-org/synapse/issues/14557), [\#14559](https://github.com/matrix-org/synapse/issues/14559), [\#14560](https://github.com/matrix-org/synapse/issues/14560), [\#14500](https://github.com/matrix-org/synapse/issues/14500), [\#14501](https://github.com/matrix-org/synapse/issues/14501), [\#14502](https://github.com/matrix-org/synapse/issues/14502), [\#14503](https://github.com/matrix-org/synapse/issues/14503), [\#14504](https://github.com/matrix-org/synapse/issues/14504), [\#14505](https://github.com/matrix-org/synapse/issues/14505)).
|
||||||
|
|
||||||
|
|
||||||
Synapse 1.72.0 (2022-11-22)
|
Synapse 1.72.0 (2022-11-22)
|
||||||
===========================
|
===========================
|
||||||
|
|
||||||
|
|
|
@ -1 +0,0 @@
|
||||||
Adds support for handling avatar in SSO login. Contributed by @ashfame.
|
|
|
@ -1 +0,0 @@
|
||||||
Prune user's old devices on login if they have too many.
|
|
|
@ -1 +0,0 @@
|
||||||
Add missing type hints to `HomeServer`.
|
|
|
@ -1 +0,0 @@
|
||||||
Fix #12383: paginate room messages from the start if no from is given. Contributed by @gnunicorn .
|
|
|
@ -1 +0,0 @@
|
||||||
Remove old stream ID tracking code. Contributed by Nick @Beeper (@fizzadar).
|
|
|
@ -1 +0,0 @@
|
||||||
Fix a bug introduced in 1.58.0 where a user with presence state 'org.matrix.msc3026.busy' would mistakenly be set to 'online' when calling `/sync` or `/events` on a worker process.
|
|
|
@ -1 +0,0 @@
|
||||||
Remove the `worker_main_http_uri` configuration setting. This is now handled via internal replication.
|
|
|
@ -1 +0,0 @@
|
||||||
Faster joins: do not wait for full state when creating events to send.
|
|
|
@ -1 +0,0 @@
|
||||||
Faster joins: filter out non local events when a room doesn't have its full state.
|
|
|
@ -1 +0,0 @@
|
||||||
Faster joins: send events to initial list of servers if we don't have the full state yet.
|
|
|
@ -1 +0,0 @@
|
||||||
Remove duplicated type information from type hints.
|
|
|
@ -1 +0,0 @@
|
||||||
Fix type logic in TCP replication code that prevented correctly ignoring blank commands.
|
|
|
@ -1 +0,0 @@
|
||||||
Enable mypy's [`strict_equality` check](https://mypy.readthedocs.io/en/stable/command_line.html#cmdoption-mypy-strict-equality) by default.
|
|
|
@ -1 +0,0 @@
|
||||||
Fix a bug introduced in Synapse 1.70.0 where a receipt's thread ID was not sent over federation.
|
|
|
@ -1 +0,0 @@
|
||||||
Remove old stream ID tracking code. Contributed by Nick @Beeper (@fizzadar).
|
|
|
@ -1 +0,0 @@
|
||||||
Remove option to skip locking of tables when performing emulated upserts, to avoid a class of bugs in future.
|
|
|
@ -1 +0,0 @@
|
||||||
Move MSC3030 `/timestamp_to_event` endpoints to stable `v1` location (`/_matrix/client/v1/rooms/<roomID>/timestamp_to_event?ts=<timestamp>&dir=<direction>`, `/_matrix/federation/v1/timestamp_to_event/<roomID>?ts=<timestamp>&dir=<direction>`).
|
|
|
@ -1 +0,0 @@
|
||||||
Remove the `worker_main_http_uri` configuration setting. This is now handled via internal replication.
|
|
|
@ -1 +0,0 @@
|
||||||
`scripts-dev/federation_client`: Fix routing on servers with `.well-known` files.
|
|
|
@ -1 +0,0 @@
|
||||||
Reduce default third party invite rate limit to 216 invites per day.
|
|
|
@ -1 +0,0 @@
|
||||||
Reduce database load of [Client-Server endpoints](https://spec.matrix.org/v1.4/client-server-api/#aggregations) which return bundled aggregations.
|
|
|
@ -1 +0,0 @@
|
||||||
Refactor `federation_sender` and `pusher` configuration loading.
|
|
|
@ -1 +0,0 @@
|
||||||
Fixed link to 'Synapse administration endpoints'.
|
|
|
@ -1 +0,0 @@
|
||||||
Bump pygithub from 1.56 to 1.57.
|
|
|
@ -1 +0,0 @@
|
||||||
Bump sentry-sdk from 1.10.1 to 1.11.0.
|
|
|
@ -1 +0,0 @@
|
||||||
Bump types-pillow from 9.2.2.1 to 9.3.0.1.
|
|
|
@ -1 +0,0 @@
|
||||||
Bump towncrier from 21.9.0 to 22.8.0.
|
|
|
@ -1 +0,0 @@
|
||||||
Bump phonenumbers from 8.12.56 to 8.13.0.
|
|
|
@ -1 +0,0 @@
|
||||||
Bump serde_json from 1.0.87 to 1.0.88.
|
|
|
@ -1 +0,0 @@
|
||||||
Reduce database load of [Client-Server endpoints](https://spec.matrix.org/v1.4/client-server-api/#aggregations) which return bundled aggregations.
|
|
|
@ -1 +0,0 @@
|
||||||
Push complement-synapse docker images to ghcr.io repository.
|
|
|
@ -1 +0,0 @@
|
||||||
Reduce database load of [Client-Server endpoints](https://spec.matrix.org/v1.4/client-server-api/#aggregations) which return bundled aggregations.
|
|
|
@ -1 +0,0 @@
|
||||||
Faster joins: use servers list approximation received during `send_join` (potentially updated with received membership events) in `assert_host_in_room`.
|
|
|
@ -1 +0,0 @@
|
||||||
Refactor conversion of device list changes in room to outbound pokes to track unconverted rows using a `(stream ID, room ID)` position instead of updating the `converted_to_destinations` flag on every row.
|
|
|
@ -1 +0,0 @@
|
||||||
Add unstable support for an Extensible Events room version (`org.matrix.msc1767.10`) via [MSC1767](https://github.com/matrix-org/matrix-spec-proposals/pull/1767), [MSC3931](https://github.com/matrix-org/matrix-spec-proposals/pull/3931), [MSC3932](https://github.com/matrix-org/matrix-spec-proposals/pull/3932), and [MSC3933](https://github.com/matrix-org/matrix-spec-proposals/pull/3933).
|
|
|
@ -1 +0,0 @@
|
||||||
Add unstable support for an Extensible Events room version (`org.matrix.msc1767.10`) via [MSC1767](https://github.com/matrix-org/matrix-spec-proposals/pull/1767), [MSC3931](https://github.com/matrix-org/matrix-spec-proposals/pull/3931), [MSC3932](https://github.com/matrix-org/matrix-spec-proposals/pull/3932), and [MSC3933](https://github.com/matrix-org/matrix-spec-proposals/pull/3933).
|
|
|
@ -1 +0,0 @@
|
||||||
Add more prompts to the bug report form.
|
|
|
@ -1 +0,0 @@
|
||||||
Add unstable support for an Extensible Events room version (`org.matrix.msc1767.10`) via [MSC1767](https://github.com/matrix-org/matrix-spec-proposals/pull/1767), [MSC3931](https://github.com/matrix-org/matrix-spec-proposals/pull/3931), [MSC3932](https://github.com/matrix-org/matrix-spec-proposals/pull/3932), and [MSC3933](https://github.com/matrix-org/matrix-spec-proposals/pull/3933).
|
|
|
@ -1 +0,0 @@
|
||||||
Extend editorconfig rules on indent and line length to `.pyi` files.
|
|
|
@ -1 +0,0 @@
|
||||||
Speed-up `/messages` with `filter_events_for_client` optimizations.
|
|
|
@ -1 +0,0 @@
|
||||||
Add missing type hints.
|
|
|
@ -1 +0,0 @@
|
||||||
Improve DB performance by reducing amount of data that gets read in `device_lists_changes_in_room`.
|
|
|
@ -1 +0,0 @@
|
||||||
Fix a long-standing bug where the [List media admin API](https://matrix-org.github.io/synapse/latest/admin_api/media_admin_api.html#list-all-media-in-a-room) would fail when processing an image with broken thumbnail information.
|
|
|
@ -1 +0,0 @@
|
||||||
Remove legacy Prometheus metrics names. They were deprecated in Synapse v1.69.0 and disabled by default in Synapse v1.71.0.
|
|
|
@ -1 +0,0 @@
|
||||||
Bump dtolnay/rust-toolchain from 55c7845fad90d0ae8b2e83715cb900e5e861e8cb to e645b0cf01249a964ec099494d38d2da0f0b349f.
|
|
|
@ -1 +0,0 @@
|
||||||
Bump serde from 1.0.147 to 1.0.148.
|
|
|
@ -1 +0,0 @@
|
||||||
Bump serde_json from 1.0.88 to 1.0.89.
|
|
|
@ -1 +0,0 @@
|
||||||
In application service transactions that include the experimental `org.matrix.msc3202.device_one_time_key_counts` key, include a duplicate key of `org.matrix.msc3202.device_one_time_keys_count` to match the name proposed by [MSC3202](https://github.com/matrix-org/matrix-spec-proposals/blob/travis/msc/otk-dl-appservice/proposals/3202-encrypted-appservices.md).
|
|
|
@ -1 +0,0 @@
|
||||||
Run Rust CI when `Cargo.lock` changes. This is particularly useful for dependabot updates.
|
|
|
@ -1 +0,0 @@
|
||||||
Push complement-synapse docker images to ghcr.io repository.
|
|
|
@ -1 +0,0 @@
|
||||||
Fix a bug introduced in Synapse 1.67.0 where two logging context warnings would be logged on startup.
|
|
|
@ -1 +0,0 @@
|
||||||
Fix a possible variable shadow in `create_new_client_event`.
|
|
12
debian/changelog
vendored
12
debian/changelog
vendored
|
@ -1,3 +1,15 @@
|
||||||
|
matrix-synapse-py3 (1.73.0~rc2) stable; urgency=medium
|
||||||
|
|
||||||
|
* New Synapse release 1.73.0rc2.
|
||||||
|
|
||||||
|
-- Synapse Packaging team <packages@matrix.org> Thu, 01 Dec 2022 10:02:19 +0000
|
||||||
|
|
||||||
|
matrix-synapse-py3 (1.73.0~rc1) stable; urgency=medium
|
||||||
|
|
||||||
|
* New Synapse release 1.73.0rc1.
|
||||||
|
|
||||||
|
-- Synapse Packaging team <packages@matrix.org> Tue, 29 Nov 2022 12:28:13 +0000
|
||||||
|
|
||||||
matrix-synapse-py3 (1.72.0) stable; urgency=medium
|
matrix-synapse-py3 (1.72.0) stable; urgency=medium
|
||||||
|
|
||||||
* New Synapse release 1.72.0.
|
* New Synapse release 1.72.0.
|
||||||
|
|
|
@ -57,7 +57,7 @@ manifest-path = "rust/Cargo.toml"
|
||||||
|
|
||||||
[tool.poetry]
|
[tool.poetry]
|
||||||
name = "matrix-synapse"
|
name = "matrix-synapse"
|
||||||
version = "1.72.0"
|
version = "1.73.0rc2"
|
||||||
description = "Homeserver for the Matrix decentralised comms protocol"
|
description = "Homeserver for the Matrix decentralised comms protocol"
|
||||||
authors = ["Matrix.org Team and Contributors <packages@matrix.org>"]
|
authors = ["Matrix.org Team and Contributors <packages@matrix.org>"]
|
||||||
license = "Apache-2.0"
|
license = "Apache-2.0"
|
||||||
|
|
|
@ -421,9 +421,6 @@ class DeviceHandler(DeviceWorkerHandler):
|
||||||
|
|
||||||
self._check_device_name_length(initial_device_display_name)
|
self._check_device_name_length(initial_device_display_name)
|
||||||
|
|
||||||
# Prune the user's device list if they already have a lot of devices.
|
|
||||||
await self._prune_too_many_devices(user_id)
|
|
||||||
|
|
||||||
if device_id is not None:
|
if device_id is not None:
|
||||||
new_device = await self.store.store_device(
|
new_device = await self.store.store_device(
|
||||||
user_id=user_id,
|
user_id=user_id,
|
||||||
|
@ -455,14 +452,6 @@ class DeviceHandler(DeviceWorkerHandler):
|
||||||
|
|
||||||
raise errors.StoreError(500, "Couldn't generate a device ID.")
|
raise errors.StoreError(500, "Couldn't generate a device ID.")
|
||||||
|
|
||||||
async def _prune_too_many_devices(self, user_id: str) -> None:
|
|
||||||
"""Delete any excess old devices this user may have."""
|
|
||||||
device_ids = await self.store.check_too_many_devices_for_user(user_id)
|
|
||||||
if not device_ids:
|
|
||||||
return
|
|
||||||
|
|
||||||
await self.delete_devices(user_id, device_ids)
|
|
||||||
|
|
||||||
async def _delete_stale_devices(self) -> None:
|
async def _delete_stale_devices(self) -> None:
|
||||||
"""Background task that deletes devices which haven't been accessed for more than
|
"""Background task that deletes devices which haven't been accessed for more than
|
||||||
a configured time period.
|
a configured time period.
|
||||||
|
@ -492,7 +481,7 @@ class DeviceHandler(DeviceWorkerHandler):
|
||||||
device_ids = [d for d in device_ids if d != except_device_id]
|
device_ids = [d for d in device_ids if d != except_device_id]
|
||||||
await self.delete_devices(user_id, device_ids)
|
await self.delete_devices(user_id, device_ids)
|
||||||
|
|
||||||
async def delete_devices(self, user_id: str, device_ids: Collection[str]) -> None:
|
async def delete_devices(self, user_id: str, device_ids: List[str]) -> None:
|
||||||
"""Delete several devices
|
"""Delete several devices
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
|
|
|
@ -1533,70 +1533,6 @@ class DeviceBackgroundUpdateStore(SQLBaseStore):
|
||||||
|
|
||||||
return rows
|
return rows
|
||||||
|
|
||||||
async def check_too_many_devices_for_user(self, user_id: str) -> Collection[str]:
|
|
||||||
"""Check if the user has a lot of devices, and if so return the set of
|
|
||||||
devices we can prune.
|
|
||||||
|
|
||||||
This does *not* return hidden devices or devices with E2E keys.
|
|
||||||
"""
|
|
||||||
|
|
||||||
num_devices = await self.db_pool.simple_select_one_onecol(
|
|
||||||
table="devices",
|
|
||||||
keyvalues={"user_id": user_id, "hidden": False},
|
|
||||||
retcol="COALESCE(COUNT(*), 0)",
|
|
||||||
desc="count_devices",
|
|
||||||
)
|
|
||||||
|
|
||||||
# We let users have up to ten devices without pruning.
|
|
||||||
if num_devices <= 10:
|
|
||||||
return ()
|
|
||||||
|
|
||||||
# We prune everything older than N days.
|
|
||||||
max_last_seen = self._clock.time_msec() - 14 * 24 * 60 * 60 * 1000
|
|
||||||
|
|
||||||
if num_devices > 50:
|
|
||||||
# If the user has more than 50 devices, then we chose a last seen
|
|
||||||
# that ensures we keep at most 50 devices.
|
|
||||||
sql = """
|
|
||||||
SELECT last_seen FROM devices
|
|
||||||
WHERE
|
|
||||||
user_id = ?
|
|
||||||
AND NOT hidden
|
|
||||||
AND last_seen IS NOT NULL
|
|
||||||
AND key_json IS NULL
|
|
||||||
ORDER BY last_seen DESC
|
|
||||||
LIMIT 1
|
|
||||||
OFFSET 50
|
|
||||||
"""
|
|
||||||
|
|
||||||
rows = await self.db_pool.execute(
|
|
||||||
"check_too_many_devices_for_user_last_seen", None, sql, (user_id,)
|
|
||||||
)
|
|
||||||
if rows:
|
|
||||||
max_last_seen = max(rows[0][0], max_last_seen)
|
|
||||||
|
|
||||||
# Now fetch the devices to delete.
|
|
||||||
sql = """
|
|
||||||
SELECT DISTINCT device_id FROM devices
|
|
||||||
LEFT JOIN e2e_device_keys_json USING (user_id, device_id)
|
|
||||||
WHERE
|
|
||||||
user_id = ?
|
|
||||||
AND NOT hidden
|
|
||||||
AND last_seen < ?
|
|
||||||
AND key_json IS NULL
|
|
||||||
"""
|
|
||||||
|
|
||||||
def check_too_many_devices_for_user_txn(
|
|
||||||
txn: LoggingTransaction,
|
|
||||||
) -> Collection[str]:
|
|
||||||
txn.execute(sql, (user_id, max_last_seen))
|
|
||||||
return {device_id for device_id, in txn}
|
|
||||||
|
|
||||||
return await self.db_pool.runInteraction(
|
|
||||||
"check_too_many_devices_for_user",
|
|
||||||
check_too_many_devices_for_user_txn,
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
class DeviceStore(DeviceWorkerStore, DeviceBackgroundUpdateStore):
|
class DeviceStore(DeviceWorkerStore, DeviceBackgroundUpdateStore):
|
||||||
# Because we have write access, this will be a StreamIdGenerator
|
# Because we have write access, this will be a StreamIdGenerator
|
||||||
|
@ -1655,7 +1591,6 @@ class DeviceStore(DeviceWorkerStore, DeviceBackgroundUpdateStore):
|
||||||
values={},
|
values={},
|
||||||
insertion_values={
|
insertion_values={
|
||||||
"display_name": initial_device_display_name,
|
"display_name": initial_device_display_name,
|
||||||
"last_seen": self._clock.time_msec(),
|
|
||||||
"hidden": False,
|
"hidden": False,
|
||||||
},
|
},
|
||||||
desc="store_device",
|
desc="store_device",
|
||||||
|
@ -1701,7 +1636,7 @@ class DeviceStore(DeviceWorkerStore, DeviceBackgroundUpdateStore):
|
||||||
)
|
)
|
||||||
raise StoreError(500, "Problem storing device.")
|
raise StoreError(500, "Problem storing device.")
|
||||||
|
|
||||||
async def delete_devices(self, user_id: str, device_ids: Collection[str]) -> None:
|
async def delete_devices(self, user_id: str, device_ids: List[str]) -> None:
|
||||||
"""Deletes several devices.
|
"""Deletes several devices.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
|
|
|
@ -115,7 +115,7 @@ class DeviceTestCase(unittest.HomeserverTestCase):
|
||||||
"device_id": "xyz",
|
"device_id": "xyz",
|
||||||
"display_name": "display 0",
|
"display_name": "display 0",
|
||||||
"last_seen_ip": None,
|
"last_seen_ip": None,
|
||||||
"last_seen_ts": 1000000,
|
"last_seen_ts": None,
|
||||||
},
|
},
|
||||||
device_map["xyz"],
|
device_map["xyz"],
|
||||||
)
|
)
|
||||||
|
|
|
@ -169,8 +169,6 @@ class ClientIpStoreTestCase(unittest.HomeserverTestCase):
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
last_seen = self.clock.time_msec()
|
|
||||||
|
|
||||||
if after_persisting:
|
if after_persisting:
|
||||||
# Trigger the storage loop
|
# Trigger the storage loop
|
||||||
self.reactor.advance(10)
|
self.reactor.advance(10)
|
||||||
|
@ -191,7 +189,7 @@ class ClientIpStoreTestCase(unittest.HomeserverTestCase):
|
||||||
"device_id": device_id,
|
"device_id": device_id,
|
||||||
"ip": None,
|
"ip": None,
|
||||||
"user_agent": None,
|
"user_agent": None,
|
||||||
"last_seen": last_seen,
|
"last_seen": None,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
Loading…
Reference in a new issue