From 9bda1116b34c7bc3dcf38c570ce21b21670f16e8 Mon Sep 17 00:00:00 2001 From: tv Date: Wed, 4 Nov 2026 05:53:24 +0100 Subject: no heal while both move on The heal clock now also restarts when our heads and the peer's have both changed since the last STATUS that showed them differing. While writes go on, two neighbours's heads differ because of changes still on their way, and that alone no longer leads to a heal. --- docs/measurements.md | 2 +- docs/peers.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'docs') diff --git a/docs/measurements.md b/docs/measurements.md index d878ba7..483e185 100644 --- a/docs/measurements.md +++ b/docs/measurements.md @@ -270,7 +270,7 @@ In `/peers`, and as `peer_…` series with a `peer` label: | `destination` | `peer_destination_info{transport,proven,connection}` | Where messages to it go: the address (its transport), whether it proved itself there (else sends wait for its proof), and the connection there: libp2p's `direct` or `relayed`, Tor's `direct` (an onion circuit); none on Mycelium; while `relayed` after a failed hole punch, `punching`: punches failed in a row (`failed`) and when it's tried again (`nextInSecs`). | | `destination.paths[].rttMs`, `.down`, `.connection` | `peer_path_rtt_seconds{transport}`, `peer_path_down{transport}` | Every path to it, best first: its round-trip time (smoothed, from PINGs), whether it is down, and the transport's connection there (`direct` or `relayed`, where it has connections). The first is the one in use: the peer's round-trip time. | | `lastSyncSecsAgo` | `peer_last_sync_seconds` | Since a sync message from it was applied (or the epoch changed). | -| `divergedForSecs` | `peer_diverged_seconds` | How long its heads have differed from ours with no sync message from it in between; absent while they match. Long values precede a healing re-handshake ([`peers.md`](peers.md)). | +| `divergedForSecs` | `peer_diverged_seconds` | How long its heads have differed from ours with no sync message from it in between, nor both moving on; absent while they match. Long values precede a healing re-handshake ([`peers.md`](peers.md)). | | `syncThroughput` | `peer_sync_throughput_bytes_per_second` | Sync bytes per second over exchanges of at least 32 KiB, round trip taken off, smoothed. Absent before the first large exchange; comes with its age (`secsAgo`) since large exchanges are rare. This is the rate the peer delivers at in practice (its apply time included), not the path's capacity. | | `clock.offsetMs`, `.withinMs` | `peer_clock_offset_seconds`, `peer_clock_offset_within_seconds` | How far its clock is ahead of ours (behind if negative), give or take. Each PONG says when the peer answered, by its clock, which lies between our PING going and the PONG coming: within half the round trip of its middle, however unevenly the two ways took. Of its paths and the last 5 minutes, the narrowest bound is kept; a sample it contradicts (a clock set anew) replaces it at once. Absent before a PONG from it. | | `epoch`, `sameEpoch`, `heads` | — | What it last advertised; `sameEpoch: false` means we don't sync with it. | diff --git a/docs/peers.md b/docs/peers.md index 8a3333d..a521db3 100644 --- a/docs/peers.md +++ b/docs/peers.md @@ -361,7 +361,7 @@ sequenceDiagram B->>A: PONG(nonce, B's time) Note over A: mark B seen, round-trip sample end - alt after a STATUS: same epoch, heads have differed for resync_after with no sync from it since,
no answer due to our own sync message, last heal at least resync_after ago + alt after a STATUS: same epoch, heads have differed for resync_after with no sync from it since
nor both sides' heads moving on, no answer due to our own sync message, last heal at least resync_after ago A->>B: HELLO B->>A: HELLO_REPLY Note over A,B: sync reset on both sides, sync restarts -- cgit v1.3.1