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}