Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Copy over non-federatable trait on room upgrade #4530

Merged
merged 6 commits into from Jan 31, 2019
@@ -0,0 +1 @@
Copy over room federation ability on room upgrade.
@@ -263,6 +263,16 @@ def clone_existing_room(
}
}

# Check if old room was non-federatable

# Get old room's create event
old_room_create_event = yield self.store.get_create_event_for_room(old_room_id)

# Check if the create event specified a non-federatable room
if not old_room_create_event.content.get("m.federate", True):
# If so, mark the new room as non-federatable as well
creation_content["m.federate"] = False

initial_state = dict()

# Replicate relevant room events
@@ -24,7 +24,6 @@
from twisted.internet import defer

from synapse.api.constants import EventTypes
from synapse.api.errors import NotFoundError
from synapse.storage._base import SQLBaseStore
from synapse.storage.background_updates import BackgroundUpdateStore
from synapse.storage.engines import PostgresEngine
@@ -428,13 +427,9 @@ def get_room_version(self, room_id):
"""
# for now we do this by looking at the create event. We may want to cache this
# more intelligently in future.
state_ids = yield self.get_current_state_ids(room_id)
create_id = state_ids.get((EventTypes.Create, ""))

if not create_id:
raise NotFoundError("Unknown room %s" % (room_id))

create_event = yield self.get_event(create_id)
# Retrieve the room's create event
create_event = yield self.get_create_event_for_room(room_id)
defer.returnValue(create_event.content.get("room_version", "1"))

@defer.inlineCallbacks
@@ -448,18 +443,32 @@ def get_room_predecessor(self, room_id):
Returns:
Deferred[unicode|None]: predecessor room id
"""
# Retrieve the room's create event
create_event = yield self.get_create_event_for_room(room_id)

# Return predecessor if present
defer.returnValue(create_event.content.get("predecessor", None))

@defer.inlineCallbacks
def get_create_event_for_room(self, room_id):
"""Get the create state event for a room.
Args:
room_id (str)
Returns:
Deferred[EventBase|None]: The room creation event. None if can not be found
"""
state_ids = yield self.get_current_state_ids(room_id)
create_id = state_ids.get((EventTypes.Create, ""))

# If we can't find the create event, assume we've hit a dead end
if not create_id:
defer.returnValue(None)

This comment has been minimized.

Copy link
@richvdh

richvdh Jan 31, 2019

Member

It shouldn't be possible to get here. Suggest you throw the NotFoundEvent (and update the docstring accordingly)


# Retrieve the room's create event
# Retrieve the room's create event and return
create_event = yield self.get_event(create_id)

# Return predecessor if present
defer.returnValue(create_event.content.get("predecessor", None))
defer.returnValue(create_event)

@cached(max_entries=100000, iterable=True)
def get_current_state_ids(self, room_id):
ProTip! Use n and p to navigate between commits in a pull request.
You can’t perform that action at this time.