diff options
| author | tv <tv@krebsco.de> | 2026-10-19 23:56:33 +0200 |
|---|---|---|
| committer | tv <tv@krebsco.de> | 2026-10-19 23:56:33 +0200 |
| commit | 2dd4712902c63bfe393933ed165bb7481aa932ec (patch) | |
| tree | 8b66447844e643a82bd8d5df62442610d469a67b /src/transport.rs | |
| parent | d3a9d5d3ebff98e342dff1df0ebad86f346719f5 (diff) | |
add epochs
Diffstat (limited to 'src/transport.rs')
| -rw-r--r-- | src/transport.rs | 25 |
1 files changed, 23 insertions, 2 deletions
diff --git a/src/transport.rs b/src/transport.rs index 95d3046..9cfb026 100644 --- a/src/transport.rs +++ b/src/transport.rs @@ -5,11 +5,15 @@ use std::boxed::Box; use std::future::Future; use std::pin::Pin; +pub use crate::replica::Epoch; + pub type HeadsDigest = [u8; 32]; #[derive(Debug, Clone)] pub struct Keepalive { pub heads_digest: HeadsDigest, + /// The digest is only comparable between nodes on the same epoch. + pub epoch: Epoch, } #[derive(Debug)] @@ -21,18 +25,35 @@ pub enum ParsedMessage { Pong(Keepalive), } -#[derive(Debug)] -pub struct HelloRequest {} +impl ParsedMessage { + /// Every message carries the sender's epoch. + pub fn epoch(&self) -> Epoch { + match self { + ParsedMessage::Hello(hello) => hello.epoch, + ParsedMessage::HelloReply(reply) => reply.epoch, + ParsedMessage::Sync(envelope) => envelope.epoch, + ParsedMessage::Ping(keepalive) | ParsedMessage::Pong(keepalive) => keepalive.epoch, + } + } +} + +#[derive(Debug, Clone)] +pub struct HelloRequest { + pub epoch: Epoch, +} #[derive(Debug, Clone)] pub struct HelloReply { pub cluster_id: String, pub peers: Vec<String>, + pub epoch: Epoch, } #[derive(Debug, Clone)] pub struct SyncEnvelope { pub cluster_id: String, + /// Epoch of the document the message was generated from. + pub epoch: Epoch, pub message: Message, } |
