pub struct EnvelopeSpool {
pub path: Option<PathBuf>,
pub max_disk_size: ByteSize,
pub batch_size_bytes: ByteSize,
pub max_envelope_delay_secs: u64,
pub disk_usage_refresh_frequency_ms: u64,
pub max_backpressure_envelopes: usize,
pub max_backpressure_memory_percent: f32,
pub partitions: NonZeroU8,
}
Expand description
Persistent buffering configuration for incoming envelopes.
Fields§
§path: Option<PathBuf>
The path of the SQLite database file(s) which persist the data.
Based on the number of partitions, more database files will be created within the same path.
If not set, the envelopes will be buffered in memory.
max_disk_size: ByteSize
The maximum size of the buffer to keep, in bytes.
When the on-disk buffer reaches this size, new envelopes will be dropped.
Defaults to 500MB.
batch_size_bytes: ByteSize
Size of the batch of compressed envelopes that are spooled to disk at once.
Note that this is the size after which spooling will be triggered but it does not guarantee that exactly this size will be spooled, it can be greater or equal.
Defaults to 10 KiB.
max_envelope_delay_secs: u64
Maximum time between receiving the envelope and processing it.
When envelopes spend too much time in the buffer (e.g. because their project cannot be loaded), they are dropped.
Defaults to 24h.
disk_usage_refresh_frequency_ms: u64
The refresh frequency in ms of how frequently disk usage is updated by querying SQLite internal page stats.
Defaults to 100ms.
max_backpressure_envelopes: usize
The amount of envelopes that the envelope buffer can push to its output queue.
Defaults to 500.
max_backpressure_memory_percent: f32
The relative memory usage above which the buffer service will stop dequeueing envelopes.
Only applies when Self::path
is set.
This value should be lower than Health::max_memory_percent
to prevent flip-flopping.
Warning: this threshold can cause the buffer service to deadlock when the buffer itself
is using too much memory (influenced by Self::batch_size_bytes
).
Defaults to 90% (5% less than max memory).
partitions: NonZeroU8
Number of partitions of the buffer.
A partition is a separate instance of the buffer which has its own isolated queue, stacks and other resources.
Defaults to 1.
Trait Implementations§
source§impl Debug for EnvelopeSpool
impl Debug for EnvelopeSpool
source§impl Default for EnvelopeSpool
impl Default for EnvelopeSpool
source§impl<'de> Deserialize<'de> for EnvelopeSpool
impl<'de> Deserialize<'de> for EnvelopeSpool
source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Auto Trait Implementations§
impl Freeze for EnvelopeSpool
impl RefUnwindSafe for EnvelopeSpool
impl Send for EnvelopeSpool
impl Sync for EnvelopeSpool
impl Unpin for EnvelopeSpool
impl UnwindSafe for EnvelopeSpool
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<T> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more