volli-manager 0.1.12

Manager for volli
Documentation
use crate::util::short_id;
use eyre::Report;
use tracing::{debug, warn};
use volli_core::ManagerPeerEntry;
use volli_core::token::{encode_token, issue_token};

/// Determine if the local manager should dial the given peer based on precedence rules.
pub fn should_dial_peer(self_meta: &ManagerPeerEntry, peer: &ManagerPeerEntry) -> bool {
    // Only dial peers in same tenant/cluster
    if self_meta.tenant != peer.tenant || self_meta.cluster != peer.cluster {
        warn!(peer=%short_id(&peer.manager_id), "peer not in same tenant/cluster");
        return false;
    }

    // Don't dial ourselves
    if self_meta.manager_id == peer.manager_id {
        debug!(peer=%short_id(&peer.manager_id), "peer is ourselves; not dialing");
        return false;
    }

    // Dial based on ID ordering - only dial if our ID is greater (lexicographically)
    if self_meta.manager_id < peer.manager_id {
        debug!(
            ours=%short_id(&self_meta.manager_id),
            theirs=%short_id(&peer.manager_id),
            "peer takes precedence; they dial us",
        );
        return false;
    }

    debug!(
        ours=%short_id(&self_meta.manager_id),
        theirs=%short_id(&peer.manager_id),
        "self takes precedence; dialing",
    );

    true
}

/// Generate a unique key for identifying peers in internal tables.
pub fn peer_key(peer: &ManagerPeerEntry) -> String {
    format!("{}:{}:{}", peer.tenant, peer.cluster, peer.manager_id)
}

/// Create a just-in-time authentication token for dialing a peer.
pub fn dial_token(csk: &[u8; 32], self_meta: &ManagerPeerEntry) -> Result<String, Report> {
    let token = issue_token(
        csk,
        &self_meta.tenant,
        &self_meta.cluster,
        &self_meta.manager_id,
        60,
    )?;
    encode_token(&token)
}