summaryrefslogtreecommitdiffstats
path: root/src/transport.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/transport.rs')
-rw-r--r--src/transport.rs25
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,
}