summary refs log tree commit diff
path: root/synapse/server.py
diff options
context:
space:
mode:
authorRichard van der Hoff <github@rvanderhoff.org.uk>2018-01-27 17:56:25 +0100
committerGitHub <noreply@github.com>2018-01-27 17:56:25 +0100
commit4b0f06e99c00ea092046a591797de4b12a1314c3 (patch)
treef536d77545fbec5504f8c3b42e2627809bd50b7c /synapse/server.py
parentMerge pull request #2827 from matrix-org/fix_server_500_on_public_rooms_call_... (diff)
parentFactor out get_db_conn to HomeServer base class (diff)
downloadsynapse-4b0f06e99c00ea092046a591797de4b12a1314c3.tar.xz
Merge pull request #2830 from matrix-org/rav/factor_out_get_conn
Factor out get_db_conn to HomeServer base class
Diffstat (limited to 'synapse/server.py')
-rw-r--r--synapse/server.py17
1 files changed, 17 insertions, 0 deletions
diff --git a/synapse/server.py b/synapse/server.py
index 99693071b6..ff8a8fbc46 100644
--- a/synapse/server.py
+++ b/synapse/server.py
@@ -307,6 +307,23 @@ class HomeServer(object):
             **self.db_config.get("args", {})
         )
 
+    def get_db_conn(self, run_new_connection=True):
+        """Makes a new connection to the database, skipping the db pool
+
+        Returns:
+            Connection: a connection object implementing the PEP-249 spec
+        """
+        # 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)
+        if run_new_connection:
+            self.database_engine.on_new_connection(db_conn)
+        return db_conn
+
     def build_media_repository_resource(self):
         # build the media repo resource. This indirects through the HomeServer
         # to ensure that we only have a single instance of