Code cleanup (#22431)
cleanup(sqlite_metadata): _v2 closes, named sysinfo key count, dead-code drops - sqlite3_close → sqlite3_close_v2 at all 10 call sites; _v2 always frees, plain close leaks on busy handles. - Replace magic 27 in store_host_systeminfo with RRDHOST_SYSTEM_INFO_KEY_COUNT (new define in rrdhost-system-info.h). - Strip leftover ; END from SQL_SCHEDULE_HOST_CTX_CLEANUP (truncated by sqlite3_prepare_v2 today; cosmetic but misleading). - Drop a 2-line commented-out wal-checkpoint block in run_cleanup_loop.
Stelios Fragkakis committed
May 6, 2026 at 22:03 UTC
01790f6551519b098c83945bd4e9782c16e8f7c9
2 files changed
+18
-14
src/database/rrdhost-system-info.h
+6
@@ -98,6 +98,12 @@ void rrdhost_system_info_to_json_v2(BUFFER *wb, struct rrdhost_system_info *syst
98
void rrdhost_system_info_to_url_encode_stream(BUFFER *wb, struct rrdhost_system_info *system_info);
99
100
typedef int (*add_host_sysinfo_key_value_t)(const char *name, const char *value, nd_uuid_t *uuid);
101
+
102
+// Number of NETDATA_* keys emitted by rrdhost_system_info_foreach(); callers
103
+// compare against the cb-success count to detect partial-store failures.
104
+// Keep in sync with the body of rrdhost_system_info_foreach().
105
+#define RRDHOST_SYSTEM_INFO_KEY_COUNT 27
106
+
107
int rrdhost_system_info_foreach(struct rrdhost_system_info *system_info, add_host_sysinfo_key_value_t cb, nd_uuid_t *uuid);
108
109
struct update_node_info;
src/database/sqlite/sqlite_metadata.c
+12
-14
@@ -364,7 +364,7 @@ done:
364
365
#define SQL_SCHEDULE_HOST_CTX_CLEANUP \
366
"INSERT INTO ctx_metadata_cleanup (host_id, context, date_created) " \
367
- "VALUES (@host_id, @context, UNIXEPOCH()) ON CONFLICT DO UPDATE SET date_created = excluded.date_created; END"
367
+ "VALUES (@host_id, @context, UNIXEPOCH()) ON CONFLICT DO UPDATE SET date_created = excluded.date_created"
368
369
// Schedule context cleanup for host
370
static void sql_schedule_host_ctx_cleanup(sqlite3_stmt **res, nd_uuid_t *host_id, const char *context)
@@ -616,7 +616,7 @@ static void recover_database(const char *sqlite_database, const char *new_sqlite
616
617
rc = sqlite3_recover_finish(recover);
618
619
- (void) sqlite3_close(database);
619
+ (void) sqlite3_close_v2(database);
620
621
if (rc == SQLITE_OK) {
622
rc = rename(new_sqlite_database, sqlite_database);
@@ -629,7 +629,7 @@ static void recover_database(const char *sqlite_database, const char *new_sqlite
629
netdata_log_error("Recover failed to free resources");
630
}
631
else
632
- (void) sqlite3_close(database);
632
+ (void) sqlite3_close_v2(database);
633
}
634
635
@@ -758,7 +758,7 @@ int sql_init_meta_database(db_check_action_type_t rebuild, int memory)
758
}
759
else {
760
(void)db_execute(db_meta, "select count(*) from sqlite_master limit 0", NULL);
761
- (void) sqlite3_close(db_meta);
761
+ (void) sqlite3_close_v2(db_meta);
762
}
763
return 1;
764
}
@@ -773,7 +773,7 @@ int sql_init_meta_database(db_check_action_type_t rebuild, int memory)
773
}
774
else {
775
(void)db_execute(db_meta, "select count(*) from sqlite_master limit 0", NULL);
776
- (void) sqlite3_close(db_meta);
776
+ (void) sqlite3_close_v2(db_meta);
777
}
778
return 1;
779
}
@@ -814,7 +814,7 @@ int sql_init_meta_database(db_check_action_type_t rebuild, int memory)
814
return 0;
815
816
close_database:
817
- sqlite3_close(db_meta);
817
+ sqlite3_close_v2(db_meta);
818
db_meta = NULL;
819
return 1;
820
}
@@ -1163,7 +1163,7 @@ static bool store_host_systeminfo(RRDHOST *host)
1163
if (unlikely(!system_info))
1164
return false;
1165
1166
- return (27 != rrdhost_system_info_foreach(system_info, add_host_sysinfo_key_value, &host->host_id.uuid));
1166
+ return (RRDHOST_SYSTEM_INFO_KEY_COUNT != rrdhost_system_info_foreach(system_info, add_host_sysinfo_key_value, &host->host_id.uuid));
1167
}
1168
1169
@@ -1313,8 +1313,6 @@ static bool run_cleanup_loop(
1313
if (rc == true) {
1314
action_cb(&uuid, action_stmt, action_flag);
1315
l_deleted++;
1316
-// if (false == sql_metadata_wal_size_acceptable())
1317
-// (void) sqlite3_wal_checkpoint(db_meta, NULL);
1316
}
1317
1318
l_checked++;
@@ -1906,14 +1904,14 @@ static void restore_host_context(void *arg)
1904
snprintfz(sqlite_database, sizeof(sqlite_database) - 1, "%s/netdata-meta.db", netdata_configured_cache_dir);
1905
int rc = sqlite3_open_v2(sqlite_database, &db_meta_thread, SQLITE_OPEN_READONLY | SQLITE_OPEN_NOMUTEX, NULL);
1906
if (rc != SQLITE_OK) {
1909
- sqlite3_close(db_meta_thread);
1907
+ sqlite3_close_v2(db_meta_thread);
1908
db_meta_thread = NULL;
1909
}
1910
1911
snprintfz(sqlite_database, sizeof(sqlite_database) - 1, "%s/context-meta.db", netdata_configured_cache_dir);
1912
rc = sqlite3_open_v2(sqlite_database, &db_context_thread, SQLITE_OPEN_READONLY | SQLITE_OPEN_NOMUTEX, NULL);
1913
if (rc != SQLITE_OK) {
1916
- sqlite3_close(db_context_thread);
1914
+ sqlite3_close_v2(db_context_thread);
1915
db_context_thread = NULL;
1916
}
1917
@@ -2136,7 +2134,7 @@ size_t populate_metrics_from_database(void *mrg, void (*populate_cb)(void *mrg,
2134
snprintfz(sqlite_database, sizeof(sqlite_database) - 1, "%s/netdata-meta.db", netdata_configured_cache_dir);
2135
int rc = sqlite3_open_v2(sqlite_database, &local_meta_db, SQLITE_OPEN_READONLY | SQLITE_OPEN_NOMUTEX, NULL);
2136
if (rc != SQLITE_OK) {
2139
- sqlite3_close(local_meta_db);
2137
+ sqlite3_close_v2(local_meta_db);
2138
local_meta_db = NULL;
2139
}
2140
@@ -2144,7 +2142,7 @@ size_t populate_metrics_from_database(void *mrg, void (*populate_cb)(void *mrg,
2142
(void)db_execute(local_meta_db, "PRAGMA cache_size=10000", NULL);
2143
2144
if (!PREPARE_STATEMENT(local_meta_db ? local_meta_db : db_meta, GET_UUID_LIST, &res)) {
2147
- sqlite3_close(local_meta_db);
2145
+ sqlite3_close_v2(local_meta_db);
2146
return 0;
2147
}
2148
@@ -2166,7 +2164,7 @@ size_t populate_metrics_from_database(void *mrg, void (*populate_cb)(void *mrg,
2164
}
2165
2166
SQLITE_FINALIZE(res);
2169
- sqlite3_close(local_meta_db);
2167
+ sqlite3_close_v2(local_meta_db);
2168
COMPUTE_DURATION(report_duration, "us", started_ut, now_monotonic_usec());
2169
nd_log_daemon(NDLP_INFO, "MRG: Loaded %zu metrics from database in %s", count, report_duration);
2170
return count;