1
0

Store state groups when event contexts are created

This commit is contained in:
Erik Johnston
2018-01-11 16:01:41 +00:00
parent 3c62aac038
commit bad2b36ee0
4 changed files with 43 additions and 16 deletions

View File

@@ -1829,7 +1829,7 @@ class FederationHandler(BaseHandler):
different_auth = event_auth_events - current_state
self._update_context_for_auth_events(
context, auth_events, event_key,
event, context, auth_events, event_key,
)
if different_auth and not event.internal_metadata.is_outlier():
@@ -1911,7 +1911,7 @@ class FederationHandler(BaseHandler):
# TODO.
self._update_context_for_auth_events(
context, auth_events, event_key,
event, context, auth_events, event_key,
)
try:
@@ -1920,7 +1920,7 @@ class FederationHandler(BaseHandler):
logger.warn("Failed auth resolution for %r because %s", event, e)
raise e
def _update_context_for_auth_events(self, context, auth_events,
def _update_context_for_auth_events(self, event, context, auth_events,
event_key):
"""Update the state_ids in an event context after auth event resolution
@@ -1947,7 +1947,13 @@ class FederationHandler(BaseHandler):
context.prev_state_ids.update({
k: a.event_id for k, a in auth_events.iteritems()
})
context.state_group = self.store.get_next_state_group()
context.state_group = yield self.store.store_state_group(
event.event_id, event.room_id,
context.prev_group,
context.delta_ids,
context.current_state_ids,
)
@defer.inlineCallbacks
def construct_auth_difference(self, local_auth, remote_auth):

View File

@@ -208,7 +208,12 @@ class StateHandler(object):
context.current_state_ids = {}
context.prev_state_ids = {}
context.prev_state_events = []
context.state_group = self.store.get_next_state_group()
context.state_group = yield self.store.store_state_group(
event.event_id, event.room_id,
context.prev_group,
context.delta_ids,
context.current_state_ids,
)
defer.returnValue(context)
if old_state:
@@ -216,7 +221,6 @@ class StateHandler(object):
context.prev_state_ids = {
(s.type, s.state_key): s.event_id for s in old_state
}
context.state_group = self.store.get_next_state_group()
if event.is_state():
key = (event.type, event.state_key)
@@ -230,6 +234,14 @@ class StateHandler(object):
context.current_state_ids = context.prev_state_ids
context.prev_state_events = []
context.state_group = yield self.store.store_state_group(
event.event_id, event.room_id,
context.prev_group,
context.delta_ids,
context.current_state_ids,
)
defer.returnValue(context)
logger.debug("calling resolve_state_groups from compute_event_context")
@@ -242,8 +254,6 @@ class StateHandler(object):
context = EventContext()
context.prev_state_ids = curr_state
if event.is_state():
context.state_group = self.store.get_next_state_group()
key = (event.type, event.state_key)
if key in context.prev_state_ids:
replaces = context.prev_state_ids[key]
@@ -261,16 +271,31 @@ class StateHandler(object):
context.prev_group = entry.prev_group
context.delta_ids = dict(entry.delta_ids)
context.delta_ids[key] = event.event_id
else:
if entry.state_group is None:
entry.state_group = self.store.get_next_state_group()
entry.state_id = entry.state_group
context.state_group = yield self.store.store_state_group(
event.event_id, event.room_id,
context.prev_group,
context.delta_ids,
context.current_state_ids,
)
else:
context.state_group = entry.state_group
context.current_state_ids = context.prev_state_ids
context.prev_group = entry.prev_group
context.delta_ids = entry.delta_ids
if entry.state_group is None:
entry.state_group = yield self.store.store_state_group(
event.event_id, event.room_id,
context.prev_group,
context.delta_ids,
context.current_state_ids,
)
entry.state_id = entry.state_group
context.state_group = entry.state_group
context.prev_state_events = []
defer.returnValue(context)

View File

@@ -124,7 +124,6 @@ class DataStore(RoomMemberStore, RoomStore,
)
self._transaction_id_gen = IdGenerator(db_conn, "sent_transactions", "id")
self._state_groups_id_gen = IdGenerator(db_conn, "state_groups", "id")
self._access_tokens_id_gen = IdGenerator(db_conn, "access_tokens", "id")
self._event_reports_id_gen = IdGenerator(db_conn, "event_reports", "id")
self._push_rule_id_gen = IdGenerator(db_conn, "push_rules", "id")

View File

@@ -766,9 +766,6 @@ class StateStore(StateGroupReadStore, BackgroundUpdateStore):
return count
def get_next_state_group(self):
return self._state_groups_id_gen.get_next()
@defer.inlineCallbacks
def _background_deduplicate_state(self, progress, batch_size):
"""This background update will slowly deduplicate state by reencoding