summaryrefslogtreecommitdiffstats
path: root/database/sqlite/sqlite_aclk.c
diff options
context:
space:
mode:
authorStelios Fragkakis <52996999+stelfrag@users.noreply.github.com>2023-03-08 17:19:17 +0200
committerGitHub <noreply@github.com>2023-03-08 17:19:17 +0200
commit34737e3fda17312a4c73ff4d5c3154e733edac8b (patch)
tree4dca040de3349ce10040b2b95c2828d3cafe5dc7 /database/sqlite/sqlite_aclk.c
parent5c18b5d0c693cd115a25c0447c6bbeb0f931bb01 (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.c26
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);