//! Replication types and protocols for distributed tidalDB deployments. //! //! The `replication` module is empty in single-node deployments -- //! all types default to `shard_id=0`, `region_id=0`, and routing is a no-op. pub mod control; pub mod crdt; pub mod idempotency; pub mod in_process; pub mod lag; pub mod migration; pub mod receiver; pub mod reconcile; pub mod segment_id; pub mod session_bridge; pub mod shard; pub mod shipper; pub mod state; pub mod tenant; pub mod transport; pub mod upgrade; pub use control::{ClusterHealth, ControlPlane, RegionHealth, ShardStats}; pub use crdt::{Hlc, HlcTimestamp}; pub use idempotency::{IdempotencyKey, IdempotencyStore}; pub use in_process::{InProcessTransport, InProcessTransportFactory}; pub use lag::ReplicationLagGauge; pub use migration::{MigrationState, TenantMigration}; pub use receiver::{SegmentReceiverHandle, apply_payload, spawn_receiver}; pub use reconcile::{HardNegAction, MergePlan, ReconciliationEngine, StateSnapshot}; pub use segment_id::WalSegmentId; pub use session_bridge::{ InProcessSessionTransportFactory, SessionBridgeError, SessionPayload, SessionReplicationBridge, SessionShardTransport, }; pub use shard::{EntityIdRange, RegionId, RouterError, RoutingStrategy, ShardId, ShardRouter}; pub use shipper::{ShipperConfig, WalShipperHandle, spawn_shipper}; pub use state::ReplicationState; pub use tenant::{ ClusterTopology, ShardAssignment, TenantConfig, TenantId, TenantRateLimiter, TenantRouter, }; pub use transport::{Transport, TransportError, WalSegmentPayload}; pub use upgrade::{RollingUpgradeCoordinator, UpgradePhase}; /// Current wall-clock time in nanoseconds since the Unix epoch. /// /// Uses `u64`, which overflows in year 2554 — safe for all practical purposes. #[allow(clippy::cast_possible_truncation)] pub(crate) fn now_ns() -> u64 { std::time::SystemTime::now() .duration_since(std::time::UNIX_EPOCH) .unwrap_or_default() .as_nanos() as u64 }