view plugins/mod_debug_reset.lua @ 13920:2169be3581ae 13.0

migrator: Allow migrating between different configs of the same driver This was notably a problem with SQL since mod_storage_sql is a single module that connects to different SQL databases. The problem was that since it was already loaded once, the output configuration was not applied and it would have migrated to the origin database. This essentially reloads the module after updating the configuration, which should work with all storage modules as long as everything they need are kept in the 'provider' or driver table.
author Kim Alvefur <zash@zash.se>
date Sun, 03 Aug 2025 15:14:20 +0200
parents 8ad432953300
children 8f50e7e43df4
line wrap: on
line source

-- This module will "reset" the server when the client connection count drops
-- to zero. This is somewhere between a reload and a full process restart.
-- It is useful to ensure isolation between test runs, for example. It may
-- also be of use for some kinds of manual testing.

module:set_global();

local hostmanager = require "prosody.core.hostmanager";

local function do_reset()
	module:log("info", "Performing reset...");
	local hosts = {};
	for host in pairs(prosody.hosts) do
		table.insert(hosts, host);
	end
	module:fire_event("server-resetting");
	for _, host in ipairs(hosts) do
		hostmanager.deactivate(host);
		hostmanager.activate(host);
		module:log("info", "Reset complete");
		module:fire_event("server-reset");
	end
end

function module.add_host(host_module)
	host_module:hook("resource-unbind", function ()
		if next(prosody.full_sessions) == nil then
			do_reset();
		end
	end);
end

local console_env = module:shared("/*/admin_shell/env");
console_env.debug_reset = {
	reset = do_reset;
};