Skip to content

Commit dca24bd

Browse files
authored
fix: Don't clear out peers that haven't connected yet (coder#3916)
This was causing parallel connections to fail, because they wouldn't be established yet.
1 parent 18af942 commit dca24bd

File tree

1 file changed

+10
-2
lines changed

1 file changed

+10
-2
lines changed

tailnet/conn.go

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -303,16 +303,19 @@ func (c *Conn) UpdateNodes(nodes []*Node) error {
303303
for _, peer := range c.netMap.Peers {
304304
if peerStatus, ok := status.Peer[peer.Key]; ok {
305305
// Clear out inactive connections!
306-
if !peerStatus.Active {
306+
// If a connection hasn't been active for a minute post creation, we assume it's dead.
307+
if !peerStatus.Active && peer.Created.Before(time.Now().Add(-time.Minute)) {
308+
c.logger.Debug(context.Background(), "clearing peer", slog.F("peerStatus", peerStatus))
307309
continue
308310
}
309311
}
310312
peerMap[peer.ID] = peer
311313
}
312314
for _, node := range nodes {
313315
peerStatus, ok := status.Peer[node.Key]
314-
peerMap[node.ID] = &tailcfg.Node{
316+
peerNode := &tailcfg.Node{
315317
ID: node.ID,
318+
Created: time.Now(),
316319
Key: node.Key,
317320
DiscoKey: node.DiscoKey,
318321
Addresses: node.Addresses,
@@ -325,6 +328,11 @@ func (c *Conn) UpdateNodes(nodes []*Node) error {
325328
// reason. TODO: @kylecarbs debug this!
326329
KeepAlive: ok && peerStatus.Active,
327330
}
331+
existingNode, ok := peerMap[node.ID]
332+
if ok {
333+
peerNode.Created = existingNode.Created
334+
}
335+
peerMap[node.ID] = peerNode
328336
}
329337
c.netMap.Peers = make([]*tailcfg.Node, 0, len(peerMap))
330338
for _, peer := range peerMap {

0 commit comments

Comments
 (0)