diff --git a/synapse/app/homeserver.py b/synapse/app/homeserver.py
index 394e93e6c2..beab6ffc7a 100755
--- a/synapse/app/homeserver.py
+++ b/synapse/app/homeserver.py
@@ -110,14 +110,12 @@ class SynapseHomeServer(HomeServer):
return None
def build_db_pool(self):
- name = self.db_config.pop("name", None)
- if name == "MySQLdb":
- return adbapi.ConnectionPool(
- name,
- **self.db_config
- )
+ name = self.db_config["name"]
- raise RuntimeError("Unsupported database type")
+ return adbapi.ConnectionPool(
+ name,
+ **self.db_config.get("args", {})
+ )
def create_resource_tree(self, redirect_root_to_web_client):
"""Create the resource tree for this Home Server.
@@ -323,7 +321,7 @@ def change_resource_limit(soft_file_no):
resource.setrlimit(resource.RLIMIT_NOFILE, (soft_file_no, hard))
logger.info("Set file limit to: %d", soft_file_no)
- except (ValueError, resource.error) as e:
+ except ( ValueError, resource.error) as e:
logger.warn("Failed to set file limit: %s", e)
@@ -363,20 +361,33 @@ def setup(config_options):
if config.database_config:
with open(config.database_config, 'r') as f:
db_config = yaml.safe_load(f)
-
- name = db_config.get("name", None)
- if name == "MySQLdb":
- db_config.update({
- "sql_mode": "TRADITIONAL",
- "charset": "utf8",
- "use_unicode": True,
- })
else:
db_config = {
"name": "sqlite3",
"database": config.database_path,
}
+ db_config = {
+ k: v for k, v in db_config.items()
+ if not k.startswith("cp_")
+ }
+
+ name = db_config.get("name", None)
+ if name in ["MySQLdb", "mysql.connector"]:
+ db_config.setdefault("args", {}).update({
+ "sql_mode": "TRADITIONAL",
+ "charset": "utf8",
+ "use_unicode": True,
+ })
+ elif name == "sqlite3":
+ db_config.setdefault("args", {}).update({
+ "cp_min": 1,
+ "cp_max": 1,
+ "cp_openfun": prepare_database,
+ })
+ else:
+ raise RuntimeError("Unsupported database type '%s'" % (name,))
+
hs = SynapseHomeServer(
config.server_name,
domain_with_port=domain_with_port,
@@ -401,8 +412,8 @@ def setup(config_options):
# with sqlite3.connect(db_name) as db_conn:
# prepare_sqlite3_database(db_conn)
# prepare_database(db_conn)
- import MySQLdb
- db_conn = MySQLdb.connect(**db_config)
+ import mysql.connector
+ db_conn = mysql.connector.connect(**db_config.get("args", {}))
prepare_database(db_conn)
except UpgradeDatabaseException:
sys.stderr.write(
|