Update the extremeties tables in a seperate txn

This commit is contained in:
Erik Johnston 2015-08-24 16:04:58 +01:00
parent 457970c724
commit 55ce9f9261
2 changed files with 74 additions and 61 deletions

View file

@ -303,10 +303,13 @@ class EventFederationStore(SQLBaseStore):
], ],
) )
@defer.inlineCallbacks
def _update_extremeties(self, events):
events_by_room = {} events_by_room = {}
for ev in events: for ev in events:
events_by_room.setdefault(ev.room_id, []).append(ev) events_by_room.setdefault(ev.room_id, []).append(ev)
def _update_forwards_txn(txn):
for room_id, room_events in events_by_room.items(): for room_id, room_events in events_by_room.items():
prevs = [ prevs = [
e_id for ev in room_events for e_id, _ in ev.prev_events e_id for ev in room_events for e_id, _ in ev.prev_events
@ -337,6 +340,7 @@ class EventFederationStore(SQLBaseStore):
] ]
) )
def _update_backwards_txn(txn):
query = ( query = (
"INSERT INTO event_backward_extremities (event_id, room_id)" "INSERT INTO event_backward_extremities (event_id, room_id)"
" SELECT ?, ? WHERE NOT EXISTS (" " SELECT ?, ? WHERE NOT EXISTS ("
@ -372,6 +376,9 @@ class EventFederationStore(SQLBaseStore):
self.get_latest_event_ids_in_room.invalidate, (room_id,) self.get_latest_event_ids_in_room.invalidate, (room_id,)
) )
yield self.runInteraction("_update_forwards_txn", _update_forwards_txn)
yield self.runInteraction("_update_backwards_txn", _update_backwards_txn)
def get_backfill_events(self, room_id, event_list, limit): def get_backfill_events(self, room_id, event_list, limit):
"""Get a list of Events for a given topic that occurred before (and """Get a list of Events for a given topic that occurred before (and
including) the events in event_list. Return a list of max size `limit` including) the events in event_list. Return a list of max size `limit`

View file

@ -86,6 +86,10 @@ class EventsStore(SQLBaseStore):
is_new_state=is_new_state, is_new_state=is_new_state,
) )
yield self._update_extremeties([
ev for ev, _ in chunk
])
@defer.inlineCallbacks @defer.inlineCallbacks
@log_function @log_function
def persist_event(self, event, context, backfilled=False, def persist_event(self, event, context, backfilled=False,
@ -120,6 +124,8 @@ class EventsStore(SQLBaseStore):
except _RollbackButIsFineException: except _RollbackButIsFineException:
pass pass
yield self._update_extremeties([event])
max_persisted_id = yield self._stream_id_gen.get_max_token(self) max_persisted_id = yield self._stream_id_gen.get_max_token(self)
defer.returnValue((stream_ordering, max_persisted_id)) defer.returnValue((stream_ordering, max_persisted_id))