Changeset

4981:f0fe95f9e21c

mod_s2s_smacks_timeout: Use mod_smacks to close stale s2s connections
author Kim Alvefur <zash@zash.se>
date Wed, 03 Aug 2022 03:14:17 +0200
parents 4980:da151f9af861
children 4982:8a4b17e2e984
files mod_s2s_smacks_timeout/README.md mod_s2s_smacks_timeout/mod_s2s_smacks_timeout.lua
diffstat 2 files changed, 28 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mod_s2s_smacks_timeout/README.md	Wed Aug 03 03:14:17 2022 +0200
@@ -0,0 +1,20 @@
+# Introduction
+
+This module closes s2s connections when
+[mod_smacks][doc:modules:mod_smacks] reports that a connection has not
+received a timely acknowledgement as requested, indicating that the
+connection is broken or the remote server is not responding.
+
+With the connection closed, the next stanza to be directed to that
+server will trigger Prosody to establish a new connection, instead of
+queueing it on the potentially broken connection.
+
+This should prevent messages from being stuck in a queue for a
+potentially long time before being bounced back to the sender as
+delivery failure reports.
+
+Normally the amount of time it takes for a broken connection to time out
+is determined by TCP.
+
+If this is deemed sensible behavior then it will likely be merged into
+Prosody itself somewhere.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mod_s2s_smacks_timeout/mod_s2s_smacks_timeout.lua	Wed Aug 03 03:14:17 2022 +0200
@@ -0,0 +1,8 @@
+module:depends("smacks");
+
+module:hook("smacks-ack-delayed", function (event)
+	if event.origin.type == "s2sin" or event.origin.type == "s2sout" then
+		event.origin:close("connection-timeout");
+		return true;
+	end
+end);