Skip to content

Commit f208111

Browse files
authored
fix(datadog forwarder): use fallback behavior for forwarder retry queue size settings (#1203)
1 parent ac8793d commit f208111

File tree

1 file changed

+45
-12
lines changed
  • lib/saluki-components/src/common/datadog

1 file changed

+45
-12
lines changed

lib/saluki-components/src/common/datadog/retry.rs

Lines changed: 45 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ use saluki_io::net::util::retry::{DefaultHttpRetryPolicy, ExponentialBackoff};
88
use serde::Deserialize;
99
use tracing::debug;
1010

11+
const FORWARDER_RETRY_QUEUE_PAYLOADS_MAX_SIZE_BYTES: u64 = 15 * 1024 * 1024;
1112
const RETRY_TXN_DIR: &str = "transactions_to_retry";
1213

1314
const fn default_request_backoff_factor() -> f64 {
@@ -30,10 +31,6 @@ const fn default_request_recovery_reset() -> bool {
3031
false
3132
}
3233

33-
const fn default_retry_queue_max_size_bytes() -> u64 {
34-
15 * 1024 * 1024
35-
}
36-
3734
const fn default_storage_max_size_bytes() -> u64 {
3835
0
3936
}
@@ -91,12 +88,14 @@ pub struct RetryConfiguration {
9188
/// The maximum in-memory size of the retry queue, in bytes.
9289
///
9390
/// Defaults to 15MiB.
94-
#[serde(
95-
rename = "forwarder_retry_queue_payloads_max_size",
96-
alias = "forwarder_retry_queue_max_size",
97-
default = "default_retry_queue_max_size_bytes"
98-
)]
99-
retry_queue_max_size_bytes: u64,
91+
#[serde(rename = "forwarder_retry_queue_payloads_max_size")]
92+
retry_queue_payloads_max_size: Option<u64>,
93+
94+
/// The maximum in-memory size of the retry queue, in bytes. (deprecated)
95+
///
96+
/// Defaults to 0.
97+
#[serde(rename = "forwarder_retry_queue_max_size")]
98+
retry_queue_max_size: Option<u64>,
10099

101100
/// The maximum size of the retry queue on disk, in bytes.
102101
///
@@ -151,8 +150,13 @@ impl RetryConfiguration {
151150
}
152151

153152
/// Returns the maximum size of the retry queue in bytes.
154-
pub const fn queue_max_size_bytes(&self) -> u64 {
155-
self.retry_queue_max_size_bytes
153+
///
154+
/// Preferentially uses `forwarder_retry_queue_payloads_max_size` if set, otherwise uses `forwarder_retry_queue_max_size`. If neither
155+
/// are set, defaults to 15MiB.
156+
pub fn queue_max_size_bytes(&self) -> u64 {
157+
self.retry_queue_payloads_max_size
158+
.or(self.retry_queue_max_size)
159+
.unwrap_or(FORWARDER_RETRY_QUEUE_PAYLOADS_MAX_SIZE_BYTES)
156160
}
157161

158162
/// Returns the maximum size of the retry queue on disk, in bytes.
@@ -246,4 +250,33 @@ mod tests {
246250

247251
assert_eq!(PathBuf::new(), retry_config.storage_path());
248252
}
253+
254+
#[tokio::test]
255+
async fn queue_max_size_bytes_fallback_behavior() {
256+
const OVERRIDE_FALLBACK_SIZE_BYTES: u64 = 1024;
257+
const OVERRIDE_PRIMARY_SIZE_BYTES: u64 = 2048;
258+
259+
// When neither field is set, returns the default (15 MiB).
260+
let (config, _) = ConfigurationLoader::for_tests(None, None, false).await;
261+
let retry_config: RetryConfiguration = config.as_typed().expect("should deserialize");
262+
assert_eq!(
263+
retry_config.queue_max_size_bytes(),
264+
FORWARDER_RETRY_QUEUE_PAYLOADS_MAX_SIZE_BYTES
265+
);
266+
267+
// When only the deprecated field is set, uses it.
268+
let values = json!({ "forwarder_retry_queue_max_size": OVERRIDE_FALLBACK_SIZE_BYTES });
269+
let (config, _) = ConfigurationLoader::for_tests(Some(values), None, false).await;
270+
let retry_config: RetryConfiguration = config.as_typed().expect("should deserialize");
271+
assert_eq!(retry_config.queue_max_size_bytes(), OVERRIDE_FALLBACK_SIZE_BYTES);
272+
273+
// When both fields are set, the newer field takes priority.
274+
let values = json!({
275+
"forwarder_retry_queue_payloads_max_size": OVERRIDE_PRIMARY_SIZE_BYTES,
276+
"forwarder_retry_queue_max_size": OVERRIDE_FALLBACK_SIZE_BYTES,
277+
});
278+
let (config, _) = ConfigurationLoader::for_tests(Some(values), None, false).await;
279+
let retry_config: RetryConfiguration = config.as_typed().expect("should deserialize");
280+
assert_eq!(retry_config.queue_max_size_bytes(), OVERRIDE_PRIMARY_SIZE_BYTES);
281+
}
249282
}

0 commit comments

Comments
 (0)