From 182fdad07f440d198835615b40ca157253f17421 Mon Sep 17 00:00:00 2001 From: Philip Jenvey Date: Thu, 26 Mar 2026 17:16:39 -0700 Subject: [PATCH] chore: capture sentry backtraces (we were missing the "capture" feature) and switch back to sentry's now longstanding default transport of reqwest+rustls, which avoids issues w/ our grpc client's included boringssl that occurred w/ reqwest+native-tls Closes STOR-493 --- Cargo.lock | 288 +++++++++++++++++++++++++++++++++------ Cargo.toml | 7 +- Dockerfile | 2 +- docs/src/introduction.md | 5 +- syncserver/src/main.rs | 8 +- 5 files changed, 254 insertions(+), 56 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0502bd8a4d..edb1c09efc 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -425,6 +425,12 @@ version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" +[[package]] +name = "base64ct" +version = "1.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06" + [[package]] name = "bindgen" version = "0.59.2" @@ -839,36 +845,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "curl" -version = "0.4.49" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79fc3b6dd0b87ba36e565715bf9a2ced221311db47bd18011676f24a6066edbc" -dependencies = [ - "curl-sys", - "libc", - "openssl-probe 0.1.6", - "openssl-sys", - "schannel", - "socket2 0.6.3", - "windows-sys 0.59.0", -] - -[[package]] -name = "curl-sys" -version = "0.4.85+curl-8.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0efa6142b5ecc05f6d3eaa39e6af4888b9d3939273fb592c92b7088a8cf3fdb" -dependencies = [ - "cc", - "libc", - "libz-sys", - "openssl-sys", - "pkg-config", - "vcpkg", - "windows-sys 0.59.0", -] - [[package]] name = "darling" version = "0.20.11" @@ -970,6 +946,16 @@ dependencies = [ "uuid 1.22.0", ] +[[package]] +name = "der" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" +dependencies = [ + "pem-rfc7468", + "zeroize", +] + [[package]] name = "deranged" version = "0.5.8" @@ -1268,6 +1254,12 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" +[[package]] +name = "fastrand" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" + [[package]] name = "find-msvc-tools" version = "0.1.9" @@ -1309,6 +1301,21 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + [[package]] name = "form_urlencoded" version = "1.2.2" @@ -1796,6 +1803,22 @@ dependencies = [ "tower-service", ] +[[package]] +name = "hyper-tls" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" +dependencies = [ + "bytes", + "http-body-util", + "hyper", + "hyper-util", + "native-tls", + "tokio", + "tokio-native-tls", + "tower-service", +] + [[package]] name = "hyper-util" version = "0.1.20" @@ -2201,6 +2224,12 @@ version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" +[[package]] +name = "linux-raw-sys" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" + [[package]] name = "litemap" version = "0.8.1" @@ -2412,6 +2441,23 @@ dependencies = [ "uuid 1.22.0", ] +[[package]] +name = "native-tls" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "465500e14ea162429d264d44189adc38b199b62b1c21eea9f69e4b73cb03bbf2" +dependencies = [ + "libc", + "log", + "openssl", + "openssl-probe", + "openssl-sys", + "schannel", + "security-framework", + "security-framework-sys", + "tempfile", +] + [[package]] name = "nix" version = "0.23.2" @@ -2687,10 +2733,30 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" [[package]] -name = "openssl-probe" -version = "0.1.6" +name = "openssl" +version = "0.10.75" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" +checksum = "08838db121398ad17ab8531ce9de97b244589089e290a384c900cb9ff7434328" +dependencies = [ + "bitflags 2.11.0", + "cfg-if", + "foreign-types", + "libc", + "once_cell", + "openssl-macros", + "openssl-sys", +] + +[[package]] +name = "openssl-macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] [[package]] name = "openssl-probe" @@ -2781,6 +2847,15 @@ dependencies = [ "serde_core", ] +[[package]] +name = "pem-rfc7468" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" +dependencies = [ + "base64ct", +] + [[package]] name = "percent-encoding" version = "2.3.2" @@ -3227,6 +3302,44 @@ version = "0.8.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" +[[package]] +name = "reqwest" +version = "0.12.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eddd3ca559203180a307f12d114c268abf583f59b03cb906fd0b3ff8646c1147" +dependencies = [ + "base64", + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "http 1.4.0", + "http-body", + "http-body-util", + "hyper", + "hyper-tls", + "hyper-util", + "js-sys", + "log", + "native-tls", + "percent-encoding", + "pin-project-lite", + "rustls-pki-types", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper", + "tokio", + "tokio-native-tls", + "tower", + "tower-http", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + [[package]] name = "reqwest" version = "0.13.2" @@ -3372,10 +3485,23 @@ dependencies = [ "bitflags 2.11.0", "errno", "libc", - "linux-raw-sys", + "linux-raw-sys 0.4.15", "windows-sys 0.59.0", ] +[[package]] +name = "rustix" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" +dependencies = [ + "bitflags 2.11.0", + "errno", + "libc", + "linux-raw-sys 0.12.1", + "windows-sys 0.52.0", +] + [[package]] name = "rustls" version = "0.23.37" @@ -3396,7 +3522,7 @@ version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "612460d5f7bea540c490b2b6395d8e34a953e52b491accd6c86c8164c5932a63" dependencies = [ - "openssl-probe 0.2.1", + "openssl-probe", "rustls-pki-types", "schannel", "security-framework", @@ -3538,13 +3664,31 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d92d893ba7469d361a6958522fa440e4e2bc8bf4c5803cd1bf40b9af63f8f9a8" dependencies = [ "cfg_aliases", - "curl", "httpdate", + "native-tls", + "reqwest 0.12.28", + "sentry-actix", "sentry-backtrace", "sentry-contexts", "sentry-core", "sentry-debug-images", + "sentry-panic", "sentry-tracing", + "tokio", + "ureq", +] + +[[package]] +name = "sentry-actix" +version = "0.46.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56cb150fd6b55b3023714a3aaa1e3bdadfd44f164efc54fad69efc69aac36887" +dependencies = [ + "actix-http", + "actix-web", + "bytes", + "futures-util", + "sentry-core", ] [[package]] @@ -3595,6 +3739,16 @@ dependencies = [ "sentry-core", ] +[[package]] +name = "sentry-panic" +version = "0.46.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8906f8be87aea5ac7ef937323fb655d66607427f61007b99b7cb3504dc5a156c" +dependencies = [ + "sentry-backtrace", + "sentry-core", +] + [[package]] name = "sentry-tracing" version = "0.46.2" @@ -4236,6 +4390,19 @@ dependencies = [ "parking_lot", ] +[[package]] +name = "tempfile" +version = "3.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" +dependencies = [ + "fastrand", + "getrandom 0.3.4", + "once_cell", + "rustix 1.1.4", + "windows-sys 0.52.0", +] + [[package]] name = "term" version = "1.2.1" @@ -4390,7 +4557,7 @@ dependencies = [ "jsonwebtoken", "mockito", "pyo3", - "reqwest", + "reqwest 0.13.2", "ring", "serde", "serde_json", @@ -4531,6 +4698,16 @@ dependencies = [ "syn", ] +[[package]] +name = "tokio-native-tls" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" +dependencies = [ + "native-tls", + "tokio", +] + [[package]] name = "tokio-postgres" version = "0.7.16" @@ -4800,6 +4977,35 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" +[[package]] +name = "ureq" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdc97a28575b85cfedf2a7e7d3cc64b3e11bd8ac766666318003abbacc7a21fc" +dependencies = [ + "base64", + "der", + "log", + "native-tls", + "percent-encoding", + "rustls-pki-types", + "ureq-proto", + "utf-8", + "webpki-root-certs", +] + +[[package]] +name = "ureq-proto" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d81f9efa9df032be5934a46a068815a10a042b494b6a58cb0a1a97bb5467ed6f" +dependencies = [ + "base64", + "http 1.4.0", + "httparse", + "log", +] + [[package]] name = "url" version = "2.5.8" @@ -4819,6 +5025,12 @@ version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" +[[package]] +name = "utf-8" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" + [[package]] name = "utf8_iter" version = "1.0.4" @@ -5138,7 +5350,7 @@ dependencies = [ "either", "home", "once_cell", - "rustix", + "rustix 0.38.44", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index b6a2a4c5bb..6957fd7689 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -66,12 +66,7 @@ regex = "1.12" reqwest = { version = "0.13.2", default-features = false, features = [ "rustls", ] } -sentry = { version = "0.46.2", default-features = false, features = [ - "curl", - "backtrace", - "contexts", - "debug-images", -] } +sentry = { version = "0.46.2" } sentry-backtrace = "0.46.2" serde = "1.0" serde_derive = "1.0" diff --git a/Dockerfile b/Dockerfile index fd431aa764..d3991a2a5d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -124,7 +124,7 @@ RUN apt-get -q update && \ apt-get -q update ; \ fi && \ POSTGRES_PKG="libpq5" && \ - apt-get -q install -y --no-install-recommends $MYSQL_PKG $POSTGRES_PKG libssl3 libffi8 libcurl4 libpython3.11 python3 python3-pip python3-venv curl jq && \ + apt-get -q install -y --no-install-recommends $MYSQL_PKG $POSTGRES_PKG libssl3 libffi8 libpython3.11 python3 python3-pip python3-venv curl jq && \ # The python3-cryptography debian package installs version 2.6.1, but we # we want to use the version specified in requirements.txt. To do this, # we have to remove the python3-cryptography package here. diff --git a/docs/src/introduction.md b/docs/src/introduction.md index 39df01b4dd..42affe0e32 100644 --- a/docs/src/introduction.md +++ b/docs/src/introduction.md @@ -246,7 +246,6 @@ We include a basic script to create an instance and initialize the schema via Sp - cmake (>= 3.5 and < 3.30) - gcc - [golang](https://golang.org/doc/install) -- libcurl4-openssl-dev - libssl-dev - make - pkg-config @@ -256,9 +255,7 @@ We include a basic script to create an instance and initialize the schema via Sp * libmysqlclient (`brew install mysql` on macOS, `apt install libmysqlclient-dev` on Ubuntu, `apt install libmariadb-dev-compat` on Debian) Depending on your OS, you may also need to install `libgrpcdev`, -and `protobuf-compiler-grpc`. *Note*: if the code complies cleanly, -but generates a Segmentation Fault within Sentry init, you probably -are missing `libcurl4-openssl-dev`. +and `protobuf-compiler-grpc`. ## Local Setup diff --git a/syncserver/src/main.rs b/syncserver/src/main.rs index 919bb88a31..235d769d09 100644 --- a/syncserver/src/main.rs +++ b/syncserver/src/main.rs @@ -2,7 +2,7 @@ #[macro_use] extern crate slog_scope; -use std::{error::Error, sync::Arc}; +use std::error::Error; use docopt::Docopt; use serde::Deserialize; @@ -34,16 +34,10 @@ async fn main() -> Result<(), Box> { debug!("Starting up..."); // Set SENTRY_DSN environment variable to enable Sentry. - // Avoid its default reqwest transport for now due to issues w/ - // likely grpcio's boringssl - let curl_transport_factory = |options: &sentry::ClientOptions| { - Arc::new(sentry::transports::CurlHttpTransport::new(options)) as Arc - }; // debug-images conflicts w/ our debug = 1 rustc build option: // https://github.com/getsentry/sentry-rust/issues/574 let mut opts = sentry::apply_defaults(sentry::ClientOptions { // Note: set "debug: true," to diagnose sentry issues - transport: Some(Arc::new(curl_transport_factory)), release: sentry::release_name!(), environment: Some(settings.environment.clone().into()), ..sentry::ClientOptions::default()