diff options
author | Erik Johnston <erik@matrix.org> | 2015-07-14 10:49:24 +0100 |
---|---|---|
committer | Erik Johnston <erik@matrix.org> | 2015-07-14 10:49:24 +0100 |
commit | baa55fb69e88bc95f9ea603ca9d1cd758cba5187 (patch) | |
tree | 58040d05bde26aa28b128bc8784b1006426f2aea /synapse/storage/state.py | |
parent | Close, but no cigar. (diff) | |
parent | Remove commented out code (diff) | |
download | synapse-baa55fb69e88bc95f9ea603ca9d1cd758cba5187.tar.xz |
Merge pull request #193 from matrix-org/erikj/bulk_persist_event
Add bulk insert events API
Diffstat (limited to 'synapse/storage/state.py')
-rw-r--r-- | synapse/storage/state.py | 36 |
1 files changed, 24 insertions, 12 deletions
diff --git a/synapse/storage/state.py b/synapse/storage/state.py index d7844edee3..47bec65497 100644 --- a/synapse/storage/state.py +++ b/synapse/storage/state.py @@ -100,16 +100,23 @@ class StateStore(SQLBaseStore): ) def _store_state_groups_txn(self, txn, event, context): - if context.current_state is None: - return + return self._store_mult_state_groups_txn(txn, [(event, context)]) - state_events = dict(context.current_state) + def _store_mult_state_groups_txn(self, txn, events_and_contexts): + state_groups = {} + for event, context in events_and_contexts: + if context.current_state is None: + continue - if event.is_state(): - state_events[(event.type, event.state_key)] = event + if context.state_group is not None: + state_groups[event.event_id] = context.state_group + continue + + state_events = dict(context.current_state) + + if event.is_state(): + state_events[(event.type, event.state_key)] = event - state_group = context.state_group - if not state_group: state_group = self._state_groups_id_gen.get_next_txn(txn) self._simple_insert_txn( txn, @@ -135,14 +142,19 @@ class StateStore(SQLBaseStore): for state in state_events.values() ], ) + state_groups[event.event_id] = state_group - self._simple_insert_txn( + self._simple_insert_many_txn( txn, table="event_to_state_groups", - values={ - "state_group": state_group, - "event_id": event.event_id, - }, + values=[ + { + "state_group": state_groups[event.event_id], + "event_id": event.event_id, + } + for event, context in events_and_contexts + if context.current_state is not None + ], ) @defer.inlineCallbacks |