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

Review comments

parent 9fb96889
No related branches found
No related tags found
No related merge requests found
......@@ -226,7 +226,6 @@ class HomeServer(object):
self.admin_redaction_ratelimiter = Ratelimiter()
self.registration_ratelimiter = Ratelimiter()
self.datastore = None
self.datastores = None
# Other kwargs are explicit dependencies
......@@ -236,8 +235,8 @@ class HomeServer(object):
def setup(self):
logger.info("Setting up.")
with self.get_db_conn() as conn:
self.datastore = self.DATASTORE_CLASS(conn, self)
self.datastores = DataStores(self.datastore, conn, self)
datastore = self.DATASTORE_CLASS(conn, self)
self.datastores = DataStores(datastore, conn, self)
conn.commit()
logger.info("Finished setting up.")
......
......@@ -29,7 +29,7 @@ stored in `synapse.storage.schema`.
from synapse.storage.data_stores import DataStores
from synapse.storage.data_stores.main import DataStore
from synapse.storage.persist_events import EventsPersistenceStore
from synapse.storage.persist_events import EventsPersistenceStorage
__all__ = ["DataStores", "DataStore"]
......@@ -44,7 +44,7 @@ class Storage(object):
# interfaces.
self.main = stores.main
self.persistence = EventsPersistenceStore(hs, stores)
self.persistence = EventsPersistenceStorage(hs, stores)
def are_all_users_on_domain(txn, database_engine, domain):
......
......@@ -146,7 +146,7 @@ class EventsStore(
@_retry_on_integrity_error
@defer.inlineCallbacks
def _persist_events(
def _persist_events_and_state_updates(
self,
events_and_contexts,
current_state_for_room,
......@@ -155,18 +155,27 @@ class EventsStore(
backfilled=False,
delete_existing=False,
):
"""Persist events to db
"""Persist a set of events alongside updates to the current state and
forward extremities tables.
Args:
events_and_contexts (list[(EventBase, EventContext)]):
backfilled (bool):
current_state_for_room (dict[str, dict]): Map from room_id to the
current state of the room based on forward extremities
state_delta_for_room (dict[str, tuple]): Map from room_id to tuple
of `(to_delete, to_insert)` where to_delete is a list
of type/state keys to remove from current state, and to_insert
is a map (type,key)->event_id giving the state delta in each
room.
new_forward_extremities (dict[str, list[str]]): Map from room_id
to list of event IDs that are the new forward extremities of
the room.
backfilled (bool)
delete_existing (bool):
Returns:
Deferred: resolves when the events have been persisted
"""
if not events_and_contexts:
return
# We want to calculate the stream orderings as late as possible, as
# we only notify after all events with a lesser stream ordering have
......
......@@ -171,7 +171,13 @@ class _EventPeristenceQueue(object):
pass
class EventsPersistenceStore(object):
class EventsPersistenceStorage(object):
"""High level interface for handling persisting newly received events.
Takes care of batching up events by room, and calculating the necessary
current state and forward extremity changes.
"""
def __init__(self, hs, stores: DataStores):
# We ultimately want to split out the state store from the main store,
# so we use separate variables here even though they point to the same
......@@ -257,7 +263,8 @@ class EventsPersistenceStore(object):
def _persist_events(
self, events_and_contexts, backfilled=False, delete_existing=False
):
"""Persist events to db
"""Calculates the change to current state and forward extremities, and
persists the given events and with those updates.
Args:
events_and_contexts (list[(EventBase, EventContext)]):
......@@ -399,7 +406,7 @@ class EventsPersistenceStore(object):
if current_state is not None:
current_state_for_room[room_id] = current_state
yield self.main_store._persist_events(
yield self.main_store._persist_events_and_state_updates(
chunk,
current_state_for_room=current_state_for_room,
state_delta_for_room=state_delta_for_room,
......
......@@ -178,7 +178,7 @@ class KeyringTestCase(unittest.HomeserverTestCase):
kr = keyring.Keyring(self.hs)
key1 = signedjson.key.generate_signing_key(1)
r = self.hs.datastore.store_server_verify_keys(
r = self.hs.get_datastore().store_server_verify_keys(
"server9",
time.time() * 1000,
[("server9", get_key_id(key1), FetchKeyResult(get_verify_key(key1), 1000))],
......@@ -209,7 +209,7 @@ class KeyringTestCase(unittest.HomeserverTestCase):
)
key1 = signedjson.key.generate_signing_key(1)
r = self.hs.datastore.store_server_verify_keys(
r = self.hs.get_datastore().store_server_verify_keys(
"server9",
time.time() * 1000,
[("server9", get_key_id(key1), FetchKeyResult(get_verify_key(key1), None))],
......
......@@ -36,7 +36,8 @@ class MessageAcceptTests(unittest.TestCase):
# Figure out what the most recent event is
most_recent = self.successResultOf(
maybeDeferred(
self.homeserver.datastore.get_latest_event_ids_in_room, self.room_id
self.homeserver.get_datastore().get_latest_event_ids_in_room,
self.room_id,
)
)[0]
......@@ -75,7 +76,8 @@ class MessageAcceptTests(unittest.TestCase):
self.assertEqual(
self.successResultOf(
maybeDeferred(
self.homeserver.datastore.get_latest_event_ids_in_room, self.room_id
self.homeserver.get_datastore().get_latest_event_ids_in_room,
self.room_id,
)
)[0],
"$join:test.serv",
......@@ -97,7 +99,8 @@ class MessageAcceptTests(unittest.TestCase):
# Figure out what the most recent event is
most_recent = self.successResultOf(
maybeDeferred(
self.homeserver.datastore.get_latest_event_ids_in_room, self.room_id
self.homeserver.get_datastore().get_latest_event_ids_in_room,
self.room_id,
)
)[0]
......@@ -137,6 +140,6 @@ class MessageAcceptTests(unittest.TestCase):
# Make sure the invalid event isn't there
extrem = maybeDeferred(
self.homeserver.datastore.get_latest_event_ids_in_room, self.room_id
self.homeserver.get_datastore().get_latest_event_ids_in_room, self.room_id
)
self.assertEqual(self.successResultOf(extrem)[0], "$join:test.serv")
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment