summaryrefslogtreecommitdiffstats
path: root/src/transport.rs
diff options
context:
space:
mode:
authortv <tv@krebsco.de>2026-10-19 23:56:33 +0200
committertv <tv@krebsco.de>2026-10-19 23:56:33 +0200
commit2dd4712902c63bfe393933ed165bb7481aa932ec (patch)
tree8b66447844e643a82bd8d5df62442610d469a67b /src/transport.rs
parentd3a9d5d3ebff98e342dff1df0ebad86f346719f5 (diff)
add epochs
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,
}