Skip to content
Snippets Groups Projects
Commit d76d8932 authored by Erik Johnston's avatar Erik Johnston
Browse files

Use computed prev event ids

parent aa82cb38
No related branches found
No related tags found
No related merge requests found
...@@ -199,20 +199,25 @@ class BaseHandler(object): ...@@ -199,20 +199,25 @@ class BaseHandler(object):
) )
@defer.inlineCallbacks @defer.inlineCallbacks
def _create_new_client_event(self, builder): def _create_new_client_event(self, builder, prev_event_ids=None):
latest_ret = yield self.store.get_latest_event_ids_and_hashes_in_room( if prev_event_ids:
builder.room_id, prev_events = yield self.store.add_event_hashes(prev_event_ids)
) prev_max_depth = yield self.store.get_max_depth_of_events(prev_event_ids)
depth = prev_max_depth + 1
if latest_ret:
depth = max([d for _, _, d in latest_ret]) + 1
else: else:
depth = 1 latest_ret = yield self.store.get_latest_event_ids_and_hashes_in_room(
builder.room_id,
)
prev_events = [ if latest_ret:
(event_id, prev_hashes) depth = max([d for _, _, d in latest_ret]) + 1
for event_id, prev_hashes, _ in latest_ret else:
] depth = 1
prev_events = [
(event_id, prev_hashes)
for event_id, prev_hashes, _ in latest_ret
]
builder.prev_events = prev_events builder.prev_events = prev_events
builder.depth = depth builder.depth = depth
......
...@@ -176,7 +176,7 @@ class MessageHandler(BaseHandler): ...@@ -176,7 +176,7 @@ class MessageHandler(BaseHandler):
defer.returnValue(chunk) defer.returnValue(chunk)
@defer.inlineCallbacks @defer.inlineCallbacks
def create_event(self, event_dict, token_id=None, txn_id=None): def create_event(self, event_dict, token_id=None, txn_id=None, prev_event_ids=None):
""" """
Given a dict from a client, create a new event. Given a dict from a client, create a new event.
...@@ -187,6 +187,9 @@ class MessageHandler(BaseHandler): ...@@ -187,6 +187,9 @@ class MessageHandler(BaseHandler):
Args: Args:
event_dict (dict): An entire event event_dict (dict): An entire event
token_id (str)
txn_id (str)
prev_event_ids (list): The prev event ids to use when creating the event
Returns: Returns:
Tuple of created event (FrozenEvent), Context Tuple of created event (FrozenEvent), Context
...@@ -225,6 +228,7 @@ class MessageHandler(BaseHandler): ...@@ -225,6 +228,7 @@ class MessageHandler(BaseHandler):
event, context = yield self._create_new_client_event( event, context = yield self._create_new_client_event(
builder=builder, builder=builder,
prev_event_ids=prev_event_ids,
) )
defer.returnValue((event, context)) defer.returnValue((event, context))
......
...@@ -98,6 +98,7 @@ class RoomMemberHandler(BaseHandler): ...@@ -98,6 +98,7 @@ class RoomMemberHandler(BaseHandler):
@defer.inlineCallbacks @defer.inlineCallbacks
def _local_membership_update( def _local_membership_update(
self, requester, target, room_id, membership, self, requester, target, room_id, membership,
prev_event_ids,
txn_id=None, txn_id=None,
ratelimit=True, ratelimit=True,
): ):
...@@ -120,6 +121,7 @@ class RoomMemberHandler(BaseHandler): ...@@ -120,6 +121,7 @@ class RoomMemberHandler(BaseHandler):
}, },
token_id=requester.access_token_id, token_id=requester.access_token_id,
txn_id=txn_id, txn_id=txn_id,
prev_event_ids=prev_event_ids,
) )
yield self.handle_new_client_event( yield self.handle_new_client_event(
...@@ -268,6 +270,7 @@ class RoomMemberHandler(BaseHandler): ...@@ -268,6 +270,7 @@ class RoomMemberHandler(BaseHandler):
membership=effective_membership_state, membership=effective_membership_state,
txn_id=txn_id, txn_id=txn_id,
ratelimit=ratelimit, ratelimit=ratelimit,
prev_event_ids=latest_event_ids,
) )
@defer.inlineCallbacks @defer.inlineCallbacks
......
...@@ -163,6 +163,22 @@ class EventFederationStore(SQLBaseStore): ...@@ -163,6 +163,22 @@ class EventFederationStore(SQLBaseStore):
room_id, room_id,
) )
@defer.inlineCallbacks
def get_max_depth_of_events(self, event_ids):
sql = (
"SELECT MAX(depth) FROM events WHERE event_id IN (%s)"
) % (",".join(["?"] * len(event_ids)),)
rows = yield self._execute(
"get_max_depth_of_events", None,
sql, *event_ids
)
if rows:
defer.returnValue(rows[0][0])
else:
defer.returnValue(1)
def _get_min_depth_interaction(self, txn, room_id): def _get_min_depth_interaction(self, txn, room_id):
min_depth = self._simple_select_one_onecol_txn( min_depth = self._simple_select_one_onecol_txn(
txn, txn,
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment