From 43547c79018574aded2b45684cfeb62d76e33336 Mon Sep 17 00:00:00 2001 From: Hiroshi Hatake Date: Thu, 1 Jun 2023 17:45:13 +0900 Subject: [PATCH 1/2] config: reload: bin: Add opt-in option to ensure thread safety on hot reloading Signed-off-by: Hiroshi Hatake --- include/fluent-bit/flb_config.h | 2 ++ src/flb_config.c | 4 ++++ src/flb_reload.c | 4 ++++ src/fluent-bit.c | 8 +++++++- 4 files changed, 17 insertions(+), 1 deletion(-) diff --git a/include/fluent-bit/flb_config.h b/include/fluent-bit/flb_config.h index 1d5898702c2..4e1912c6459 100644 --- a/include/fluent-bit/flb_config.h +++ b/include/fluent-bit/flb_config.h @@ -257,6 +257,7 @@ struct flb_config { #endif /* FLB_HAVE_CHUNK_TRACE */ int enable_hot_reload; + int ensure_thread_safety_on_hot_reloading; /* Co-routines */ unsigned int coro_stack_size; @@ -337,6 +338,7 @@ enum conf_type { #endif /* FLB_HAVE_CHUNK_TRACE */ #define FLB_CONF_STR_HOT_RELOAD "Hot_Reload" +#define FLB_CONF_STR_HOT_RELOAD_ENSURE_THREAD_SAFETY "Hot_Reload.Ensure_Thread_Safety" /* DNS */ #define FLB_CONF_DNS_MODE "dns.mode" diff --git a/src/flb_config.c b/src/flb_config.c index 6e0af59b904..826ba95668c 100644 --- a/src/flb_config.c +++ b/src/flb_config.c @@ -177,6 +177,10 @@ struct flb_service_config service_configs[] = { FLB_CONF_TYPE_BOOL, offsetof(struct flb_config, enable_hot_reload)}, + {FLB_CONF_STR_HOT_RELOAD_ENSURE_THREAD_SAFETY, + FLB_CONF_TYPE_BOOL, + offsetof(struct flb_config, ensure_thread_safety_on_hot_reloading)}, + {NULL, FLB_CONF_TYPE_OTHER, 0} /* end of array */ }; diff --git a/src/flb_reload.c b/src/flb_reload.c index f0dedafbfe8..6931b71704c 100644 --- a/src/flb_reload.c +++ b/src/flb_reload.c @@ -380,6 +380,10 @@ int flb_reload(flb_ctx_t *ctx, struct flb_cf *cf_opts) return -3; } + if (old_config->ensure_thread_safety_on_hot_reloading) { + old_config->grace = -1; + } + /* Normally, we should create a service section before using this cf * context. However, this context of config format will be used * for copying contents from other one. So, we just need to create diff --git a/src/fluent-bit.c b/src/fluent-bit.c index 96fc7ab0d33..a00c3b20d66 100644 --- a/src/fluent-bit.c +++ b/src/fluent-bit.c @@ -150,6 +150,7 @@ static void flb_help(int rc, struct flb_config *config) print_opt("-q, --quiet", "quiet mode"); print_opt("-S, --sosreport", "support report for Enterprise customers"); print_opt("-Y, --enable-hot-reload", "enable for hot reloading"); + print_opt("-W, --ensure-thread-safety-on-hot-reloading", "ensure thread safety on hot reloading"); print_opt("-V, --version", "show version number"); print_opt("-h, --help", "print this help"); @@ -804,6 +805,7 @@ int flb_main(int argc, char **argv) #ifdef FLB_HAVE_CHUNK_TRACE { "enable-chunk-trace", no_argument, NULL, 'Z' }, #endif + { "ensure-thread-safety-on-hot-reload", no_argument, NULL, 'W' }, { NULL, 0, NULL, 0 } }; @@ -830,7 +832,7 @@ int flb_main(int argc, char **argv) /* Parse the command line options */ while ((opt = getopt_long(argc, argv, "b:c:dDf:C:i:m:o:R:F:p:e:" - "t:T:l:vw:qVhJL:HP:s:SYZ", + "t:T:l:vw:qVhJL:HP:s:SWYZ", long_opts, NULL)) != -1) { switch (opt) { @@ -988,6 +990,10 @@ int flb_main(int argc, char **argv) case 'Y': flb_cf_section_property_add(cf_opts, service->properties, FLB_CONF_STR_HOT_RELOAD, 0, "on", 0); break; + case 'W': + flb_cf_section_property_add(cf_opts, service->properties, + FLB_CONF_STR_HOT_RELOAD_ENSURE_THREAD_SAFETY, 0, "on", 0); + break; #ifdef FLB_HAVE_CHUNK_TRACE case 'Z': flb_cf_section_property_add(cf_opts, service->properties, FLB_CONF_STR_ENABLE_CHUNK_TRACE, 0, "on", 0); From f8f743f665610cc8f907de91518a855abcd8bbbf Mon Sep 17 00:00:00 2001 From: Hiroshi Hatake Date: Thu, 1 Jun 2023 18:09:48 +0900 Subject: [PATCH 2/2] config: bin: Ensure thread safety on reloading by default Signed-off-by: Hiroshi Hatake --- src/flb_config.c | 3 +++ src/fluent-bit.c | 6 +++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/flb_config.c b/src/flb_config.c index 826ba95668c..0b9cc578ba6 100644 --- a/src/flb_config.c +++ b/src/flb_config.c @@ -272,6 +272,9 @@ struct flb_config *flb_config_init() config->sched_cap = FLB_SCHED_CAP; config->sched_base = FLB_SCHED_BASE; + /* reload */ + config->ensure_thread_safety_on_hot_reloading = FLB_TRUE; + #ifdef FLB_HAVE_SQLDB mk_list_init(&config->sqldb_list); #endif diff --git a/src/fluent-bit.c b/src/fluent-bit.c index a00c3b20d66..46e159b2159 100644 --- a/src/fluent-bit.c +++ b/src/fluent-bit.c @@ -150,7 +150,7 @@ static void flb_help(int rc, struct flb_config *config) print_opt("-q, --quiet", "quiet mode"); print_opt("-S, --sosreport", "support report for Enterprise customers"); print_opt("-Y, --enable-hot-reload", "enable for hot reloading"); - print_opt("-W, --ensure-thread-safety-on-hot-reloading", "ensure thread safety on hot reloading"); + print_opt("-W, --disable-thread-safety-on-hot-reloading", "disable thread safety on hot reloading"); print_opt("-V, --version", "show version number"); print_opt("-h, --help", "print this help"); @@ -805,7 +805,7 @@ int flb_main(int argc, char **argv) #ifdef FLB_HAVE_CHUNK_TRACE { "enable-chunk-trace", no_argument, NULL, 'Z' }, #endif - { "ensure-thread-safety-on-hot-reload", no_argument, NULL, 'W' }, + { "disable-thread-safety-on-hot-reload", no_argument, NULL, 'W' }, { NULL, 0, NULL, 0 } }; @@ -992,7 +992,7 @@ int flb_main(int argc, char **argv) break; case 'W': flb_cf_section_property_add(cf_opts, service->properties, - FLB_CONF_STR_HOT_RELOAD_ENSURE_THREAD_SAFETY, 0, "on", 0); + FLB_CONF_STR_HOT_RELOAD_ENSURE_THREAD_SAFETY, 0, "off", 0); break; #ifdef FLB_HAVE_CHUNK_TRACE case 'Z':