headscale/hscontrol/mapper
Kristoffer Dalby 3587225a88 mapper: fix phantom updateSentPeers on disconnected nodes
When send() is called on a node with zero active connections
(disconnected but kept for rapid reconnection), it returns nil
(success). handleNodeChange then calls updateSentPeers, recording
peers as delivered when no client received the data.

This corrupts lastSentPeers: future computePeerDiff calculations
produce wrong results because they compare against phantom state.
After reconnection, the node's initial map resets lastSentPeers,
but any changes processed during the disconnect window leave
stale entries that cause asymmetric peer visibility.

Return errNoActiveConnections from send() when there are no
connections. handleNodeChange treats this as a no-op (the change
was generated but not deliverable) and skips updateSentPeers,
keeping lastSentPeers consistent with what clients actually
received.
2026-04-10 13:18:56 +01:00
..
batcher.go mapper: fix phantom updateSentPeers on disconnected nodes 2026-04-10 13:18:56 +01:00
batcher_bench_test.go mapper/batcher: replace connected map with per-node disconnectedAt 2026-03-16 02:22:56 -07:00
batcher_concurrency_test.go mapper/batcher: serialize per-node work to prevent out-of-order delivery 2026-03-19 07:05:58 +01:00
batcher_scale_bench_test.go mapper/batcher: replace connected map with per-node disconnectedAt 2026-03-16 02:22:56 -07:00
batcher_test.go hscontrol/poll,state: fix grace period disconnect TOCTOU race 2026-03-19 07:05:58 +01:00
batcher_unit_test.go mapper: fix phantom updateSentPeers on disconnected nodes 2026-04-10 13:18:56 +01:00
builder.go policy/v2,state,mapper: implement per-viewer via route steering 2026-04-01 14:10:42 +01:00
builder_test.go all: fix golangci-lint issues (#3064) 2026-02-06 21:45:32 +01:00
mapper.go mapper: remove Batcher interface, rename to Batcher struct 2026-03-14 02:52:28 -07:00
mapper_test.go all: upgrade to Go 1.26rc2 and modernize codebase 2026-02-08 12:35:23 +01:00
node_conn.go mapper: fix phantom updateSentPeers on disconnected nodes 2026-04-10 13:18:56 +01:00
tail_test.go types,mapper,integration: enable Taildrive and add cap/drive grant lifecycle test 2026-04-01 14:10:42 +01:00