summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEmmanuel Vasilakis <mrzammler@mm.st>2023-01-17 17:08:16 +0200
committerGitHub <noreply@github.com>2023-01-17 17:08:16 +0200
commit6be264d62788b1b50109dc1f2a0cb6f622cfb804 (patch)
treef53e98af92e751c596e7123e8ced40bf3f3c0478
parent02f4b6cba721e871b7955780c595257dc7fa1f0f (diff)
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
-rw-r--r--claim/claim.c3
-rw-r--r--database/rrdhost.c1
-rw-r--r--database/sqlite/sqlite_metadata.c33
-rw-r--r--database/sqlite/sqlite_metadata.h2
4 files changed, 37 insertions, 2 deletions
diff --git a/claim/claim.c b/claim/claim.c
index cc5db81dea..9fe156d211 100644
--- a/claim/claim.c
+++ b/claim/claim.c
@@ -170,10 +170,9 @@ void load_claiming_state(void)
}
invalidate_node_instances(&localhost->host_uuid, claimed_id ? &uuid : NULL);
+ metaqueue_store_claim_id(&localhost->host_uuid, claimed_id ? &uuid : NULL);
rrdhost_aclk_state_unlock(localhost);
- rrdhost_flag_set(localhost, RRDHOST_FLAG_METADATA_CLAIMID | RRDHOST_FLAG_METADATA_UPDATE);
-
if (!claimed_id) {
info("Unable to load '%s', setting state to AGENT_UNCLAIMED", filename);
return;
diff --git a/database/rrdhost.c b/database/rrdhost.c
index 7937573eed..94e5a4770f 100644
--- a/database/rrdhost.c
+++ b/database/rrdhost.c
@@ -364,6 +364,7 @@ int is_legacy = 1;
rrdfamily_index_init(host);
rrdcalctemplate_index_init(host);
rrdcalc_rrdhost_index_init(host);
+ metaqueue_host_update_info(host);
if (health_enabled)
health_thread_spawn(host);
diff --git a/database/sqlite/sqlite_metadata.c b/database/sqlite/sqlite_metadata.c
index ec6df3f15d..28cd18e40e 100644
--- a/database/sqlite/sqlite_metadata.c
+++ b/database/sqlite/sqlite_metadata.c
@@ -62,6 +62,7 @@ enum metadata_opcode {
METADATA_DATABASE_TIMER,
METADATA_DEL_DIMENSION,
METADATA_STORE_CLAIM_ID,
+ METADATA_ADD_HOST_INFO,
METADATA_SCAN_HOSTS,
METADATA_MAINTENANCE,
METADATA_SYNC_SHUTDOWN,
@@ -1014,6 +1015,7 @@ static void metadata_event_loop(void *arg)
worker_register_job_name(METADATA_DATABASE_TIMER, "timer");
worker_register_job_name(METADATA_DEL_DIMENSION, "delete dimension");
worker_register_job_name(METADATA_STORE_CLAIM_ID, "add claim id");
+ worker_register_job_name(METADATA_ADD_HOST_INFO, "add host info");
worker_register_job_name(METADATA_MAINTENANCE, "maintenance");
int ret;
@@ -1063,6 +1065,8 @@ static void metadata_event_loop(void *arg)
while (shutdown == 0 || (wc->flags & METADATA_WORKER_BUSY)) {
uuid_t *uuid;
+ RRDHOST *host = NULL;
+ int rc;
worker_is_idle();
uv_run(loop, UV_RUN_DEFAULT);
@@ -1102,6 +1106,12 @@ static void metadata_event_loop(void *arg)
freez((void *) cmd.param[0]);
freez((void *) cmd.param[1]);
break;
+ case METADATA_ADD_HOST_INFO:
+ host = (RRDHOST *) cmd.param[0];
+ rc = sql_store_host_info(host);
+ if (unlikely(rc))
+ error_report("Failed to store host info in the database for %s", string2str(host->hostname));
+ break;
case METADATA_SCAN_HOSTS:
if (unlikely(metadata_flag_check(wc, METADATA_FLAG_SCANNING_HOSTS)))
break;
@@ -1281,6 +1291,29 @@ void metaqueue_delete_dimension_uuid(uuid_t *uuid)
queue_metadata_cmd(METADATA_DEL_DIMENSION, use_uuid, NULL);
}
+void metaqueue_store_claim_id(uuid_t *host_uuid, uuid_t *claim_uuid)
+{
+ if (unlikely(!host_uuid))
+ return;
+
+ uuid_t *local_host_uuid = mallocz(sizeof(*host_uuid));
+ uuid_t *local_claim_uuid = NULL;
+
+ uuid_copy(*local_host_uuid, *host_uuid);
+ if (likely(claim_uuid)) {
+ local_claim_uuid = mallocz(sizeof(*claim_uuid));
+ uuid_copy(*local_claim_uuid, *claim_uuid);
+ }
+ queue_metadata_cmd(METADATA_STORE_CLAIM_ID, local_host_uuid, local_claim_uuid);
+}
+
+void metaqueue_host_update_info(RRDHOST *host)
+{
+ if (unlikely(!metasync_worker.loop))
+ return;
+ queue_metadata_cmd(METADATA_ADD_HOST_INFO, host, NULL);
+}
+
//
// unitests
//
diff --git a/database/sqlite/sqlite_metadata.h b/database/sqlite/sqlite_metadata.h
index 58ba666709..d578b7a8fe 100644
--- a/database/sqlite/sqlite_metadata.h
+++ b/database/sqlite/sqlite_metadata.h
@@ -12,6 +12,8 @@ void metadata_sync_shutdown(void);
void metadata_sync_shutdown_prepare(void);
void metaqueue_delete_dimension_uuid(uuid_t *uuid);
+void metaqueue_store_claim_id(uuid_t *host_uuid, uuid_t *claim_uuid);
+void metaqueue_host_update_info(RRDHOST *host);
void migrate_localhost(uuid_t *host_uuid);
// UNIT TEST