Change default room version to 11 (MSC4239) (#18680)

Fix #18530

Complement test changes: https://github.com/matrix-org/complement/pull/858

SyTest changes: https://github.com/matrix-org/sytest/pull/1422
This commit is contained in:
夜坂雅 authored and GitHub committed 2026-07-16 12:33:13 -05:00
1 parent 837d687977
commit 5ed830b3b4
10 files changed
+57 -53

No files matched your search

+1
View File
@@ -0,0 +1 @@
Change default room version to 11, implementing [MSC4239](https://github.com/matrix-org/matrix-spec-proposals/pull/4239) as part of Matrix v1.14.
@@ -363,8 +363,9 @@ Known room versions are listed [here](https://spec.matrix.org/latest/rooms/#comp
For example, for room version 1, `default_room_version` should be set to "1".
_Changed in Synapse 1.76:_ the default version room version was increased from [9](https://spec.matrix.org/v1.5/rooms/v9/) to [10](https://spec.matrix.org/v1.5/rooms/v10/).
_Changed in Synapse 1.157:_ the default version room version was increased from [10](https://spec.matrix.org/v1.12/rooms/v10/) to [11](https://spec.matrix.org/v1.12/rooms/v11/).
Defaults to `"10"`.
Defaults to `"11"`.
Example configuration:
```yaml
+5 -1
View File
@@ -309,7 +309,11 @@ properties:
_Changed in Synapse 1.76:_ the default version room version was increased
from [9](https://spec.matrix.org/v1.5/rooms/v9/) to
[10](https://spec.matrix.org/v1.5/rooms/v10/).
default: "10"
_Changed in Synapse 1.157:_ the default version room version was increased
from [10](https://spec.matrix.org/v1.12/rooms/v10/) to
[11](https://spec.matrix.org/v1.12/rooms/v11/).
default: "11"
examples:
- "8"
gc_thresholds:
+1 -1
View File
@@ -176,7 +176,7 @@ DEFAULT_IP_RANGE_BLOCKLIST = [
"fec0::/10",
]
DEFAULT_ROOM_VERSION = "10"
DEFAULT_ROOM_VERSION = "11"
# Defaults for the presence state machine timers, in milliseconds. Overridden
# by the corresponding options in the `presence` config section.
@@ -189,7 +189,7 @@ class OutOfBandMembershipTests(unittest.FederatingHomeserverTestCase):
# Create a remote room
room_creator_user_id = f"@remote-user:{self.OTHER_SERVER_NAME}"
remote_room_id = f"!remote-room:{self.OTHER_SERVER_NAME}"
room_version = RoomVersions.V10
room_version = RoomVersions.V11
room_create_event = make_test_event(
self.add_hashes_and_signatures_from_other_server(
@@ -201,9 +201,6 @@ class OutOfBandMembershipTests(unittest.FederatingHomeserverTestCase):
"type": EventTypes.Create,
"state_key": "",
"content": {
# The `ROOM_CREATOR` field could be removed if we used a room
# version > 10 (in favor of relying on `sender`)
EventContentFields.ROOM_CREATOR: room_creator_user_id,
EventContentFields.ROOM_VERSION: room_version.identifier,
},
"auth_events": [],
-19
View File
@@ -743,7 +743,6 @@ class ModuleApiTestCase(BaseModuleApiTestCase):
# Now do the happy path.
user_id = self.register_user("user", "password")
access_token = self.login(user_id, "password")
room_id, room_alias = self.get_success(
self.module_api.create_room(
@@ -751,15 +750,6 @@ class ModuleApiTestCase(BaseModuleApiTestCase):
)
)
# Check room creator.
channel = self.make_request(
"GET",
f"/_matrix/client/v3/rooms/{room_id}/state/m.room.create",
access_token=access_token,
)
self.assertEqual(channel.code, 200, channel.result)
self.assertEqual(channel.json_body["creator"], user_id)
# Check room alias.
self.assertEqual(room_alias, f"#foo-bar:{self.module_api.server_name}")
@@ -768,15 +758,6 @@ class ModuleApiTestCase(BaseModuleApiTestCase):
self.module_api.create_room(user_id=user_id, config={}, ratelimit=False)
)
# Check room creator.
channel = self.make_request(
"GET",
f"/_matrix/client/v3/rooms/{room_id}/state/m.room.create",
access_token=access_token,
)
self.assertEqual(channel.code, 200, channel.result)
self.assertEqual(channel.json_body["creator"], user_id)
# Check room alias.
self.assertIsNone(room_alias)
@@ -143,7 +143,7 @@ class SlidingSyncRoomsInvitesTestCase(SlidingSyncBase):
response_body["rooms"][room_id1]["invite_state"],
[
{
"content": {"creator": user2_id, "room_version": "10"},
"content": {"room_version": "11"},
"sender": user2_id,
"state_key": "",
"type": "m.room.create",
@@ -253,7 +253,7 @@ class SlidingSyncRoomsInvitesTestCase(SlidingSyncBase):
response_body["rooms"][room_id1]["invite_state"],
[
{
"content": {"creator": user2_id, "room_version": "10"},
"content": {"room_version": "11"},
"sender": user2_id,
"state_key": "",
"type": "m.room.create",
@@ -374,7 +374,7 @@ class SlidingSyncRoomsInvitesTestCase(SlidingSyncBase):
response_body["rooms"][room_id1]["invite_state"],
[
{
"content": {"creator": user2_id, "room_version": "10"},
"content": {"room_version": "11"},
"sender": user2_id,
"state_key": "",
"type": "m.room.create",
@@ -500,7 +500,7 @@ class SlidingSyncRoomsInvitesTestCase(SlidingSyncBase):
response_body["rooms"][room_id1]["invite_state"],
[
{
"content": {"creator": user2_id, "room_version": "10"},
"content": {"room_version": "11"},
"sender": user2_id,
"state_key": "",
"type": "m.room.create",
+6 -1
View File
@@ -63,7 +63,12 @@ class RedactionsTestCase(HomeserverTestCase):
# Create a room
self.room_id = self.helper.create_room_as(
self.mod_user_id, tok=self.mod_access_token
self.mod_user_id,
tok=self.mod_access_token,
# FIXME: Using room version 10 here as using later version requires
# https://github.com/element-hq/synapse/pull/19782
# Remove the override when the above PR is merged.
room_version="10",
)
# Invite the other user
+19 -19
View File
@@ -4916,7 +4916,7 @@ class MSC4293RedactOnBanKickTestCase(unittest.FederatingHomeserverTestCase):
bad_user = "@remote_bad_user:" + self.OTHER_SERVER_NAME
channel = self.make_signed_federation_request(
"GET",
f"/_matrix/federation/v1/make_join/{self.room_id}/{bad_user}?ver=10",
f"/_matrix/federation/v1/make_join/{self.room_id}/{bad_user}?ver=11",
)
self.assertEqual(channel.code, HTTPStatus.OK, channel.json_body)
join_result = channel.json_body
@@ -4924,7 +4924,7 @@ class MSC4293RedactOnBanKickTestCase(unittest.FederatingHomeserverTestCase):
join_event_dict = join_result["event"]
self.add_hashes_and_signatures_from_other_server(
join_event_dict,
RoomVersions.V10,
RoomVersions.V11,
)
channel = self.make_signed_federation_request(
"PUT",
@@ -4959,7 +4959,7 @@ class MSC4293RedactOnBanKickTestCase(unittest.FederatingHomeserverTestCase):
"prev_events": auth_ids,
}
),
room_version=RoomVersions.V10,
room_version=RoomVersions.V11,
)
self.get_success(
@@ -5010,7 +5010,7 @@ class MSC4293RedactOnBanKickTestCase(unittest.FederatingHomeserverTestCase):
"prev_events": auth_ids,
}
),
room_version=RoomVersions.V10,
room_version=RoomVersions.V11,
)
self.get_success(
@@ -5035,7 +5035,7 @@ class MSC4293RedactOnBanKickTestCase(unittest.FederatingHomeserverTestCase):
bad_user = "@remote_bad_user:" + self.OTHER_SERVER_NAME
channel = self.make_signed_federation_request(
"GET",
f"/_matrix/federation/v1/make_join/{self.room_id}/{bad_user}?ver=10",
f"/_matrix/federation/v1/make_join/{self.room_id}/{bad_user}?ver=11",
)
self.assertEqual(channel.code, HTTPStatus.OK, channel.json_body)
join_result = channel.json_body
@@ -5043,7 +5043,7 @@ class MSC4293RedactOnBanKickTestCase(unittest.FederatingHomeserverTestCase):
join_event_dict = join_result["event"]
self.add_hashes_and_signatures_from_other_server(
join_event_dict,
RoomVersions.V10,
RoomVersions.V11,
)
channel = self.make_signed_federation_request(
"PUT",
@@ -5078,7 +5078,7 @@ class MSC4293RedactOnBanKickTestCase(unittest.FederatingHomeserverTestCase):
"prev_events": auth_ids,
}
),
room_version=RoomVersions.V10,
room_version=RoomVersions.V11,
)
self.get_success(
@@ -5119,7 +5119,7 @@ class MSC4293RedactOnBanKickTestCase(unittest.FederatingHomeserverTestCase):
# user should be able to join again
channel = self.make_signed_federation_request(
"GET",
f"/_matrix/federation/v1/make_join/{self.room_id}/{bad_user}?ver=10",
f"/_matrix/federation/v1/make_join/{self.room_id}/{bad_user}?ver=11",
)
self.assertEqual(channel.code, HTTPStatus.OK, channel.json_body)
join_result = channel.json_body
@@ -5167,7 +5167,7 @@ class MSC4293RedactOnBanKickTestCase(unittest.FederatingHomeserverTestCase):
"prev_events": auth_ids,
}
),
room_version=RoomVersions.V10,
room_version=RoomVersions.V11,
)
self.get_success(
@@ -5281,7 +5281,7 @@ class MSC4293RedactOnBanKickTestCase(unittest.FederatingHomeserverTestCase):
bad_user = "@remote_bad_user:" + self.OTHER_SERVER_NAME
channel = self.make_signed_federation_request(
"GET",
f"/_matrix/federation/v1/make_join/{self.room_id}/{bad_user}?ver=10",
f"/_matrix/federation/v1/make_join/{self.room_id}/{bad_user}?ver=11",
)
self.assertEqual(channel.code, HTTPStatus.OK, channel.json_body)
join_result = channel.json_body
@@ -5289,7 +5289,7 @@ class MSC4293RedactOnBanKickTestCase(unittest.FederatingHomeserverTestCase):
join_event_dict = join_result["event"]
self.add_hashes_and_signatures_from_other_server(
join_event_dict,
RoomVersions.V10,
RoomVersions.V11,
)
channel = self.make_signed_federation_request(
"PUT",
@@ -5324,7 +5324,7 @@ class MSC4293RedactOnBanKickTestCase(unittest.FederatingHomeserverTestCase):
"prev_events": auth_ids,
}
),
room_version=RoomVersions.V10,
room_version=RoomVersions.V11,
)
self.get_success(
@@ -5375,7 +5375,7 @@ class MSC4293RedactOnBanKickTestCase(unittest.FederatingHomeserverTestCase):
"prev_events": auth_ids,
}
),
room_version=RoomVersions.V10,
room_version=RoomVersions.V11,
)
self.get_success(
@@ -5397,7 +5397,7 @@ class MSC4293RedactOnBanKickTestCase(unittest.FederatingHomeserverTestCase):
bad_user = "@remote_bad_user:" + self.OTHER_SERVER_NAME
channel = self.make_signed_federation_request(
"GET",
f"/_matrix/federation/v1/make_join/{self.room_id}/{bad_user}?ver=10",
f"/_matrix/federation/v1/make_join/{self.room_id}/{bad_user}?ver=11",
)
self.assertEqual(channel.code, HTTPStatus.OK, channel.json_body)
join_result = channel.json_body
@@ -5405,7 +5405,7 @@ class MSC4293RedactOnBanKickTestCase(unittest.FederatingHomeserverTestCase):
join_event_dict = join_result["event"]
self.add_hashes_and_signatures_from_other_server(
join_event_dict,
RoomVersions.V10,
RoomVersions.V11,
)
channel = self.make_signed_federation_request(
"PUT",
@@ -5440,7 +5440,7 @@ class MSC4293RedactOnBanKickTestCase(unittest.FederatingHomeserverTestCase):
"prev_events": auth_ids,
}
),
room_version=RoomVersions.V10,
room_version=RoomVersions.V11,
)
self.get_success(
@@ -5476,7 +5476,7 @@ class MSC4293RedactOnBanKickTestCase(unittest.FederatingHomeserverTestCase):
# user re-joins after kick
channel = self.make_signed_federation_request(
"GET",
f"/_matrix/federation/v1/make_join/{self.room_id}/{bad_user}?ver=10",
f"/_matrix/federation/v1/make_join/{self.room_id}/{bad_user}?ver=11",
)
self.assertEqual(channel.code, HTTPStatus.OK, channel.json_body)
join_result = channel.json_body
@@ -5484,7 +5484,7 @@ class MSC4293RedactOnBanKickTestCase(unittest.FederatingHomeserverTestCase):
join_event_dict = join_result["event"]
self.add_hashes_and_signatures_from_other_server(
join_event_dict,
RoomVersions.V10,
RoomVersions.V11,
)
channel = self.make_signed_federation_request(
"PUT",
@@ -5524,7 +5524,7 @@ class MSC4293RedactOnBanKickTestCase(unittest.FederatingHomeserverTestCase):
"prev_events": auth_ids,
}
),
room_version=RoomVersions.V10,
room_version=RoomVersions.V11,
)
self.get_success(
+18 -3
View File
@@ -20,6 +20,7 @@
#
import json
from typing import Optional
from twisted.internet.testing import MemoryReactor
@@ -45,9 +46,13 @@ class RoomBackgroundUpdateStoreTestCase(HomeserverTestCase):
self.user_id = self.register_user("foo", "pass")
self.token = self.login("foo", "pass")
def _generate_room(self) -> str:
def _generate_room(self, room_version: Optional[str] = None) -> str:
"""Create a room and return the room ID."""
return self.helper.create_room_as(self.user_id, tok=self.token)
return self.helper.create_room_as(
self.user_id,
tok=self.token,
room_version=room_version,
)
def run_background_updates(self, update_name: str) -> None:
"""Insert and run the background update."""
@@ -70,7 +75,17 @@ class RoomBackgroundUpdateStoreTestCase(HomeserverTestCase):
"""
# Insert a room without the creator
room_id = self._generate_room()
room_id = self._generate_room(
# Create the room as v10, because the `POPULATE_ROOMS_CREATOR_COLUMN`
# background update assumes that the room `creator` field is available
# in the `m.room.create` event content, which was removed in room
# version 11. That assumption is safe as the background update only
# backfills rooms whose `creator` column is unset, which can only be
# rooms created before Synapse started populating the column at room
# creation time (Synapse 1.43, 2021), all of which predate room version
# 11 (2023).
room_version="10"
)
self.get_success(
self.store.db_pool.simple_update(
table="rooms",