2022-05-31 08:17:50 -04:00
|
|
|
#
|
2023-11-21 15:29:58 -05:00
|
|
|
# This file is licensed under the Affero General Public License (AGPL) version 3.
|
|
|
|
#
|
2024-01-23 06:26:48 -05:00
|
|
|
# Copyright 2022 The Matrix.org Foundation C.I.C.
|
2023-11-21 15:29:58 -05:00
|
|
|
# Copyright (C) 2023 New Vector, Ltd
|
|
|
|
#
|
|
|
|
# This program is free software: you can redistribute it and/or modify
|
|
|
|
# it under the terms of the GNU Affero General Public License as
|
|
|
|
# published by the Free Software Foundation, either version 3 of the
|
|
|
|
# License, or (at your option) any later version.
|
|
|
|
#
|
|
|
|
# See the GNU Affero General Public License for more details:
|
|
|
|
# <https://www.gnu.org/licenses/agpl-3.0.html>.
|
|
|
|
#
|
|
|
|
# Originally licensed under the Apache License, Version 2.0:
|
|
|
|
# <http://www.apache.org/licenses/LICENSE-2.0>.
|
|
|
|
#
|
|
|
|
# [This file includes modifications made by New Vector Limited]
|
2022-05-31 08:17:50 -04:00
|
|
|
#
|
|
|
|
#
|
|
|
|
|
|
|
|
from typing import TYPE_CHECKING
|
|
|
|
|
|
|
|
from synapse.storage.controllers.persist_events import (
|
|
|
|
EventsPersistenceStorageController,
|
|
|
|
)
|
|
|
|
from synapse.storage.controllers.purge_events import PurgeEventsStorageController
|
2022-06-01 11:02:53 -04:00
|
|
|
from synapse.storage.controllers.state import StateStorageController
|
2023-04-26 12:00:11 -04:00
|
|
|
from synapse.storage.controllers.stats import StatsController
|
2022-05-31 08:17:50 -04:00
|
|
|
from synapse.storage.databases import Databases
|
|
|
|
from synapse.storage.databases.main import DataStore
|
|
|
|
|
|
|
|
if TYPE_CHECKING:
|
|
|
|
from synapse.server import HomeServer
|
|
|
|
|
|
|
|
|
|
|
|
__all__ = ["Databases", "DataStore"]
|
|
|
|
|
|
|
|
|
|
|
|
class StorageControllers:
|
|
|
|
"""The high level interfaces for talking to various storage controller layers."""
|
|
|
|
|
|
|
|
def __init__(self, hs: "HomeServer", stores: Databases):
|
|
|
|
# We include the main data store here mainly so that we don't have to
|
|
|
|
# rewrite all the existing code to split it into high vs low level
|
|
|
|
# interfaces.
|
|
|
|
self.main = stores.main
|
|
|
|
|
|
|
|
self.purge_events = PurgeEventsStorageController(hs, stores)
|
2022-06-01 11:02:53 -04:00
|
|
|
self.state = StateStorageController(hs, stores)
|
2023-04-26 12:00:11 -04:00
|
|
|
self.stats = StatsController(hs, stores)
|
2022-05-31 08:17:50 -04:00
|
|
|
|
|
|
|
self.persistence = None
|
|
|
|
if stores.persist_events:
|
2022-07-14 09:57:02 -04:00
|
|
|
self.persistence = EventsPersistenceStorageController(
|
|
|
|
hs, stores, self.state
|
|
|
|
)
|