From dfea49e0871b78d2b6856eec80c5cd5a7f501dff Mon Sep 17 00:00:00 2001 From: tv Date: Mon, 9 Nov 2026 15:24:00 +0000 Subject: signatures: up to 4096 in a message, each actor's latest past them Review 4, F5: a delta, and a message whose changes held more than 256 signatures (a whole document pulled, of any real history), carried each actor's latest signature, the 256 that became latest last. An actor is a node's run, so past 256 runs writing in an epoch, some actors' changes arrived unvouched at the puller under a policy requiring signatures, waited, and every resend carried the same 256: a joiner never finished. A message now carries up to 4096 signatures (`MAX_PER_MESSAGE`, as many as wait for their changes, `MAX_PENDING`: 384 KiB at most), all of its changes' up to there, each actor's latest past it and for a delta, and a receiver takes as many (wire version 47). An epoch with more than 4096 runs writing would still leave some unvouched in such a transfer, which the constant says; sending each actor of the transfer its own latest would need the actors of a delta's changes, which only rebuilding their metadata gives. --- src/transport/mod.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src/transport/mod.rs') diff --git a/src/transport/mod.rs b/src/transport/mod.rs index e2135d1..cbb6734 100644 --- a/src/transport/mod.rs +++ b/src/transport/mod.rs @@ -733,9 +733,9 @@ pub(crate) struct SyncEnvelope { /// When the sender generated it, by its clock: the receiver takes how long it took /// to come (`swarm::hop`). pub(crate) sent: crate::clock::UnixMillis, - /// Signatures of changes (`document::signatures`): each actor's latest the sender - /// verified that it didn't send this peer yet, `signatures::MAX_PER_MESSAGE` at - /// most, as `signatures::pack` packs them. + /// Signatures of changes (`document::signatures`): of the changes the message + /// carries, or each actor's latest for a delta or past `signatures::MAX_PER_MESSAGE` + /// (`Signatures::for_changes`, `latest_each`), as `signatures::pack` packs them. pub(crate) signatures: serde_bytes::ByteBuf, } -- cgit v1.3.1