diff --git a/synapse/app/homeserver.py b/synapse/app/homeserver.py
index 504557b2fc..65562222cf 100755
--- a/synapse/app/homeserver.py
+++ b/synapse/app/homeserver.py
@@ -255,12 +255,13 @@ class SynapseHomeServer(HomeServer):
quit_with_error(e.message)
def get_db_conn(self):
- db_conn = self.database_engine.module.connect(
- **{
- k: v for k, v in self.db_config.get("args", {}).items()
- if not k.startswith("cp_")
- }
- )
+ # Any param beginning with cp_ is a parameter for adbapi, and should
+ # not be passed to the database engine.
+ db_params = {
+ k: v for k, v in self.db_config.get("args", {}).items()
+ if not k.startswith("cp_")
+ }
+ db_conn = self.database_engine.module.connect(**db_params)
self.database_engine.on_new_connection(db_conn)
return db_conn
diff --git a/synapse/server.py b/synapse/server.py
index e013a349c9..5fee7fe130 100644
--- a/synapse/server.py
+++ b/synapse/server.py
@@ -28,7 +28,7 @@ from synapse.notifier import Notifier
from synapse.api.auth import Auth
from synapse.handlers import Handlers
from synapse.state import StateHandler
-from synapse.storage import get_datastore
+from synapse.storage import DataStore
from synapse.util import Clock
from synapse.util.distributor import Distributor
from synapse.streams.events import EventSources
@@ -117,7 +117,7 @@ class HomeServer(object):
def setup(self):
logger.info("Setting up.")
- self.datastore = get_datastore(self)
+ self.datastore = DataStore(self.get_db_conn(), self)
logger.info("Finished setting up.")
def get_ip_from_request(self, request):
diff --git a/synapse/storage/__init__.py b/synapse/storage/__init__.py
index c8cab45f77..eb88842308 100644
--- a/synapse/storage/__init__.py
+++ b/synapse/storage/__init__.py
@@ -61,22 +61,6 @@ logger = logging.getLogger(__name__)
LAST_SEEN_GRANULARITY = 120*1000
-def get_datastore(hs):
- logger.info("getting called!")
-
- conn = hs.get_db_conn()
- try:
- cur = conn.cursor()
- cur.execute("SELECT MIN(stream_ordering) FROM events",)
- rows = cur.fetchall()
- min_token = rows[0][0] if rows and rows[0] and rows[0][0] else -1
- min_token = min(min_token, -1)
-
- return DataStore(conn, hs, min_token)
- finally:
- conn.close()
-
-
class DataStore(RoomMemberStore, RoomStore,
RegistrationStore, StreamStore, ProfileStore,
PresenceStore, TransactionStore,
@@ -98,10 +82,17 @@ class DataStore(RoomMemberStore, RoomStore,
EventPushActionsStore
):
- def __init__(self, db_conn, hs, min_stream_token):
+ def __init__(self, db_conn, hs):
self.hs = hs
- self.min_stream_token = min_stream_token
+ cur = db_conn.cursor()
+ try:
+ cur.execute("SELECT MIN(stream_ordering) FROM events",)
+ rows = cur.fetchall()
+ self.min_stream_token = rows[0][0] if rows and rows[0] and rows[0][0] else -1
+ self.min_stream_token = min(self.min_stream_token, -1)
+ finally:
+ cur.close()
self.client_ip_last_seen = Cache(
name="client_ip_last_seen",
|