changeset 6305:1c0e9486ba23

mod_pubsub_subscription: Fix sometimes not subscribing at startup, improve logs
author Matthew Wild <mwild1@gmail.com>
date Thu, 31 Jul 2025 15:12:51 +0100
parents 6e2458b69e33
children 093c47ee2041
files mod_pubsub_subscription/mod_pubsub_subscription.lua
diffstat 1 files changed, 19 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/mod_pubsub_subscription/mod_pubsub_subscription.lua	Wed Jul 30 14:16:55 2025 +0100
+++ b/mod_pubsub_subscription/mod_pubsub_subscription.lua	Thu Jul 31 15:12:51 2025 +0100
@@ -31,9 +31,9 @@
 	assert(item.node, "pubsub subscription item MUST have a 'node' field.");
 	item.from = item.from or module.host;
 
-	local already_subscibed = false;
+	local already_subscribed = false;
 	for _ in active_subscriptions:iter(item.service, item.node, item.from, nil) do -- luacheck: ignore 512
-		already_subscibed = true;
+		already_subscribed = true;
 		break
 	end
 
@@ -42,10 +42,22 @@
 	pending_subscription:set(iq_id, item._id);
 	active_subscriptions:set(item.service, item.node, item.from, item._id, item);
 
-	if not already_subscibed then
-		module:send(st.iq({ type = "set", id = iq_id, from = item.from, to = item.service })
-			:tag("pubsub", { xmlns = xmlns_pubsub })
-				:tag("subscribe", { jid = item.from, node = item.node }));
+	if not already_subscribed then
+		local function send_subscribe()
+			module:log("debug", "%s is subscribing to %s:%s", item.from, item.service, item.node);
+			module:send(st.iq({ type = "set", id = iq_id, from = item.from, to = item.service })
+				:tag("pubsub", { xmlns = xmlns_pubsub })
+					:tag("subscribe", { jid = item.from, node = item.node }));
+		end
+
+		if prosody.start_time then
+			send_subscribe();
+		else
+			module:log("debug", "%s will subscribe to %s:%s after server startup", item.from, item.service, item.node);
+			module:hook_global("server-started", send_subscribe);
+		end
+	else
+		module:log("debug", "%s is already subscribed to %s:%s", item.from, item.service, item.node);
 	end
 end
 
@@ -65,7 +77,7 @@
 	end);
 end
 
-function handle_iq(context, event)
+function handle_iq(context, event) --luacheck: ignore 212/context
 	local stanza = event.stanza;
 	local service = stanza.attr.from;