From 42db8f953a79240c649f56aae5b408dbf8bba383 Mon Sep 17 00:00:00 2001 From: "Rob Swindell (on Windows 11)" <rob@synchro.net> Date: Fri, 18 Apr 2025 12:07:01 -0700 Subject: [PATCH] Store/reuse each server's client highwater mark for MQTT publishing Although we always republished "0" as the client highwater mark (e.g. upon server startup and recycle), the internally tracked highwater marked is *not* reset (to zero) upon recycle, so may not have been republished (with a non-zero) value until/unless the internal highwater mark was exceeded. So now, the value we publish upon recycle will be same value as the internally tracked client highwater mark. This fixes issue #910 --- src/sbbs3/ftpsrvr.c | 2 +- src/sbbs3/mailsrvr.c | 4 ++-- src/sbbs3/main.cpp | 2 +- src/sbbs3/mqtt.c | 2 +- src/sbbs3/mqtt.h | 1 + src/sbbs3/services.c | 2 +- src/sbbs3/websrvr.c | 2 +- 7 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/sbbs3/ftpsrvr.c b/src/sbbs3/ftpsrvr.c index f7eb2212c7..51290e3cfa 100644 --- a/src/sbbs3/ftpsrvr.c +++ b/src/sbbs3/ftpsrvr.c @@ -2353,7 +2353,7 @@ static void ctrl_thread(void* arg) if (client_highwater > 1) lprintf(LOG_NOTICE, "%04d New active client highwater mark: %u" , sock, client_highwater); - mqtt_pub_uintval(&mqtt, TOPIC_SERVER, "highwater", client_highwater); + mqtt_pub_uintval(&mqtt, TOPIC_SERVER, "highwater", mqtt.highwater = client_highwater); } update_clients(); diff --git a/src/sbbs3/mailsrvr.c b/src/sbbs3/mailsrvr.c index 27a767083e..1c1887cccf 100644 --- a/src/sbbs3/mailsrvr.c +++ b/src/sbbs3/mailsrvr.c @@ -1828,7 +1828,7 @@ static void pop3_thread(void* arg) if (client_highwater > 1) lprintf(LOG_NOTICE, "%04d POP3 New active client highwater mark: %u" , pop3.socket, client_highwater); - mqtt_pub_uintval(&mqtt, TOPIC_SERVER, "highwater", client_highwater); + mqtt_pub_uintval(&mqtt, TOPIC_SERVER, "highwater", mqtt.highwater = client_highwater); } update_clients(); @@ -5114,7 +5114,7 @@ static void smtp_thread(void* arg) if (client_highwater > 1) lprintf(LOG_NOTICE, "%04d SMTP New active client highwater mark: %u" , smtp.socket, client_highwater); - mqtt_pub_uintval(&mqtt, TOPIC_SERVER, "highwater", client_highwater); + mqtt_pub_uintval(&mqtt, TOPIC_SERVER, "highwater", mqtt.highwater = client_highwater); } update_clients(); diff --git a/src/sbbs3/main.cpp b/src/sbbs3/main.cpp index a25613ff0c..78d7ffaa94 100644 --- a/src/sbbs3/main.cpp +++ b/src/sbbs3/main.cpp @@ -6002,7 +6002,7 @@ NO_PASSTHRU: if (client_highwater > 1) lprintf(LOG_NOTICE, "Node %d New active client highwater mark: %u" , node_num, client_highwater); - mqtt_pub_uintval(&mqtt, TOPIC_SERVER, "highwater", client_highwater); + mqtt_pub_uintval(&mqtt, TOPIC_SERVER, "highwater", mqtt.highwater = client_highwater); } } diff --git a/src/sbbs3/mqtt.c b/src/sbbs3/mqtt.c index ffbccc7ad6..0345246bb7 100644 --- a/src/sbbs3/mqtt.c +++ b/src/sbbs3/mqtt.c @@ -714,7 +714,7 @@ int mqtt_server_startup(struct mqtt* mqtt) mqtt_pub_strval(mqtt, TOPIC_HOST_LEVEL, NULL, mqtt->startup->host_name); mqtt_pub_strval(mqtt, TOPIC_SERVER, "version", mqtt->server_version); mqtt_pub_uintval(mqtt, TOPIC_SERVER, "served", mqtt->served); - mqtt_pub_uintval(mqtt, TOPIC_SERVER, "highwater", 0); + mqtt_pub_uintval(mqtt, TOPIC_SERVER, "highwater", mqtt->highwater); mqtt_pub_uintval(mqtt, TOPIC_SERVER, "error_count", mqtt->error_count); return result; } diff --git a/src/sbbs3/mqtt.h b/src/sbbs3/mqtt.h index 3a7492a094..265e7ac1f8 100644 --- a/src/sbbs3/mqtt.h +++ b/src/sbbs3/mqtt.h @@ -49,6 +49,7 @@ struct mqtt { ulong max_clients; ulong error_count; ulong served; + ulong highwater; link_list_t client_list; struct startup* startup; enum server_state server_state; diff --git a/src/sbbs3/services.c b/src/sbbs3/services.c index 59d517d4f0..7ab927a56b 100644 --- a/src/sbbs3/services.c +++ b/src/sbbs3/services.c @@ -240,7 +240,7 @@ static void update_clients(void) if (client_highwater > 1) lprintf(LOG_NOTICE, "New active client highwater mark: %u" , client_highwater); - mqtt_pub_uintval(&mqtt, TOPIC_SERVER, "highwater", client_highwater); + mqtt_pub_uintval(&mqtt, TOPIC_SERVER, "highwater", mqtt.highwater = client_highwater); } } diff --git a/src/sbbs3/websrvr.c b/src/sbbs3/websrvr.c index 56d766bdb9..c1f08206ea 100644 --- a/src/sbbs3/websrvr.c +++ b/src/sbbs3/websrvr.c @@ -6869,7 +6869,7 @@ void http_session_thread(void* arg) if (client_highwater > 1) lprintf(LOG_NOTICE, "%04d New active client highwater mark: %u" , session.socket, client_highwater); - mqtt_pub_uintval(&mqtt, TOPIC_SERVER, "highwater", client_highwater); + mqtt_pub_uintval(&mqtt, TOPIC_SERVER, "highwater", mqtt.highwater = client_highwater); } update_clients(); SAFECOPY(session.username, unknown); -- GitLab