mirror of
https://mau.dev/maunium/synapse.git
synced 2024-09-29 20:55:39 +00:00
Merge remote-tracking branch 'upstream/release-v1.109'
This commit is contained in:
commit
d21cd494ca
10
CHANGES.md
10
CHANGES.md
@ -1,3 +1,13 @@
|
|||||||
|
# Synapse 1.109.0rc2 (2024-06-11)
|
||||||
|
|
||||||
|
### Bugfixes
|
||||||
|
|
||||||
|
- Fix bug where one-time-keys were not always included in `/sync` response when using workers. Introduced in v1.109.0rc1. ([\#17275](https://github.com/element-hq/synapse/issues/17275))
|
||||||
|
- Fix bug where `/sync` could get stuck due to edge case in device lists handling. Introduced in v1.109.0rc1. ([\#17292](https://github.com/element-hq/synapse/issues/17292))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Synapse 1.109.0rc1 (2024-06-04)
|
# Synapse 1.109.0rc1 (2024-06-04)
|
||||||
|
|
||||||
### Features
|
### Features
|
||||||
|
6
debian/changelog
vendored
6
debian/changelog
vendored
@ -1,3 +1,9 @@
|
|||||||
|
matrix-synapse-py3 (1.109.0~rc2) stable; urgency=medium
|
||||||
|
|
||||||
|
* New synapse release 1.109.0rc2.
|
||||||
|
|
||||||
|
-- Synapse Packaging team <packages@matrix.org> Tue, 11 Jun 2024 13:20:17 +0000
|
||||||
|
|
||||||
matrix-synapse-py3 (1.109.0~rc1) stable; urgency=medium
|
matrix-synapse-py3 (1.109.0~rc1) stable; urgency=medium
|
||||||
|
|
||||||
* New Synapse release 1.109.0rc1.
|
* New Synapse release 1.109.0rc1.
|
||||||
|
@ -96,7 +96,7 @@ module-name = "synapse.synapse_rust"
|
|||||||
|
|
||||||
[tool.poetry]
|
[tool.poetry]
|
||||||
name = "matrix-synapse"
|
name = "matrix-synapse"
|
||||||
version = "1.109.0rc1"
|
version = "1.109.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 = "AGPL-3.0-or-later"
|
license = "AGPL-3.0-or-later"
|
||||||
|
@ -285,7 +285,11 @@ class SyncResult:
|
|||||||
)
|
)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def empty(next_batch: StreamToken) -> "SyncResult":
|
def empty(
|
||||||
|
next_batch: StreamToken,
|
||||||
|
device_one_time_keys_count: JsonMapping,
|
||||||
|
device_unused_fallback_key_types: List[str],
|
||||||
|
) -> "SyncResult":
|
||||||
"Return a new empty result"
|
"Return a new empty result"
|
||||||
return SyncResult(
|
return SyncResult(
|
||||||
next_batch=next_batch,
|
next_batch=next_batch,
|
||||||
@ -297,8 +301,8 @@ class SyncResult:
|
|||||||
archived=[],
|
archived=[],
|
||||||
to_device=[],
|
to_device=[],
|
||||||
device_lists=DeviceListUpdates(),
|
device_lists=DeviceListUpdates(),
|
||||||
device_one_time_keys_count={},
|
device_one_time_keys_count=device_one_time_keys_count,
|
||||||
device_unused_fallback_key_types=[],
|
device_unused_fallback_key_types=device_unused_fallback_key_types,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@ -523,7 +527,28 @@ class SyncHandler:
|
|||||||
logger.warning(
|
logger.warning(
|
||||||
"Timed out waiting for worker to catch up. Returning empty response"
|
"Timed out waiting for worker to catch up. Returning empty response"
|
||||||
)
|
)
|
||||||
return SyncResult.empty(since_token)
|
device_id = sync_config.device_id
|
||||||
|
one_time_keys_count: JsonMapping = {}
|
||||||
|
unused_fallback_key_types: List[str] = []
|
||||||
|
if device_id:
|
||||||
|
user_id = sync_config.user.to_string()
|
||||||
|
# TODO: We should have a way to let clients differentiate between the states of:
|
||||||
|
# * no change in OTK count since the provided since token
|
||||||
|
# * the server has zero OTKs left for this device
|
||||||
|
# Spec issue: https://github.com/matrix-org/matrix-doc/issues/3298
|
||||||
|
one_time_keys_count = await self.store.count_e2e_one_time_keys(
|
||||||
|
user_id, device_id
|
||||||
|
)
|
||||||
|
unused_fallback_key_types = list(
|
||||||
|
await self.store.get_e2e_unused_fallback_key_types(
|
||||||
|
user_id, device_id
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
cache_context.should_cache = False # Don't cache empty responses
|
||||||
|
return SyncResult.empty(
|
||||||
|
since_token, one_time_keys_count, unused_fallback_key_types
|
||||||
|
)
|
||||||
|
|
||||||
# If we've spent significant time waiting to catch up, take it off
|
# If we've spent significant time waiting to catch up, take it off
|
||||||
# the timeout.
|
# the timeout.
|
||||||
|
@ -108,6 +108,11 @@ class DeviceWorkerStore(RoomMemberWorkerStore, EndToEndKeyWorkerStore):
|
|||||||
("device_lists_outbound_pokes", "instance_name", "stream_id"),
|
("device_lists_outbound_pokes", "instance_name", "stream_id"),
|
||||||
("device_lists_changes_in_room", "instance_name", "stream_id"),
|
("device_lists_changes_in_room", "instance_name", "stream_id"),
|
||||||
("device_lists_remote_pending", "instance_name", "stream_id"),
|
("device_lists_remote_pending", "instance_name", "stream_id"),
|
||||||
|
(
|
||||||
|
"device_lists_changes_converted_stream_position",
|
||||||
|
"instance_name",
|
||||||
|
"stream_id",
|
||||||
|
),
|
||||||
],
|
],
|
||||||
sequence_name="device_lists_sequence",
|
sequence_name="device_lists_sequence",
|
||||||
writers=["master"],
|
writers=["master"],
|
||||||
@ -2394,15 +2399,16 @@ class DeviceStore(DeviceWorkerStore, DeviceBackgroundUpdateStore):
|
|||||||
`FALSE` have not been converted.
|
`FALSE` have not been converted.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
return cast(
|
# There should be only one row in this table, though we want to
|
||||||
Tuple[int, str],
|
# future-proof ourselves for when we have multiple rows (one for each
|
||||||
await self.db_pool.simple_select_one(
|
# instance). So to handle that case we take the minimum of all rows.
|
||||||
|
rows = await self.db_pool.simple_select_list(
|
||||||
table="device_lists_changes_converted_stream_position",
|
table="device_lists_changes_converted_stream_position",
|
||||||
keyvalues={},
|
keyvalues={},
|
||||||
retcols=["stream_id", "room_id"],
|
retcols=["stream_id", "room_id"],
|
||||||
desc="get_device_change_last_converted_pos",
|
desc="get_device_change_last_converted_pos",
|
||||||
),
|
|
||||||
)
|
)
|
||||||
|
return cast(Tuple[int, str], min(rows))
|
||||||
|
|
||||||
async def set_device_change_last_converted_pos(
|
async def set_device_change_last_converted_pos(
|
||||||
self,
|
self,
|
||||||
@ -2417,6 +2423,10 @@ class DeviceStore(DeviceWorkerStore, DeviceBackgroundUpdateStore):
|
|||||||
await self.db_pool.simple_update_one(
|
await self.db_pool.simple_update_one(
|
||||||
table="device_lists_changes_converted_stream_position",
|
table="device_lists_changes_converted_stream_position",
|
||||||
keyvalues={},
|
keyvalues={},
|
||||||
updatevalues={"stream_id": stream_id, "room_id": room_id},
|
updatevalues={
|
||||||
|
"stream_id": stream_id,
|
||||||
|
"instance_name": self._instance_name,
|
||||||
|
"room_id": room_id,
|
||||||
|
},
|
||||||
desc="set_device_change_last_converted_pos",
|
desc="set_device_change_last_converted_pos",
|
||||||
)
|
)
|
||||||
|
@ -0,0 +1,16 @@
|
|||||||
|
--
|
||||||
|
-- This file is licensed under the Affero General Public License (AGPL) version 3.
|
||||||
|
--
|
||||||
|
-- Copyright (C) 2024 New Vector, Ltd
|
||||||
|
--
|
||||||
|
-- This program is free software: you can redistribute it and/or modify
|
||||||
|
-- it under the terms of the GNU Affero General Public License as
|
||||||
|
-- published by the Free Software Foundation, either version 3 of the
|
||||||
|
-- License, or (at your option) any later version.
|
||||||
|
--
|
||||||
|
-- See the GNU Affero General Public License for more details:
|
||||||
|
-- <https://www.gnu.org/licenses/agpl-3.0.html>.
|
||||||
|
|
||||||
|
-- Add `instance_name` columns to stream tables to allow them to be used with
|
||||||
|
-- `MultiWriterIdGenerator`
|
||||||
|
ALTER TABLE device_lists_changes_converted_stream_position ADD COLUMN instance_name TEXT;
|
Loading…
Reference in New Issue
Block a user