diff --git a/changelog.d/23748_add_indexer_ack_compression.feature.md b/changelog.d/23748_add_indexer_ack_compression.feature.md new file mode 100644 index 0000000000000..5b9068623a09a --- /dev/null +++ b/changelog.d/23748_add_indexer_ack_compression.feature.md @@ -0,0 +1,3 @@ +Adds proper support for compression of HEC indexer ack queries, using the sink's configured `compression` setting. + +authors: sbalmos diff --git a/src/sinks/splunk_hec/common/acknowledgements.rs b/src/sinks/splunk_hec/common/acknowledgements.rs index 5fc0ab568823f..6975653a8b2fc 100644 --- a/src/sinks/splunk_hec/common/acknowledgements.rs +++ b/src/sinks/splunk_hec/common/acknowledgements.rs @@ -1,16 +1,17 @@ +use hyper::Body; +use serde::{Deserialize, Serialize}; +use std::io::Write; use std::{ collections::HashMap, num::{NonZeroU8, NonZeroU64}, sync::Arc, time::Duration, }; - -use hyper::Body; -use serde::{Deserialize, Serialize}; use tokio::sync::{mpsc::Receiver, oneshot::Sender}; use vector_lib::{configurable::configurable_component, event::EventStatus}; use super::service::{HttpRequestBuilder, MetadataFields}; +use crate::sinks::util::Compressor; use crate::{ config::AcknowledgementsConfig, http::HttpClient, @@ -18,7 +19,6 @@ use crate::{ SplunkIndexerAcknowledgementAPIError, SplunkIndexerAcknowledgementAckAdded, SplunkIndexerAcknowledgementAcksRemoved, }, - sinks::util::Compression, }; /// Splunk HEC acknowledgement configuration. @@ -96,12 +96,6 @@ impl HecAckClient { client: HttpClient, http_request_builder: Arc, ) -> Self { - // Reimplement with compression support, see https://github.com/vectordotdev/vector/issues/23748 - let http_request_builder = Arc::new(HttpRequestBuilder { - compression: Compression::None, - ..(*http_request_builder).clone() - }); - Self { acks: HashMap::new(), retry_limit, @@ -222,10 +216,18 @@ impl HecAckClient { let request_body_bytes = crate::serde::json::to_bytes(request_body) .map_err(|_| HecAckApiError::ClientBuildRequest)? .freeze(); + let mut compressor = Compressor::from(self.http_request_builder.compression); + compressor + .write_all(request_body_bytes.as_ref()) + .map_err(|_| HecAckApiError::ClientBuildRequest)?; + let payload = compressor + .finish() + .map_err(|_| HecAckApiError::ClientBuildRequest)? + .freeze(); let request = self .http_request_builder .build_request( - request_body_bytes, + payload, "/services/collector/ack", None, MetadataFields::default(),