Store host and claim info in sqlite as soon as possible (#14263)
* store host and claim info as soon as possible * no need to set the flag * check for metasync_worker.loop
Emmanuel Vasilakis committed
Jan 17, 2023 at 17:08 UTC
6be264d62788b1b50109dc1f2a0cb6f622cfb804
4 files changed
+37
-2
claim/claim.c
+1
-2
@@ -170,10 +170,9 @@ void load_claiming_state(void)
170
}
171
172
invalidate_node_instances(&localhost->host_uuid, claimed_id ? &uuid : NULL);
173
+ metaqueue_store_claim_id(&localhost->host_uuid, claimed_id ? &uuid : NULL);
174
rrdhost_aclk_state_unlock(localhost);
175
175
- rrdhost_flag_set(localhost, RRDHOST_FLAG_METADATA_CLAIMID | RRDHOST_FLAG_METADATA_UPDATE);
176
-
176
if (!claimed_id) {
177
info("Unable to load '%s', setting state to AGENT_UNCLAIMED", filename);
178
return;
database/rrdhost.c
+1
@@ -364,6 +364,7 @@ int is_legacy = 1;
364
rrdfamily_index_init(host);
365
rrdcalctemplate_index_init(host);
366
rrdcalc_rrdhost_index_init(host);
367
+ metaqueue_host_update_info(host);
368
369
if (health_enabled)
370
health_thread_spawn(host);
database/sqlite/sqlite_metadata.c
+33
@@ -62,6 +62,7 @@ enum metadata_opcode {
62
METADATA_DATABASE_TIMER,
63
METADATA_DEL_DIMENSION,
64
METADATA_STORE_CLAIM_ID,
65
+ METADATA_ADD_HOST_INFO,
66
METADATA_SCAN_HOSTS,
67
METADATA_MAINTENANCE,
68
METADATA_SYNC_SHUTDOWN,
@@ -1014,6 +1015,7 @@ static void metadata_event_loop(void *arg)
1015
worker_register_job_name(METADATA_DATABASE_TIMER, "timer");
1016
worker_register_job_name(METADATA_DEL_DIMENSION, "delete dimension");
1017
worker_register_job_name(METADATA_STORE_CLAIM_ID, "add claim id");
1018
+ worker_register_job_name(METADATA_ADD_HOST_INFO, "add host info");
1019
worker_register_job_name(METADATA_MAINTENANCE, "maintenance");
1020
1021
int ret;
@@ -1063,6 +1065,8 @@ static void metadata_event_loop(void *arg)
1065
1066
while (shutdown == 0 || (wc->flags & METADATA_WORKER_BUSY)) {
1067
uuid_t *uuid;
1068
+ RRDHOST *host = NULL;
1069
+ int rc;
1070
1071
worker_is_idle();
1072
uv_run(loop, UV_RUN_DEFAULT);
@@ -1102,6 +1106,12 @@ static void metadata_event_loop(void *arg)
1106
freez((void *) cmd.param[0]);
1107
freez((void *) cmd.param[1]);
1108
break;
1109
+ case METADATA_ADD_HOST_INFO:
1110
+ host = (RRDHOST *) cmd.param[0];
1111
+ rc = sql_store_host_info(host);
1112
+ if (unlikely(rc))
1113
+ error_report("Failed to store host info in the database for %s", string2str(host->hostname));
1114
+ break;
1115
case METADATA_SCAN_HOSTS:
1116
if (unlikely(metadata_flag_check(wc, METADATA_FLAG_SCANNING_HOSTS)))
1117
break;
@@ -1281,6 +1291,29 @@ void metaqueue_delete_dimension_uuid(uuid_t *uuid)
1291
queue_metadata_cmd(METADATA_DEL_DIMENSION, use_uuid, NULL);
1292
}
1293
1294
+void metaqueue_store_claim_id(uuid_t *host_uuid, uuid_t *claim_uuid)
1295
+{
1296
+ if (unlikely(!host_uuid))
1297
+ return;
1298
+
1299
+ uuid_t *local_host_uuid = mallocz(sizeof(*host_uuid));
1300
+ uuid_t *local_claim_uuid = NULL;
1301
+
1302
+ uuid_copy(*local_host_uuid, *host_uuid);
1303
+ if (likely(claim_uuid)) {
1304
+ local_claim_uuid = mallocz(sizeof(*claim_uuid));
1305
+ uuid_copy(*local_claim_uuid, *claim_uuid);
1306
+ }
1307
+ queue_metadata_cmd(METADATA_STORE_CLAIM_ID, local_host_uuid, local_claim_uuid);
1308
+}
1309
+
1310
+void metaqueue_host_update_info(RRDHOST *host)
1311
+{
1312
+ if (unlikely(!metasync_worker.loop))
1313
+ return;
1314
+ queue_metadata_cmd(METADATA_ADD_HOST_INFO, host, NULL);
1315
+}
1316
+
1317
//
1318
// unitests
1319
//
database/sqlite/sqlite_metadata.h
+2
@@ -12,6 +12,8 @@ void metadata_sync_shutdown(void);
12
void metadata_sync_shutdown_prepare(void);
13
14
void metaqueue_delete_dimension_uuid(uuid_t *uuid);
15
+void metaqueue_store_claim_id(uuid_t *host_uuid, uuid_t *claim_uuid);
16
+void metaqueue_host_update_info(RRDHOST *host);
17
void migrate_localhost(uuid_t *host_uuid);
18
19
// UNIT TEST