Skip to main content

validate_token_coverage

Function validate_token_coverage 

Source
pub fn validate_token_coverage(peers: &[Peer]) -> Result<(), TokenCoverageError>
Expand description

Validate that every (dc, rack) in peers produces a usable ring under crate::cluster::vnode::dispatch semantics.

The check is per-rack: a fault in DC2 still rejects even if DC1 is fully populated, because the dispatcher walks each rack independently when planning ([collect_routable] pushes one entry per (dc, rack)).

Returns the first fault encountered. The traversal order is the natural BTreeMap order over (dc, rack) strings, which is stable across runs given identical input.

§Errors

§Examples

use dynomite::cluster::coverage::{validate_token_coverage, TokenCoverageError};
use dynomite::cluster::peer::{Peer, PeerEndpoint};
use dynomite::hashkit::DynToken;

let a = Peer::new(
    0, PeerEndpoint::tcp("a".into(), 8101),
    "r".into(), "d".into(),
    vec![DynToken::from_u32(7)], true, true, false,
);
let b = Peer::new(
    1, PeerEndpoint::tcp("b".into(), 8101),
    "r".into(), "d".into(),
    vec![DynToken::from_u32(7)], false, true, false,
);
assert!(matches!(
    validate_token_coverage(&[a, b]),
    Err(TokenCoverageError::Overlap { .. })
));