d_engine/lib.rs
1//! # d_engine
2//!
3//! [](https://codecov.io/gh/deventlab/d-engine)
4//! 
5//! [](https://github.com/deventlab/d-engine/actions/workflows/ci.yml)
6//!
7//! A lightweight, strongly-consistent Raft engine for building reliable distributed systems.
8//!
9//! ## Features
10//! - **Strong Consistency**: Full Raft protocol implementation
11//! - **Pluggable Storage**: Supports RocksDB, Sled, and in-memory backends
12//! - **Observability**: Metrics, logging, and tracing
13//! - **Runtime Agnostic**: Built for `tokio`
14//! - **Extensible**: Decoupled protocol and application logic
15//!
16//! ## Quick Start
17//! ```no_run
18//! use d_engine::NodeBuilder;
19//! use tokio::sync::watch;
20//! use log::error;
21//! use log::info;
22//!
23//! #[tokio::main(flavor = "current_thread")]
24//! async fn main() {
25//! let (graceful_tx, graceful_rx) = watch::channel(());
26//!
27//! let node = NodeBuilder::new(None, graceful_rx)
28//! .build()
29//! .start_rpc_server()
30//! .await
31//! .ready().unwrap();
32//!
33//! if let Err(e) = node.run().await {
34//! error!("node stops: {:?}", e);
35//! } else {
36//! info!("node stops.");
37//! }
38//! }
39//! ```
40//!
41//! ## Core Concepts
42//! 
43//!
44//! For production deployments, a minimum cluster size of **3 nodes** is required.
45
46// #![warn(missing_docs)]
47
48pub mod client;
49pub mod config;
50pub mod node;
51pub mod proto;
52#[doc(hidden)]
53pub mod storage;
54
55#[doc(hidden)]
56pub use client::*;
57#[doc(hidden)]
58pub use config::*;
59#[doc(hidden)]
60pub use node::*;
61
62mod constants;
63mod core;
64mod errors;
65mod membership;
66mod metrics;
67mod network;
68mod type_config;
69
70#[doc(hidden)]
71pub use core::*;
72
73pub use errors::*;
74pub(crate) use membership::*;
75pub(crate) use metrics::*;
76pub(crate) use network::*;
77pub(crate) use storage::*;
78#[doc(hidden)]
79pub mod utils;
80#[doc(hidden)]
81pub use type_config::*;
82#[doc(hidden)]
83pub use utils::*;
84
85//-----------------------------------------------------------
86// Test utils
87#[cfg(test)]
88#[doc(hidden)]
89pub mod test_utils;
90
91//-----------------------------------------------------------
92// Autometrics
93/// autometrics: https://docs.autometrics.dev/rust/adding-alerts-and-slos
94use autometrics::objectives::Objective;
95use autometrics::objectives::ObjectiveLatency;
96use autometrics::objectives::ObjectivePercentile;
97
98#[doc(hidden)]
99const API_SLO: Objective = Objective::new("api")
100 .success_rate(ObjectivePercentile::P99_9)
101 .latency(ObjectiveLatency::Ms10, ObjectivePercentile::P99);