plugins/mod_debug_reset.lua
author Kim Alvefur <zash@zash.se>
Sat, 23 Mar 2024 20:48:19 +0100
changeset 13465 c673ff1075bd
parent 13033 8ad432953300
permissions -rw-r--r--
mod_posix: Move everything to util.startup This allows greater control over the order of events. Notably, the internal ordering between daemonization, initialization of libunbound and setup of signal handling is sensitive. libunbound starts a separate thread for processing DNS requests. If this thread is started before signal handling has been set up, it will not inherit the signal handlers and instead behave as it would have before signal handlers were set up, i.e. cause the whole process to immediately exit. libunbound is usually initialized on the first DNS request, usually triggered by an outgoing s2s connection attempt. If daemonization happens before signals have been set up, signals may not be processed at all.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
12972
efdb7f2cd578 mod_debug_reset: New module to "reset" a running server (e.g. for testing)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     1
-- This module will "reset" the server when the client connection count drops
efdb7f2cd578 mod_debug_reset: New module to "reset" a running server (e.g. for testing)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     2
-- to zero. This is somewhere between a reload and a full process restart.
efdb7f2cd578 mod_debug_reset: New module to "reset" a running server (e.g. for testing)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     3
-- It is useful to ensure isolation between test runs, for example. It may
efdb7f2cd578 mod_debug_reset: New module to "reset" a running server (e.g. for testing)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     4
-- also be of use for some kinds of manual testing.
efdb7f2cd578 mod_debug_reset: New module to "reset" a running server (e.g. for testing)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     5
efdb7f2cd578 mod_debug_reset: New module to "reset" a running server (e.g. for testing)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     6
module:set_global();
efdb7f2cd578 mod_debug_reset: New module to "reset" a running server (e.g. for testing)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     7
12981
74b9e05af71e plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12974
diff changeset
     8
local hostmanager = require "prosody.core.hostmanager";
12972
efdb7f2cd578 mod_debug_reset: New module to "reset" a running server (e.g. for testing)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     9
efdb7f2cd578 mod_debug_reset: New module to "reset" a running server (e.g. for testing)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    10
local function do_reset()
efdb7f2cd578 mod_debug_reset: New module to "reset" a running server (e.g. for testing)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    11
	module:log("info", "Performing reset...");
efdb7f2cd578 mod_debug_reset: New module to "reset" a running server (e.g. for testing)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    12
	local hosts = {};
efdb7f2cd578 mod_debug_reset: New module to "reset" a running server (e.g. for testing)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    13
	for host in pairs(prosody.hosts) do
efdb7f2cd578 mod_debug_reset: New module to "reset" a running server (e.g. for testing)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    14
		table.insert(hosts, host);
efdb7f2cd578 mod_debug_reset: New module to "reset" a running server (e.g. for testing)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    15
	end
efdb7f2cd578 mod_debug_reset: New module to "reset" a running server (e.g. for testing)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    16
	module:fire_event("server-resetting");
efdb7f2cd578 mod_debug_reset: New module to "reset" a running server (e.g. for testing)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    17
	for _, host in ipairs(hosts) do
efdb7f2cd578 mod_debug_reset: New module to "reset" a running server (e.g. for testing)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    18
		hostmanager.deactivate(host);
13032
b2e6a175537d mod_debug_reset: Don't delay operations until next tick
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
    19
		hostmanager.activate(host);
b2e6a175537d mod_debug_reset: Don't delay operations until next tick
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
    20
		module:log("info", "Reset complete");
b2e6a175537d mod_debug_reset: Don't delay operations until next tick
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
    21
		module:fire_event("server-reset");
12972
efdb7f2cd578 mod_debug_reset: New module to "reset" a running server (e.g. for testing)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    22
	end
efdb7f2cd578 mod_debug_reset: New module to "reset" a running server (e.g. for testing)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    23
end
efdb7f2cd578 mod_debug_reset: New module to "reset" a running server (e.g. for testing)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    24
efdb7f2cd578 mod_debug_reset: New module to "reset" a running server (e.g. for testing)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    25
function module.add_host(host_module)
efdb7f2cd578 mod_debug_reset: New module to "reset" a running server (e.g. for testing)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    26
	host_module:hook("resource-unbind", function ()
efdb7f2cd578 mod_debug_reset: New module to "reset" a running server (e.g. for testing)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    27
		if next(prosody.full_sessions) == nil then
13032
b2e6a175537d mod_debug_reset: Don't delay operations until next tick
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
    28
			do_reset();
12972
efdb7f2cd578 mod_debug_reset: New module to "reset" a running server (e.g. for testing)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    29
		end
efdb7f2cd578 mod_debug_reset: New module to "reset" a running server (e.g. for testing)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    30
	end);
efdb7f2cd578 mod_debug_reset: New module to "reset" a running server (e.g. for testing)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    31
end
efdb7f2cd578 mod_debug_reset: New module to "reset" a running server (e.g. for testing)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    32
efdb7f2cd578 mod_debug_reset: New module to "reset" a running server (e.g. for testing)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    33
local console_env = module:shared("/*/admin_shell/env");
efdb7f2cd578 mod_debug_reset: New module to "reset" a running server (e.g. for testing)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    34
console_env.debug_reset = {
efdb7f2cd578 mod_debug_reset: New module to "reset" a running server (e.g. for testing)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    35
	reset = do_reset;
efdb7f2cd578 mod_debug_reset: New module to "reset" a running server (e.g. for testing)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    36
};