diff options
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, } |
