diff --git a/userspace/engine/falco_common.h b/userspace/engine/falco_common.h index e0c7ebed..6ddefad2 100644 --- a/userspace/engine/falco_common.h +++ b/userspace/engine/falco_common.h @@ -21,7 +21,11 @@ limitations under the License. #include #include -#define DEFAULT_OUTPUTS_QUEUE_CAPACITY 0 +// +// equivalent to an "unbounded queue" in TBB terms or largest long value +// https://github.com/oneapi-src/oneTBB/blob/b2474bfc636937052d05daf8b3f4d6b76e20273a/include/oneapi/tbb/concurrent_queue.h#L554 +// +#define DEFAULT_OUTPUTS_QUEUE_CAPACITY std::ptrdiff_t(~size_t(0) / 2) // // Most falco_* classes can throw exceptions. Unless directly related diff --git a/userspace/falco/configuration.cpp b/userspace/falco/configuration.cpp index a25299bb..0f67d3f4 100644 --- a/userspace/falco/configuration.cpp +++ b/userspace/falco/configuration.cpp @@ -284,6 +284,11 @@ void falco_configuration::load_yaml(const std::string& config_name, const yaml_h m_buffered_outputs = config.get_scalar("buffered_outputs", false); m_outputs_queue_capacity = config.get_scalar("outputs_queue.capacity", DEFAULT_OUTPUTS_QUEUE_CAPACITY); + // We use 0 in falco.yaml to indicate an unbounded queue; equivalent to the largest long value + if (m_outputs_queue_capacity == 0) + { + m_outputs_queue_capacity = DEFAULT_OUTPUTS_QUEUE_CAPACITY; + } std::string recovery = config.get_scalar("outputs_queue.recovery", "exit"); if (!falco_common::parse_recovery(recovery, m_outputs_queue_recovery)) { diff --git a/userspace/falco/falco_outputs.cpp b/userspace/falco/falco_outputs.cpp index af2c642a..1cbc6cb3 100644 --- a/userspace/falco/falco_outputs.cpp +++ b/userspace/falco/falco_outputs.cpp @@ -67,10 +67,7 @@ falco_outputs::falco_outputs( } #ifndef __EMSCRIPTEN__ m_worker_thread = std::thread(&falco_outputs::worker, this); - if (outputs_queue_capacity > 0) - { - m_queue.set_capacity(outputs_queue_capacity); - } + m_queue.set_capacity(outputs_queue_capacity); m_recovery = outputs_queue_recovery; m_outputs_queue_num_drops = 0UL; #endif diff --git a/userspace/falco/stats_writer.cpp b/userspace/falco/stats_writer.cpp index 0f3b73ea..4a04cd06 100644 --- a/userspace/falco/stats_writer.cpp +++ b/userspace/falco/stats_writer.cpp @@ -91,10 +91,7 @@ stats_writer::stats_writer( m_config = config; // capacity and controls should not be relevant for stats outputs, adopt capacity // for completeness, but do not implement config recovery strategies. - if (config->m_outputs_queue_capacity > 0) - { - m_queue.set_capacity(config->m_outputs_queue_capacity); - } + m_queue.set_capacity(config->m_outputs_queue_capacity); if (config->m_metrics_enabled) { if (!config->m_metrics_output_file.empty())