mod_storage_sql: Share SQL connections with same parameters across VirtualHosts (fixes #576)
authorKim Alvefur <zash@zash.se>
Sun, 21 Feb 2016 14:53:19 +0100
changeset 7173 fb37aece3252
parent 7172 d00d8cfcc9a8
child 7174 91d36a37a9ff
child 7175 32b74ad54432
mod_storage_sql: Share SQL connections with same parameters across VirtualHosts (fixes #576)
plugins/mod_storage_sql.lua
--- a/plugins/mod_storage_sql.lua	Fri Feb 19 19:22:18 2016 +0100
+++ b/plugins/mod_storage_sql.lua	Sun Feb 21 14:53:19 2016 +0100
@@ -449,19 +449,25 @@
 
 function module.load()
 	if prosody.prosodyctl then return; end
+	local engines = module:shared("/*/sql/connections");
 	local params = normalize_params(module:get_option("sql", default_params));
-	engine = sql:create_engine(params, function (engine)
-		if module:get_option("sql_manage_tables", true) then
-			-- Automatically create table, ignore failure (table probably already exists)
-			-- FIXME: we should check in information_schema, etc.
-			create_table();
-			-- Check whether the table needs upgrading
-			if upgrade_table(params, false) then
-				module:log("error", "Old database format detected. Please run: prosodyctl mod_%s upgrade", module.name);
-				return false, "database upgrade needed";
+	engine = engines[sql.db2uri(params)];
+	if not engine then
+		module:log("info", "Creating new engine");
+		engine = sql:create_engine(params, function (engine)
+			if module:get_option("sql_manage_tables", true) then
+				-- Automatically create table, ignore failure (table probably already exists)
+				-- FIXME: we should check in information_schema, etc.
+				create_table();
+				-- Check whether the table needs upgrading
+				if upgrade_table(params, false) then
+					module:log("error", "Old database format detected. Please run: prosodyctl mod_%s upgrade", module.name);
+					return false, "database upgrade needed";
+				end
 			end
-		end
-	end);
+		end);
+		engines[sql.db2uri(params)] = engine;
+	end
 
 	module:provides("storage", driver);
 end