Skip to main content

rivven_cluster/
lib.rs

1//! # Rivven Cluster
2//!
3//! Distributed clustering for Rivven with:
4//! - **SWIM Protocol**: Scalable membership and failure detection
5//! - **Raft Consensus**: Metadata coordination and leader election
6//! - **ISR Replication**: Partition data replication with high watermarks
7//!
8//! ## Architecture
9//!
10//! ```text
11//! ┌─────────────────────────────────────────────────────────────┐
12//! │                      Rivven Node                            │
13//! ├──────────────┬──────────────┬───────────────────────────────┤
14//! │    SWIM      │     Raft     │       ISR Replication         │
15//! │  Membership  │   Metadata   │         Data Layer            │
16//! ├──────────────┼──────────────┼───────────────────────────────┤
17//! │ • Node disco │ • Topics     │ • Partition leaders           │
18//! │ • Health chk │ • Partitions │ • Follower fetch              │
19//! │ • Failure    │ • Assignments│ • High watermark              │
20//! │   detection  │ • ISR state  │ • Catch-up sync               │
21//! └──────────────┴──────────────┴───────────────────────────────┘
22//! ```
23//!
24//! ## Deployment Modes
25//!
26//! - **Standalone**: Single node, zero configuration, all partitions local
27//! - **Cluster**: Multi-node with SWIM membership, Raft metadata, ISR replication
28//!
29//! ## Example Usage
30//!
31//! ```rust,ignore
32//! use rivven_cluster::{ClusterConfig, ClusterCoordinator, TopicConfig};
33//!
34//! // Standalone mode (zero config)
35//! let config = ClusterConfig::standalone();
36//! let coordinator = ClusterCoordinator::standalone(config).await?;
37//!
38//! // Create a topic
39//! coordinator.create_topic(TopicConfig::new("events", 6, 1)).await?;
40//!
41//! // Cluster mode
42//! let config = ClusterConfig::cluster()
43//!     .node_id("node-1")
44//!     .seeds(vec!["node-2:9093", "node-3:9093"])
45//!     .build();
46//! let mut coordinator = ClusterCoordinator::new(config).await?;
47//! coordinator.start().await?;
48//! ```
49
50pub mod config;
51pub mod consumer_coordinator;
52pub mod coordinator;
53pub mod error;
54pub mod membership;
55pub mod metadata;
56pub mod node;
57pub mod observability;
58pub mod partition;
59pub mod placement;
60pub mod protocol;
61#[cfg(feature = "quic")]
62pub mod quic_transport;
63pub mod raft;
64pub mod replication;
65#[cfg(feature = "raft")]
66pub mod storage;
67pub mod transport;
68
69// Re-export main types
70pub use config::{
71    ClusterConfig, ClusterMode, RaftConfig, ReplicationConfig, SwimConfig, TopicDefaults,
72};
73pub use consumer_coordinator::{ConsumerCoordinator, CoordinatorError, CoordinatorResult};
74pub use coordinator::{ClusterCoordinator, ClusterHealth, CoordinatorState};
75pub use error::{ClusterError, Result};
76pub use membership::{Membership, MembershipEvent, SwimMessage};
77pub use metadata::{ClusterMetadata, MetadataCommand, MetadataResponse, MetadataStore};
78pub use node::{Node, NodeCapabilities, NodeId, NodeInfo, NodeState};
79pub use observability::{init_metrics, ClusterMetrics, NetworkMetrics, RaftMetrics};
80pub use partition::{PartitionId, PartitionState, TopicConfig, TopicState};
81pub use placement::{PartitionPlacer, PlacementConfig, PlacementStrategy};
82pub use protocol::{Acks, ClusterRequest, ClusterResponse};
83#[cfg(feature = "quic")]
84pub use quic_transport::{QuicConfig, QuicStats, QuicTransport, TlsConfig};
85pub use raft::{
86    hash_node_id, LogStore, NetworkFactory as RaftNetworkFactory, RaftController, RaftNode,
87    RaftNodeConfig, RaftNodeId, StateMachine as MetadataStateMachine, TypeConfig as RaftTypeConfig,
88};
89pub use replication::{PartitionReplication, ReplicationManager};
90#[cfg(feature = "raft")]
91pub use storage::RedbLogStore;
92pub use transport::{Transport, TransportConfig};
93
94/// Re-export common types
95pub mod prelude {
96    pub use crate::config::*;
97    pub use crate::coordinator::*;
98    pub use crate::error::*;
99    pub use crate::node::*;
100    pub use crate::partition::*;
101    pub use crate::protocol::Acks;
102    pub use crate::raft::RaftController;
103}