From de92b216c714e5513689e11de53812e1b2ce702e Mon Sep 17 00:00:00 2001 From: Damien Mehala Date: Wed, 22 May 2024 20:10:45 +0200 Subject: [PATCH] fix: remote config polling parsing According to the Remote Configuration specification, `DD_REMOTE_CONFIG_POLL_INTERVAL_SECONDS` support floating point input and can be set to `0`. --- src/datadog/datadog_agent_config.cpp | 11 ++++++----- src/datadog/datadog_agent_config.h | 2 +- test/test_tracer_config.cpp | 10 +--------- 3 files changed, 8 insertions(+), 15 deletions(-) diff --git a/src/datadog/datadog_agent_config.cpp b/src/datadog/datadog_agent_config.cpp index aef6074c..6049a823 100644 --- a/src/datadog/datadog_agent_config.cpp +++ b/src/datadog/datadog_agent_config.cpp @@ -21,7 +21,7 @@ Expected load_datadog_agent_env_config() { if (auto raw_rc_poll_interval_value = lookup(environment::DD_REMOTE_CONFIG_POLL_INTERVAL_SECONDS)) { - auto res = parse_int(*raw_rc_poll_interval_value, 10); + auto res = parse_double(*raw_rc_poll_interval_value); if (auto error = res.if_error()) { return error->with_prefix( "DatadogAgent: Remote Configuration poll interval error "); @@ -114,12 +114,13 @@ Expected finalize_config( "milliseconds."}; } - if (int rc_poll_interval_seconds = + if (double rc_poll_interval_seconds = value_or(env_config->remote_configuration_poll_interval_seconds, - user_config.remote_configuration_poll_interval_seconds, 5); - rc_poll_interval_seconds > 0) { + user_config.remote_configuration_poll_interval_seconds, 5.0); + rc_poll_interval_seconds >= 0.0) { result.remote_configuration_poll_interval = - std::chrono::seconds(rc_poll_interval_seconds); + std::chrono::duration_cast( + std::chrono::duration(rc_poll_interval_seconds)); } else { return Error{Error::DATADOG_AGENT_INVALID_REMOTE_CONFIG_POLL_INTERVAL, "DatadogAgent: Remote Configuration poll interval must be a " diff --git a/src/datadog/datadog_agent_config.h b/src/datadog/datadog_agent_config.h index 432b11b7..67559aee 100644 --- a/src/datadog/datadog_agent_config.h +++ b/src/datadog/datadog_agent_config.h @@ -61,7 +61,7 @@ struct DatadogAgentConfig { Optional remote_configuration_enabled; // How often, in seconds, to query the Datadog Agent for remote configuration // updates. - Optional remote_configuration_poll_interval_seconds; + Optional remote_configuration_poll_interval_seconds; static Expected parse(StringView); }; diff --git a/test/test_tracer_config.cpp b/test/test_tracer_config.cpp index 42c93bc1..a94129c8 100644 --- a/test/test_tracer_config.cpp +++ b/test/test_tracer_config.cpp @@ -446,14 +446,6 @@ TEST_CASE("TracerConfig::agent") { } SECTION("remote configuration poll interval") { - SECTION("cannot be zero") { - config.agent.remote_configuration_poll_interval_seconds = 0; - auto finalized = finalize_config(config); - REQUIRE(!finalized); - REQUIRE(finalized.error().code == - Error::DATADOG_AGENT_INVALID_REMOTE_CONFIG_POLL_INTERVAL); - } - SECTION("cannot be negative") { config.agent.remote_configuration_poll_interval_seconds = -1337; auto finalized = finalize_config(config); @@ -491,7 +483,7 @@ TEST_CASE("TracerConfig::agent") { "ddog"}; auto finalized = finalize_config(config); REQUIRE(!finalized); - REQUIRE(finalized.error().code == Error::INVALID_INTEGER); + REQUIRE(finalized.error().code == Error::INVALID_DOUBLE); } } }