From 31467a58dd7a711c6341b3f09b45e02c3de7ba21 Mon Sep 17 00:00:00 2001 From: Remi Gacogne Date: Fri, 27 Dec 2024 12:59:47 +0100 Subject: [PATCH] dnsdist: Handle the default LB policy in YAML configuration --- pdns/dnsdistdist/dnsdist-configuration-yaml.cc | 7 +++++++ pdns/dnsdistdist/dnsdist-rust-lib/rust/src/lib.rs | 11 +++++++++++ pdns/dnsdistdist/dnsdist-settings-definitions.yml | 5 +++++ pdns/dnsdistdist/docs/reference/yaml-settings.rst | 1 + 4 files changed, 24 insertions(+) diff --git a/pdns/dnsdistdist/dnsdist-configuration-yaml.cc b/pdns/dnsdistdist/dnsdist-configuration-yaml.cc index 1ed9835171..da6dae586b 100644 --- a/pdns/dnsdistdist/dnsdist-configuration-yaml.cc +++ b/pdns/dnsdistdist/dnsdist-configuration-yaml.cc @@ -831,6 +831,13 @@ bool loadConfigurationFromFile(const std::string& fileName, bool isClient, bool } } + if (!globalConfig.load_balancing_policies.default_policy.empty()) { + auto policy = getRegisteredTypeByName(globalConfig.load_balancing_policies.default_policy); + dnsdist::configuration::updateRuntimeConfiguration([&policy](dnsdist::configuration::RuntimeConfiguration& config) { + config.d_lbPolicy = std::move(policy); + }); + } + for (const auto& pool : globalConfig.pools) { std::shared_ptr poolObj = createPoolIfNotExists(std::string(pool.name)); if (!pool.packet_cache.empty()) { diff --git a/pdns/dnsdistdist/dnsdist-rust-lib/rust/src/lib.rs b/pdns/dnsdistdist/dnsdist-rust-lib/rust/src/lib.rs index ac9a1845e4..81f95759d2 100644 --- a/pdns/dnsdistdist/dnsdist-rust-lib/rust/src/lib.rs +++ b/pdns/dnsdistdist/dnsdist-rust-lib/rust/src/lib.rs @@ -2010,6 +2010,8 @@ mod dnsdistsettings { #[derive(Deserialize, Serialize, Debug, PartialEq)] #[serde(deny_unknown_fields)] struct LoadBalancingPoliciesConfiguration { + #[serde(rename = "default-policy", default = "crate::default_value_load_balancing_policies_default_policy", skip_serializing_if = "crate::default_value_equal_load_balancing_policies_default_policy")] + default_policy: String, #[serde(rename = "servfail-on-no-server", default, skip_serializing_if = "crate::is_default")] servfail_on_no_server: bool, #[serde(rename = "round-robin-servfail-on-no-server", default, skip_serializing_if = "crate::is_default")] @@ -3058,6 +3060,15 @@ impl Default for dnsdistsettings::CustomLoadBalancingPolicyConfiguration { } +// DEFAULT HANDLING for load_balancing_policies_default_policy +fn default_value_load_balancing_policies_default_policy() -> String { + String::from("leastOutstanding") +} +fn default_value_equal_load_balancing_policies_default_policy(value: &str)-> bool { + value == default_value_load_balancing_policies_default_policy() +} + + impl Default for dnsdistsettings::LoadBalancingPoliciesConfiguration { fn default() -> Self { let deserialized: dnsdistsettings::LoadBalancingPoliciesConfiguration = serde_yaml::from_str("").unwrap(); diff --git a/pdns/dnsdistdist/dnsdist-settings-definitions.yml b/pdns/dnsdistdist/dnsdist-settings-definitions.yml index 1e42374d39..513d1f12ac 100644 --- a/pdns/dnsdistdist/dnsdist-settings-definitions.yml +++ b/pdns/dnsdistdist/dnsdist-settings-definitions.yml @@ -1411,6 +1411,11 @@ custom-load-balancing-policy: load-balancing-policies: parameters: + - name: "default-policy" + type: "String" + default: "leastOutstanding" + lua-name: "setServerPolicy" + runtime-configurable: true - name: "servfail-on-no-server" type: "bool" default: "false" diff --git a/pdns/dnsdistdist/docs/reference/yaml-settings.rst b/pdns/dnsdistdist/docs/reference/yaml-settings.rst index b887c5e8a3..ee4c8d37c7 100644 --- a/pdns/dnsdistdist/docs/reference/yaml-settings.rst +++ b/pdns/dnsdistdist/docs/reference/yaml-settings.rst @@ -501,6 +501,7 @@ LazyHealthCheckConfiguration LoadBalancingPoliciesConfiguration ---------------------------------- +- **default-policy**: String ``(leastOutstanding)`` - **servfail-on-no-server**: Boolean ``(false)`` - **round-robin-servfail-on-no-server**: Boolean ``(false)`` - **weighted-balancing-factor**: Double ``(0.0)`` -- 2.47.2