mirror of
https://github.com/tailscale/tailscale.git
synced 2025-08-11 21:27:31 +00:00
net/netcheck,wgengine/magicsock: align DERP frame receive time heuristics
The netcheck package and the magicksock package coordinate via the health package, but both sides have time based heuristics through indirect dependencies. These were misaligned, so the implemented heuristic aimed at reducing DERP moves while there is active traffic were non-operational about 3/5ths of the time. It is problematic to setup a good test for this integration presently, so instead I added comment breadcrumbs along with the initial fix. Updates #8603 Signed-off-by: James Tucker <james@tailscale.com>
This commit is contained in:

committed by
James Tucker

parent
1fbaf26106
commit
6e334e64a1
@@ -1388,10 +1388,11 @@ const (
|
||||
// node is near region 1 @ 4ms and region 2 @ 5ms, region 1 getting
|
||||
// 5ms slower would cause a flap).
|
||||
preferredDERPAbsoluteDiff = 10 * time.Millisecond
|
||||
// preferredDERPFrameTime is the time which, if a DERP frame has been
|
||||
// PreferredDERPFrameTime is the time which, if a DERP frame has been
|
||||
// received within that period, we treat that region as being present
|
||||
// even without receiving a STUN response.
|
||||
preferredDERPFrameTime = 2 * time.Second
|
||||
// Note: must remain higher than the derp package frameReceiveRecordRate
|
||||
PreferredDERPFrameTime = 8 * time.Second
|
||||
)
|
||||
|
||||
// addReportHistoryAndSetPreferredDERP adds r to the set of recent Reports
|
||||
@@ -1480,7 +1481,7 @@ func (c *Client) addReportHistoryAndSetPreferredDERP(rs *reportState, r *Report,
|
||||
now := c.timeNow()
|
||||
|
||||
heardFromOldRegionRecently = lastHeard.After(rs.start)
|
||||
heardFromOldRegionRecently = heardFromOldRegionRecently || lastHeard.After(now.Add(-preferredDERPFrameTime))
|
||||
heardFromOldRegionRecently = heardFromOldRegionRecently || lastHeard.After(now.Add(-PreferredDERPFrameTime))
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -410,7 +410,7 @@ func TestAddReportHistoryAndSetPreferredDERP(t *testing.T) {
|
||||
},
|
||||
opts: &GetReportOpts{
|
||||
GetLastDERPActivity: mkLDAFunc(map[int]time.Time{
|
||||
1: startTime.Add(2*time.Second + preferredDERPFrameTime/2), // within active window of step (3)
|
||||
1: startTime.Add(2*time.Second + PreferredDERPFrameTime/2), // within active window of step (3)
|
||||
}),
|
||||
},
|
||||
wantPrevLen: 3,
|
||||
@@ -425,7 +425,7 @@ func TestAddReportHistoryAndSetPreferredDERP(t *testing.T) {
|
||||
},
|
||||
opts: &GetReportOpts{
|
||||
GetLastDERPActivity: mkLDAFunc(map[int]time.Time{
|
||||
1: startTime.Add(4*time.Second - preferredDERPFrameTime - 1), // not within active window of (3)
|
||||
1: startTime.Add(4*time.Second - PreferredDERPFrameTime - 1), // not within active window of (3)
|
||||
}),
|
||||
},
|
||||
wantPrevLen: 3,
|
||||
|
Reference in New Issue
Block a user