Crate photon_etcd_cluster

Crate photon_etcd_cluster 

Source
Expand description

§photon-etcd-cluster

A lightweight cluster coordination library providing leader election and node registry via etcd.

§Main Components

§Usage Patterns

React to cluster changes as they happen:

use photon_etcd_cluster::{ServiceDiscovery, ClusterEvent};

let discovery = ServiceDiscovery::new(endpoints, "my-service".into());
tokio::spawn(async move { discovery.run(None).await });

let mut events = discovery.subscribe();
while let Ok(event) = events.recv().await {
    match event {
        ClusterEvent::NodeJoined(n) => update_backends(),
        ClusterEvent::LeaderElected(n) => route_writes_to(n),
        _ => {}
    }
}

§Watch-based (for metrics/state observation)

Efficiently observe state changes without polling:

let mut watch = discovery.watch_nodes();
loop {
    watch.changed().await?;
    BACKEND_COUNT.set(watch.borrow().len() as i64);
}

§Direct access (for one-off queries)

let nodes = discovery.nodes();
let leader = discovery.leader();

§ClusterNode Example

use photon_etcd_cluster::ClusterNode;
use tokio::sync::broadcast;

let node = ClusterNode::new(
    vec!["http://localhost:2379".into()],
    "node-1".into(),
    "127.0.0.1".parse().unwrap(),
    "my-service".into(),
    Some(5),
);

let (shutdown_tx, _) = broadcast::channel(1);
let mut rx = shutdown_tx.subscribe();
node.run(&mut rx).await?;

if node.is_leader() {
    // Perform leader-only tasks
}

Re-exports§

pub use cluster_node::ClusterNode;
pub use cluster_node::ClusterNodeBuilder;
pub use discovery::ServiceDiscovery;
pub use error::ClusterError;
pub use event::ClusterEvent;
pub use metrics::MetricsCollector;
pub use metrics::NoopMetricsCollector;
pub use types::metadata_keys;
pub use types::HealthStatus;
pub use types::Node;
pub use types::NodeMetadata;

Modules§

cluster_node
Cluster membership and leader election.
discovery
Cluster state monitoring with reactive event streams.
error
Error types for photon-etcd-cluster.
event
Cluster events for reactive state tracking.
metrics
Metrics collection for cluster nodes.
types