From b3dc246cb876ffe68498edb7e2dbf630e0a56b15 Mon Sep 17 00:00:00 2001 From: Daniel Szoke Date: Mon, 29 Sep 2025 14:42:53 +0200 Subject: [PATCH] build: Replace `brotli2` with `brotli` Fixes [BE-574](https://linear.app/getsentry/issue/BE-574/remove-brotli2-dependency) --- Cargo.lock | 38 +++++++++++++++++++++++++++----------- Cargo.toml | 2 +- src/api/mod.rs | 15 ++++++++++++--- 3 files changed, 40 insertions(+), 15 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 62322ec8f9..184d6ca701 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -60,6 +60,21 @@ dependencies = [ "memchr", ] +[[package]] +name = "alloc-no-stdlib" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" + +[[package]] +name = "alloc-stdlib" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" +dependencies = [ + "alloc-no-stdlib", +] + [[package]] name = "allocator-api2" version = "0.2.21" @@ -298,23 +313,24 @@ dependencies = [ ] [[package]] -name = "brotli-sys" -version = "0.3.2" +name = "brotli" +version = "8.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4445dea95f4c2b41cde57cc9fee236ae4dbae88d8fcbdb4750fc1bb5d86aaecd" +checksum = "4bd8b9603c7aa97359dbd97ecf258968c95f3adddd6db2f7e7a5bef101c84560" dependencies = [ - "cc", - "libc", + "alloc-no-stdlib", + "alloc-stdlib", + "brotli-decompressor", ] [[package]] -name = "brotli2" -version = "0.3.2" +name = "brotli-decompressor" +version = "5.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cb036c3eade309815c15ddbacec5b22c4d1f3983a774ab2eac2e3e9ea85568e" +checksum = "874bb8112abecc98cbd6d81ea4fa7e94fb9449648c93cc89aa40c81c24d7de03" dependencies = [ - "brotli-sys", - "libc", + "alloc-no-stdlib", + "alloc-stdlib", ] [[package]] @@ -2731,7 +2747,7 @@ dependencies = [ "apple-catalog-parsing", "assert_cmd", "backoff", - "brotli2", + "brotli", "bytecount", "chrono", "chrono-tz", diff --git a/Cargo.toml b/Cargo.toml index 3a5fe55904..4f9deafadf 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,7 +12,6 @@ rust-version = "1.86" anylog = "0.6.3" anyhow = { version = "1.0.69", features = ["backtrace"] } backoff = "0.4.0" -brotli2 = "0.3.2" bytecount = "0.6.3" chrono = { version = "0.4.31", features = ["serde"] } clap = { version = "4.1.6", default-features = false, features = [ @@ -80,6 +79,7 @@ magic_string = "0.3.4" chrono-tz = "0.8.4" secrecy = "0.8.0" lru = "0.16.0" +brotli = "8.0.2" [dev-dependencies] assert_cmd = "2.0.11" diff --git a/src/api/mod.rs b/src/api/mod.rs index b836c98a80..eea8b31b58 100644 --- a/src/api/mod.rs +++ b/src/api/mod.rs @@ -24,7 +24,8 @@ use std::sync::Arc; use anyhow::{Context as _, Result}; use backoff::backoff::Backoff as _; -use brotli2::write::BrotliEncoder; +use brotli::enc::BrotliEncoderParams; +use brotli::CompressorWriter; #[cfg(target_os = "macos")] use chrono::Duration; use chrono::{DateTime, FixedOffset, Utc}; @@ -364,9 +365,17 @@ impl Api { fn compress(data: &[u8], compression: ChunkCompression) -> Result, io::Error> { Ok(match compression { ChunkCompression::Brotli => { - let mut encoder = BrotliEncoder::new(Vec::new(), 6); + let mut encoder = CompressorWriter::with_params( + Vec::new(), + 0, + &BrotliEncoderParams { + quality: 6, + ..Default::default() + }, + ); encoder.write_all(data)?; - encoder.finish()? + encoder.flush()?; + encoder.into_inner() } ChunkCompression::Gzip => {