From 287dbf0c6f48a54c7b92d1182cfd589f993ea859 Mon Sep 17 00:00:00 2001 From: Riccardo Busetti Date: Tue, 3 Sep 2024 12:03:46 +0200 Subject: [PATCH 01/15] feat(spooler): Implement shutdown behavior in the spooler --- .../services/buffer/envelope_buffer/mod.rs | 25 ++++++++++--- .../services/buffer/envelope_stack/memory.rs | 4 +++ .../src/services/buffer/envelope_stack/mod.rs | 4 +++ .../services/buffer/envelope_stack/sqlite.rs | 4 +++ relay-server/src/services/buffer/mod.rs | 35 ++++++++++++++++--- .../services/buffer/stack_provider/memory.rs | 3 ++ .../src/services/buffer/stack_provider/mod.rs | 6 ++++ .../services/buffer/stack_provider/sqlite.rs | 21 ++++++++--- 8 files changed, 89 insertions(+), 13 deletions(-) diff --git a/relay-server/src/services/buffer/envelope_buffer/mod.rs b/relay-server/src/services/buffer/envelope_buffer/mod.rs index 605d6e1bd4f..0c2c9b47fb8 100644 --- a/relay-server/src/services/buffer/envelope_buffer/mod.rs +++ b/relay-server/src/services/buffer/envelope_buffer/mod.rs @@ -124,6 +124,14 @@ impl PolymorphicEnvelopeBuffer { Self::InMemory(buffer) => buffer.has_capacity(), } } + + /// Consumes the [`PolymorphicEnvelopeBuffer`] and shuts it down. + pub async fn shutdown(self) { + match self { + Self::Sqlite(buffer) => buffer.shutdown().await, + Self::InMemory(buffer) => buffer.shutdown().await, + }; + } } /// Error that occurs while interacting with the envelope buffer. @@ -352,6 +360,18 @@ where }); } + /// Returns `true` if the underlying storage has the capacity to store more envelopes. + pub fn has_capacity(&self) -> bool { + self.stack_provider.has_store_capacity() + } + + /// Shuts down the envelope buffer. + pub async fn shutdown(self) { + self.stack_provider + .drain(self.priority_queue.into_iter().map(|(q, _)| q.value)) + .await; + } + /// Pushes a new [`EnvelopeStack`] with the given [`Envelope`] inserted. async fn push_stack( &mut self, @@ -388,11 +408,6 @@ where Ok(()) } - /// Returns `true` if the underlying storage has the capacity to store more envelopes. - pub fn has_capacity(&self) -> bool { - self.stack_provider.has_store_capacity() - } - /// Pops an [`EnvelopeStack`] with the supplied [`EnvelopeBufferError`]. fn pop_stack(&mut self, project_key_pair: ProjectKeyPair) { for project_key in project_key_pair.iter() { diff --git a/relay-server/src/services/buffer/envelope_stack/memory.rs b/relay-server/src/services/buffer/envelope_stack/memory.rs index d9723e601a5..7fdf1f5beb5 100644 --- a/relay-server/src/services/buffer/envelope_stack/memory.rs +++ b/relay-server/src/services/buffer/envelope_stack/memory.rs @@ -28,4 +28,8 @@ impl EnvelopeStack for MemoryEnvelopeStack { async fn pop(&mut self) -> Result>, Self::Error> { Ok(self.0.pop()) } + + fn drain(self) -> Vec> { + self.0 + } } diff --git a/relay-server/src/services/buffer/envelope_stack/mod.rs b/relay-server/src/services/buffer/envelope_stack/mod.rs index 8e48f7391fe..b6bae9826d0 100644 --- a/relay-server/src/services/buffer/envelope_stack/mod.rs +++ b/relay-server/src/services/buffer/envelope_stack/mod.rs @@ -19,4 +19,8 @@ pub trait EnvelopeStack: Send + std::fmt::Debug { /// Pops the [`Envelope`] on top of the stack. fn pop(&mut self) -> impl Future>, Self::Error>>; + + /// Drains this stack and returns all the [`Envelope`]s that need to be handled specifically + /// during draining of the envelope buffer. + fn drain(self) -> Vec>; } diff --git a/relay-server/src/services/buffer/envelope_stack/sqlite.rs b/relay-server/src/services/buffer/envelope_stack/sqlite.rs index 1268fd5ea4e..bbf88a66cf2 100644 --- a/relay-server/src/services/buffer/envelope_stack/sqlite.rs +++ b/relay-server/src/services/buffer/envelope_stack/sqlite.rs @@ -225,6 +225,10 @@ impl EnvelopeStack for SqliteEnvelopeStack { Ok(result) } + + fn drain(self) -> Vec> { + self.batches_buffer.into_iter().flat_map(|e| e).collect() + } } #[cfg(test)] diff --git a/relay-server/src/services/buffer/mod.rs b/relay-server/src/services/buffer/mod.rs index 03f15bea538..549dde1b750 100644 --- a/relay-server/src/services/buffer/mod.rs +++ b/relay-server/src/services/buffer/mod.rs @@ -1,13 +1,16 @@ //! Types for buffering envelopes. +use relay_base_schema::project::ProjectKey; +use relay_config::Config; +use relay_system::{ + Addr, Controller, FromMessage, Interface, NoResponse, Receiver, Service, Shutdown, +}; +use std::error::Error; use std::sync::atomic::AtomicBool; use std::sync::atomic::Ordering; use std::sync::Arc; use std::time::Duration; - -use relay_base_schema::project::ProjectKey; -use relay_config::Config; -use relay_system::{Addr, FromMessage, Interface, NoResponse, Receiver, Service}; +use tokio::time::timeout; use crate::envelope::Envelope; use crate::services::buffer::envelope_buffer::Peek; @@ -190,6 +193,24 @@ impl EnvelopeBufferService { self.sleep = Duration::ZERO; } + async fn handle_shutdown(&mut self, buffer: PolymorphicEnvelopeBuffer, message: Shutdown) { + match message.timeout { + Some(shutdown_timeout) => { + let shutdown_result = timeout(shutdown_timeout, async { + buffer.shutdown().await; + }) + .await; + if let Err(error) = shutdown_result { + relay_log::error!( + error = &error as &dyn Error, + "the envelope buffer didn't shut down in time, some envelopes might be lost", + ); + } + } + None => buffer.shutdown().await, + } + } + async fn push(&mut self, buffer: &mut PolymorphicEnvelopeBuffer, envelope: Box) { if let Err(e) = buffer.push(envelope).await { relay_log::error!( @@ -226,6 +247,8 @@ impl Service for EnvelopeBufferService { }; buffer.initialize().await; + let mut shutdown = Controller::shutdown_handle(); + relay_log::info!("EnvelopeBufferService start"); loop { relay_log::trace!("EnvelopeBufferService loop"); @@ -246,6 +269,10 @@ impl Service for EnvelopeBufferService { Some(message) = rx.recv() => { self.handle_message(&mut buffer, message).await; } + shutdown = shutdown.notified() => { + self.handle_shutdown(buffer, shutdown).await; + break; + }, else => break, } diff --git a/relay-server/src/services/buffer/stack_provider/memory.rs b/relay-server/src/services/buffer/stack_provider/memory.rs index 0414f4a55fa..5cd5680164e 100644 --- a/relay-server/src/services/buffer/stack_provider/memory.rs +++ b/relay-server/src/services/buffer/stack_provider/memory.rs @@ -2,6 +2,7 @@ use crate::services::buffer::common::ProjectKeyPair; use crate::services::buffer::envelope_stack::memory::MemoryEnvelopeStack; use crate::services::buffer::stack_provider::{InitializationState, StackProvider}; use crate::utils::MemoryChecker; +use crate::EnvelopeStack; #[derive(Debug)] pub struct MemoryStackProvider { @@ -39,4 +40,6 @@ impl StackProvider for MemoryStackProvider { fn stack_type<'a>(&self) -> &'a str { "memory" } + + async fn drain(self, _: impl IntoIterator) {} } diff --git a/relay-server/src/services/buffer/stack_provider/mod.rs b/relay-server/src/services/buffer/stack_provider/mod.rs index fa852d47d1c..3c0bf044093 100644 --- a/relay-server/src/services/buffer/stack_provider/mod.rs +++ b/relay-server/src/services/buffer/stack_provider/mod.rs @@ -48,4 +48,10 @@ pub trait StackProvider: std::fmt::Debug { /// Returns the string representation of the stack type offered by this [`StackProvider`]. fn stack_type<'a>(&self) -> &'a str; + + /// Drains the supplied [`EnvelopeStack`]s and consumes the [`StackProvider`]. + fn drain( + self, + envelope_stacks: impl IntoIterator, + ) -> impl Future; } diff --git a/relay-server/src/services/buffer/stack_provider/sqlite.rs b/relay-server/src/services/buffer/stack_provider/sqlite.rs index 4b732bdb3b6..dd2f82fc633 100644 --- a/relay-server/src/services/buffer/stack_provider/sqlite.rs +++ b/relay-server/src/services/buffer/stack_provider/sqlite.rs @@ -1,12 +1,11 @@ -use relay_config::Config; -use std::error::Error; - use crate::services::buffer::common::ProjectKeyPair; use crate::services::buffer::envelope_store::sqlite::{ SqliteEnvelopeStore, SqliteEnvelopeStoreError, }; use crate::services::buffer::stack_provider::{InitializationState, StackProvider}; -use crate::SqliteEnvelopeStack; +use crate::{EnvelopeStack, SqliteEnvelopeStack}; +use relay_config::Config; +use std::error::Error; #[derive(Debug)] pub struct SqliteStackProvider { @@ -77,4 +76,18 @@ impl StackProvider for SqliteStackProvider { fn stack_type<'a>(&self) -> &'a str { "sqlite" } + + async fn drain(mut self, envelope_stacks: impl IntoIterator) { + let envelopes = envelope_stacks + .into_iter() + .flat_map(|e| e.drain()) + .filter_map(|e| e.as_ref().try_into().ok()); + + if let Err(error) = self.envelope_store.insert_many(envelopes).await { + relay_log::error!( + error = &error as &dyn Error, + "failed to drain the envelope stacks, some envelopes might be lost", + ); + }; + } } From debc0a8c6a5f4e35e52b937868d90babe1b51a58 Mon Sep 17 00:00:00 2001 From: Riccardo Busetti Date: Tue, 3 Sep 2024 12:57:58 +0200 Subject: [PATCH 02/15] Fix --- relay-server/src/services/buffer/envelope_stack/sqlite.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/relay-server/src/services/buffer/envelope_stack/sqlite.rs b/relay-server/src/services/buffer/envelope_stack/sqlite.rs index bbf88a66cf2..4331f63a764 100644 --- a/relay-server/src/services/buffer/envelope_stack/sqlite.rs +++ b/relay-server/src/services/buffer/envelope_stack/sqlite.rs @@ -227,7 +227,7 @@ impl EnvelopeStack for SqliteEnvelopeStack { } fn drain(self) -> Vec> { - self.batches_buffer.into_iter().flat_map(|e| e).collect() + self.batches_buffer.into_iter().flatten().collect() } } From 1786cbf2f9d465110f3656e8632e606bdadf3833 Mon Sep 17 00:00:00 2001 From: Riccardo Busetti Date: Tue, 3 Sep 2024 13:27:27 +0200 Subject: [PATCH 03/15] Add test --- Cargo.lock | 1410 ++++++++++------- .../services/buffer/envelope_stack/sqlite.rs | 27 + .../services/buffer/stack_provider/sqlite.rs | 60 + 3 files changed, 892 insertions(+), 605 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 10ea3d843f0..483306eea16 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,9 +4,9 @@ version = 3 [[package]] name = "addr2line" -version = "0.22.0" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" +checksum = "a76fd60b23679b7d19bd066031410fb7e458ccc5e958eb5c325888ce4baedc97" dependencies = [ "gimli", ] @@ -17,17 +17,11 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" -[[package]] -name = "adler2" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" - [[package]] name = "ahash" -version = "0.8.11" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" +checksum = "42cd52102d3df161c77a887b608d7a4897d7cc112886a9537b738a887a03aaff" dependencies = [ "cfg-if", "getrandom", @@ -39,9 +33,9 @@ dependencies = [ [[package]] name = "aho-corasick" -version = "1.1.3" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +checksum = "43f6cb1bf222025340178f382c426f13757b2960e89779dfcb319c32542a5a41" dependencies = [ "memchr", ] @@ -63,9 +57,9 @@ dependencies = [ [[package]] name = "allocator-api2" -version = "0.2.18" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" +checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5" [[package]] name = "android-tzdata" @@ -102,58 +96,57 @@ checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299" [[package]] name = "anstream" -version = "0.6.15" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64e15c1ab1f89faffbf04a634d5e1962e9074f2741eef6d97f3c4e322426d526" +checksum = "2ab91ebe16eb252986481c5b62f6098f3b698a45e34b5b98200cf20dd2484a44" dependencies = [ "anstyle", "anstyle-parse", "anstyle-query", "anstyle-wincon", "colorchoice", - "is_terminal_polyfill", "utf8parse", ] [[package]] name = "anstyle" -version = "1.0.8" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bec1de6f59aedf83baf9ff929c98f2ad654b97c9510f4e70cf6f661d49fd5b1" +checksum = "7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87" [[package]] name = "anstyle-parse" -version = "0.2.5" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb47de1e80c2b463c735db5b217a0ddc39d612e7ac9e2e96a5aed1f57616c1cb" +checksum = "317b9a89c1868f5ea6ff1d9539a69f45dffc21ce321ac1fd1160dfa48c8e2140" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.1.1" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d36fc52c7f6c869915e99412912f22093507da8d9e942ceaf66fe4b7c14422a" +checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.48.0", ] [[package]] name = "anstyle-wincon" -version = "3.0.4" +version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bf74e1b6e971609db8ca7a9ce79fd5768ab6ae46441c572e46cf596f59e57f8" +checksum = "f0699d10d2f4d628a98ee7b57b289abbc98ff3bad977cb3152709d4bf2330628" dependencies = [ "anstyle", - "windows-sys 0.52.0", + "windows-sys 0.48.0", ] [[package]] name = "anyhow" -version = "1.0.86" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" +checksum = "224afbd727c3d6e4b90103ece64b8d1b67fbb1973b1046c2281eed3f3803f800" dependencies = [ "backtrace", ] @@ -191,9 +184,9 @@ dependencies = [ [[package]] name = "async-trait" -version = "0.1.82" +version = "0.1.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a27b8a3a6e1a44fa4c8baf1f653e4172e81486d4941f2237e20dc2d0cf4ddff1" +checksum = "b9ccdd8f2a161be9bd5c023df56f1b2a0bd1d83872ae53b71a84a12c9bf6e842" dependencies = [ "proc-macro2", "quote", @@ -217,9 +210,9 @@ checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "autocfg" -version = "1.3.0" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" [[package]] name = "axum" @@ -232,9 +225,9 @@ dependencies = [ "bitflags 1.3.2", "bytes", "futures-util", - "http 0.2.12", - "http-body 0.4.6", - "hyper 0.14.30", + "http 0.2.9", + "http-body 0.4.5", + "hyper 0.14.26", "itoa", "matchit", "memchr", @@ -294,8 +287,8 @@ dependencies = [ "async-trait", "bytes", "futures-util", - "http 0.2.12", - "http-body 0.4.6", + "http 0.2.9", + "http-body 0.4.5", "mime", "rustversion", "tower-layer", @@ -389,15 +382,15 @@ dependencies = [ [[package]] name = "backtrace" -version = "0.3.73" +version = "0.3.67" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a" +checksum = "233d376d6d185f2a3093e58f283f60f880315b6c60075b01f36b3b85154564ca" dependencies = [ "addr2line", "cc", "cfg-if", "libc", - "miniz_oxide 0.7.4", + "miniz_oxide", "object", "rustc-demangle", ] @@ -432,10 +425,10 @@ version = "0.70.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f49d8fed880d473ea71efb9bf597651e77201bdd4893efe54c9e5d65ae04ce6f" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.4.1", "cexpr", "clang-sys", - "itertools 0.13.0", + "itertools 0.10.5", "log", "prettyplease", "proc-macro2", @@ -469,18 +462,18 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.6.0" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" +checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07" dependencies = [ "serde", ] [[package]] name = "block-buffer" -version = "0.10.4" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e" dependencies = [ "generic-array", ] @@ -508,32 +501,43 @@ dependencies = [ [[package]] name = "bstr" -version = "1.10.0" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40723b8fb387abc38f4f4a37c09073622e41dd12327033091ef8950659e6dc0c" +checksum = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223" dependencies = [ + "lazy_static", "memchr", - "regex-automata 0.4.7", + "regex-automata 0.1.10", +] + +[[package]] +name = "bstr" +version = "1.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05efc5cfd9110c8416e471df0e96702d58690178e206e61b7173706673c93706" +dependencies = [ + "memchr", + "regex-automata 0.4.3", "serde", ] [[package]] name = "bumpalo" -version = "3.16.0" +version = "3.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" +checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535" [[package]] name = "bytecount" -version = "0.6.8" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ce89b21cab1437276d2650d57e971f9d548a2d9037cc231abdc0562b97498ce" +checksum = "2c676a478f63e9fa2dd5368a42f28bba0d6c560b775f38583c8bbaa7fcd67c9c" [[package]] name = "byteorder" -version = "1.5.0" +version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" +checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" [[package]] name = "bytes" @@ -546,9 +550,9 @@ dependencies = [ [[package]] name = "cadence" -version = "0.29.1" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f39286bc075b023101dccdb79456a1334221c768b8faede0c2aff7ed29a9482d" +checksum = "eb681a7408f21c9d9dcb6638e340913ea260cc587518b5976510d2341f085a19" dependencies = [ "crossbeam-channel", ] @@ -587,22 +591,22 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chrono" -version = "0.4.38" +version = "0.4.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +checksum = "7f2c685bad3eb3d45a01354cedb7d5faa66194d1d58ba6e267a8de788f79db38" dependencies = [ "android-tzdata", "iana-time-zone", "num-traits", "serde", - "windows-targets 0.52.6", + "windows-targets 0.48.5", ] [[package]] name = "ciborium" -version = "0.2.2" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42e69ffd6f0917f5c029256a24d0161db17cea3997d185db0d35926308770f0e" +checksum = "b0c137568cc60b904a7724001b35ce2630fd00d5d84805fbb608ab89509d788f" dependencies = [ "ciborium-io", "ciborium-ll", @@ -611,15 +615,15 @@ dependencies = [ [[package]] name = "ciborium-io" -version = "0.2.2" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05afea1e0a06c9be33d539b876f1ce3692f4afea2cb41f740e7743225ed1c757" +checksum = "346de753af073cc87b52b2083a506b38ac176a44cfb05497b622e27be899b369" [[package]] name = "ciborium-ll" -version = "0.2.2" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57663b653d948a338bfb3eeba9bb2fd5fcfaecb9e199e87e1eda4d9e8b240fd9" +checksum = "213030a2b5a4e0c0892b6652260cf6ccac84827b83a85a534e178e3906c4cf1b" dependencies = [ "ciborium-io", "half", @@ -627,9 +631,9 @@ dependencies = [ [[package]] name = "clang-sys" -version = "1.8.1" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" +checksum = "fa2e27ae6ab525c3d369ded447057bca5438d86dc3a68f6faafb8269ba82ebf3" dependencies = [ "glob", "libc", @@ -638,9 +642,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.16" +version = "4.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed6719fffa43d0d87e5fd8caeab59be1554fb028cd30edc88fc4369b17971019" +checksum = "d04704f56c2cde07f43e8e2c154b43f216dc5c92fc98ada720177362f953b956" dependencies = [ "clap_builder", "clap_derive", @@ -648,9 +652,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.15" +version = "4.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "216aec2b177652e3846684cbfe25c9964d18ec45234f0f5da5157b207ed1aab6" +checksum = "0e231faeaca65ebd1ea3c737966bf858971cd38c3849107aa3ea7de90a804e45" dependencies = [ "anstream", "anstyle", @@ -661,20 +665,20 @@ dependencies = [ [[package]] name = "clap_complete" -version = "4.5.24" +version = "4.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d7db6eca8c205649e8d3ccd05aa5042b1800a784e56bc7c43524fde8abbfa9b" +checksum = "e3ae8ba90b9d8b007efe66e55e48fb936272f5ca00349b5b0e89877520d35ea7" dependencies = [ "clap", ] [[package]] name = "clap_derive" -version = "4.5.13" +version = "4.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "501d359d5f3dcaf6ecdeee48833ae73ec6e42723a1e52419c79abf9507eec0a0" +checksum = "0862016ff20d69b84ef8247369fabf5c008a7417002411897d40ee1f4532b873" dependencies = [ - "heck 0.5.0", + "heck 0.4.1", "proc-macro2", "quote", "syn 2.0.77", @@ -682,30 +686,40 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.7.2" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1462739cb27611015575c0c11df5df7601141071f07518d56fcc1be504cbec97" +checksum = "cd7cc57abe963c6d3b9d8be5b06ba7c8957a930305ca90304f24ef040aa6f961" [[package]] name = "cmake" -version = "0.1.51" +version = "0.1.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb1e43aa7fd152b1f968787f7dbcdeb306d1867ff373c69955211876c053f91a" +checksum = "db34956e100b30725f2eb215f90d4871051239535632f84fea3bc92722c66b7c" dependencies = [ "cc", ] +[[package]] +name = "codespan-reporting" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" +dependencies = [ + "termcolor", + "unicode-width", +] + [[package]] name = "colorchoice" -version = "1.0.2" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3fd119d74b830634cea2a0f58bbd0d54540518a14397557951e79340abc28c0" +checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" [[package]] name = "combine" -version = "4.6.7" +version = "4.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" +checksum = "35ed6e9d84f0b51a7f52daf1c7d71dd136fd7a3f41a8462b8cdb8c78d920fad4" dependencies = [ "bytes", "memchr", @@ -722,22 +736,22 @@ dependencies = [ [[package]] name = "console" -version = "0.15.8" +version = "0.15.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e1f83fc076bd6dd27517eacdf25fef6c4dfe5f1d7448bafaaf3a26f13b5e4eb" +checksum = "c3d79fbe8970a77e3e34151cc13d3b3e248aa0faaecb9f6091fa07ebefe5ad60" dependencies = [ "encode_unicode", "lazy_static", "libc", "unicode-width", - "windows-sys 0.52.0", + "windows-sys 0.42.0", ] [[package]] name = "const-oid" -version = "0.9.6" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" +checksum = "520fbf3c07483f94e3e3ca9d0cfd913d7718ef2483d2cfd91c0d9e91474ab913" [[package]] name = "convert_case" @@ -758,9 +772,9 @@ dependencies = [ [[package]] name = "core-foundation" -version = "0.9.4" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" dependencies = [ "core-foundation-sys", "libc", @@ -768,33 +782,33 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.7" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" +checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" [[package]] name = "cpufeatures" -version = "0.2.13" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51e852e6dc9a5bed1fae92dd2375037bf2b768725bf3be87811edee3249d09ad" +checksum = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1" dependencies = [ "libc", ] [[package]] name = "crc" -version = "3.2.1" +version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69e6e4d7b33a94f0991c26729976b10ebde1d34c3ee82408fb536164fa10d636" +checksum = "86ec7a15cbe22e59248fc7eadb1907dab5ba09372595da4d73dd805ed4417dfe" dependencies = [ "crc-catalog", ] [[package]] name = "crc-catalog" -version = "2.4.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" +checksum = "9cace84e55f07e7301bae1c519df89cdad8cc3cd868413d3fdbdeca9ff3db484" [[package]] name = "crc16" @@ -804,9 +818,9 @@ checksum = "338089f42c427b86394a5ee60ff321da23a5c89c9d89514c829687b26359fcff" [[package]] name = "crc32fast" -version = "1.4.2" +version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" +checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" dependencies = [ "cfg-if", ] @@ -849,52 +863,56 @@ dependencies = [ [[package]] name = "crossbeam-channel" -version = "0.5.13" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33480d6946193aa8033910124896ca395333cae7e2d1113d1fef6c3272217df2" +checksum = "c2dd04ddaf88237dc3b8d8f9a3c1004b506b54b3313403944054d23c0870c521" dependencies = [ + "cfg-if", "crossbeam-utils", ] [[package]] name = "crossbeam-deque" -version = "0.8.5" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" +checksum = "715e8152b692bba2d374b53d4875445368fdf21a94751410af607a5ac677d1fc" dependencies = [ + "cfg-if", "crossbeam-epoch", "crossbeam-utils", ] [[package]] name = "crossbeam-epoch" -version = "0.9.18" +version = "0.9.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +checksum = "01a9af1f4c2ef74bb8aa1f7e19706bc72d03598c8a570bb5de72243c7a9d9d5a" dependencies = [ + "autocfg", + "cfg-if", "crossbeam-utils", + "memoffset", + "scopeguard", ] [[package]] name = "crossbeam-queue" -version = "0.3.11" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df0346b5d5e76ac2fe4e327c5fd1118d6be7c51dfb18f9b7922923f287471e35" +checksum = "d1cfb3ea8a53f37c40dea2c7bedcbd88bdfae54f5e2175d6ecaff1c988353add" dependencies = [ + "cfg-if", "crossbeam-utils", ] [[package]] name = "crossbeam-utils" -version = "0.8.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" - -[[package]] -name = "crunchy" -version = "0.2.2" +version = "0.8.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" +checksum = "4fb766fa798726286dbbb842f174001dab8abc7b627a1dd86e0b7222a95d929f" +dependencies = [ + "cfg-if", +] [[package]] name = "crypto-common" @@ -924,20 +942,64 @@ dependencies = [ [[package]] name = "curve25519-dalek-derive" -version = "0.1.1" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" +checksum = "83fdaf97f4804dcebfa5862639bc9ce4121e82140bec2a987ac5140294865b5b" dependencies = [ "proc-macro2", "quote", "syn 2.0.77", ] +[[package]] +name = "cxx" +version = "1.0.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc831ee6a32dd495436e317595e639a587aa9907bef96fe6e6abc290ab6204e9" +dependencies = [ + "cc", + "cxxbridge-flags", + "cxxbridge-macro", + "link-cplusplus", +] + +[[package]] +name = "cxx-build" +version = "1.0.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94331d54f1b1a8895cd81049f7eaaaef9d05a7dcb4d1fd08bf3ff0806246789d" +dependencies = [ + "cc", + "codespan-reporting", + "once_cell", + "proc-macro2", + "quote", + "scratch", + "syn 1.0.109", +] + +[[package]] +name = "cxxbridge-flags" +version = "1.0.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48dcd35ba14ca9b40d6e4b4b39961f23d835dbb8eed74565ded361d93e1feb8a" + +[[package]] +name = "cxxbridge-macro" +version = "1.0.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81bbeb29798b407ccd82a3324ade1a7286e0d29851475990b612670f6f5124d2" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "darling" -version = "0.20.10" +version = "0.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" +checksum = "0209d94da627ab5605dcccf08bb18afa5009cfbef48d8a8b7d7bdbc79be25c5e" dependencies = [ "darling_core", "darling_macro", @@ -945,9 +1007,9 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.20.10" +version = "0.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" +checksum = "177e3443818124b357d8e76f53be906d60937f0d3a90773a664fa63fa253e621" dependencies = [ "fnv", "ident_case", @@ -958,9 +1020,9 @@ dependencies = [ [[package]] name = "darling_macro" -version = "0.20.10" +version = "0.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" +checksum = "836a9bbc7ad63342d6d6e7b815ccab164bc77a2d95d84bc3117a8c0d5c98e2d5" dependencies = [ "darling_core", "quote", @@ -969,9 +1031,9 @@ dependencies = [ [[package]] name = "data-encoding" -version = "2.6.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2" +checksum = "7e962a19be5cfc3f3bf6dd8f61eb50107f356ad6270fbb3ed41476571db78be5" [[package]] name = "debugid" @@ -985,9 +1047,9 @@ dependencies = [ [[package]] name = "der" -version = "0.7.9" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" +checksum = "0c7ed52955ce76b1554f509074bb357d3fb8ac9b51288a65a3fd480d1dfba946" dependencies = [ "const-oid", "pem-rfc7468", @@ -1005,15 +1067,15 @@ dependencies = [ [[package]] name = "derive_more" -version = "0.99.18" +version = "0.99.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f33878137e4dafd7fa914ad4e259e18a4e8e532b9617a2d0150262bf53abfce" +checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" dependencies = [ "convert_case", "proc-macro2", "quote", "rustc_version", - "syn 2.0.77", + "syn 1.0.109", ] [[package]] @@ -1050,7 +1112,7 @@ dependencies = [ "insta", "serde", "serde_json", - "serde_yaml", + "serde_yaml 0.9.17", "syn 1.0.109", ] @@ -1092,9 +1154,9 @@ dependencies = [ [[package]] name = "ed25519" -version = "2.2.3" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" +checksum = "be522bee13fa6d8059f4903a4084aa3bd50725e18150202f0238deb615cd6371" dependencies = [ "pkcs8", "signature", @@ -1102,24 +1164,23 @@ dependencies = [ [[package]] name = "ed25519-dalek" -version = "2.1.1" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a3daa8e81a3963a60642bcc1f90a670680bd4a77535faa384e9d1c79d620871" +checksum = "7277392b266383ef8396db7fdeb1e77b6c52fed775f5df15bb24f35b72156980" dependencies = [ "curve25519-dalek", "ed25519", "rand_core", "serde", "sha2", - "subtle", "zeroize", ] [[package]] name = "either" -version = "1.13.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" +checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91" dependencies = [ "serde", ] @@ -1141,9 +1202,9 @@ checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" [[package]] name = "encoding_rs" -version = "0.8.34" +version = "0.8.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59" +checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394" dependencies = [ "cfg-if", ] @@ -1162,18 +1223,18 @@ dependencies = [ [[package]] name = "enumset" -version = "1.1.5" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d07a4b049558765cef5f0c1a273c3fc57084d768b44d2f98127aef4cceb17293" +checksum = "e875f1719c16de097dee81ed675e2d9bb63096823ed3f0ca827b7dea3028bbbb" dependencies = [ "enumset_derive", ] [[package]] name = "enumset_derive" -version = "0.10.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59c3b24c345d8c314966bdc1832f6c2635bfcce8e7cf363bd115987bba2ee242" +checksum = "e08b6c6ab82d70f08844964ba10c7babb716de2ecaeab9be5717918a5177d3af" dependencies = [ "darling", "proc-macro2", @@ -1202,9 +1263,9 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "erased-serde" -version = "0.3.31" +version = "0.3.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c138974f9d5e7fe373eb04df7cae98833802ae4b11c24ac7039a21d5af4b26c" +checksum = "c6984864d65d092d9e9ada107007a846a09f75d2e24046bcce9a38d14aa52052" dependencies = [ "serde", ] @@ -1248,8 +1309,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "531e46835a22af56d1e3b66f04844bed63158bc094a628bec1d321d9b4c44bf2" dependencies = [ "bit-set", - "regex-automata 0.4.7", - "regex-syntax 0.8.4", + "regex-automata 0.4.3", + "regex-syntax 0.8.2", ] [[package]] @@ -1278,12 +1339,12 @@ dependencies = [ [[package]] name = "flate2" -version = "1.0.33" +version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "324a1be68054ef05ad64b861cc9eaf1d623d2d8cb25b4bf2cb9cdd902b4bf253" +checksum = "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841" dependencies = [ "crc32fast", - "miniz_oxide 0.8.0", + "miniz_oxide", ] [[package]] @@ -1294,7 +1355,7 @@ checksum = "55ac459de2512911e4b674ce33cf20befaba382d05b62b008afc1c8b57cbf181" dependencies = [ "futures-core", "futures-sink", - "spin", + "spin 0.9.8", ] [[package]] @@ -1339,9 +1400,9 @@ dependencies = [ [[package]] name = "futures" -version = "0.3.30" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" +checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40" dependencies = [ "futures-channel", "futures-core", @@ -1353,9 +1414,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.30" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2" dependencies = [ "futures-core", "futures-sink", @@ -1363,15 +1424,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.30" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" +checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" [[package]] name = "futures-executor" -version = "0.3.30" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" +checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0" dependencies = [ "futures-core", "futures-task", @@ -1391,15 +1452,15 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.30" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" +checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" [[package]] name = "futures-macro" -version = "0.3.30" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" +checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" dependencies = [ "proc-macro2", "quote", @@ -1408,21 +1469,21 @@ dependencies = [ [[package]] name = "futures-sink" -version = "0.3.30" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" +checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" [[package]] name = "futures-task" -version = "0.3.30" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" +checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" [[package]] name = "futures-util" -version = "0.3.30" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" dependencies = [ "futures-channel", "futures-core", @@ -1438,9 +1499,9 @@ dependencies = [ [[package]] name = "generic-array" -version = "0.14.7" +version = "0.14.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9" dependencies = [ "typenum", "version_check", @@ -1448,9 +1509,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.15" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" dependencies = [ "cfg-if", "js-sys", @@ -1461,9 +1522,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.29.0" +version = "0.27.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" +checksum = "221996f774192f0f718773def8201c4ae31f02616a54ccfc2d358bb0e5cefdec" [[package]] name = "glob" @@ -1473,15 +1534,15 @@ checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" [[package]] name = "globset" -version = "0.4.14" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57da3b9b5b85bd66f31093f8c408b90a74431672542466497dcbdfdc02034be1" +checksum = "759c97c1e17c55525b57192c06a267cda0ac5210b222d6b82189a2338fa1c13d" dependencies = [ "aho-corasick", - "bstr", + "bstr 1.9.1", + "fnv", "log", - "regex-automata 0.4.7", - "regex-syntax 0.8.4", + "regex", ] [[package]] @@ -1495,8 +1556,8 @@ dependencies = [ "futures-core", "futures-sink", "futures-util", - "http 0.2.12", - "indexmap 2.5.0", + "http 0.2.9", + "indexmap 2.2.5", "slab", "tokio", "tokio-util", @@ -1515,7 +1576,7 @@ dependencies = [ "futures-core", "futures-sink", "http 1.1.0", - "indexmap 2.5.0", + "indexmap 2.2.5", "slab", "tokio", "tokio-util", @@ -1524,13 +1585,9 @@ dependencies = [ [[package]] name = "half" -version = "2.4.1" +version = "1.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6dd08c532ae367adf81c312a4580bc67f1d0fe8bc9c460520283f4c0ff277888" -dependencies = [ - "cfg-if", - "crunchy", -] +checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7" [[package]] name = "hash32" @@ -1580,15 +1637,18 @@ checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] name = "hermit-abi" -version = "0.3.9" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" +checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7" +dependencies = [ + "libc", +] [[package]] name = "hermit-abi" -version = "0.4.0" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" [[package]] name = "hex" @@ -1643,9 +1703,9 @@ dependencies = [ [[package]] name = "hkdf" -version = "0.12.4" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" +checksum = "791a029f6b9fc27657f6f188ec6e5e43f6911f6f878e0dc5501396e09809d437" dependencies = [ "hmac", ] @@ -1661,11 +1721,11 @@ dependencies = [ [[package]] name = "home" -version = "0.5.9" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" +checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.48.0", ] [[package]] @@ -1692,9 +1752,9 @@ dependencies = [ [[package]] name = "http" -version = "0.2.12" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" +checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" dependencies = [ "bytes", "fnv", @@ -1714,12 +1774,12 @@ dependencies = [ [[package]] name = "http-body" -version = "0.4.6" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" +checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" dependencies = [ "bytes", - "http 0.2.12", + "http 0.2.9", "pin-project-lite", ] @@ -1748,21 +1808,21 @@ dependencies = [ [[package]] name = "httparse" -version = "1.9.4" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fcc0b4a115bf80b728eb8ea024ad5bd707b615bfed49e0665b6e0f86fd082d9" +checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" [[package]] name = "httpdate" -version = "1.0.3" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" +checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" [[package]] name = "human-size" -version = "0.4.3" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9994b79e8c1a39b3166c63ae7823bb2b00831e2a96a31399c50fe69df408eaeb" +checksum = "62eef4964b4e1c2d66981a5646d893768fd15d96957aae5e0e85c632503e9724" [[package]] name = "humantime" @@ -1772,22 +1832,22 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "hyper" -version = "0.14.30" +version = "0.14.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a152ddd61dfaec7273fe8419ab357f33aee0d914c5f4efbf0d96fa749eea5ec9" +checksum = "ab302d72a6f11a3b910431ff93aae7e773078c769f0a3ef15fb9ec692ed147d4" dependencies = [ "bytes", "futures-channel", "futures-core", "futures-util", "h2 0.3.26", - "http 0.2.12", - "http-body 0.4.6", + "http 0.2.9", + "http-body 0.4.5", "httparse", "httpdate", "itoa", "pin-project-lite", - "socket2", + "socket2 0.4.9", "tokio", "tower-service", "tracing", @@ -1838,7 +1898,7 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1" dependencies = [ - "hyper 0.14.30", + "hyper 0.14.26", "pin-project-lite", "tokio", "tokio-io-timeout", @@ -1873,7 +1933,7 @@ dependencies = [ "http-body 1.0.1", "hyper 1.4.1", "pin-project-lite", - "socket2", + "socket2 0.5.7", "tokio", "tower", "tower-service", @@ -1882,25 +1942,26 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.60" +version = "0.1.53" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +checksum = "64c122667b287044802d6ce17ee2ddf13207ed924c712de9a66a5814d5b64765" dependencies = [ "android_system_properties", "core-foundation-sys", "iana-time-zone-haiku", "js-sys", "wasm-bindgen", - "windows-core 0.52.0", + "winapi", ] [[package]] name = "iana-time-zone-haiku" -version = "0.1.2" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +checksum = "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca" dependencies = [ - "cc", + "cxx", + "cxx-build", ] [[package]] @@ -1931,9 +1992,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "1.9.3" +version = "1.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399" dependencies = [ "autocfg", "hashbrown 0.12.3", @@ -1941,9 +2002,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.5.0" +version = "2.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68b900aa2f7301e21c36462b170ee99994de34dff39a4a6a528e80e7376d07e5" +checksum = "7b0b929d511467233429c45a44ac1dcaa21ba0f5ba11e4879e6ed28ddb4f9df4" dependencies = [ "equivalent", "hashbrown 0.14.5", @@ -1951,9 +2012,9 @@ dependencies = [ [[package]] name = "insta" -version = "1.39.0" +version = "1.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "810ae6042d48e2c9e9215043563a58a80b877bc863228a74cf10c49d4620a6f5" +checksum = "a0770b0a3d4c70567f0d58331f3088b0e4c4f56c9b8d764efe654b4a5d46de3a" dependencies = [ "console", "lazy_static", @@ -1963,13 +2024,14 @@ dependencies = [ "ron", "serde", "similar", + "yaml-rust", ] [[package]] name = "instant" -version = "0.1.13" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" +checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" dependencies = [ "cfg-if", ] @@ -1980,7 +2042,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f" dependencies = [ - "socket2", + "socket2 0.5.7", "widestring", "windows-sys 0.48.0", "winreg", @@ -1988,9 +2050,9 @@ dependencies = [ [[package]] name = "ipnet" -version = "2.9.0" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" +checksum = "30e22bd8629359895450b59ea7a776c850561b96a3b1d31321c1949d9e6c9146" [[package]] name = "ipnetwork" @@ -2003,21 +2065,15 @@ dependencies = [ [[package]] name = "is-terminal" -version = "0.4.13" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "261f68e344040fbd0edea105bef17c66edf46f984ddb1115b775ce31be948f4b" +checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b" dependencies = [ - "hermit-abi 0.4.0", - "libc", - "windows-sys 0.52.0", + "hermit-abi 0.3.9", + "rustix", + "windows-sys 0.48.0", ] -[[package]] -name = "is_terminal_polyfill" -version = "1.70.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" - [[package]] name = "iso8601" version = "0.6.1" @@ -2047,9 +2103,9 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.11" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" +checksum = "fad582f4b9e86b6caa621cabeb0963332d92eea04729ab12892c2533951e6440" [[package]] name = "jobserver" @@ -2062,9 +2118,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.70" +version = "0.3.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1868808506b929d7b0cfa8f75951347aa71bb21144b7791bae35d9bccfcfe37a" +checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a" dependencies = [ "wasm-bindgen", ] @@ -2105,11 +2161,11 @@ dependencies = [ [[package]] name = "lazy_static" -version = "1.5.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" dependencies = [ - "spin", + "spin 0.5.2", ] [[package]] @@ -2120,19 +2176,19 @@ checksum = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439" [[package]] name = "libloading" -version = "0.8.5" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4979f22fdb869068da03c9f7528f8297c6fd2606bc3a4affe42e6a823fdb8da4" +checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" dependencies = [ "cfg-if", - "windows-targets 0.52.6", + "winapi", ] [[package]] name = "libm" -version = "0.2.8" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" +checksum = "f7012b1bbb0719e1097c47611d3898568c546d597c2e74d66f6087edd5233ff4" [[package]] name = "libsqlite3-sys" @@ -2147,9 +2203,9 @@ dependencies = [ [[package]] name = "libz-sys" -version = "1.1.20" +version = "1.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2d16453e800a8cf6dd2fc3eb4bc99b786a9b90c663b8559a5b1a041bf89e472" +checksum = "9702761c3935f8cc2f101793272e202c72b99da8f4224a19ddcf1279a6450bbf" dependencies = [ "cc", "libc", @@ -2157,6 +2213,15 @@ dependencies = [ "vcpkg", ] +[[package]] +name = "link-cplusplus" +version = "1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecd207c9c713c34f95a097a5b029ac2ce6010530c7b49d7fea24d977dede04f5" +dependencies = [ + "cc", +] + [[package]] name = "linked-hash-map" version = "0.5.6" @@ -2171,9 +2236,9 @@ checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" [[package]] name = "lock_api" -version = "0.4.12" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" +checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" dependencies = [ "autocfg", "scopeguard", @@ -2220,9 +2285,9 @@ dependencies = [ [[package]] name = "matchit" -version = "0.7.3" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" +checksum = "b87248edafb776e59e6ee64a79086f65890d3510f2c656c000bf2a7e8a0aea40" [[package]] name = "maxminddb" @@ -2233,17 +2298,16 @@ dependencies = [ "ipnetwork", "log", "memchr", - "memmap2", + "memmap2 0.9.4", "serde", ] [[package]] name = "md-5" -version = "0.10.6" +version = "0.10.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" +checksum = "6365506850d44bff6e2fbcb5176cf63650e48bd45ef2fe2665ae1570e0f4b9ca" dependencies = [ - "cfg-if", "digest", ] @@ -2259,6 +2323,15 @@ version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" +[[package]] +name = "memmap2" +version = "0.5.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327" +dependencies = [ + "libc", +] + [[package]] name = "memmap2" version = "0.9.4" @@ -2268,11 +2341,20 @@ dependencies = [ "libc", ] +[[package]] +name = "memoffset" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4" +dependencies = [ + "autocfg", +] + [[package]] name = "mime" -version = "0.3.17" +version = "0.3.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" +checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" [[package]] name = "minidump" @@ -2282,12 +2364,12 @@ checksum = "aefb80650628de087057ed167e3e1ef5bed65dc4b1bd28d47cd707c3848adce2" dependencies = [ "debugid", "encoding_rs", - "memmap2", + "memmap2 0.9.4", "minidump-common", "num-traits", "procfs-core", "range-map", - "scroll", + "scroll 0.12.0", "thiserror", "time", "tracing", @@ -2300,12 +2382,12 @@ version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95a2b640f80e5514f49509ff1f97fb24693f95ef5be5ed810d70df4283a68acc" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.4.1", "debugid", "num-derive", "num-traits", "range-map", - "scroll", + "scroll 0.12.0", "smart-default", ] @@ -2317,22 +2399,13 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.7.4" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" +checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa" dependencies = [ "adler", ] -[[package]] -name = "miniz_oxide" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" -dependencies = [ - "adler2", -] - [[package]] name = "mio" version = "1.0.2" @@ -2347,19 +2420,19 @@ dependencies = [ [[package]] name = "multer" -version = "2.1.0" +version = "2.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01acbdc23469fd8fe07ab135923371d5f5a422fbf9c522158677c8eb15bc51c2" +checksum = "6ed4198ce7a4cbd2a57af78d28c6fbb57d81ac5f1d6ad79ac6c5587419cbdf22" dependencies = [ "bytes", "encoding_rs", "futures-util", - "http 0.2.12", + "http 0.2.9", "httparse", "log", "memchr", "mime", - "spin", + "spin 0.9.8", "version_check", ] @@ -2376,16 +2449,17 @@ dependencies = [ "httparse", "memchr", "mime", - "spin", + "spin 0.9.8", "version_check", ] [[package]] name = "native-tls" -version = "0.2.12" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8614eb2c83d59d1c8cc974dd3f920198647674a0a035e1af1fa58707e317466" +checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" dependencies = [ + "lazy_static", "libc", "log", "openssl", @@ -2399,9 +2473,9 @@ dependencies = [ [[package]] name = "new_debug_unreachable" -version = "1.0.6" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" +checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54" [[package]] name = "nom" @@ -2413,6 +2487,15 @@ dependencies = [ "minimal-lexical", ] +[[package]] +name = "nom8" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae01545c9c7fc4486ab7debaf2aad7003ac19431791868fb2e8066df97fad2f8" +dependencies = [ + "memchr", +] + [[package]] name = "ntapi" version = "0.4.1" @@ -2434,9 +2517,9 @@ dependencies = [ [[package]] name = "num" -version = "0.4.3" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" +checksum = "3135b08af27d103b0a51f2ae0f8632117b7b185ccf931445affa8df530576a41" dependencies = [ "num-bigint", "num-complex", @@ -2527,10 +2610,11 @@ dependencies = [ [[package]] name = "num-rational" -version = "0.4.2" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" +checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" dependencies = [ + "autocfg", "num-bigint", "num-integer", "num-traits", @@ -2538,9 +2622,9 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.19" +version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a" dependencies = [ "autocfg", "libm", @@ -2548,28 +2632,28 @@ dependencies = [ [[package]] name = "num_cpus" -version = "1.16.0" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b" dependencies = [ - "hermit-abi 0.3.9", + "hermit-abi 0.2.6", "libc", ] [[package]] name = "num_enum" -version = "0.5.11" +version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" +checksum = "8d829733185c1ca374f17e52b762f24f535ec625d2cc1f070e34c8a9068f341b" dependencies = [ "num_enum_derive", ] [[package]] name = "num_enum_derive" -version = "0.5.11" +version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" +checksum = "2be1598bf1c313dcdd12092e3f1920f463462525a21b7b4e11b4168353d0123e" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -2579,9 +2663,9 @@ dependencies = [ [[package]] name = "object" -version = "0.36.4" +version = "0.30.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "084f1a5821ac4c651660a94a7153d27ac9d8a53736203f58b31945ded098070a" +checksum = "ea86265d3d3dcb6a27fc51bd29a4bf387fae9d2986b823079d4986af253eb439" dependencies = [ "memchr", ] @@ -2594,9 +2678,9 @@ checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" [[package]] name = "oorandom" -version = "11.1.4" +version = "11.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b410bbe7e14ab526a0e86877eb47c6996a2bd7746f027ba551028c925390e4e9" +checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575" [[package]] name = "openssl" @@ -2604,7 +2688,7 @@ version = "0.10.66" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9529f4786b70a3e8c61e11179af17ab6188ad8d0ded78c5529441ed39d4bd9c1" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.4.1", "cfg-if", "foreign-types", "libc", @@ -2615,13 +2699,13 @@ dependencies = [ [[package]] name = "openssl-macros" -version = "0.1.1" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" +checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 1.0.109", ] [[package]] @@ -2709,13 +2793,13 @@ dependencies = [ [[package]] name = "os_info" -version = "3.8.2" +version = "3.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae99c7fa6dd38c7cafe1ec085e804f8f555a2f8659b0dbe03f1f9963a9b51092" +checksum = "5c424bc68d15e0778838ac013b5b3449544d8133633d8016319e7e05a820b8c0" dependencies = [ "log", "serde", - "windows-sys 0.52.0", + "winapi", ] [[package]] @@ -2732,9 +2816,9 @@ checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae" [[package]] name = "parking_lot" -version = "0.12.3" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" +checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" dependencies = [ "lock_api", "parking_lot_core", @@ -2742,22 +2826,22 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.10" +version = "0.9.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" +checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.5.3", + "redox_syscall 0.2.16", "smallvec", - "windows-targets 0.52.6", + "windows-sys 0.45.0", ] [[package]] name = "paste" -version = "1.0.15" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" +checksum = "d01a5bd0424d00070b0098dd17ebca6f961a959dead1dbcbbbc1d1cd8d3deeba" [[package]] name = "path-slash" @@ -2782,20 +2866,19 @@ checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "pest" -version = "2.7.11" +version = "2.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd53dff83f26735fdc1ca837098ccf133605d794cdae66acfc2bfac3ec809d95" +checksum = "1acb4a4365a13f749a93f1a094a7805e5cfa0955373a9de860d962eaa3a5fe5a" dependencies = [ - "memchr", "thiserror", "ucd-trie", ] [[package]] name = "pest_derive" -version = "2.7.11" +version = "2.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a548d2beca6773b1c244554d36fcf8548a8a58e74156968211567250e48e49a" +checksum = "666d00490d4ac815001da55838c500eafb0320019bbaa44444137c48b443a853" dependencies = [ "pest", "pest_generator", @@ -2803,9 +2886,9 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.7.11" +version = "2.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c93a82e8d145725dcbaf44e5ea887c8a869efdcc28706df2d08c69e17077183" +checksum = "68ca01446f50dbda87c1786af8770d535423fa8a53aec03b8f4e3d7eb10e0929" dependencies = [ "pest", "pest_meta", @@ -2816,9 +2899,9 @@ dependencies = [ [[package]] name = "pest_meta" -version = "2.7.11" +version = "2.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a941429fea7e08bedec25e4f6785b6ffaacc6b755da98df5ef3e7dcf4a124c4f" +checksum = "56af0a30af74d0445c0bf6d9d051c979b516a1a5af790d251daee76005420a48" dependencies = [ "once_cell", "pest", @@ -2836,29 +2919,29 @@ dependencies = [ [[package]] name = "pin-project" -version = "1.1.5" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" +checksum = "ad29a609b6bcd67fee905812e544992d216af9d755757c05ed2d0e15a74c6ecc" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.5" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" +checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 1.0.109", ] [[package]] name = "pin-project-lite" -version = "0.2.14" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" +checksum = "12cc1b0bf1727a77a54b6654e7b5f1af8604923edc8b81885f8ec92f9e3f0a05" [[package]] name = "pin-utils" @@ -2889,15 +2972,15 @@ dependencies = [ [[package]] name = "pkg-config" -version = "0.3.30" +version = "0.3.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" +checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160" [[package]] name = "plotters" -version = "0.3.6" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a15b6eccb8484002195a3e44fe65a4ce8e93a625797a063735536fd59cb01cf3" +checksum = "2538b639e642295546c50fcd545198c9d64ee2a38620a628724a3b266d5fbf97" dependencies = [ "num-traits", "plotters-backend", @@ -2908,15 +2991,15 @@ dependencies = [ [[package]] name = "plotters-backend" -version = "0.3.6" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "414cec62c6634ae900ea1c56128dfe87cf63e7caece0852ec76aba307cebadb7" +checksum = "193228616381fecdc1224c62e96946dfbc73ff4384fba576e052ff8c1bea8142" [[package]] name = "plotters-svg" -version = "0.3.6" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81b30686a7d9c3e010b84284bdd26a29f2138574f52f5eb6f794fc0ad924e705" +checksum = "f9a81d2759aae1dae668f783c308bc5c8ebd191ff4184aaa1b37f65a6ae5a56f" dependencies = [ "plotters-backend", ] @@ -2929,12 +3012,9 @@ checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" [[package]] name = "ppv-lite86" -version = "0.2.20" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" -dependencies = [ - "zerocopy", -] +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" [[package]] name = "precomputed-hash" @@ -2960,20 +3040,20 @@ dependencies = [ [[package]] name = "priority-queue" -version = "2.1.0" +version = "2.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "560bcab673ff7f6ca9e270c17bf3affd8a05e3bd9207f123b0d45076fd8197e8" +checksum = "70c501afe3a2e25c9bd219aa56ec1e04cdb3fcdd763055be268778c13fa82c1f" dependencies = [ "autocfg", "equivalent", - "indexmap 2.5.0", + "indexmap 2.2.5", ] [[package]] name = "proc-macro-crate" -version = "1.3.1" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" +checksum = "66618389e4ec1c7afe67d51a9bf34ff9236480f8d51e7489b7d5ab0303c13f34" dependencies = [ "once_cell", "toml_edit", @@ -3007,7 +3087,7 @@ version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2d3554923a69f4ce04c4a754260c338f505ce22642d3830e049a399fc2059a29" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.4.1", "hex", ] @@ -3036,9 +3116,9 @@ dependencies = [ [[package]] name = "psl" -version = "2.1.55" +version = "2.1.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce9398ad066421139b2e3afe16ea46772ffda30bd9ba57554dc035df5e26edc8" +checksum = "a93553389d84c7a76edf270a88b43fc2dcbc6a1fed546dd2a0f99df5ed4444b6" dependencies = [ "psl-types", ] @@ -3192,39 +3272,39 @@ dependencies = [ "rand", "ryu", "sha1_smol", - "socket2", + "socket2 0.5.7", "tokio", "url", ] [[package]] name = "redox_syscall" -version = "0.4.1" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" +checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" dependencies = [ "bitflags 1.3.2", ] [[package]] name = "redox_syscall" -version = "0.5.3" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a908a6e00f1fdd0dfd9c0eb08ce85126f6d8bbda50017e74bc4a4b7d4a926a4" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" dependencies = [ - "bitflags 2.6.0", + "bitflags 1.3.2", ] [[package]] name = "regex" -version = "1.10.6" +version = "1.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4219d74c6b67a3654a9fbebc4b419e22126d13d2f3c4a07ee0cb61ff79a79619" +checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.4.7", - "regex-syntax 0.8.4", + "regex-automata 0.4.3", + "regex-syntax 0.8.2", ] [[package]] @@ -3233,18 +3313,18 @@ version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" dependencies = [ - "regex-syntax 0.6.29", + "regex-syntax 0.6.28", ] [[package]] name = "regex-automata" -version = "0.4.7" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" +checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f" dependencies = [ "aho-corasick", "memchr", - "regex-syntax 0.8.4", + "regex-syntax 0.8.2", ] [[package]] @@ -3255,15 +3335,15 @@ checksum = "53a49587ad06b26609c52e423de037e7f57f20d53535d66e08c695f347df952a" [[package]] name = "regex-syntax" -version = "0.6.29" +version = "0.6.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" +checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848" [[package]] name = "regex-syntax" -version = "0.8.4" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" +checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" [[package]] name = "relay" @@ -3393,7 +3473,7 @@ dependencies = [ "relay-redis", "serde", "serde_json", - "serde_yaml", + "serde_yaml 0.9.17", "thiserror", "url", "uuid", @@ -3516,7 +3596,7 @@ dependencies = [ name = "relay-filter" version = "24.8.0" dependencies = [ - "indexmap 2.5.0", + "indexmap 2.2.5", "insta", "ipnetwork", "once_cell", @@ -3542,7 +3622,7 @@ dependencies = [ "sentry-kafka-schemas", "serde", "serde_json", - "serde_yaml", + "serde_yaml 0.9.17", "thiserror", ] @@ -3711,7 +3791,7 @@ dependencies = [ "r2d2", "redis", "serde", - "serde_yaml", + "serde_yaml 0.9.17", "thiserror", ] @@ -3776,7 +3856,7 @@ dependencies = [ "json-forensics", "mime", "minidump", - "multer 2.1.0", + "multer 2.0.4", "once_cell", "pin-project-lite", "priority-queue", @@ -3817,7 +3897,7 @@ dependencies = [ "serde_path_to_error", "similar-asserts", "smallvec", - "socket2", + "socket2 0.5.7", "sqlx", "symbolic-common", "symbolic-unreal", @@ -3946,24 +4026,23 @@ dependencies = [ [[package]] name = "ring" -version = "0.17.8" +version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" +checksum = "9babe80d5c16becf6594aa32ad2be8fe08498e7ae60b77de8df700e67f191d7e" dependencies = [ "cc", - "cfg-if", "getrandom", "libc", - "spin", + "spin 0.9.8", "untrusted", - "windows-sys 0.52.0", + "windows-sys 0.48.0", ] [[package]] name = "rmp" -version = "0.8.14" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "228ed7c16fa39782c3b3468e974aec2795e9089153cd08ee2e9aefb3613334c4" +checksum = "44519172358fd6d58656c86ab8e7fbc9e1490c3e8f14d35ed78ca0dd07403c9f" dependencies = [ "byteorder", "num-traits", @@ -3972,9 +4051,9 @@ dependencies = [ [[package]] name = "rmp-serde" -version = "1.3.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52e599a477cf9840e92f2cde9a7189e67b42c57532749bf90aea6ec10facd4db" +checksum = "c5b13be192e0220b8afb7222aa5813cb62cc269ebb5cac346ca6487681d2913e" dependencies = [ "byteorder", "rmp", @@ -3994,14 +4073,16 @@ dependencies = [ [[package]] name = "rsa" -version = "0.9.6" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d0e5124fcb30e76a7e79bfee683a2746db83784b86289f6251b54b7950a0dfc" +checksum = "6ab43bb47d23c1a631b4b680199a45255dce26fa9ab2fa902581f624ff13e6a8" dependencies = [ + "byteorder", "const-oid", "digest", "num-bigint-dig", "num-integer", + "num-iter", "num-traits", "pkcs1", "pkcs8", @@ -4014,9 +4095,9 @@ dependencies = [ [[package]] name = "rustc-demangle" -version = "0.1.24" +version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" +checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342" [[package]] name = "rustc-hash" @@ -4026,9 +4107,9 @@ checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" [[package]] name = "rustc_version" -version = "0.4.1" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" dependencies = [ "semver", ] @@ -4039,7 +4120,7 @@ version = "0.38.35" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a85d50532239da68e9addb745ba38ff4612a242c1c7ceea689c4bc7c2f43c36f" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.4.1", "errno", "libc", "linux-raw-sys", @@ -4088,15 +4169,15 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.17" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" +checksum = "4f3208ce4d8448b3f3e7d168a73f5e0c43a61e32930de3bceeccedb388b6bf06" [[package]] name = "ryu" -version = "1.0.18" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" +checksum = "7b4b9743ed687d4b4bcedf9ff5eaa7398495ae14e61cba0a295704edbc7decde" [[package]] name = "same-file" @@ -4109,27 +4190,42 @@ dependencies = [ [[package]] name = "schannel" -version = "0.1.23" +version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" +checksum = "713cfb06c7059f3588fb8044c0fad1d09e3c01d225e25b9220dbfdcf16dbb1b3" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.42.0", ] [[package]] name = "scheduled-thread-pool" -version = "0.2.7" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3cbc66816425a074528352f5789333ecff06ca41b36b0b0efdfbb29edc391a19" +checksum = "977a7519bff143a44f842fd07e80ad1329295bd71686457f18e496736f4bf9bf" dependencies = [ "parking_lot", ] [[package]] name = "scopeguard" -version = "1.2.0" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" + +[[package]] +name = "scratch" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" +checksum = "ddccb15bcce173023b3fedd9436f882a0739b8dfb45e4f6b6002bee5929f61b2" + +[[package]] +name = "scroll" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04c565b551bafbef4157586fa379538366e4385d42082f255bfd96e4fe8519da" +dependencies = [ + "scroll_derive 0.11.0", +] [[package]] name = "scroll" @@ -4137,7 +4233,18 @@ version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6ab8598aa408498679922eff7fa985c25d58a90771bd6be794434c5277eab1a6" dependencies = [ - "scroll_derive", + "scroll_derive 0.12.0", +] + +[[package]] +name = "scroll_derive" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bdbda6ac5cd1321e724fa9cee216f3a61885889b896f073b8f82322789c5250e" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] @@ -4163,11 +4270,11 @@ dependencies = [ [[package]] name = "security-framework" -version = "2.11.1" +version = "2.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" +checksum = "a332be01508d814fed64bf28f798a146d73792121129962fdf335bb3c49a4254" dependencies = [ - "bitflags 2.6.0", + "bitflags 1.3.2", "core-foundation", "core-foundation-sys", "libc", @@ -4176,9 +4283,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.11.1" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75da29fe9b9b08fe9d6b22b5b4bcbc75d8db3aa31e639aa56bb62e9d46bfceaf" +checksum = "31c9bb296072e961fcbd8853511dd39c2d8be2deb1e17c6860b1d30732b323b4" dependencies = [ "core-foundation-sys", "libc", @@ -4268,7 +4375,7 @@ dependencies = [ "jsonschema", "serde", "serde_json", - "serde_yaml", + "serde_yaml 0.9.17", "thiserror", ] @@ -4324,9 +4431,9 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.209" +version = "1.0.189" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99fce0ffe7310761ca6bf9faf5115afbc19688edd00171d81b1bb1b116c63e09" +checksum = "8e422a44e74ad4001bdc8eede9a4570ab52f71190e9c076d14369f38b9200537" dependencies = [ "serde_derive", ] @@ -4342,18 +4449,18 @@ dependencies = [ [[package]] name = "serde_bytes" -version = "0.11.15" +version = "0.11.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "387cc504cb06bb40a96c8e04e951fe01854cf6bc921053c954e4a606d9675c6a" +checksum = "8b8497c313fd43ab992087548117643f6fcd935cbf36f176ffda0aacf9591734" dependencies = [ "serde", ] [[package]] name = "serde_derive" -version = "1.0.209" +version = "1.0.189" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5831b979fd7b5439637af1752d535ff49f4860c0f341d1baeb6faf0f4242170" +checksum = "1e48d1f918009ce3145511378cf68d613e3b3d9137d67272562080d68a2b32d5" dependencies = [ "proc-macro2", "quote", @@ -4362,21 +4469,20 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.127" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8043c06d9f82bd7271361ed64f415fe5e12a77fdb52e573e7f06a516dea329ad" +checksum = "cad406b69c91885b5107daf2c29572f6c8cdb3c66826821e286c533490c0bc76" dependencies = [ "itoa", - "memchr", "ryu", "serde", ] [[package]] name = "serde_path_to_error" -version = "0.1.16" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af99884400da37c88f5e9146b7f1fd0fbcae8f6eec4e9da38b67d05486f814a6" +checksum = "4beec8bce849d58d06238cb50db2e1c417cfeafa4c63f692b15c82b7c80f8335" dependencies = [ "itoa", "serde", @@ -4384,9 +4490,9 @@ dependencies = [ [[package]] name = "serde_test" -version = "1.0.177" +version = "1.0.152" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f901ee573cab6b3060453d2d5f0bae4e6d628c23c0a962ff9b5f1d7c8d4f1ed" +checksum = "3611210d2d67e3513204742004d6ac6f589e521861dabb0f649b070eea8bed9e" dependencies = [ "serde", ] @@ -4405,11 +4511,23 @@ dependencies = [ [[package]] name = "serde_yaml" -version = "0.9.34+deprecated" +version = "0.8.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" +checksum = "578a7433b776b56a35785ed5ce9a7e777ac0598aac5a6dd1b4b18a307c7fc71b" dependencies = [ - "indexmap 2.5.0", + "indexmap 1.9.2", + "ryu", + "serde", + "yaml-rust", +] + +[[package]] +name = "serde_yaml" +version = "0.9.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fb06d4b6cdaef0e0c51fa881acb721bed3c924cfaa71d9c94a3b771dfdf6567" +dependencies = [ + "indexmap 1.9.2", "itoa", "ryu", "serde", @@ -4418,9 +4536,9 @@ dependencies = [ [[package]] name = "sha1" -version = "0.10.6" +version = "0.10.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3" dependencies = [ "cfg-if", "cpufeatures", @@ -4429,15 +4547,15 @@ dependencies = [ [[package]] name = "sha1_smol" -version = "1.0.1" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbfa15b3dddfee50a0fff136974b3e1bde555604ba463834a7eb7deb6417705d" +checksum = "ae1a47186c03a32177042e55dbc5fd5aee900b8e0069a8d70fba96a9375cd012" [[package]] name = "sha2" -version = "0.10.8" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" dependencies = [ "cfg-if", "cpufeatures", @@ -4446,9 +4564,9 @@ dependencies = [ [[package]] name = "sharded-slab" -version = "0.1.7" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31" dependencies = [ "lazy_static", ] @@ -4467,18 +4585,18 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "signal-hook-registry" -version = "1.4.2" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" +checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0" dependencies = [ "libc", ] [[package]] name = "signature" -version = "2.2.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" +checksum = "8fe458c98333f9c8152221191a77e2a44e8325d0193484af2e9421a53019e57d" dependencies = [ "digest", "rand_core", @@ -4486,19 +4604,19 @@ dependencies = [ [[package]] name = "similar" -version = "2.6.0" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1de1d4f81173b03af4c0cbed3c898f6bff5b870e4a7f5d6f4057d62a7a4b686e" +checksum = "420acb44afdae038210c99e69aae24109f32f15500aa708e81d46c9f29d55fcf" dependencies = [ - "bstr", + "bstr 0.2.17", "unicode-segmentation", ] [[package]] name = "similar-asserts" -version = "1.5.0" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e041bb827d1bfca18f213411d51b665309f1afb37a04a5d1464530e13779fc0f" +checksum = "bbf644ad016b75129f01a34a355dcb8d66a5bc803e417c7a77cc5d5ee9fa0f18" dependencies = [ "console", "similar", @@ -4506,15 +4624,15 @@ dependencies = [ [[package]] name = "siphasher" -version = "0.3.11" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" +checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de" [[package]] name = "slab" -version = "0.4.9" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef" dependencies = [ "autocfg", ] @@ -4539,6 +4657,16 @@ dependencies = [ "syn 2.0.77", ] +[[package]] +name = "socket2" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" +dependencies = [ + "libc", + "winapi", +] + [[package]] name = "socket2" version = "0.5.7" @@ -4549,6 +4677,12 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "spin" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" + [[package]] name = "spin" version = "0.9.8" @@ -4560,9 +4694,9 @@ dependencies = [ [[package]] name = "spki" -version = "0.7.3" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +checksum = "9d1e996ef02c474957d681f1b05213dfb0abab947b446a62d37770b23500184a" dependencies = [ "base64ct", "der", @@ -4570,10 +4704,11 @@ dependencies = [ [[package]] name = "sqlformat" -version = "0.2.4" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f895e3734318cc55f1fe66258926c9b910c124d47520339efecbb6c59cec7c1f" +checksum = "0c12bc9199d1db8234678b7051747c07f517cdcf019262d1847b94ec8b1aee3e" dependencies = [ + "itertools 0.10.5", "nom", "unicode_categories", ] @@ -4633,7 +4768,7 @@ dependencies = [ "hashbrown 0.14.5", "hashlink", "hex", - "indexmap 2.5.0", + "indexmap 2.2.5", "log", "memchr", "once_cell", @@ -4696,7 +4831,7 @@ checksum = "936cac0ab331b14cb3921c62156d913e4c15b74fb6ec0f3146bd4ef6e4fb3c12" dependencies = [ "atoi", "base64 0.22.1", - "bitflags 2.6.0", + "bitflags 2.4.1", "byteorder", "bytes", "crc", @@ -4737,7 +4872,7 @@ checksum = "9734dbce698c67ecf67c442f768a5e90a49b2a4d61a9f1d59f73874bd4cf0710" dependencies = [ "atoi", "base64 0.22.1", - "bitflags 2.6.0", + "bitflags 2.4.1", "byteorder", "crc", "dotenvy", @@ -4813,9 +4948,9 @@ dependencies = [ [[package]] name = "string_cache" -version = "0.8.7" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b" +checksum = "213494b7a2b503146286049378ce02b482200519accc31872ee8be91fa820a08" dependencies = [ "new_debug_unreachable", "once_cell", @@ -4827,20 +4962,19 @@ dependencies = [ [[package]] name = "stringprep" -version = "0.1.5" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b4df3d392d81bd458a8a621b8bffbd2302a12ffe288a9d931670948749463b1" +checksum = "8ee348cb74b87454fff4b551cbf727025810a004f88aeacae7f85b87f4e9a1c1" dependencies = [ "unicode-bidi", "unicode-normalization", - "unicode-properties", ] [[package]] name = "strsim" -version = "0.11.1" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" [[package]] name = "subtle" @@ -4850,21 +4984,21 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "symbolic-common" -version = "12.10.1" +version = "12.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1944ea8afd197111bca0c0edea1e1f56abb3edd030e240c1035cc0e3ff51fec" +checksum = "9175daca19ecfe5836212bbb4c5c7d59ff5e3faf11c13a299602e8630ac2fb95" dependencies = [ "debugid", - "memmap2", + "memmap2 0.5.10", "stable_deref_trait", "uuid", ] [[package]] name = "symbolic-unreal" -version = "12.10.1" +version = "12.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baa2ae2d7de7ca486034b017197d43b4bd833c238c5e74bb89f55f318f325078" +checksum = "dfafda6f24906ce579407407046298bc9cd5ed608227694657cb186d4faca1da" dependencies = [ "anylog", "bytes", @@ -4873,7 +5007,7 @@ dependencies = [ "flate2", "lazy_static", "regex", - "scroll", + "scroll 0.11.0", "serde", "thiserror", "time", @@ -4933,7 +5067,7 @@ name = "sysinfo" version = "0.30.13" source = "git+https://github.com/getsentry/sysinfo.git?rev=e2e5d530600f96bdd79652c856918da23e5dd938#e2e5d530600f96bdd79652c856918da23e5dd938" dependencies = [ - "bstr", + "bstr 1.9.1", "core-foundation-sys", "libc", "memchr", @@ -4948,7 +5082,7 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.4.1", "core-foundation", "system-configuration-sys", ] @@ -4965,22 +5099,21 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.12.0" +version = "3.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04cbcdd0c794ebb0d4cf35e88edd2f7d2c4c3e9a5a6dab322839b321c6a87a64" +checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" dependencies = [ "cfg-if", "fastrand", - "once_cell", "rustix", - "windows-sys 0.59.0", + "windows-sys 0.52.0", ] [[package]] name = "termcolor" -version = "1.4.1" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" +checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6" dependencies = [ "winapi-util", ] @@ -4997,18 +5130,18 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.63" +version = "1.0.55" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" +checksum = "6e3de26b0965292219b4287ff031fcba86837900fe9cd2b34ea8ad893c0953d2" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.63" +version = "1.0.55" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" +checksum = "268026685b2be38d7103e9e507c938a1fcb3d7e6eb15e87870b617bf37b6d581" dependencies = [ "proc-macro2", "quote", @@ -5017,9 +5150,9 @@ dependencies = [ [[package]] name = "thread_local" -version = "1.1.8" +version = "1.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152" dependencies = [ "cfg-if", "once_cell", @@ -5088,9 +5221,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.8.0" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" +checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" dependencies = [ "tinyvec_macros", ] @@ -5103,9 +5236,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.40.0" +version = "1.39.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2b070231665d27ad9ec9b8df639893f46727666c6767db40317fbe920a5d998" +checksum = "9babc99b9923bfa4804bd74722ff02c0381021eafa4db9949217e3be8e84fff5" dependencies = [ "backtrace", "bytes", @@ -5113,7 +5246,7 @@ dependencies = [ "mio", "pin-project-lite", "signal-hook-registry", - "socket2", + "socket2 0.5.7", "tokio-macros", "windows-sys 0.52.0", ] @@ -5162,9 +5295,9 @@ dependencies = [ [[package]] name = "tokio-stream" -version = "0.1.15" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "267ac89e0bec6e691e5813911606935d77c476ff49024f98abcea3e7b15e37af" +checksum = "8fb52b74f05dbf495a8fba459fdc331812b96aa086d9eb78101fa0d4569c3313" dependencies = [ "futures-core", "pin-project-lite", @@ -5186,19 +5319,19 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "0.6.8" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" +checksum = "4553f467ac8e3d374bc9a177a26801e5d0f9b211aa1673fb137a403afd1c9cf5" [[package]] name = "toml_edit" -version = "0.19.15" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +checksum = "56c59d8dd7d0dcbc6428bf7aa2f0e823e26e43b3c9aca15bbc9475d23e5fa12b" dependencies = [ - "indexmap 2.5.0", + "indexmap 1.9.2", + "nom8", "toml_datetime", - "winnow", ] [[package]] @@ -5214,9 +5347,9 @@ dependencies = [ "futures-core", "futures-util", "h2 0.3.26", - "http 0.2.12", - "http-body 0.4.6", - "hyper 0.14.30", + "http 0.2.9", + "http-body 0.4.5", + "hyper 0.14.26", "hyper-timeout", "percent-encoding", "pin-project", @@ -5237,7 +5370,7 @@ checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" dependencies = [ "futures-core", "futures-util", - "indexmap 1.9.3", + "indexmap 1.9.2", "pin-project", "pin-project-lite", "rand", @@ -5256,7 +5389,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e9cd434a998747dd2c4276bc96ee2e0c7a2eadf3cae88e52be55a05fa9053f5" dependencies = [ "async-compression", - "bitflags 2.6.0", + "bitflags 2.4.1", "bytes", "futures-core", "futures-util", @@ -5273,22 +5406,23 @@ dependencies = [ [[package]] name = "tower-layer" -version = "0.3.3" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" +checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" [[package]] name = "tower-service" -version = "0.3.3" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" +checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" [[package]] name = "tracing" -version = "0.1.40" +version = "0.1.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" dependencies = [ + "cfg-if", "log", "pin-project-lite", "tracing-attributes", @@ -5297,20 +5431,20 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.27" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 1.0.109", ] [[package]] name = "tracing-core" -version = "0.1.32" +version = "0.1.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a" dependencies = [ "once_cell", "valuable", @@ -5318,12 +5452,12 @@ dependencies = [ [[package]] name = "tracing-log" -version = "0.2.0" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922" dependencies = [ + "lazy_static", "log", - "once_cell", "tracing-core", ] @@ -5339,9 +5473,9 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.18" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" +checksum = "30a651bc37f915e81f087d86e62a18eec5f79550c7faff886f7090b4ea757c77" dependencies = [ "matchers", "nu-ansi-term", @@ -5361,28 +5495,28 @@ dependencies = [ [[package]] name = "try-lock" -version = "0.2.5" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" +checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" [[package]] name = "typenum" -version = "1.17.0" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" +checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" [[package]] name = "uaparser" -version = "0.6.4" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4c9e1c3f893758f154004195fc2d2c52fbda462df725220ceaef830ac29affa" +checksum = "cf694e7b0434d4fad6c879e984e8fdc3a62f5533c3d421762244f9e9d03f6927" dependencies = [ "derive_more", "lazy_static", "regex", "serde", "serde_derive", - "serde_yaml", + "serde_yaml 0.8.26", ] [[package]] @@ -5402,9 +5536,9 @@ dependencies = [ [[package]] name = "unescaper" -version = "0.1.5" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c878a167baa8afd137494101a688ef8c67125089ff2249284bd2b5f9bfedb815" +checksum = "0adf6ad32eb5b3cadff915f7b770faaac8f7ff0476633aa29eb0d9584d889d34" dependencies = [ "thiserror", ] @@ -5420,9 +5554,9 @@ dependencies = [ [[package]] name = "unicode-bidi" -version = "0.3.15" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" +checksum = "d54675592c1dbefd78cbd98db9bacd89886e1ca50692a0692baefffdeb92dd58" [[package]] name = "unicode-ident" @@ -5432,36 +5566,30 @@ checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" [[package]] name = "unicode-normalization" -version = "0.1.23" +version = "0.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" +checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" dependencies = [ "tinyvec", ] -[[package]] -name = "unicode-properties" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52ea75f83c0137a9b98608359a5f1af8144876eb67bcb1ce837368e906a9f524" - [[package]] name = "unicode-segmentation" -version = "1.11.0" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" +checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36" [[package]] name = "unicode-width" -version = "0.1.13" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0336d538f7abc86d282a4189614dfaa90810dfc2c6f6427eaf88e16311dd225d" +checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" [[package]] name = "unicode-xid" -version = "0.2.5" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "229730647fbc343e3a80e463c1db7f78f3855d3f3739bee0dda773c9a037c90a" +checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" [[package]] name = "unicode_categories" @@ -5471,9 +5599,9 @@ checksum = "39ec24b3121d976906ece63c9daad25b85969647682eee313cb5779fdd69e14e" [[package]] name = "unsafe-libyaml" -version = "0.2.11" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861" +checksum = "ab4c90930b95a82d00dc9e9ac071b4991924390d46cbd0dfe566148667605e4b" [[package]] name = "untrusted" @@ -5483,11 +5611,11 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "ureq" -version = "2.10.1" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b74fc6b57825be3373f7054754755f03ac3a8f5d70015ccad699ba2029956f4a" +checksum = "0b11c96ac7ee530603dcdf68ed1557050f374ce55a5a07193ebf8cbc9f8927e9" dependencies = [ - "base64 0.22.1", + "base64 0.21.7", "log", "native-tls", "once_cell", @@ -5523,15 +5651,15 @@ dependencies = [ [[package]] name = "utf8parse" -version = "0.2.2" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" +checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" [[package]] name = "uuid" -version = "1.10.0" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81dfa00651efa65069b0b6b651f4aaa31ba9e3c3ce0137aaad053604ee7e0314" +checksum = "f00cc9702ca12d3c81455259621e676d0f7251cec66a21e98fe2e9a37db93b2a" dependencies = [ "getrandom", "serde", @@ -5552,26 +5680,28 @@ checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" [[package]] name = "version_check" -version = "0.9.5" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" [[package]] name = "walkdir" -version = "2.5.0" +version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" dependencies = [ "same-file", + "winapi", "winapi-util", ] [[package]] name = "want" -version = "0.3.1" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" dependencies = [ + "log", "try-lock", ] @@ -5589,20 +5719,19 @@ checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" [[package]] name = "wasm-bindgen" -version = "0.2.93" +version = "0.2.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a82edfc16a6c469f5f44dc7b571814045d60404b55a0ee849f9bcfa2e63dd9b5" +checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342" dependencies = [ "cfg-if", - "once_cell", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.93" +version = "0.2.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9de396da306523044d3302746f1208fa71d7532227f15e347e2d93e4145dd77b" +checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd" dependencies = [ "bumpalo", "log", @@ -5615,9 +5744,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.43" +version = "0.4.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61e9300f63a621e96ed275155c108eb6f843b6a26d053f122ab69724559dc8ed" +checksum = "c02dbc21516f9f1f04f187958890d7e6026df8d16540b7ad9492bc34a67cea03" dependencies = [ "cfg-if", "js-sys", @@ -5627,9 +5756,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.93" +version = "0.2.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "585c4c91a46b072c92e908d99cb1dcdf95c5218eeb6f3bf1efa991ee7a68cccf" +checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -5637,9 +5766,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.93" +version = "0.2.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836" +checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b" dependencies = [ "proc-macro2", "quote", @@ -5650,9 +5779,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.93" +version = "0.2.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c62a0a307cb4a311d3a07867860911ca130c3494e8c2719593806c08bc5d0484" +checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1" [[package]] name = "wasm-streams" @@ -5669,9 +5798,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.70" +version = "0.3.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26fdeaafd9bd129f65e7c031593c24d62186301e0c72c8978fa1678be7d532c0" +checksum = "9b85cbef8c220a6abc02aefd892dfc0fc23afb1c6a426316ec33253a3877249b" dependencies = [ "js-sys", "wasm-bindgen", @@ -5711,11 +5840,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.9" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" +checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" dependencies = [ - "windows-sys 0.59.0", + "winapi", ] [[package]] @@ -5826,6 +5955,30 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "windows-sys" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" +dependencies = [ + "windows_aarch64_gnullvm 0.42.1", + "windows_aarch64_msvc 0.42.1", + "windows_i686_gnu 0.42.1", + "windows_i686_msvc 0.42.1", + "windows_x86_64_gnu 0.42.1", + "windows_x86_64_gnullvm 0.42.1", + "windows_x86_64_msvc 0.42.1", +] + +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets 0.42.1", +] + [[package]] name = "windows-sys" version = "0.48.0" @@ -5845,12 +5998,18 @@ dependencies = [ ] [[package]] -name = "windows-sys" -version = "0.59.0" +name = "windows-targets" +version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +checksum = "8e2522491fbfcd58cc84d47aeb2958948c4b8982e9a2d8a2a35bbaed431390e7" dependencies = [ - "windows-targets 0.52.6", + "windows_aarch64_gnullvm 0.42.1", + "windows_aarch64_msvc 0.42.1", + "windows_i686_gnu 0.42.1", + "windows_i686_msvc 0.42.1", + "windows_x86_64_gnu 0.42.1", + "windows_x86_64_gnullvm 0.42.1", + "windows_x86_64_msvc 0.42.1", ] [[package]] @@ -5884,6 +6043,12 @@ dependencies = [ "windows_x86_64_msvc 0.52.6", ] +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c9864e83243fdec7fc9c5444389dcbbfd258f745e7853198f365e3c4968a608" + [[package]] name = "windows_aarch64_gnullvm" version = "0.48.5" @@ -5896,6 +6061,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c8b1b673ffc16c47a9ff48570a9d85e25d265735c503681332589af6253c6c7" + [[package]] name = "windows_aarch64_msvc" version = "0.48.5" @@ -5908,6 +6079,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" +[[package]] +name = "windows_i686_gnu" +version = "0.42.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de3887528ad530ba7bdbb1faa8275ec7a1155a45ffa57c37993960277145d640" + [[package]] name = "windows_i686_gnu" version = "0.48.5" @@ -5926,6 +6103,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" +[[package]] +name = "windows_i686_msvc" +version = "0.42.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf4d1122317eddd6ff351aa852118a2418ad4214e6613a50e0191f7004372605" + [[package]] name = "windows_i686_msvc" version = "0.48.5" @@ -5938,6 +6121,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1040f221285e17ebccbc2591ffdc2d44ee1f9186324dd3e84e99ac68d699c45" + [[package]] name = "windows_x86_64_gnu" version = "0.48.5" @@ -5950,6 +6139,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "628bfdf232daa22b0d64fdb62b09fcc36bb01f05a3939e20ab73aaf9470d0463" + [[package]] name = "windows_x86_64_gnullvm" version = "0.48.5" @@ -5962,6 +6157,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "447660ad36a13288b1db4d4248e857b510e8c3a225c822ba4fb748c0aafecffd" + [[package]] name = "windows_x86_64_msvc" version = "0.48.5" @@ -5974,15 +6175,6 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" -[[package]] -name = "winnow" -version = "0.5.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" -dependencies = [ - "memchr", -] - [[package]] name = "winreg" version = "0.50.0" @@ -5993,21 +6185,29 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "yaml-rust" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85" +dependencies = [ + "linked-hash-map", +] + [[package]] name = "zerocopy" -version = "0.7.35" +version = "0.7.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be" dependencies = [ - "byteorder", "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.7.35" +version = "0.7.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" dependencies = [ "proc-macro2", "quote", diff --git a/relay-server/src/services/buffer/envelope_stack/sqlite.rs b/relay-server/src/services/buffer/envelope_stack/sqlite.rs index 4331f63a764..78e8fa28b42 100644 --- a/relay-server/src/services/buffer/envelope_stack/sqlite.rs +++ b/relay-server/src/services/buffer/envelope_stack/sqlite.rs @@ -450,4 +450,31 @@ mod tests { } assert_eq!(stack.batches_buffer_size, 0); } + + #[tokio::test] + async fn test_drain() { + let db = setup_db(true).await; + let envelope_store = SqliteEnvelopeStore::new(db, Duration::from_millis(100)); + let mut stack = SqliteEnvelopeStack::new( + envelope_store.clone(), + 5, + 1, + ProjectKey::parse("a94ae32be2584e0bbd7a4cbb95971fee").unwrap(), + ProjectKey::parse("b81ae32be2584e0bbd7a4cbb95971fe1").unwrap(), + ); + + let envelopes = mock_envelopes(5); + + // We push 5 envelopes and check that there is nothing on disk. + for envelope in envelopes.clone() { + assert!(stack.push(envelope).await.is_ok()); + } + assert_eq!(stack.batches_buffer_size, 5); + assert_eq!(envelope_store.total_count().await.unwrap(), 0); + + // We drain the stack and make sure nothing was spooled to disk. + let drained_envelopes = stack.drain(); + assert_eq!(drained_envelopes.len(), 5); + assert_eq!(envelope_store.total_count().await.unwrap(), 0); + } } diff --git a/relay-server/src/services/buffer/stack_provider/sqlite.rs b/relay-server/src/services/buffer/stack_provider/sqlite.rs index dd2f82fc633..470f5235f46 100644 --- a/relay-server/src/services/buffer/stack_provider/sqlite.rs +++ b/relay-server/src/services/buffer/stack_provider/sqlite.rs @@ -91,3 +91,63 @@ impl StackProvider for SqliteStackProvider { }; } } + +#[cfg(test)] +mod tests { + use crate::services::buffer::common::ProjectKeyPair; + use crate::services::buffer::stack_provider::sqlite::SqliteStackProvider; + use crate::services::buffer::stack_provider::StackProvider; + use crate::services::buffer::testutils::utils::mock_envelopes; + use crate::EnvelopeStack; + use relay_base_schema::project::ProjectKey; + use relay_config::Config; + use std::sync::Arc; + use uuid::Uuid; + + fn mock_config() -> Arc { + let path = std::env::temp_dir() + .join(Uuid::new_v4().to_string()) + .into_os_string() + .into_string() + .unwrap(); + + Config::from_json_value(serde_json::json!({ + "spool": { + "envelopes": { + "path": path, + "disk_batch_size": 100, + "max_batches": 1, + } + } + })) + .unwrap() + .into() + } + + #[tokio::test] + async fn test_drain() { + let config = mock_config(); + let stack_provider = SqliteStackProvider::new(&config).await.unwrap(); + + let own_key = ProjectKey::parse("a94ae32be2584e0bbd7a4cbb95971fee").unwrap(); + let sampling_key = ProjectKey::parse("b81ae32be2584e0bbd7a4cbb95971fe1").unwrap(); + + let mut envelope_stack = + stack_provider.create_stack(ProjectKeyPair::new(own_key, sampling_key)); + + let envelopes = mock_envelopes(10); + for envelope in envelopes { + envelope_stack.push(envelope).await.unwrap(); + } + + let envelope_store = stack_provider.envelope_store.clone(); + + // We make sure that no data is on disk since we will spool when more than 100 elements are + // in the in-memory stack. + assert_eq!(envelope_store.total_count().await.unwrap(), 0); + + // We drain the stack provider, and we expect all in-memory envelopes to be spooled to disk. + stack_provider.drain(vec![envelope_stack]).await; + assert_eq!(envelope_store.total_count().await.unwrap(), 10); + } +} From 961db07bd130636bc05c890d84df8d6197d2e4ee Mon Sep 17 00:00:00 2001 From: Riccardo Busetti Date: Tue, 3 Sep 2024 13:29:35 +0200 Subject: [PATCH 04/15] Merge --- .../src/services/buffer/stack_provider/sqlite.rs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/relay-server/src/services/buffer/stack_provider/sqlite.rs b/relay-server/src/services/buffer/stack_provider/sqlite.rs index 470f5235f46..867f8cf641e 100644 --- a/relay-server/src/services/buffer/stack_provider/sqlite.rs +++ b/relay-server/src/services/buffer/stack_provider/sqlite.rs @@ -94,15 +94,17 @@ impl StackProvider for SqliteStackProvider { #[cfg(test)] mod tests { + use std::sync::Arc; + + use relay_base_schema::project::ProjectKey; + use relay_config::Config; + use uuid::Uuid; + use crate::services::buffer::common::ProjectKeyPair; use crate::services::buffer::stack_provider::sqlite::SqliteStackProvider; use crate::services::buffer::stack_provider::StackProvider; use crate::services::buffer::testutils::utils::mock_envelopes; use crate::EnvelopeStack; - use relay_base_schema::project::ProjectKey; - use relay_config::Config; - use std::sync::Arc; - use uuid::Uuid; fn mock_config() -> Arc { let path = std::env::temp_dir() From 9c9de90ae740cc94e9d1787ee196fbbd22af53f3 Mon Sep 17 00:00:00 2001 From: Riccardo Busetti Date: Wed, 4 Sep 2024 14:46:11 +0200 Subject: [PATCH 05/15] Improve --- .../services/buffer/envelope_buffer/mod.rs | 6 +- .../services/buffer/envelope_stack/sqlite.rs | 2 +- relay-server/src/services/buffer/mod.rs | 23 +++---- .../services/buffer/stack_provider/memory.rs | 3 +- .../src/services/buffer/stack_provider/mod.rs | 2 +- .../services/buffer/stack_provider/sqlite.rs | 62 ++++++++++++++----- relay-server/src/statsd.rs | 3 + 7 files changed, 68 insertions(+), 33 deletions(-) diff --git a/relay-server/src/services/buffer/envelope_buffer/mod.rs b/relay-server/src/services/buffer/envelope_buffer/mod.rs index 0c2c9b47fb8..daebfb6ae13 100644 --- a/relay-server/src/services/buffer/envelope_buffer/mod.rs +++ b/relay-server/src/services/buffer/envelope_buffer/mod.rs @@ -18,7 +18,9 @@ use crate::services::buffer::envelope_stack::sqlite::SqliteEnvelopeStackError; use crate::services::buffer::envelope_stack::EnvelopeStack; use crate::services::buffer::envelope_store::sqlite::SqliteEnvelopeStoreError; use crate::services::buffer::stack_provider::memory::MemoryStackProvider; -use crate::services::buffer::stack_provider::sqlite::SqliteStackProvider; +use crate::services::buffer::stack_provider::sqlite::{ + SqliteStackProvider, DEFAULT_DRAIN_BATCH_SIZE, +}; use crate::services::buffer::stack_provider::StackProvider; use crate::statsd::{RelayCounters, RelayGauges, RelayHistograms, RelayTimers}; use crate::utils::MemoryChecker; @@ -199,7 +201,7 @@ impl EnvelopeBuffer { Ok(Self { stacks_by_project: Default::default(), priority_queue: Default::default(), - stack_provider: SqliteStackProvider::new(config).await?, + stack_provider: SqliteStackProvider::new(config, DEFAULT_DRAIN_BATCH_SIZE).await?, total_count: Arc::new(AtomicI64::new(0)), total_count_initialized: false, }) diff --git a/relay-server/src/services/buffer/envelope_stack/sqlite.rs b/relay-server/src/services/buffer/envelope_stack/sqlite.rs index 78e8fa28b42..0c8053acc24 100644 --- a/relay-server/src/services/buffer/envelope_stack/sqlite.rs +++ b/relay-server/src/services/buffer/envelope_stack/sqlite.rs @@ -474,7 +474,7 @@ mod tests { // We drain the stack and make sure nothing was spooled to disk. let drained_envelopes = stack.drain(); - assert_eq!(drained_envelopes.len(), 5); + assert_eq!(drained_envelopes.into_iter().collect::>().len(), 5); assert_eq!(envelope_store.total_count().await.unwrap(), 0); } } diff --git a/relay-server/src/services/buffer/mod.rs b/relay-server/src/services/buffer/mod.rs index 549dde1b750..db42778d2ea 100644 --- a/relay-server/src/services/buffer/mod.rs +++ b/relay-server/src/services/buffer/mod.rs @@ -194,20 +194,17 @@ impl EnvelopeBufferService { } async fn handle_shutdown(&mut self, buffer: PolymorphicEnvelopeBuffer, message: Shutdown) { - match message.timeout { - Some(shutdown_timeout) => { - let shutdown_result = timeout(shutdown_timeout, async { - buffer.shutdown().await; - }) - .await; - if let Err(error) = shutdown_result { - relay_log::error!( - error = &error as &dyn Error, - "the envelope buffer didn't shut down in time, some envelopes might be lost", - ); - } + if let Some(shutdown_timeout) = message.timeout { + let shutdown_result = timeout(shutdown_timeout, async { + buffer.shutdown().await; + }) + .await; + if let Err(error) = shutdown_result { + relay_log::error!( + error = &error as &dyn Error, + "the envelope buffer didn't shut down in time, some envelopes might be lost", + ); } - None => buffer.shutdown().await, } } diff --git a/relay-server/src/services/buffer/stack_provider/memory.rs b/relay-server/src/services/buffer/stack_provider/memory.rs index 5cd5680164e..e1107f5f12d 100644 --- a/relay-server/src/services/buffer/stack_provider/memory.rs +++ b/relay-server/src/services/buffer/stack_provider/memory.rs @@ -2,7 +2,6 @@ use crate::services::buffer::common::ProjectKeyPair; use crate::services::buffer::envelope_stack::memory::MemoryEnvelopeStack; use crate::services::buffer::stack_provider::{InitializationState, StackProvider}; use crate::utils::MemoryChecker; -use crate::EnvelopeStack; #[derive(Debug)] pub struct MemoryStackProvider { @@ -41,5 +40,5 @@ impl StackProvider for MemoryStackProvider { "memory" } - async fn drain(self, _: impl IntoIterator) {} + async fn drain(self, _: impl IntoIterator) {} } diff --git a/relay-server/src/services/buffer/stack_provider/mod.rs b/relay-server/src/services/buffer/stack_provider/mod.rs index 3c0bf044093..3fd9fc58070 100644 --- a/relay-server/src/services/buffer/stack_provider/mod.rs +++ b/relay-server/src/services/buffer/stack_provider/mod.rs @@ -52,6 +52,6 @@ pub trait StackProvider: std::fmt::Debug { /// Drains the supplied [`EnvelopeStack`]s and consumes the [`StackProvider`]. fn drain( self, - envelope_stacks: impl IntoIterator, + envelope_stacks: impl IntoIterator, ) -> impl Future; } diff --git a/relay-server/src/services/buffer/stack_provider/sqlite.rs b/relay-server/src/services/buffer/stack_provider/sqlite.rs index 867f8cf641e..f613c0a2b45 100644 --- a/relay-server/src/services/buffer/stack_provider/sqlite.rs +++ b/relay-server/src/services/buffer/stack_provider/sqlite.rs @@ -3,30 +3,58 @@ use crate::services::buffer::envelope_store::sqlite::{ SqliteEnvelopeStore, SqliteEnvelopeStoreError, }; use crate::services::buffer::stack_provider::{InitializationState, StackProvider}; -use crate::{EnvelopeStack, SqliteEnvelopeStack}; +use crate::statsd::RelayTimers; +use crate::{Envelope, EnvelopeStack, SqliteEnvelopeStack}; use relay_config::Config; use std::error::Error; +/// Maximum number of envelopes that are inserted into the database during draining. +pub const DEFAULT_DRAIN_BATCH_SIZE: usize = 100; + #[derive(Debug)] pub struct SqliteStackProvider { envelope_store: SqliteEnvelopeStore, disk_batch_size: usize, max_batches: usize, max_disk_size: usize, + drain_batch_size: usize, } #[warn(dead_code)] impl SqliteStackProvider { /// Creates a new [`SqliteStackProvider`] from the provided [`Config`]. - pub async fn new(config: &Config) -> Result { + pub async fn new( + config: &Config, + drain_batch_size: usize, + ) -> Result { let envelope_store = SqliteEnvelopeStore::prepare(config).await?; Ok(Self { envelope_store, disk_batch_size: config.spool_envelopes_stack_disk_batch_size(), max_batches: config.spool_envelopes_stack_max_batches(), max_disk_size: config.spool_envelopes_max_disk_size(), + drain_batch_size, }) } + + /// Inserts the supplied [`Envelope`]s in the database. + #[allow(clippy::vec_box)] + async fn drain_many(&mut self, envelopes: Vec>) { + if let Err(error) = self + .envelope_store + .insert_many( + envelopes + .into_iter() + .filter_map(|e| e.as_ref().try_into().ok()), + ) + .await + { + relay_log::error!( + error = &error as &dyn Error, + "failed to drain the envelope stacks, some envelopes might be lost", + ); + } + } } impl StackProvider for SqliteStackProvider { @@ -77,18 +105,24 @@ impl StackProvider for SqliteStackProvider { "sqlite" } - async fn drain(mut self, envelope_stacks: impl IntoIterator) { - let envelopes = envelope_stacks - .into_iter() - .flat_map(|e| e.drain()) - .filter_map(|e| e.as_ref().try_into().ok()); + async fn drain(mut self, envelope_stacks: impl IntoIterator) { + relay_statsd::metric!(timer(RelayTimers::BufferDrain), { + let mut envelopes = Vec::with_capacity(self.drain_batch_size); + for envelope_stack in envelope_stacks { + for envelope in envelope_stack.drain() { + if envelopes.len() >= self.drain_batch_size { + self.drain_many(envelopes).await; + envelopes = Vec::with_capacity(self.drain_batch_size); + } + + envelopes.push(envelope); + } + } - if let Err(error) = self.envelope_store.insert_many(envelopes).await { - relay_log::error!( - error = &error as &dyn Error, - "failed to drain the envelope stacks, some envelopes might be lost", - ); - }; + if !envelopes.is_empty() { + self.drain_many(envelopes).await; + } + }); } } @@ -129,7 +163,7 @@ mod tests { #[tokio::test] async fn test_drain() { let config = mock_config(); - let stack_provider = SqliteStackProvider::new(&config).await.unwrap(); + let stack_provider = SqliteStackProvider::new(&config, 3).await.unwrap(); let own_key = ProjectKey::parse("a94ae32be2584e0bbd7a4cbb95971fee").unwrap(); let sampling_key = ProjectKey::parse("b81ae32be2584e0bbd7a4cbb95971fe1").unwrap(); diff --git a/relay-server/src/statsd.rs b/relay-server/src/statsd.rs index 001182ce8a5..05ffd4806da 100644 --- a/relay-server/src/statsd.rs +++ b/relay-server/src/statsd.rs @@ -524,6 +524,8 @@ pub enum RelayTimers { BufferSpool, /// Timing in milliseconds for the time it takes for the buffer to unspool data from disk. BufferUnspool, + /// Timing in milliseconds for the time it takes for the buffer to drain its envelopes. + BufferDrain, } impl TimerMetric for RelayTimers { @@ -568,6 +570,7 @@ impl TimerMetric for RelayTimers { RelayTimers::BufferInitialization => "buffer.initialization.duration", RelayTimers::BufferSpool => "buffer.spool.duration", RelayTimers::BufferUnspool => "buffer.unspool.duration", + RelayTimers::BufferDrain => "buffer.drain.duration", } } } From 7cf518986ace6d4d68b19fe7e0dd0b0f6b73b084 Mon Sep 17 00:00:00 2001 From: Riccardo Busetti Date: Sat, 7 Sep 2024 09:56:34 +0200 Subject: [PATCH 06/15] Fix test --- relay-server/src/services/buffer/envelope_stack/sqlite.rs | 1 + relay-server/src/services/buffer/mod.rs | 1 + relay-server/src/services/processor/event.rs | 3 +-- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/relay-server/src/services/buffer/envelope_stack/sqlite.rs b/relay-server/src/services/buffer/envelope_stack/sqlite.rs index f3fed5efcf6..cb4d1f3c048 100644 --- a/relay-server/src/services/buffer/envelope_stack/sqlite.rs +++ b/relay-server/src/services/buffer/envelope_stack/sqlite.rs @@ -468,6 +468,7 @@ mod tests { 1, ProjectKey::parse("a94ae32be2584e0bbd7a4cbb95971fee").unwrap(), ProjectKey::parse("b81ae32be2584e0bbd7a4cbb95971fe1").unwrap(), + true, ); let envelopes = mock_envelopes(5); diff --git a/relay-server/src/services/buffer/mod.rs b/relay-server/src/services/buffer/mod.rs index d46dfd1f89e..3aea3daaefe 100644 --- a/relay-server/src/services/buffer/mod.rs +++ b/relay-server/src/services/buffer/mod.rs @@ -208,6 +208,7 @@ impl EnvelopeBufferService { } async fn handle_shutdown(&mut self, buffer: PolymorphicEnvelopeBuffer, message: Shutdown) { + // We gracefully shut down only if the shutdown has a timeout. if let Some(shutdown_timeout) = message.timeout { let shutdown_result = timeout(shutdown_timeout, async { buffer.shutdown().await; diff --git a/relay-server/src/services/processor/event.rs b/relay-server/src/services/processor/event.rs index eee0c3ff79f..54fec8d519f 100644 --- a/relay-server/src/services/processor/event.rs +++ b/relay-server/src/services/processor/event.rs @@ -872,8 +872,7 @@ mod tests { let event = Annotated::new(Event { release: Annotated::new( - String::from("���7��#1G����7��#1G����7��#1G����7��#1G����7��#") - .into(), + String::from("���7��#1G����7��#1G����7��#1G����7��#1G����7��#").into(), ), ..Default::default() }); From 83f0be2998d69e724f2697eac9000c2bcbc3e6ec Mon Sep 17 00:00:00 2001 From: Riccardo Busetti Date: Sat, 7 Sep 2024 10:46:38 +0200 Subject: [PATCH 07/15] Fix test --- .../services/buffer/envelope_buffer/mod.rs | 2 + relay-server/src/services/buffer/mod.rs | 28 +++++--- .../services/buffer/stack_provider/memory.rs | 4 +- .../services/buffer/stack_provider/sqlite.rs | 2 + tests/integration/test_basic.py | 67 +++++++++++++++++-- 5 files changed, 88 insertions(+), 15 deletions(-) diff --git a/relay-server/src/services/buffer/envelope_buffer/mod.rs b/relay-server/src/services/buffer/envelope_buffer/mod.rs index 9ebe75e3da0..9bb17bae2c7 100644 --- a/relay-server/src/services/buffer/envelope_buffer/mod.rs +++ b/relay-server/src/services/buffer/envelope_buffer/mod.rs @@ -50,9 +50,11 @@ impl PolymorphicEnvelopeBuffer { memory_checker: MemoryChecker, ) -> Result { let buffer = if config.spool_envelopes_path().is_some() { + relay_log::trace!("Initializing sqlite envelope buffer"); let buffer = EnvelopeBuffer::::new(config).await?; Self::Sqlite(buffer) } else { + relay_log::trace!("Initializing memory envelope buffer"); let buffer = EnvelopeBuffer::::new(memory_checker); Self::InMemory(buffer) }; diff --git a/relay-server/src/services/buffer/mod.rs b/relay-server/src/services/buffer/mod.rs index 3aea3daaefe..a0e28fd8747 100644 --- a/relay-server/src/services/buffer/mod.rs +++ b/relay-server/src/services/buffer/mod.rs @@ -142,14 +142,14 @@ impl EnvelopeBufferService { &mut self, buffer: &mut PolymorphicEnvelopeBuffer, ) -> Result<(), EnvelopeBufferError> { - relay_log::trace!("EnvelopeBufferService peek"); + relay_log::trace!("EnvelopeBufferService: peeking the buffer"); match buffer.peek().await? { Peek::Empty => { - relay_log::trace!("EnvelopeBufferService empty"); + relay_log::trace!("EnvelopeBufferService: peek returned empty"); self.sleep = Duration::MAX; // wait for reset by `handle_message`. } Peek::Ready(_) => { - relay_log::trace!("EnvelopeBufferService pop"); + relay_log::trace!("EnvelopeBufferService: popping envelope"); let envelope = buffer .pop() .await? @@ -160,7 +160,7 @@ impl EnvelopeBufferService { self.sleep = Duration::ZERO; // try next pop immediately } Peek::NotReady(stack_key, envelope) => { - relay_log::trace!("EnvelopeBufferService request update"); + relay_log::trace!("EnvelopeBufferService: project(s) of envelope not ready, requesting project update"); let project_key = envelope.meta().public_key(); self.project_cache.send(UpdateProject(project_key)); match envelope.sampling_key() { @@ -190,17 +190,23 @@ impl EnvelopeBufferService { // projects was already triggered (see XXX). // For better separation of concerns, this prefetch should be triggered from here // once buffer V1 has been removed. - relay_log::trace!("EnvelopeBufferService push"); + relay_log::trace!("EnvelopeBufferService: received push message"); self.push(buffer, envelope).await; } EnvelopeBuffer::NotReady(project_key, envelope) => { - relay_log::trace!("EnvelopeBufferService project not ready"); + relay_log::trace!( + "EnvelopeBufferService: received project not ready message for project key {}", + &project_key + ); buffer.mark_ready(&project_key, false); relay_statsd::metric!(counter(RelayCounters::BufferEnvelopesReturned) += 1); self.push(buffer, envelope).await; } EnvelopeBuffer::Ready(project_key) => { - relay_log::trace!("EnvelopeBufferService project ready {}", &project_key); + relay_log::trace!( + "EnvelopeBufferService: received project ready message for project key {}", + &project_key + ); buffer.mark_ready(&project_key, true); } }; @@ -210,6 +216,8 @@ impl EnvelopeBufferService { async fn handle_shutdown(&mut self, buffer: PolymorphicEnvelopeBuffer, message: Shutdown) { // We gracefully shut down only if the shutdown has a timeout. if let Some(shutdown_timeout) = message.timeout { + relay_log::trace!("EnvelopeBufferService: shutting down gracefully"); + let shutdown_result = timeout(shutdown_timeout, async { buffer.shutdown().await; }) @@ -261,9 +269,9 @@ impl Service for EnvelopeBufferService { let mut shutdown = Controller::shutdown_handle(); - relay_log::info!("EnvelopeBufferService start"); + relay_log::info!("EnvelopeBufferService: starting"); loop { - relay_log::trace!("EnvelopeBufferService loop"); + relay_log::trace!("EnvelopeBufferService: looping"); tokio::select! { // NOTE: we do not select a bias here. @@ -292,7 +300,7 @@ impl Service for EnvelopeBufferService { self.update_observable_state(&mut buffer); } - relay_log::info!("EnvelopeBufferService stop"); + relay_log::info!("EnvelopeBufferService: stopping"); }); } } diff --git a/relay-server/src/services/buffer/stack_provider/memory.rs b/relay-server/src/services/buffer/stack_provider/memory.rs index 0b8118e3785..25dad344057 100644 --- a/relay-server/src/services/buffer/stack_provider/memory.rs +++ b/relay-server/src/services/buffer/stack_provider/memory.rs @@ -42,5 +42,7 @@ impl StackProvider for MemoryStackProvider { "memory" } - async fn drain(self, _: impl IntoIterator) {} + async fn drain(self, _: impl IntoIterator) { + relay_log::trace!("Draining memory envelope buffer"); + } } diff --git a/relay-server/src/services/buffer/stack_provider/sqlite.rs b/relay-server/src/services/buffer/stack_provider/sqlite.rs index d287076a226..12ba371fa9c 100644 --- a/relay-server/src/services/buffer/stack_provider/sqlite.rs +++ b/relay-server/src/services/buffer/stack_provider/sqlite.rs @@ -125,6 +125,8 @@ impl StackProvider for SqliteStackProvider { } async fn drain(mut self, envelope_stacks: impl IntoIterator) { + relay_log::trace!("Draining sqlite envelope buffer"); + relay_statsd::metric!(timer(RelayTimers::BufferDrain), { let mut envelopes = Vec::with_capacity(self.drain_batch_size); for envelope_stack in envelope_stacks { diff --git a/tests/integration/test_basic.py b/tests/integration/test_basic.py index 6b6a943b203..b6d30f1bac2 100644 --- a/tests/integration/test_basic.py +++ b/tests/integration/test_basic.py @@ -2,12 +2,15 @@ import queue import os import gzip +import sqlite3 +import tempfile + import pytest import signal import zlib -def test_graceful_shutdown(mini_sentry, relay): +def test_graceful_shutdown_with_in_memory_buffer(mini_sentry, relay): from time import sleep get_project_config_original = mini_sentry.app.view_functions["get_project_config"] @@ -17,14 +20,70 @@ def get_project_config(): sleep(1) # Causes the process to wait for one second before shutting down return get_project_config_original() - relay = relay(mini_sentry, {"limits": {"shutdown_timeout": 2}}) project_id = 42 mini_sentry.add_basic_project_config(project_id) + + relay = relay( + mini_sentry, + { + "limits": {"shutdown_timeout": 2}, + "spool": {"envelopes": {"version": "experimental"}}, + }, + ) + relay.send_event(project_id) relay.shutdown(sig=signal.SIGTERM) - event = mini_sentry.captured_events.get(timeout=0).get_event() - assert event["logentry"] == {"formatted": "Hello, World!"} + + # When using the memory envelope buffer, we do not flush envelopes, so we lose all of them. + assert mini_sentry.captured_events.empty() + + +def test_graceful_shutdown_with_sqlite_buffer(mini_sentry, relay): + from time import sleep + + # Create a temporary directory for the sqlite db. + db_file_path = os.path.join(tempfile.mkdtemp(), "database.db") + + get_project_config_original = mini_sentry.app.view_functions["get_project_config"] + + @mini_sentry.app.endpoint("get_project_config") + def get_project_config(): + sleep(1) # Causes the process to wait for one second before shutting down + return get_project_config_original() + + project_id = 42 + mini_sentry.add_basic_project_config(project_id) + + relay = relay( + mini_sentry, + { + "limits": {"shutdown_timeout": 2}, + "spool": {"envelopes": {"version": "experimental", "path": db_file_path}}, + }, + ) + + n = 10 + for i in range(n): + relay.send_event(project_id) + + relay.shutdown(sig=signal.SIGTERM) + + # When using the disk envelope buffer, we don't forward envelopes, but we spool them to disk. + assert mini_sentry.captured_events.empty() + + # Check if there's data in the SQLite table `envelopes` + conn = sqlite3.connect(db_file_path) + cursor = conn.cursor() + + # Check if there's data in the `envelopes` table + cursor.execute("SELECT COUNT(*) FROM envelopes") + row_count = cursor.fetchone()[0] + assert ( + row_count == n + ), f"The 'envelopes' table is empty. Expected {n} rows, but found {row_count}" + + conn.close() @pytest.mark.skip("Flaky test") From 0c0adf2026e52d289275b1e2a5177fd726b9485b Mon Sep 17 00:00:00 2001 From: Riccardo Busetti Date: Sat, 7 Sep 2024 10:51:07 +0200 Subject: [PATCH 08/15] Fix test --- relay-server/src/services/processor/event.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/relay-server/src/services/processor/event.rs b/relay-server/src/services/processor/event.rs index 54fec8d519f..eee0c3ff79f 100644 --- a/relay-server/src/services/processor/event.rs +++ b/relay-server/src/services/processor/event.rs @@ -872,7 +872,8 @@ mod tests { let event = Annotated::new(Event { release: Annotated::new( - String::from("���7��#1G����7��#1G����7��#1G����7��#1G����7��#").into(), + String::from("���7��#1G����7��#1G����7��#1G����7��#1G����7��#") + .into(), ), ..Default::default() }); From 0108516c76c97c6e328b1c8f5da2f1e70db53389 Mon Sep 17 00:00:00 2001 From: Riccardo Busetti Date: Sat, 7 Sep 2024 10:52:29 +0200 Subject: [PATCH 09/15] Add changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index bd35f79d483..aed3896d325 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -27,6 +27,7 @@ - Remove the OTEL spans endpoint in favor of Envelopes. ([#3973](https://github.com/getsentry/relay/pull/3973)) - Remove the `generate-schema` tool. Relay no longer exposes JSON schema for the event protocol. Consult the Rust type documentation of the `relay-event-schema` crate instead. ([#3974](https://github.com/getsentry/relay/pull/3974)) - Allow creation of `SqliteEnvelopeBuffer` from config, and load existing stacks from db on startup. ([#3967](https://github.com/getsentry/relay/pull/3967)) +- Implement graceful shutdown mechanism in the `EnvelopeBuffer`. ([#3980](https://github.com/getsentry/relay/pull/3980)) ## 24.8.0 From 1f7a7e6c084e5fe5a808b1949e4d8403a6971945 Mon Sep 17 00:00:00 2001 From: Riccardo Busetti Date: Thu, 12 Sep 2024 16:39:36 +0200 Subject: [PATCH 10/15] Fix test --- .../services/buffer/envelope_buffer/mod.rs | 29 ++++++++++-------- .../services/buffer/envelope_stack/memory.rs | 2 +- .../src/services/buffer/envelope_stack/mod.rs | 6 ++-- .../services/buffer/envelope_stack/sqlite.rs | 4 +-- relay-server/src/services/buffer/mod.rs | 30 +++++++++++++------ .../services/buffer/stack_provider/memory.rs | 8 +++-- .../src/services/buffer/stack_provider/mod.rs | 6 ++-- .../services/buffer/stack_provider/sqlite.rs | 22 +++++--------- tests/integration/test_basic.py | 6 ++-- 9 files changed, 64 insertions(+), 49 deletions(-) diff --git a/relay-server/src/services/buffer/envelope_buffer/mod.rs b/relay-server/src/services/buffer/envelope_buffer/mod.rs index f414bd0da77..dcc4433482f 100644 --- a/relay-server/src/services/buffer/envelope_buffer/mod.rs +++ b/relay-server/src/services/buffer/envelope_buffer/mod.rs @@ -2,6 +2,7 @@ use std::cmp::Ordering; use std::collections::BTreeSet; use std::convert::Infallible; use std::error::Error; +use std::mem; use std::sync::atomic::AtomicI64; use std::sync::atomic::Ordering as AtomicOrdering; use std::sync::Arc; @@ -18,9 +19,7 @@ use crate::services::buffer::envelope_stack::sqlite::SqliteEnvelopeStackError; use crate::services::buffer::envelope_stack::EnvelopeStack; use crate::services::buffer::envelope_store::sqlite::SqliteEnvelopeStoreError; use crate::services::buffer::stack_provider::memory::MemoryStackProvider; -use crate::services::buffer::stack_provider::sqlite::{ - SqliteStackProvider, DEFAULT_DRAIN_BATCH_SIZE, -}; +use crate::services::buffer::stack_provider::sqlite::SqliteStackProvider; use crate::services::buffer::stack_provider::{StackCreationType, StackProvider}; use crate::statsd::{RelayCounters, RelayGauges, RelayHistograms, RelayTimers}; use crate::utils::MemoryChecker; @@ -57,11 +56,11 @@ impl PolymorphicEnvelopeBuffer { memory_checker: MemoryChecker, ) -> Result { let buffer = if config.spool_envelopes_path().is_some() { - relay_log::trace!("Initializing sqlite envelope buffer"); + relay_log::trace!("PolymorphicEnvelopeBuffer: initializing sqlite envelope buffer"); let buffer = EnvelopeBuffer::::new(config).await?; Self::Sqlite(buffer) } else { - relay_log::trace!("Initializing memory envelope buffer"); + relay_log::trace!("PolymorphicEnvelopeBuffer: initializing memory envelope buffer"); let buffer = EnvelopeBuffer::::new(memory_checker); Self::InMemory(buffer) }; @@ -137,11 +136,14 @@ impl PolymorphicEnvelopeBuffer { } /// Consumes the [`PolymorphicEnvelopeBuffer`] and shuts it down. - pub async fn shutdown(self) { - match self { - Self::Sqlite(buffer) => buffer.shutdown().await, - Self::InMemory(buffer) => buffer.shutdown().await, + pub async fn shutdown(&mut self) -> bool { + let Self::Sqlite(buffer) = self else { + relay_log::trace!("PolymorphicEnvelopeBuffer: shutdown procedure not needed"); + return false; }; + buffer.flush().await; + + true } } @@ -213,7 +215,7 @@ impl EnvelopeBuffer { Ok(Self { stacks_by_project: Default::default(), priority_queue: Default::default(), - stack_provider: SqliteStackProvider::new(config, DEFAULT_DRAIN_BATCH_SIZE).await?, + stack_provider: SqliteStackProvider::new(config).await?, total_count: Arc::new(AtomicI64::new(0)), total_count_initialized: false, }) @@ -385,10 +387,11 @@ where self.stack_provider.has_store_capacity() } - /// Shuts down the envelope buffer. - pub async fn shutdown(self) { + /// Flushes the envelope buffer. + pub async fn flush(&mut self) { + let priority_queue = mem::take(&mut self.priority_queue); self.stack_provider - .drain(self.priority_queue.into_iter().map(|(q, _)| q.value)) + .flush(priority_queue.into_iter().map(|(q, _)| q.value)) .await; } diff --git a/relay-server/src/services/buffer/envelope_stack/memory.rs b/relay-server/src/services/buffer/envelope_stack/memory.rs index 7fdf1f5beb5..ceb771ec95a 100644 --- a/relay-server/src/services/buffer/envelope_stack/memory.rs +++ b/relay-server/src/services/buffer/envelope_stack/memory.rs @@ -29,7 +29,7 @@ impl EnvelopeStack for MemoryEnvelopeStack { Ok(self.0.pop()) } - fn drain(self) -> Vec> { + fn flush(self) -> Vec> { self.0 } } diff --git a/relay-server/src/services/buffer/envelope_stack/mod.rs b/relay-server/src/services/buffer/envelope_stack/mod.rs index b6bae9826d0..dea5f04356d 100644 --- a/relay-server/src/services/buffer/envelope_stack/mod.rs +++ b/relay-server/src/services/buffer/envelope_stack/mod.rs @@ -20,7 +20,7 @@ pub trait EnvelopeStack: Send + std::fmt::Debug { /// Pops the [`Envelope`] on top of the stack. fn pop(&mut self) -> impl Future>, Self::Error>>; - /// Drains this stack and returns all the [`Envelope`]s that need to be handled specifically - /// during draining of the envelope buffer. - fn drain(self) -> Vec>; + /// Persists all envelopes in the [`EnvelopeStack`]s to external storage, if possible, + /// and consume the [`StackProvider`]. + fn flush(self) -> Vec>; } diff --git a/relay-server/src/services/buffer/envelope_stack/sqlite.rs b/relay-server/src/services/buffer/envelope_stack/sqlite.rs index cb4d1f3c048..090f66ec6be 100644 --- a/relay-server/src/services/buffer/envelope_stack/sqlite.rs +++ b/relay-server/src/services/buffer/envelope_stack/sqlite.rs @@ -227,7 +227,7 @@ impl EnvelopeStack for SqliteEnvelopeStack { Ok(result) } - fn drain(self) -> Vec> { + fn flush(self) -> Vec> { self.batches_buffer.into_iter().flatten().collect() } } @@ -481,7 +481,7 @@ mod tests { assert_eq!(envelope_store.total_count().await.unwrap(), 0); // We drain the stack and make sure nothing was spooled to disk. - let drained_envelopes = stack.drain(); + let drained_envelopes = stack.flush(); assert_eq!(drained_envelopes.into_iter().collect::>().len(), 5); assert_eq!(envelope_store.total_count().await.unwrap(), 0); } diff --git a/relay-server/src/services/buffer/mod.rs b/relay-server/src/services/buffer/mod.rs index 5a79f0c1e4e..e2e045b052d 100644 --- a/relay-server/src/services/buffer/mod.rs +++ b/relay-server/src/services/buffer/mod.rs @@ -249,22 +249,31 @@ impl EnvelopeBufferService { self.sleep = Duration::ZERO; } - async fn handle_shutdown(&mut self, buffer: PolymorphicEnvelopeBuffer, message: Shutdown) { + async fn handle_shutdown( + &mut self, + buffer: &mut PolymorphicEnvelopeBuffer, + message: Shutdown, + ) -> bool { // We gracefully shut down only if the shutdown has a timeout. if let Some(shutdown_timeout) = message.timeout { relay_log::trace!("EnvelopeBufferService: shutting down gracefully"); - let shutdown_result = timeout(shutdown_timeout, async { - buffer.shutdown().await; - }) - .await; - if let Err(error) = shutdown_result { - relay_log::error!( + let shutdown_result = + timeout(shutdown_timeout, async { buffer.shutdown().await }).await; + match shutdown_result { + Ok(shutdown_result) => { + return shutdown_result; + } + Err(error) => { + relay_log::error!( error = &error as &dyn Error, "the envelope buffer didn't shut down in time, some envelopes might be lost", ); + } } } + + false } async fn push(&mut self, buffer: &mut PolymorphicEnvelopeBuffer, envelope: Box) { @@ -329,8 +338,11 @@ impl Service for EnvelopeBufferService { self.handle_message(&mut buffer, message).await; } shutdown = shutdown.notified() => { - self.handle_shutdown(buffer, shutdown).await; - break; + // In case the shutdown was handled, we break out of the loop signaling that + // there is no need to process anymore envelopes. + if self.handle_shutdown(&mut buffer, shutdown).await { + break; + } } _ = global_config_rx.changed() => { relay_log::trace!("EnvelopeBufferService: received global config"); diff --git a/relay-server/src/services/buffer/stack_provider/memory.rs b/relay-server/src/services/buffer/stack_provider/memory.rs index 25dad344057..230db32b340 100644 --- a/relay-server/src/services/buffer/stack_provider/memory.rs +++ b/relay-server/src/services/buffer/stack_provider/memory.rs @@ -4,6 +4,7 @@ use crate::services::buffer::stack_provider::{ InitializationState, StackCreationType, StackProvider, }; use crate::utils::MemoryChecker; +use crate::EnvelopeStack; #[derive(Debug)] pub struct MemoryStackProvider { @@ -42,7 +43,10 @@ impl StackProvider for MemoryStackProvider { "memory" } - async fn drain(self, _: impl IntoIterator) { - relay_log::trace!("Draining memory envelope buffer"); + async fn flush(&mut self, envelope_stacks: impl IntoIterator) { + for envelope_stack in envelope_stacks { + // The flushed envelopes will be immediately dropped. + let _ = envelope_stack.flush(); + } } } diff --git a/relay-server/src/services/buffer/stack_provider/mod.rs b/relay-server/src/services/buffer/stack_provider/mod.rs index 085fc8ed227..715d70c436c 100644 --- a/relay-server/src/services/buffer/stack_provider/mod.rs +++ b/relay-server/src/services/buffer/stack_provider/mod.rs @@ -61,9 +61,9 @@ pub trait StackProvider: std::fmt::Debug { /// Returns the string representation of the stack type offered by this [`StackProvider`]. fn stack_type<'a>(&self) -> &'a str; - /// Drains the supplied [`EnvelopeStack`]s and consumes the [`StackProvider`]. - fn drain( - self, + /// Flushes the supplied [`EnvelopeStack`]s and consumes the [`StackProvider`]. + fn flush( + &mut self, envelope_stacks: impl IntoIterator, ) -> impl Future; } diff --git a/relay-server/src/services/buffer/stack_provider/sqlite.rs b/relay-server/src/services/buffer/stack_provider/sqlite.rs index 12ba371fa9c..fff306c5923 100644 --- a/relay-server/src/services/buffer/stack_provider/sqlite.rs +++ b/relay-server/src/services/buffer/stack_provider/sqlite.rs @@ -12,9 +12,6 @@ use crate::services::buffer::stack_provider::{ use crate::statsd::RelayTimers; use crate::{Envelope, EnvelopeStack, SqliteEnvelopeStack}; -/// Maximum number of envelopes that are inserted into the database during draining. -pub const DEFAULT_DRAIN_BATCH_SIZE: usize = 100; - #[derive(Debug)] pub struct SqliteStackProvider { envelope_store: SqliteEnvelopeStore, @@ -27,17 +24,14 @@ pub struct SqliteStackProvider { #[warn(dead_code)] impl SqliteStackProvider { /// Creates a new [`SqliteStackProvider`] from the provided [`Config`]. - pub async fn new( - config: &Config, - drain_batch_size: usize, - ) -> Result { + pub async fn new(config: &Config) -> Result { let envelope_store = SqliteEnvelopeStore::prepare(config).await?; Ok(Self { envelope_store, disk_batch_size: config.spool_envelopes_stack_disk_batch_size(), max_batches: config.spool_envelopes_stack_max_batches(), max_disk_size: config.spool_envelopes_max_disk_size(), - drain_batch_size, + drain_batch_size: config.spool_envelopes_stack_disk_batch_size(), }) } @@ -124,13 +118,13 @@ impl StackProvider for SqliteStackProvider { "sqlite" } - async fn drain(mut self, envelope_stacks: impl IntoIterator) { - relay_log::trace!("Draining sqlite envelope buffer"); + async fn flush(&mut self, envelope_stacks: impl IntoIterator) { + relay_log::trace!("Flushing sqlite envelope buffer"); relay_statsd::metric!(timer(RelayTimers::BufferDrain), { let mut envelopes = Vec::with_capacity(self.drain_batch_size); for envelope_stack in envelope_stacks { - for envelope in envelope_stack.drain() { + for envelope in envelope_stack.flush() { if envelopes.len() >= self.drain_batch_size { self.drain_many(envelopes).await; envelopes = Vec::with_capacity(self.drain_batch_size); @@ -182,9 +176,9 @@ mod tests { } #[tokio::test] - async fn test_drain() { + async fn test_flush() { let config = mock_config(); - let stack_provider = SqliteStackProvider::new(&config, 3).await.unwrap(); + let stack_provider = SqliteStackProvider::new(&config).await.unwrap(); let own_key = ProjectKey::parse("a94ae32be2584e0bbd7a4cbb95971fee").unwrap(); let sampling_key = ProjectKey::parse("b81ae32be2584e0bbd7a4cbb95971fe1").unwrap(); @@ -206,7 +200,7 @@ mod tests { assert_eq!(envelope_store.total_count().await.unwrap(), 0); // We drain the stack provider, and we expect all in-memory envelopes to be spooled to disk. - stack_provider.drain(vec![envelope_stack]).await; + stack_provider.flush(vec![envelope_stack]).await; assert_eq!(envelope_store.total_count().await.unwrap(), 10); } } diff --git a/tests/integration/test_basic.py b/tests/integration/test_basic.py index b6d30f1bac2..d3e42def0f0 100644 --- a/tests/integration/test_basic.py +++ b/tests/integration/test_basic.py @@ -35,8 +35,10 @@ def get_project_config(): relay.shutdown(sig=signal.SIGTERM) - # When using the memory envelope buffer, we do not flush envelopes, so we lose all of them. - assert mini_sentry.captured_events.empty() + # When using the memory envelope buffer, we optimistically do not do anything on shutdown, which means that the + # buffer will try and pop as always as long as it can (within the shutdown timeout). + event = mini_sentry.captured_events.get(timeout=0).get_event() + assert event["logentry"] == {"formatted": "Hello, World!"} def test_graceful_shutdown_with_sqlite_buffer(mini_sentry, relay): From cbd8281e971315f78b4fe917e35351110e8fd027 Mon Sep 17 00:00:00 2001 From: Riccardo Busetti Date: Thu, 12 Sep 2024 16:42:47 +0200 Subject: [PATCH 11/15] Fix test --- relay-server/src/services/buffer/envelope_buffer/mod.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/relay-server/src/services/buffer/envelope_buffer/mod.rs b/relay-server/src/services/buffer/envelope_buffer/mod.rs index dcc4433482f..e303c92cd61 100644 --- a/relay-server/src/services/buffer/envelope_buffer/mod.rs +++ b/relay-server/src/services/buffer/envelope_buffer/mod.rs @@ -135,8 +135,11 @@ impl PolymorphicEnvelopeBuffer { } } - /// Consumes the [`PolymorphicEnvelopeBuffer`] and shuts it down. + /// Shuts down the [`PolymorphicEnvelopeBuffer`]. pub async fn shutdown(&mut self) -> bool { + // Currently, we want to flush the buffer only for disk, since the in memory implementation + // tries to not do anything and pop as many elements as possible within the shutdown + // timeout. let Self::Sqlite(buffer) = self else { relay_log::trace!("PolymorphicEnvelopeBuffer: shutdown procedure not needed"); return false; From c8ef27aec04fc4b6af55acf437905500d5c29d7d Mon Sep 17 00:00:00 2001 From: Riccardo Busetti Date: Thu, 12 Sep 2024 16:45:52 +0200 Subject: [PATCH 12/15] Fix test --- relay-server/src/services/buffer/stack_provider/sqlite.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/relay-server/src/services/buffer/stack_provider/sqlite.rs b/relay-server/src/services/buffer/stack_provider/sqlite.rs index fff306c5923..15e4be6c4e7 100644 --- a/relay-server/src/services/buffer/stack_provider/sqlite.rs +++ b/relay-server/src/services/buffer/stack_provider/sqlite.rs @@ -178,7 +178,7 @@ mod tests { #[tokio::test] async fn test_flush() { let config = mock_config(); - let stack_provider = SqliteStackProvider::new(&config).await.unwrap(); + let mut stack_provider = SqliteStackProvider::new(&config).await.unwrap(); let own_key = ProjectKey::parse("a94ae32be2584e0bbd7a4cbb95971fee").unwrap(); let sampling_key = ProjectKey::parse("b81ae32be2584e0bbd7a4cbb95971fe1").unwrap(); From c5e10647a885d2abe39fc5ca3e4f26aae4114d76 Mon Sep 17 00:00:00 2001 From: Riccardo Busetti Date: Fri, 13 Sep 2024 08:13:13 +0200 Subject: [PATCH 13/15] Update mod.rs Co-authored-by: Joris Bayer --- relay-server/src/services/buffer/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/relay-server/src/services/buffer/mod.rs b/relay-server/src/services/buffer/mod.rs index 6c61cfc17f2..869d029885a 100644 --- a/relay-server/src/services/buffer/mod.rs +++ b/relay-server/src/services/buffer/mod.rs @@ -281,7 +281,7 @@ impl EnvelopeBufferService { relay_log::trace!("EnvelopeBufferService: shutting down gracefully"); let shutdown_result = - timeout(shutdown_timeout, async { buffer.shutdown().await }).await; + timeout(shutdown_timeout, buffer.shutdown()).await; match shutdown_result { Ok(shutdown_result) => { return shutdown_result; From 5e0526bba4f0d62f619d9748785a18c277b0906d Mon Sep 17 00:00:00 2001 From: Riccardo Busetti Date: Fri, 13 Sep 2024 09:04:02 +0200 Subject: [PATCH 14/15] Fix test --- relay-server/src/services/buffer/mod.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/relay-server/src/services/buffer/mod.rs b/relay-server/src/services/buffer/mod.rs index 869d029885a..6d02d038feb 100644 --- a/relay-server/src/services/buffer/mod.rs +++ b/relay-server/src/services/buffer/mod.rs @@ -280,8 +280,7 @@ impl EnvelopeBufferService { if let Some(shutdown_timeout) = message.timeout { relay_log::trace!("EnvelopeBufferService: shutting down gracefully"); - let shutdown_result = - timeout(shutdown_timeout, buffer.shutdown()).await; + let shutdown_result = timeout(shutdown_timeout, buffer.shutdown()).await; match shutdown_result { Ok(shutdown_result) => { return shutdown_result; From 91dd8419bf9b05c50286aac366ae42502266d71c Mon Sep 17 00:00:00 2001 From: Riccardo Busetti Date: Fri, 13 Sep 2024 09:30:17 +0200 Subject: [PATCH 15/15] Fix test --- relay-server/src/services/buffer/envelope_stack/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/relay-server/src/services/buffer/envelope_stack/mod.rs b/relay-server/src/services/buffer/envelope_stack/mod.rs index dea5f04356d..8acfff06007 100644 --- a/relay-server/src/services/buffer/envelope_stack/mod.rs +++ b/relay-server/src/services/buffer/envelope_stack/mod.rs @@ -21,6 +21,6 @@ pub trait EnvelopeStack: Send + std::fmt::Debug { fn pop(&mut self) -> impl Future>, Self::Error>>; /// Persists all envelopes in the [`EnvelopeStack`]s to external storage, if possible, - /// and consume the [`StackProvider`]. + /// and consumes the stack provider. fn flush(self) -> Vec>; }