Reset last connected when removing stale nodes with netdatacli (#18425)
Stelios Fragkakis committed
Aug 28, 2024 at 11:08 UTC
11a49ab436114979f42a4e69374b06b35f8473b5
1 file changed
+29
-2
src/database/sqlite/sqlite_aclk.c
+29
-2
@@ -201,6 +201,34 @@ fail:
201
buffer_free(sql);
202
}
203
204
+#define SQL_INVALIDATE_HOST_LAST_CONNECTED "UPDATE host SET last_connected = 1 WHERE host_id = @host_id"
205
+
206
+static void invalidate_host_last_connected(nd_uuid_t *host_uuid)
207
+{
208
+ sqlite3_stmt *res = NULL;
209
+ if (!host_uuid)
210
+ return;
211
+
212
+ if (!PREPARE_STATEMENT(db_meta, SQL_INVALIDATE_HOST_LAST_CONNECTED, &res))
213
+ return;
214
+
215
+ int param = 0;
216
+ SQLITE_BIND_FAIL(bind_fail, sqlite3_bind_blob(res, ++param, host_uuid, sizeof(*host_uuid), SQLITE_STATIC));
217
+
218
+ param = 0;
219
+ int rc = sqlite3_step_monitored(res);
220
+ if (unlikely(rc != SQLITE_DONE)) {
221
+ char wstr[UUID_STR_LEN];
222
+ uuid_unparse_lower(*host_uuid, wstr);
223
+ error_report("Failed invalidate last_connected time for host with GUID %s, rc = %d", wstr, rc);
224
+ }
225
+
226
+bind_fail:
227
+ REPORT_BIND_FAIL(res, param);
228
+ SQLITE_FINALIZE(res);
229
+}
230
+
231
+
232
// OPCODE: ACLK_DATABASE_NODE_UNREGISTER
233
static void sql_unregister_node(char *machine_guid)
234
{
@@ -228,6 +256,7 @@ static void sql_unregister_node(char *machine_guid)
256
error_report("Failed to execute command to remove host node id");
257
} else {
258
// node: machine guid will be freed after processing
259
+ invalidate_host_last_connected(&host_uuid);
260
metadata_delete_host_chart_labels(machine_guid);
261
machine_guid = NULL;
262
}
@@ -393,7 +422,6 @@ static void aclk_synchronization(void *arg)
422
break;
423
case ACLK_DATABASE_NODE_UNREGISTER:
424
sql_unregister_node(cmd.param[0]);
396
-
425
break;
426
// ALERTS
427
case ACLK_DATABASE_PUSH_ALERT_CONFIG:
@@ -553,7 +581,6 @@ void aclk_query_init(mqtt_wss_client client) {
581
queue_aclk_sync_cmd(ACLK_MQTT_WSS_CLIENT, client, NULL);
582
}
583
556
-
584
void schedule_node_info_update(RRDHOST *host __maybe_unused)
585
{
586
if (unlikely(!host))