diff options
author | Stelios Fragkakis <52996999+stelfrag@users.noreply.github.com> | 2023-03-08 17:19:17 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-03-08 17:19:17 +0200 |
commit | 34737e3fda17312a4c73ff4d5c3154e733edac8b (patch) | |
tree | 4dca040de3349ce10040b2b95c2828d3cafe5dc7 /database/sqlite/sqlite_aclk.c | |
parent | 5c18b5d0c693cd115a25c0447c6bbeb0f931bb01 (diff) |
Fix cloud node stale status when a virtual host is created (#14660)
* Schedule direct metadata update on host creation
Virtual hosts do not have a receiver but they are not orphan
Schedule node info update on host activation
New function to store host info and host_system_info
If the host is just created, create tables and sync thread
If the host exists during startup it is not live but reschedule node update if it is reactivated
* New opcode to send current node state
* Remove debug messages
* Fix system host info
Diffstat (limited to 'database/sqlite/sqlite_aclk.c')
-rw-r--r-- | database/sqlite/sqlite_aclk.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/database/sqlite/sqlite_aclk.c b/database/sqlite/sqlite_aclk.c index 53f2391cd8..0fd4f491c5 100644 --- a/database/sqlite/sqlite_aclk.c +++ b/database/sqlite/sqlite_aclk.c @@ -10,6 +10,23 @@ void sanity_check(void) { BUILD_BUG_ON(WORKER_UTILIZATION_MAX_JOB_TYPES < ACLK_MAX_ENUMERATIONS_DEFINED); } +void schedule_node_info_update(RRDHOST *host) +{ + if (unlikely(!host)) + return; + + struct aclk_database_worker_config *wc = host->dbsync_worker; + + if (unlikely(!wc)) + return; + + struct aclk_database_cmd cmd; + memset(&cmd, 0, sizeof(cmd)); + cmd.opcode = ACLK_DATABASE_NODE_STATE; + cmd.completion = NULL; + aclk_database_enq_cmd(wc, &cmd); +} + static int sql_check_aclk_table(void *data, int argc, char **argv, char **column) { struct aclk_database_worker_config *wc = data; @@ -500,6 +517,7 @@ static void aclk_database_worker(void *arg) worker_register_job_name(ACLK_DATABASE_CLEANUP, "cleanup"); worker_register_job_name(ACLK_DATABASE_DELETE_HOST, "node delete"); worker_register_job_name(ACLK_DATABASE_NODE_INFO, "node info"); + worker_register_job_name(ACLK_DATABASE_NODE_STATE, "node state"); worker_register_job_name(ACLK_DATABASE_NODE_COLLECTORS, "node collectors"); worker_register_job_name(ACLK_DATABASE_PUSH_ALERT, "alert push"); worker_register_job_name(ACLK_DATABASE_PUSH_ALERT_CONFIG, "alert conf push"); @@ -620,6 +638,14 @@ static void aclk_database_worker(void *arg) break; // NODE OPERATIONS + case ACLK_DATABASE_NODE_STATE: + debug(D_ACLK_SYNC,"Sending state update for %s", wc->uuid_str); + if (wc->host) { + RRDHOST *host = wc->host; + int live = (host == localhost || host->receiver || !(rrdhost_flag_check(host, RRDHOST_FLAG_ORPHAN))) ? 1 : 0; + aclk_host_state_update(wc->host, live); + } + break; case ACLK_DATABASE_NODE_INFO: debug(D_ACLK_SYNC,"Sending node info for %s", wc->uuid_str); sql_build_node_info(wc, cmd); |