@@ -8,21 +8,21 @@ | |||||
# If ignoring a pull request that was not squash merged, only the merge | # If ignoring a pull request that was not squash merged, only the merge | ||||
# commit needs to be put here. Child commits will be resolved from it. | # commit needs to be put here. Child commits will be resolved from it. | ||||
# Run black (#3679). | |||||
# Run black (https://github.com/matrix-org/synapse/pull/3679). | |||||
8b3d9b6b199abb87246f982d5db356f1966db925 | 8b3d9b6b199abb87246f982d5db356f1966db925 | ||||
# Black reformatting (#5482). | |||||
# Black reformatting (https://github.com/matrix-org/synapse/pull/5482). | |||||
32e7c9e7f20b57dd081023ac42d6931a8da9b3a3 | 32e7c9e7f20b57dd081023ac42d6931a8da9b3a3 | ||||
# Target Python 3.5 with black (#8664). | |||||
# Target Python 3.5 with black (https://github.com/matrix-org/synapse/pull/8664). | |||||
aff1eb7c671b0a3813407321d2702ec46c71fa56 | aff1eb7c671b0a3813407321d2702ec46c71fa56 | ||||
# Update black to 20.8b1 (#9381). | |||||
# Update black to 20.8b1 (https://github.com/matrix-org/synapse/pull/9381). | |||||
0a00b7ff14890987f09112a2ae696c61001e6cf1 | 0a00b7ff14890987f09112a2ae696c61001e6cf1 | ||||
# Convert tests/rest/admin/test_room.py to unix file endings (#7953). | |||||
# Convert tests/rest/admin/test_room.py to unix file endings (https://github.com/matrix-org/synapse/pull/7953). | |||||
c4268e3da64f1abb5b31deaeb5769adb6510c0a7 | c4268e3da64f1abb5b31deaeb5769adb6510c0a7 | ||||
# Update black to 23.1.0 (#15103) | |||||
# Update black to 23.1.0 (https://github.com/matrix-org/synapse/pull/15103) | |||||
9bb2eac71962970d02842bca441f4bcdbbf93a11 | 9bb2eac71962970d02842bca441f4bcdbbf93a11 | ||||
@@ -0,0 +1 @@ | |||||
Improve references to GitHub issues. |
@@ -1637,7 +1637,7 @@ matrix-synapse-py3 (0.99.3.1) stable; urgency=medium | |||||
matrix-synapse-py3 (0.99.3) stable; urgency=medium | matrix-synapse-py3 (0.99.3) stable; urgency=medium | ||||
[ Richard van der Hoff ] | [ Richard van der Hoff ] | ||||
* Fix warning during preconfiguration. (Fixes: #4819) | |||||
* Fix warning during preconfiguration. (Fixes: https://github.com/matrix-org/synapse/issues/4819) | |||||
[ Synapse Packaging team ] | [ Synapse Packaging team ] | ||||
* New synapse release 0.99.3. | * New synapse release 0.99.3. | ||||
@@ -192,7 +192,7 @@ phonenumbers = ">=8.2.0" | |||||
# we use GaugeHistogramMetric, which was added in prom-client 0.4.0. | # we use GaugeHistogramMetric, which was added in prom-client 0.4.0. | ||||
prometheus-client = ">=0.4.0" | prometheus-client = ">=0.4.0" | ||||
# we use `order`, which arrived in attrs 19.2.0. | # we use `order`, which arrived in attrs 19.2.0. | ||||
# Note: 21.1.0 broke `/sync`, see #9936 | |||||
# Note: 21.1.0 broke `/sync`, see https://github.com/matrix-org/synapse/issues/9936 | |||||
attrs = ">=19.2.0,!=21.1.0" | attrs = ">=19.2.0,!=21.1.0" | ||||
netaddr = ">=0.7.18" | netaddr = ">=0.7.18" | ||||
# Jinja 2.x is incompatible with MarkupSafe>=2.1. To ensure that admins do not | # Jinja 2.x is incompatible with MarkupSafe>=2.1. To ensure that admins do not | ||||
@@ -357,7 +357,7 @@ commonmark = ">=0.9.1" | |||||
pygithub = ">=1.55" | pygithub = ">=1.55" | ||||
# The following are executed as commands by the release script. | # The following are executed as commands by the release script. | ||||
twine = "*" | twine = "*" | ||||
# Towncrier min version comes from #3425. Rationale unclear. | |||||
# Towncrier min version comes from https://github.com/matrix-org/synapse/pull/3425. Rationale unclear. | |||||
towncrier = ">=18.6.0rc1" | towncrier = ">=18.6.0rc1" | ||||
# Used for checking the Poetry lockfile | # Used for checking the Poetry lockfile | ||||
@@ -377,8 +377,9 @@ furo = ">=2022.12.7,<2024.0.0" | |||||
[build-system] | [build-system] | ||||
# The upper bounds here are defensive, intended to prevent situations like | # The upper bounds here are defensive, intended to prevent situations like | ||||
# #13849 and #14079 where we see buildtime or runtime errors caused by build | |||||
# system changes. | |||||
# https://github.com/matrix-org/synapse/issues/13849 and | |||||
# https://github.com/matrix-org/synapse/issues/14079 where we see buildtime or | |||||
# runtime errors caused by build system changes. | |||||
# We are happy to raise these upper bounds upon request, | # We are happy to raise these upper bounds upon request, | ||||
# provided we check that it's safe to do so (i.e. that CI passes). | # provided we check that it's safe to do so (i.e. that CI passes). | ||||
requires = ["poetry-core>=1.1.0,<=1.7.0", "setuptools_rust>=1.3,<=1.8.1"] | requires = ["poetry-core>=1.1.0,<=1.7.0", "setuptools_rust>=1.3,<=1.8.1"] | ||||
@@ -104,8 +104,8 @@ logger = logging.getLogger("synapse.app.generic_worker") | |||||
class GenericWorkerStore( | class GenericWorkerStore( | ||||
# FIXME(#3714): We need to add UserDirectoryStore as we write directly | |||||
# rather than going via the correct worker. | |||||
# FIXME(https://github.com/matrix-org/synapse/issues/3714): We need to add | |||||
# UserDirectoryStore as we write directly rather than going via the correct worker. | |||||
UserDirectoryStore, | UserDirectoryStore, | ||||
StatsStore, | StatsStore, | ||||
UIAuthWorkerStore, | UIAuthWorkerStore, | ||||
@@ -581,14 +581,14 @@ class FederationSender(AbstractFederationSender): | |||||
"get_joined_hosts", str(sg) | "get_joined_hosts", str(sg) | ||||
) | ) | ||||
if destinations is None: | if destinations is None: | ||||
# Add logging to help track down #13444 | |||||
# Add logging to help track down https://github.com/matrix-org/synapse/issues/13444 | |||||
logger.info( | logger.info( | ||||
"Unexpectedly did not have cached destinations for %s / %s", | "Unexpectedly did not have cached destinations for %s / %s", | ||||
sg, | sg, | ||||
event.event_id, | event.event_id, | ||||
) | ) | ||||
else: | else: | ||||
# Add logging to help track down #13444 | |||||
# Add logging to help track down https://github.com/matrix-org/synapse/issues/13444 | |||||
logger.info( | logger.info( | ||||
"Unexpectedly did not have cached prev group for %s", | "Unexpectedly did not have cached prev group for %s", | ||||
event.event_id, | event.event_id, | ||||
@@ -748,7 +748,7 @@ class FederationEventHandler: | |||||
# fetching fresh state for the room if the missing event | # fetching fresh state for the room if the missing event | ||||
# can't be found, which slightly reduces our security. | # can't be found, which slightly reduces our security. | ||||
# it may also increase our DAG extremity count for the room, | # it may also increase our DAG extremity count for the room, | ||||
# causing additional state resolution? See #1760. | |||||
# causing additional state resolution? See https://github.com/matrix-org/synapse/issues/1760. | |||||
# However, fetching state doesn't hold the linearizer lock | # However, fetching state doesn't hold the linearizer lock | ||||
# apparently. | # apparently. | ||||
# | # | ||||
@@ -1816,7 +1816,7 @@ class PresenceEventSource(EventSource[int, UserPresenceState]): | |||||
# the same token repeatedly. | # the same token repeatedly. | ||||
# | # | ||||
# Hence this guard where we just return nothing so that the sync | # Hence this guard where we just return nothing so that the sync | ||||
# doesn't return. C.f. #5503. | |||||
# doesn't return. C.f. https://github.com/matrix-org/synapse/issues/5503. | |||||
return [], max_token | return [], max_token | ||||
# Figure out which other users this user should explicitly receive | # Figure out which other users this user should explicitly receive | ||||
@@ -399,7 +399,7 @@ class SyncHandler: | |||||
# | # | ||||
# If that happens, we mustn't cache it, so that when the client comes back | # If that happens, we mustn't cache it, so that when the client comes back | ||||
# with the same cache token, we don't immediately return the same empty | # with the same cache token, we don't immediately return the same empty | ||||
# result, causing a tightloop. (#8518) | |||||
# result, causing a tightloop. (https://github.com/matrix-org/synapse/issues/8518) | |||||
if result.next_batch == since_token: | if result.next_batch == since_token: | ||||
cache_context.should_cache = False | cache_context.should_cache = False | ||||
@@ -1003,7 +1003,7 @@ class SyncHandler: | |||||
# always make sure we LL ourselves so we know we're in the room | # always make sure we LL ourselves so we know we're in the room | ||||
# (if we are) to fix https://github.com/vector-im/riot-web/issues/7209 | # (if we are) to fix https://github.com/vector-im/riot-web/issues/7209 | ||||
# We only need apply this on full state syncs given we disabled | # We only need apply this on full state syncs given we disabled | ||||
# LL for incr syncs in #3840. | |||||
# LL for incr syncs in https://github.com/matrix-org/synapse/pull/3840. | |||||
# We don't insert ourselves into `members_to_fetch`, because in some | # We don't insert ourselves into `members_to_fetch`, because in some | ||||
# rare cases (an empty event batch with a now_token after the user's | # rare cases (an empty event batch with a now_token after the user's | ||||
# leave in a partial state room which another local user has | # leave in a partial state room which another local user has | ||||
@@ -184,8 +184,8 @@ class UserDirectoryHandler(StateDeltasHandler): | |||||
"""Called to update index of our local user profiles when they change | """Called to update index of our local user profiles when they change | ||||
irrespective of any rooms the user may be in. | irrespective of any rooms the user may be in. | ||||
""" | """ | ||||
# FIXME(#3714): We should probably do this in the same worker as all | |||||
# the other changes. | |||||
# FIXME(https://github.com/matrix-org/synapse/issues/3714): We should | |||||
# probably do this in the same worker as all the other changes. | |||||
if await self.store.should_include_local_user_in_dir(user_id): | if await self.store.should_include_local_user_in_dir(user_id): | ||||
await self.store.update_profile_in_user_dir( | await self.store.update_profile_in_user_dir( | ||||
@@ -194,8 +194,8 @@ class UserDirectoryHandler(StateDeltasHandler): | |||||
async def handle_local_user_deactivated(self, user_id: str) -> None: | async def handle_local_user_deactivated(self, user_id: str) -> None: | ||||
"""Called when a user ID is deactivated""" | """Called when a user ID is deactivated""" | ||||
# FIXME(#3714): We should probably do this in the same worker as all | |||||
# the other changes. | |||||
# FIXME(https://github.com/matrix-org/synapse/issues/3714): We should | |||||
# probably do this in the same worker as all the other changes. | |||||
await self.store.remove_from_user_dir(user_id) | await self.store.remove_from_user_dir(user_id) | ||||
async def _unsafe_process(self) -> None: | async def _unsafe_process(self) -> None: | ||||
@@ -465,7 +465,7 @@ class MatrixFederationHttpClient: | |||||
"""Wrapper for _send_request which can optionally retry the request | """Wrapper for _send_request which can optionally retry the request | ||||
upon receiving a combination of a 400 HTTP response code and a | upon receiving a combination of a 400 HTTP response code and a | ||||
'M_UNRECOGNIZED' errcode. This is a workaround for Synapse <= v0.99.3 | 'M_UNRECOGNIZED' errcode. This is a workaround for Synapse <= v0.99.3 | ||||
due to #3622. | |||||
due to https://github.com/matrix-org/synapse/issues/3622. | |||||
Args: | Args: | ||||
request: details of request to be sent | request: details of request to be sent | ||||
@@ -958,9 +958,9 @@ class MatrixFederationHttpClient: | |||||
requests). | requests). | ||||
try_trailing_slash_on_400: True if on a 400 M_UNRECOGNIZED | try_trailing_slash_on_400: True if on a 400 M_UNRECOGNIZED | ||||
response we should try appending a trailing slash to the end | response we should try appending a trailing slash to the end | ||||
of the request. Workaround for #3622 in Synapse <= v0.99.3. This | |||||
will be attempted before backing off if backing off has been | |||||
enabled. | |||||
of the request. Workaround for https://github.com/matrix-org/synapse/issues/3622 | |||||
in Synapse <= v0.99.3. This will be attempted before backing off if | |||||
backing off has been enabled. | |||||
parser: The parser to use to decode the response. Defaults to | parser: The parser to use to decode the response. Defaults to | ||||
parsing as JSON. | parsing as JSON. | ||||
backoff_on_all_error_codes: Back off if we get any error response | backoff_on_all_error_codes: Back off if we get any error response | ||||
@@ -1155,7 +1155,8 @@ class MatrixFederationHttpClient: | |||||
try_trailing_slash_on_400: True if on a 400 M_UNRECOGNIZED | try_trailing_slash_on_400: True if on a 400 M_UNRECOGNIZED | ||||
response we should try appending a trailing slash to the end of | response we should try appending a trailing slash to the end of | ||||
the request. Workaround for #3622 in Synapse <= v0.99.3. | |||||
the request. Workaround for https://github.com/matrix-org/synapse/issues/3622 | |||||
in Synapse <= v0.99.3. | |||||
parser: The parser to use to decode the response. Defaults to | parser: The parser to use to decode the response. Defaults to | ||||
parsing as JSON. | parsing as JSON. | ||||
@@ -1250,7 +1251,8 @@ class MatrixFederationHttpClient: | |||||
try_trailing_slash_on_400: True if on a 400 M_UNRECOGNIZED | try_trailing_slash_on_400: True if on a 400 M_UNRECOGNIZED | ||||
response we should try appending a trailing slash to the end of | response we should try appending a trailing slash to the end of | ||||
the request. Workaround for #3622 in Synapse <= v0.99.3. | |||||
the request. Workaround for https://github.com/matrix-org/synapse/issues/3622 | |||||
in Synapse <= v0.99.3. | |||||
parser: The parser to use to decode the response. Defaults to | parser: The parser to use to decode the response. Defaults to | ||||
parsing as JSON. | parsing as JSON. | ||||
@@ -295,7 +295,8 @@ class ThirdPartyEventRulesModuleApiCallbacks: | |||||
raise | raise | ||||
except SynapseError as e: | except SynapseError as e: | ||||
# FIXME: Being able to throw SynapseErrors is relied upon by | # FIXME: Being able to throw SynapseErrors is relied upon by | ||||
# some modules. PR #10386 accidentally broke this ability. | |||||
# some modules. PR https://github.com/matrix-org/synapse/pull/10386 | |||||
# accidentally broke this ability. | |||||
# That said, we aren't keen on exposing this implementation detail | # That said, we aren't keen on exposing this implementation detail | ||||
# to modules and we should one day have a proper way to do what | # to modules and we should one day have a proper way to do what | ||||
# is wanted. | # is wanted. | ||||
@@ -45,7 +45,7 @@ class Databases(Generic[DataStoreT]): | |||||
""" | """ | ||||
databases: List[DatabasePool] | databases: List[DatabasePool] | ||||
main: "DataStore" # FIXME: #11165: actually an instance of `main_store_class` | |||||
main: "DataStore" # FIXME: https://github.com/matrix-org/synapse/issues/11165: actually an instance of `main_store_class` | |||||
state: StateGroupDataStore | state: StateGroupDataStore | ||||
persist_events: Optional[PersistEventsStore] | persist_events: Optional[PersistEventsStore] | ||||
@@ -425,7 +425,7 @@ class EventsBackgroundUpdatesStore(SQLBaseStore): | |||||
"""Background update to clean out extremities that should have been | """Background update to clean out extremities that should have been | ||||
deleted previously. | deleted previously. | ||||
Mainly used to deal with the aftermath of #5269. | |||||
Mainly used to deal with the aftermath of https://github.com/matrix-org/synapse/issues/5269. | |||||
""" | """ | ||||
# This works by first copying all existing forward extremities into the | # This works by first copying all existing forward extremities into the | ||||
@@ -558,7 +558,7 @@ class EventsBackgroundUpdatesStore(SQLBaseStore): | |||||
) | ) | ||||
logger.info( | logger.info( | ||||
"Deleted %d forward extremities of %d checked, to clean up #5269", | |||||
"Deleted %d forward extremities of %d checked, to clean up matrix-org/synapse#5269", | |||||
deleted, | deleted, | ||||
len(original_set), | len(original_set), | ||||
) | ) | ||||
@@ -1312,7 +1312,8 @@ class EventsWorkerStore(SQLBaseStore): | |||||
room_version: Optional[RoomVersion] | room_version: Optional[RoomVersion] | ||||
if not room_version_id: | if not room_version_id: | ||||
# this should only happen for out-of-band membership events which | # this should only happen for out-of-band membership events which | ||||
# arrived before #6983 landed. For all other events, we should have | |||||
# arrived before https://github.com/matrix-org/synapse/issues/6983 | |||||
# landed. For all other events, we should have | |||||
# an entry in the 'rooms' table. | # an entry in the 'rooms' table. | ||||
# | # | ||||
# However, the 'out_of_band_membership' flag is unreliable for older | # However, the 'out_of_band_membership' flag is unreliable for older | ||||
@@ -1323,7 +1324,8 @@ class EventsWorkerStore(SQLBaseStore): | |||||
"Room %s for event %s is unknown" % (d["room_id"], event_id) | "Room %s for event %s is unknown" % (d["room_id"], event_id) | ||||
) | ) | ||||
# so, assuming this is an out-of-band-invite that arrived before #6983 | |||||
# so, assuming this is an out-of-band-invite that arrived before | |||||
# https://github.com/matrix-org/synapse/issues/6983 | |||||
# landed, we know that the room version must be v5 or earlier (because | # landed, we know that the room version must be v5 or earlier (because | ||||
# v6 hadn't been invented at that point, so invites from such rooms | # v6 hadn't been invented at that point, so invites from such rooms | ||||
# would have been rejected.) | # would have been rejected.) | ||||
@@ -317,7 +317,7 @@ class MonthlyActiveUsersWorkerStore(RegistrationWorkerStore): | |||||
if user_id: | if user_id: | ||||
is_support = self.is_support_user_txn(txn, user_id) | is_support = self.is_support_user_txn(txn, user_id) | ||||
if not is_support: | if not is_support: | ||||
# We do this manually here to avoid hitting #6791 | |||||
# We do this manually here to avoid hitting https://github.com/matrix-org/synapse/issues/6791 | |||||
self.db_pool.simple_upsert_txn( | self.db_pool.simple_upsert_txn( | ||||
txn, | txn, | ||||
table="monthly_active_users", | table="monthly_active_users", | ||||
@@ -494,7 +494,7 @@ class PurgeEventsStore(StateGroupWorkerStore, CacheInvalidationWorkerStore): | |||||
# - room_tags_revisions | # - room_tags_revisions | ||||
# The problem with these is that they are largeish and there is no room_id | # The problem with these is that they are largeish and there is no room_id | ||||
# index on them. In any case we should be clearing out 'stream' tables | # index on them. In any case we should be clearing out 'stream' tables | ||||
# periodically anyway (#5888) | |||||
# periodically anyway (https://github.com/matrix-org/synapse/issues/5888) | |||||
self._invalidate_caches_for_room_and_stream(txn, room_id) | self._invalidate_caches_for_room_and_stream(txn, room_id) | ||||
@@ -38,7 +38,8 @@ class PostgresEngine( | |||||
super().__init__(psycopg2, database_config) | super().__init__(psycopg2, database_config) | ||||
psycopg2.extensions.register_type(psycopg2.extensions.UNICODE) | psycopg2.extensions.register_type(psycopg2.extensions.UNICODE) | ||||
# Disables passing `bytes` to txn.execute, c.f. #6186. If you do | |||||
# Disables passing `bytes` to txn.execute, c.f. | |||||
# https://github.com/matrix-org/synapse/issues/6186. If you do | |||||
# actually want to use bytes than wrap it in `bytearray`. | # actually want to use bytes than wrap it in `bytearray`. | ||||
def _disable_bytes_adapter(_: bytes) -> NoReturn: | def _disable_bytes_adapter(_: bytes) -> NoReturn: | ||||
raise Exception("Passing bytes to DB is disabled.") | raise Exception("Passing bytes to DB is disabled.") | ||||
@@ -109,7 +109,8 @@ Changes in SCHEMA_VERSION = 78 | |||||
Changes in SCHEMA_VERSION = 79 | Changes in SCHEMA_VERSION = 79 | ||||
- Add tables to handle in DB read-write locks. | - Add tables to handle in DB read-write locks. | ||||
- Add some mitigations for a painful race between foreground and background updates, cf #15677. | |||||
- Add some mitigations for a painful race between foreground and background updates, cf | |||||
https://github.com/matrix-org/synapse/issues/15677. | |||||
Changes in SCHEMA_VERSION = 80 | Changes in SCHEMA_VERSION = 80 | ||||
- The event_txn_id_device_id is always written to for new events. | - The event_txn_id_device_id is always written to for new events. | ||||
@@ -14,7 +14,7 @@ | |||||
*/ | */ | ||||
-- Start a background job to cleanup extremities that were incorrectly added | -- Start a background job to cleanup extremities that were incorrectly added | ||||
-- by bug https://github.com/matrix-org/synapse/issues/5269. | |||||
INSERT INTO background_updates (update_name, progress_json) VALUES | INSERT INTO background_updates (update_name, progress_json) VALUES | ||||
('delete_soft_failed_extremities', '{}'); | ('delete_soft_failed_extremities', '{}'); | ||||
@@ -13,6 +13,7 @@ | |||||
* limitations under the License. | * limitations under the License. | ||||
*/ | */ | ||||
-- Now that https://github.com/matrix-org/synapse/pull/6232 is a thing, we can | |||||
-- remove old rooms from the directory. | |||||
INSERT INTO background_updates (update_name, progress_json) VALUES | INSERT INTO background_updates (update_name, progress_json) VALUES | ||||
('remove_tombstoned_rooms_from_directory', '{}'); | ('remove_tombstoned_rooms_from_directory', '{}'); |
@@ -13,7 +13,8 @@ | |||||
* limitations under the License. | * limitations under the License. | ||||
*/ | */ | ||||
-- Clean up left over rows from bug https://github.com/matrix-org/synapse/issues/11833, | |||||
-- which was fixed in https://github.com/matrix-org/synapse/pull/12770. | |||||
DELETE FROM federation_inbound_events_staging WHERE room_id not in ( | DELETE FROM federation_inbound_events_staging WHERE room_id not in ( | ||||
SELECT room_id FROM rooms | SELECT room_id FROM rooms | ||||
); | ); |
@@ -189,7 +189,8 @@ def check_requirements(extra: Optional[str] = None) -> None: | |||||
errors.append(_not_installed(requirement, extra)) | errors.append(_not_installed(requirement, extra)) | ||||
else: | else: | ||||
if dist.version is None: | if dist.version is None: | ||||
# This shouldn't happen---it suggests a borked virtualenv. (See #12223) | |||||
# This shouldn't happen---it suggests a borked virtualenv. (See | |||||
# https://github.com/matrix-org/synapse/issues/12223) | |||||
# Try to give a vaguely helpful error message anyway. | # Try to give a vaguely helpful error message anyway. | ||||
# Type-ignore: the annotations don't reflect reality: see | # Type-ignore: the annotations don't reflect reality: see | ||||
# https://github.com/python/typeshed/issues/7513 | # https://github.com/python/typeshed/issues/7513 | ||||
@@ -29,5 +29,5 @@ We can't peek into rooms with joined history_visibility | |||||
Local users can peek by room alias | Local users can peek by room alias | ||||
Peeked rooms only turn up in the sync for the device who peeked them | Peeked rooms only turn up in the sync for the device who peeked them | ||||
# Validation needs to be added to Synapse: #10554 | |||||
# Validation needs to be added to Synapse: https://github.com/matrix-org/synapse/issues/10554 | |||||
Rejects invalid device keys | Rejects invalid device keys |
@@ -478,7 +478,7 @@ class FederationSenderDevicesTestCases(HomeserverTestCase): | |||||
# expect two edus, in one or two transactions. We don't know what order the | # expect two edus, in one or two transactions. We don't know what order the | ||||
# devices will be updated. | # devices will be updated. | ||||
self.assertEqual(len(self.edus), 2) | self.assertEqual(len(self.edus), 2) | ||||
stream_id = None # FIXME: there is a discontinuity in the stream IDs: see #7142 | |||||
stream_id = None # FIXME: there is a discontinuity in the stream IDs: see https://github.com/matrix-org/synapse/issues/7142 | |||||
for edu in self.edus: | for edu in self.edus: | ||||
self.assertEqual(edu["edu_type"], EduTypes.DEVICE_LIST_UPDATE) | self.assertEqual(edu["edu_type"], EduTypes.DEVICE_LIST_UPDATE) | ||||
c = edu["content"] | c = edu["content"] | ||||
@@ -112,7 +112,7 @@ class FederationTestCase(unittest.FederatingHomeserverTestCase): | |||||
""" | """ | ||||
Check that we store the state group correctly for rejected non-state events. | Check that we store the state group correctly for rejected non-state events. | ||||
Regression test for #6289. | |||||
Regression test for https://github.com/matrix-org/synapse/issues/6289. | |||||
""" | """ | ||||
OTHER_SERVER = "otherserver" | OTHER_SERVER = "otherserver" | ||||
OTHER_USER = "@otheruser:" + OTHER_SERVER | OTHER_USER = "@otheruser:" + OTHER_SERVER | ||||
@@ -165,7 +165,7 @@ class FederationTestCase(unittest.FederatingHomeserverTestCase): | |||||
""" | """ | ||||
Check that we store the state group correctly for rejected state events. | Check that we store the state group correctly for rejected state events. | ||||
Regression test for #6289. | |||||
Regression test for https://github.com/matrix-org/synapse/issues/6289. | |||||
""" | """ | ||||
OTHER_SERVER = "otherserver" | OTHER_SERVER = "otherserver" | ||||
OTHER_USER = "@otheruser:" + OTHER_SERVER | OTHER_USER = "@otheruser:" + OTHER_SERVER | ||||
@@ -222,7 +222,7 @@ class FederationTestCase(unittest.FederatingHomeserverTestCase): | |||||
of backwards extremities(the magic number is more than 5), | of backwards extremities(the magic number is more than 5), | ||||
no errors are thrown. | no errors are thrown. | ||||
Regression test, see #11027 | |||||
Regression test, see https://github.com/matrix-org/synapse/pull/11027 | |||||
""" | """ | ||||
# create the room | # create the room | ||||
user_id = self.register_user("kermit", "test") | user_id = self.register_user("kermit", "test") | ||||
@@ -368,7 +368,8 @@ class FederationClientTests(HomeserverTestCase): | |||||
""" | """ | ||||
If a connection is made to a client but the client rejects it due to | If a connection is made to a client but the client rejects it due to | ||||
requiring a trailing slash. We need to retry the request with a | requiring a trailing slash. We need to retry the request with a | ||||
trailing slash. Workaround for Synapse <= v0.99.3, explained in #3622. | |||||
trailing slash. Workaround for Synapse <= v0.99.3, explained in | |||||
https://github.com/matrix-org/synapse/issues/3622. | |||||
""" | """ | ||||
d = defer.ensureDeferred( | d = defer.ensureDeferred( | ||||
self.cl.get_json("testserv:8008", "foo/bar", try_trailing_slash_on_400=True) | self.cl.get_json("testserv:8008", "foo/bar", try_trailing_slash_on_400=True) | ||||
@@ -92,7 +92,7 @@ class TestBulkPushRuleEvaluator(HomeserverTestCase): | |||||
- the bad power level value for "room", before JSON serisalistion | - the bad power level value for "room", before JSON serisalistion | ||||
- whether Bob should expect the message to be highlighted | - whether Bob should expect the message to be highlighted | ||||
Reproduces #14060. | |||||
Reproduces https://github.com/matrix-org/synapse/issues/14060. | |||||
A lack of validation: the gift that keeps on giving. | A lack of validation: the gift that keeps on giving. | ||||
""" | """ | ||||
@@ -62,7 +62,7 @@ class ToDeviceStreamTestCase(BaseStreamTestCase): | |||||
) | ) | ||||
# add one more message, for user2 this time | # add one more message, for user2 this time | ||||
# this message would be dropped before fixing #15335 | |||||
# this message would be dropped before fixing https://github.com/matrix-org/synapse/issues/15335 | |||||
msg["content"] = {"device": {}} | msg["content"] = {"device": {}} | ||||
messages = {user2: {"device": msg}} | messages = {user2: {"device": msg}} | ||||
@@ -1478,7 +1478,7 @@ class DeactivateAccountTestCase(unittest.HomeserverTestCase): | |||||
def test_deactivate_user_erase_true_avatar_nonnull_but_empty(self) -> None: | def test_deactivate_user_erase_true_avatar_nonnull_but_empty(self) -> None: | ||||
"""Check we can erase a user whose avatar is the empty string. | """Check we can erase a user whose avatar is the empty string. | ||||
Reproduces #12257. | |||||
Reproduces https://github.com/matrix-org/synapse/issues/12257. | |||||
""" | """ | ||||
# Patch `self.other_user` to have an empty string as their avatar. | # Patch `self.other_user` to have an empty string as their avatar. | ||||
self.get_success( | self.get_success( | ||||
@@ -64,7 +64,7 @@ class EventStreamPermissionsTestCase(unittest.HomeserverTestCase): | |||||
# 403. However, since the v1 spec no longer exists and the v1 | # 403. However, since the v1 spec no longer exists and the v1 | ||||
# implementation is now part of the r0 implementation, the newer | # implementation is now part of the r0 implementation, the newer | ||||
# behaviour is used instead to be consistent with the r0 spec. | # behaviour is used instead to be consistent with the r0 spec. | ||||
# see issue #2602 | |||||
# see issue https://github.com/matrix-org/synapse/issues/2602 | |||||
channel = self.make_request( | channel = self.make_request( | ||||
"GET", "/events?access_token=%s" % ("invalid" + self.token,) | "GET", "/events?access_token=%s" % ("invalid" + self.token,) | ||||
) | ) | ||||
@@ -170,7 +170,8 @@ class ProfileTestCase(unittest.HomeserverTestCase): | |||||
) | ) | ||||
self.assertEqual(channel.code, 200, channel.result) | self.assertEqual(channel.code, 200, channel.result) | ||||
# FIXME: If a user has no displayname set, Synapse returns 200 and omits a | # FIXME: If a user has no displayname set, Synapse returns 200 and omits a | ||||
# displayname from the response. This contradicts the spec, see #13137. | |||||
# displayname from the response. This contradicts the spec, see | |||||
# https://github.com/matrix-org/synapse/issues/13137. | |||||
return channel.json_body.get("displayname") | return channel.json_body.get("displayname") | ||||
def _get_avatar_url(self, name: Optional[str] = None) -> Optional[str]: | def _get_avatar_url(self, name: Optional[str] = None) -> Optional[str]: | ||||
@@ -179,7 +180,8 @@ class ProfileTestCase(unittest.HomeserverTestCase): | |||||
) | ) | ||||
self.assertEqual(channel.code, 200, channel.result) | self.assertEqual(channel.code, 200, channel.result) | ||||
# FIXME: If a user has no avatar set, Synapse returns 200 and omits an | # FIXME: If a user has no avatar set, Synapse returns 200 and omits an | ||||
# avatar_url from the response. This contradicts the spec, see #13137. | |||||
# avatar_url from the response. This contradicts the spec, see | |||||
# https://github.com/matrix-org/synapse/issues/13137. | |||||
return channel.json_body.get("avatar_url") | return channel.json_body.get("avatar_url") | ||||
@unittest.override_config({"max_avatar_size": 50}) | @unittest.override_config({"max_avatar_size": 50}) | ||||
@@ -888,7 +888,8 @@ class RoomsCreateTestCase(RoomBase): | |||||
) | ) | ||||
def test_room_creation_ratelimiting(self) -> None: | def test_room_creation_ratelimiting(self) -> None: | ||||
""" | """ | ||||
Regression test for #14312, where ratelimiting was made too strict. | |||||
Regression test for https://github.com/matrix-org/synapse/issues/14312, | |||||
where ratelimiting was made too strict. | |||||
Clients should be able to create 10 rooms in a row | Clients should be able to create 10 rooms in a row | ||||
without hitting rate limits, using default rate limit config. | without hitting rate limits, using default rate limit config. | ||||
(We override rate limiting config back to its default value.) | (We override rate limiting config back to its default value.) | ||||
@@ -642,7 +642,7 @@ class SyncCacheTestCase(unittest.HomeserverTestCase): | |||||
def test_noop_sync_does_not_tightloop(self) -> None: | def test_noop_sync_does_not_tightloop(self) -> None: | ||||
"""If the sync times out, we shouldn't cache the result | """If the sync times out, we shouldn't cache the result | ||||
Essentially a regression test for #8518. | |||||
Essentially a regression test for https://github.com/matrix-org/synapse/issues/8518. | |||||
""" | """ | ||||
self.user_id = self.register_user("kermit", "monkey") | self.user_id = self.register_user("kermit", "monkey") | ||||
self.tok = self.login("kermit", "monkey") | self.tok = self.login("kermit", "monkey") | ||||
@@ -66,9 +66,9 @@ class LockTestCase(unittest.HomeserverTestCase): | |||||
# Run the tasks to completion. | # Run the tasks to completion. | ||||
# To work around `Linearizer`s using a different reactor to sleep when | # To work around `Linearizer`s using a different reactor to sleep when | ||||
# contended (#12841), we call `runUntilCurrent` on | |||||
# `twisted.internet.reactor`, which is a different reactor to that used | |||||
# by the homeserver. | |||||
# contended (https://github.com/matrix-org/synapse/issues/12841), we call | |||||
# `runUntilCurrent` on `twisted.internet.reactor`, which is a different | |||||
# reactor to that used by the homeserver. | |||||
assert isinstance(reactor, ReactorBase) | assert isinstance(reactor, ReactorBase) | ||||
self.get_success(task1) | self.get_success(task1) | ||||
reactor.runUntilCurrent() | reactor.runUntilCurrent() | ||||
@@ -217,9 +217,9 @@ class ReadWriteLockTestCase(unittest.HomeserverTestCase): | |||||
# Run the tasks to completion. | # Run the tasks to completion. | ||||
# To work around `Linearizer`s using a different reactor to sleep when | # To work around `Linearizer`s using a different reactor to sleep when | ||||
# contended (#12841), we call `runUntilCurrent` on | |||||
# `twisted.internet.reactor`, which is a different reactor to that used | |||||
# by the homeserver. | |||||
# contended (https://github.com/matrix-org/synapse/issues/12841), we call | |||||
# `runUntilCurrent` on `twisted.internet.reactor`, which is a different | |||||
# reactor to that used by the homeserver. | |||||
assert isinstance(reactor, ReactorBase) | assert isinstance(reactor, ReactorBase) | ||||
self.get_success(task1) | self.get_success(task1) | ||||
reactor.runUntilCurrent() | reactor.runUntilCurrent() | ||||
@@ -269,9 +269,9 @@ class ReadWriteLockTestCase(unittest.HomeserverTestCase): | |||||
# Run the tasks to completion. | # Run the tasks to completion. | ||||
# To work around `Linearizer`s using a different reactor to sleep when | # To work around `Linearizer`s using a different reactor to sleep when | ||||
# contended (#12841), we call `runUntilCurrent` on | |||||
# `twisted.internet.reactor`, which is a different reactor to that used | |||||
# by the homeserver. | |||||
# contended (https://github.com/matrix-org/synapse/issues/12841), we call | |||||
# `runUntilCurrent` on `twisted.internet.reactor`, which is a different | |||||
# reactor to that used by the homeserver. | |||||
assert isinstance(reactor, ReactorBase) | assert isinstance(reactor, ReactorBase) | ||||
self.get_success(task1) | self.get_success(task1) | ||||
reactor.runUntilCurrent() | reactor.runUntilCurrent() | ||||
@@ -214,7 +214,8 @@ class CallbacksTestCase(unittest.HomeserverTestCase): | |||||
after_callback, exception_callback = self._run_interaction(_test_txn) | after_callback, exception_callback = self._run_interaction(_test_txn) | ||||
# Calling both `after_callback`s when the first attempt failed is rather | # Calling both `after_callback`s when the first attempt failed is rather | ||||
# surprising (#12184). Let's document the behaviour in a test. | |||||
# surprising (https://github.com/matrix-org/synapse/issues/12184). | |||||
# Let's document the behaviour in a test. | |||||
after_callback.assert_has_calls( | after_callback.assert_has_calls( | ||||
[ | [ | ||||
call(123, 456, extra=789), | call(123, 456, extra=789), | ||||
@@ -293,7 +294,7 @@ class PostgresReplicaIdentityTestCase(unittest.HomeserverTestCase): | |||||
def test_all_tables_have_postgres_replica_identity(self) -> None: | def test_all_tables_have_postgres_replica_identity(self) -> None: | ||||
""" | """ | ||||
Tests that all tables have a Postgres REPLICA IDENTITY. | Tests that all tables have a Postgres REPLICA IDENTITY. | ||||
(See #16224). | |||||
(See https://github.com/matrix-org/synapse/issues/16224). | |||||
Tables with a PRIMARY KEY have an implied REPLICA IDENTITY and are fine. | Tables with a PRIMARY KEY have an implied REPLICA IDENTITY and are fine. | ||||
Other tables need them to be set with `ALTER TABLE`. | Other tables need them to be set with `ALTER TABLE`. | ||||
@@ -1060,7 +1060,7 @@ class EventFederationWorkerStoreTestCase(tests.unittest.HomeserverTestCase): | |||||
self, | self, | ||||
) -> None: | ) -> None: | ||||
""" | """ | ||||
A test that reproduces #13929 (Postgres only). | |||||
A test that reproduces https://github.com/matrix-org/synapse/issues/13929 (Postgres only). | |||||
Test to make sure we can still get backfill points after many failed pull | Test to make sure we can still get backfill points after many failed pull | ||||
attempts that cause us to backoff to the limit. Even if the backoff formula | attempts that cause us to backoff to the limit. Even if the backoff formula | ||||
@@ -93,7 +93,7 @@ class EventSearchInsertionTest(HomeserverTestCase): | |||||
both strings and integers. When using Postgres, integers are automatically | both strings and integers. When using Postgres, integers are automatically | ||||
converted to strings. | converted to strings. | ||||
Regression test for #11918. | |||||
Regression test for https://github.com/matrix-org/synapse/issues/11918. | |||||
""" | """ | ||||
store = self.hs.get_datastores().main | store = self.hs.get_datastores().main | ||||
@@ -89,7 +89,8 @@ class TestDependencyChecker(TestCase): | |||||
def test_version_reported_as_none(self) -> None: | def test_version_reported_as_none(self) -> None: | ||||
"""Complain if importlib.metadata.version() returns None. | """Complain if importlib.metadata.version() returns None. | ||||
This shouldn't normally happen, but it was seen in the wild (#12223). | |||||
This shouldn't normally happen, but it was seen in the wild | |||||
(https://github.com/matrix-org/synapse/issues/12223). | |||||
""" | """ | ||||
with patch( | with patch( | ||||
"synapse.util.check_dependencies.metadata.requires", | "synapse.util.check_dependencies.metadata.requires", | ||||
@@ -148,7 +149,7 @@ class TestDependencyChecker(TestCase): | |||||
""" | """ | ||||
Tests that release candidates count as far as satisfying a dependency | Tests that release candidates count as far as satisfying a dependency | ||||
is concerned. | is concerned. | ||||
(Regression test, see #12176.) | |||||
(Regression test, see https://github.com/matrix-org/synapse/issues/12176.) | |||||
""" | """ | ||||
with patch( | with patch( | ||||
"synapse.util.check_dependencies.metadata.requires", | "synapse.util.check_dependencies.metadata.requires", | ||||
@@ -162,7 +163,10 @@ class TestDependencyChecker(TestCase): | |||||
check_requirements() | check_requirements() | ||||
def test_setuptools_rust_ignored(self) -> None: | def test_setuptools_rust_ignored(self) -> None: | ||||
"""Test a workaround for a `poetry build` problem. Reproduces #13926.""" | |||||
""" | |||||
Test a workaround for a `poetry build` problem. Reproduces | |||||
https://github.com/matrix-org/synapse/issues/13926. | |||||
""" | |||||
with patch( | with patch( | ||||
"synapse.util.check_dependencies.metadata.requires", | "synapse.util.check_dependencies.metadata.requires", | ||||
return_value=["setuptools_rust >= 1.3"], | return_value=["setuptools_rust >= 1.3"], | ||||