Skip to content

Commit ae17bb3

Browse files
committed
send update events only when home derp changes
1 parent 6e0ec17 commit ae17bb3

File tree

2 files changed

+17
-15
lines changed

2 files changed

+17
-15
lines changed

tailnet/conn.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -266,8 +266,8 @@ func NewConn(options *Options) (conn *Conn, err error) {
266266
magicConn.SetDERPForcedWebsocketCallback(nodeUp.setDERPForcedWebsocket)
267267
if telemetryStore != nil {
268268
wireguardEngine.SetNetInfoCallback(func(ni *tailcfg.NetInfo) {
269-
nodeUp.setNetInfo(ni)
270269
telemetryStore.setNetInfo(ni)
270+
nodeUp.setNetInfo(ni)
271271
})
272272
} else {
273273
wireguardEngine.SetNetInfoCallback(nodeUp.setNetInfo)
@@ -393,8 +393,9 @@ func (c *Conn) SetAddresses(ips []netip.Prefix) error {
393393
func (c *Conn) SetNodeCallback(callback func(node *Node)) {
394394
if c.telemetryStore != nil {
395395
c.nodeUpdater.setCallback(func(node *Node) {
396-
c.telemetryStore.updateByNode(node)
397-
c.sendUpdatedTelemetry()
396+
if c.telemetryStore.updateByNode(node) {
397+
c.sendUpdatedTelemetry()
398+
}
398399
callback(node)
399400
})
400401
} else {

tailnet/telemetry.go

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ type TelemetryStore struct {
3434
nodeID uint64
3535
homeDerp int32
3636

37-
connSetupTime time.Duration
37+
connSetupTime *durationpb.Duration
3838
}
3939

4040
func newTelemetryStore() (*TelemetryStore, error) {
@@ -59,7 +59,7 @@ func (b *TelemetryStore) newEvent() *proto.TelemetryEvent {
5959
LatestNetcheck: b.cleanNetCheck,
6060
NodeIdSelf: b.nodeID,
6161
HomeDerp: b.homeDerp,
62-
ConnectionSetup: durationpb.New(b.connSetupTime),
62+
ConnectionSetup: b.connSetupTime,
6363

6464
// TODO(ethanndickson):
6565
P2PSetup: &durationpb.Duration{},
@@ -70,7 +70,7 @@ func (b *TelemetryStore) markConnected(connSetupTime time.Duration) {
7070
b.mu.Lock()
7171
defer b.mu.Unlock()
7272

73-
b.connSetupTime = connSetupTime
73+
b.connSetupTime = durationpb.New(connSetupTime)
7474
}
7575

7676
// Given a DERPMap, anonymise all IPs and hostnames.
@@ -97,24 +97,26 @@ func (b *TelemetryStore) updateDerpMap(cur *tailcfg.DERPMap) {
9797
b.cleanDerpMap = cleanMap
9898
}
9999

100-
func (b *TelemetryStore) updateByNode(n *Node) {
100+
// Update the telemetry store with the current node state.
101+
// Returns true if the home DERP has changed.
102+
func (b *TelemetryStore) updateByNode(n *Node) bool {
101103
b.mu.Lock()
102104
defer b.mu.Unlock()
103105

104106
b.nodeID = uint64(n.ID)
105-
b.homeDerp = int32(n.PreferredDERP)
107+
newHome := int32(n.PreferredDERP)
108+
if b.homeDerp != newHome {
109+
b.homeDerp = newHome
110+
return true
111+
}
112+
return false
106113
}
107114

108115
// Store an anonymized proto.Netcheck given a tailscale NetInfo.
109-
func (b *TelemetryStore) setNetInfo(ni *tailcfg.NetInfo) bool {
116+
func (b *TelemetryStore) setNetInfo(ni *tailcfg.NetInfo) {
110117
b.mu.Lock()
111118
defer b.mu.Unlock()
112119

113-
derpHomeChanged := false
114-
if b.cleanNetCheck != nil {
115-
derpHomeChanged = b.cleanNetCheck.PreferredDERP != int64(ni.PreferredDERP)
116-
}
117-
118120
b.cleanNetCheck = &proto.Netcheck{
119121
UDP: ni.UDP,
120122
IPv6: ni.IPv6,
@@ -152,7 +154,6 @@ func (b *TelemetryStore) setNetInfo(ni *tailcfg.NetInfo) bool {
152154
for rid, seconds := range ni.DERPLatencyV6 {
153155
b.cleanNetCheck.RegionV6Latency[int64(rid)] = durationpb.New(time.Duration(seconds * float64(time.Second)))
154156
}
155-
return derpHomeChanged
156157
}
157158

158159
func (b *TelemetryStore) toEndpoint(ipport string) *proto.TelemetryEvent_P2PEndpoint {

0 commit comments

Comments
 (0)