pub struct TaelBackend { /* private fields */ }Implementations§
Source§impl TaelBackend
impl TaelBackend
pub fn new(data_dir: &str) -> Result<Self>
Sourcepub fn with_wal_key(data_dir: &str, wal_key: &str) -> Result<Self>
pub fn with_wal_key(data_dir: &str, wal_key: &str) -> Result<Self>
Like Self::new but with an explicit WAL namespace key — lets tests
run isolated instances (the WAL key is process-global in walrus).
Sourcepub fn with_wal_key_and_sinks(
data_dir: &str,
wal_key: &str,
sinks: Vec<Arc<dyn WalSink>>,
required_acks: Option<usize>,
) -> Result<Self>
pub fn with_wal_key_and_sinks( data_dir: &str, wal_key: &str, sinks: Vec<Arc<dyn WalSink>>, required_acks: Option<usize>, ) -> Result<Self>
Like Self::with_wal_key but with WAL replication sinks attached: this
backend runs as a leader that ships every appended record to its
standbys before acking the write (docs/tael-server-scaling-ha.md §5.1).
required_acks is how many standbys must confirm before a write returns
(None = all = fully synchronous; Some(0) = async best-effort). With
no sinks the write path is unchanged. A standby on the receiving end
applies shipped records via Store::apply_framed_wal.
Sourcepub fn with_components(
data_dir: &str,
wal_key: &str,
sinks: Vec<Arc<dyn WalSink>>,
required_acks: Option<usize>,
cold_backend: Option<Arc<dyn ObjectBackend>>,
comments: Box<dyn CommentsStore>,
) -> Result<Self>
pub fn with_components( data_dir: &str, wal_key: &str, sinks: Vec<Arc<dyn WalSink>>, required_acks: Option<usize>, cold_backend: Option<Arc<dyn ObjectBackend>>, comments: Box<dyn CommentsStore>, ) -> Result<Self>
Full constructor used by the cloud deployment path: pass an optional
cold-tier object backend (None = local filesystem) and an already-built
comments store (JSONL or Postgres). The local constructors above forward
here with the single-binary defaults, so their behavior is unchanged.
Sourcepub fn search_index(&self) -> Arc<SearchIndex> ⓘ
pub fn search_index(&self) -> Arc<SearchIndex> ⓘ
The shared payload search index — handed to the ingest path so prompt/ completion text is indexed at write time (the text isn’t retained on the span itself, only its blob hashes).
Sourcepub fn compact_spans(&self, cutoff: DateTime<Utc>) -> Result<usize>
pub fn compact_spans(&self, cutoff: DateTime<Utc>) -> Result<usize>
Roll spans older than cutoff out of the LSM hot tier into Parquet.
Returns the number of spans compacted. Safe to call repeatedly.
Sourcepub fn compact_logs_metrics(&self, cutoff: DateTime<Utc>) -> Result<usize>
pub fn compact_logs_metrics(&self, cutoff: DateTime<Utc>) -> Result<usize>
Roll aged logs/metrics out of the hot tier into Parquet. Returns the total number of records compacted across both signals.
Sourcepub fn collect_live_blob_hashes(&self) -> Result<HashSet<String>>
pub fn collect_live_blob_hashes(&self) -> Result<HashSet<String>>
Collect every blob hash still referenced by a live row — LLM prompt and
completion hashes on spans, and body_sha256 on logs — across hot and
cold tiers. Drives blob GC (anything not here is unreferenced).
Trait Implementations§
Source§impl Store for TaelBackend
impl Store for TaelBackend
Source§fn apply_framed_wal(&self, framed: &[u8]) -> Result<()>
fn apply_framed_wal(&self, framed: &[u8]) -> Result<()>
Standby entrypoint: durably accept a framed WAL record shipped from a leader and bring local state up to it. Mirrors the leader’s write discipline (append → apply → consume) so the standby’s WAL, hot tier, and projection stay byte-identical and itself replayable — the basis for promotion on leader loss (§5.1).
fn insert_spans(&self, spans: &[Span]) -> Result<()>
fn insert_logs(&self, logs: &[LogRecord]) -> Result<()>
fn insert_metrics(&self, metrics: &[MetricPoint]) -> Result<()>
fn query_traces(&self, query: &TraceQuery) -> Result<Vec<Span>>
fn get_trace(&self, trace_id: &str) -> Result<Vec<Span>>
fn list_services(&self) -> Result<Vec<ServiceInfo>>
fn query_logs(&self, query: &LogQuery) -> Result<Vec<LogRecord>>
fn query_metrics(&self, query: &MetricQuery) -> Result<Vec<MetricPoint>>
fn add_comment( &self, trace_id: &str, span_id: Option<&str>, author: &str, body: &str, ) -> Result<TraceComment>
fn get_comments(&self, trace_id: &str) -> Result<Vec<TraceComment>>
fn query_summary( &self, last_seconds: i64, service: Option<&str>, ) -> Result<SummaryReport>
fn query_anomalies( &self, current_seconds: i64, baseline_seconds: i64, service: Option<&str>, ) -> Result<AnomalyReport>
fn query_correlate(&self, trace_id: &str) -> Result<Option<CorrelateReport>>
Source§fn query_sql(&self, sql: &str) -> Result<Vec<Value>>
fn query_sql(&self, sql: &str) -> Result<Vec<Value>>
SELECT/WITH) over the telemetry tables,
returning rows as JSON objects.Source§fn flush(&self) -> Result<()>
fn flush(&self) -> Result<()>
Source§fn health(&self) -> Result<()>
fn health(&self) -> Result<()>
Ok(()) when this store can serve requests. Backs the
REST /readyz endpoint (docs/tael-server-scaling-ha.md §5.4). The
default is Ok(()): an embedded backend that constructed successfully
and holds its file locks is, by definition, ready. Backends that depend
on the network (e.g. RemoteStore, FanoutStore)
override this to probe their dependencies.Auto Trait Implementations§
impl !Freeze for TaelBackend
impl !RefUnwindSafe for TaelBackend
impl !UnwindSafe for TaelBackend
impl Send for TaelBackend
impl Sync for TaelBackend
impl Unpin for TaelBackend
impl UnsafeUnpin for TaelBackend
Blanket Implementations§
Source§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
Source§type ArchivedMetadata = ()
type ArchivedMetadata = ()
Source§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
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
Source§impl<F, W, T, D> Deserialize<With<T, W>, D> for F
impl<F, W, T, D> Deserialize<With<T, W>, D> for F
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
impl<T> Fruit for T
Source§impl<T> FutureExt for T
impl<T> FutureExt for T
Source§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
Source§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§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 moreSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request