Make sure ACLK synchronization event loop runs frequently (#19446)
* Process MAX_BATCH_SIZE commands before running the event loop again * Increase command count Make sure to exit and run event loop on sync command execution
Stelios Fragkakis committed
Jan 20, 2025 at 20:22 UTC
58467c686c213017a6aa001c6e959ce92b6c93fa
1 file changed
+11
src/database/sqlite/sqlite_aclk.c
+11
@@ -585,6 +585,8 @@ static void start_alert_push(uv_work_t *req __maybe_unused)
585
586
#define MAX_ACLK_BATCH_JOBS_IN_QUEUE (20)
587
588
+#define MAX_BATCH_SIZE (64)
589
+
590
static void aclk_synchronization(void *arg)
591
{
592
struct aclk_sync_config_s *config = arg;
@@ -599,6 +601,8 @@ static void aclk_synchronization(void *arg)
601
worker_register_job_name(ACLK_QUERY_EXECUTE_SYNC, "aclk query execute sync");
602
worker_register_job_name(ACLK_QUERY_BATCH_EXECUTE, "aclk batch execute");
603
worker_register_job_name(ACLK_QUERY_BATCH_ADD, "aclk batch add");
604
+ worker_register_job_name(ACLK_MQTT_WSS_CLIENT, "config mqtt client");
605
+ worker_register_job_name(ACLK_DATABASE_NODE_UNREGISTER, "unregister node");
606
607
uv_loop_t *loop = &config->loop;
608
fatal_assert(0 == uv_loop_init(loop));
@@ -623,18 +627,24 @@ static void aclk_synchronization(void *arg)
627
Pvoid_t *Pvalue;
628
struct aclk_query_payload *payload;
629
630
+ unsigned cmd_batch_size;
631
while (likely(service_running(SERVICE_ACLK))) {
632
enum aclk_database_opcode opcode;
633
worker_is_idle();
634
uv_run(loop, UV_RUN_DEFAULT);
635
636
/* wait for commands */
637
+ cmd_batch_size = 0;
638
do {
639
+ if (unlikely(cmd_batch_size >= MAX_BATCH_SIZE))
640
+ break;
641
+
642
struct aclk_database_cmd cmd = aclk_database_deq_cmd();
643
644
if (unlikely(!service_running(SERVICE_ACLK)))
645
break;
646
647
+ ++cmd_batch_size;
648
opcode = cmd.opcode;
649
650
if(likely(opcode != ACLK_DATABASE_NOOP && opcode != ACLK_QUERY_EXECUTE))
@@ -723,6 +733,7 @@ static void aclk_synchronization(void *arg)
733
aclk_run_query(config, query, false);
734
freez(payload);
735
config->aclk_queries_running--;
736
+ cmd_batch_size = MAX_BATCH_SIZE;
737
}
738
break;
739