mirror of
https://github.com/tailscale/tailscale.git
synced 2025-02-27 10:47:35 +00:00
cmd/tailscale, wgengine, tailcfg: don't assume LastSeen is present [mapver 20]
Updates #2107 Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
This commit is contained in:
parent
8b2b899989
commit
80a4052593
@ -97,14 +97,12 @@ func runCp(ctx context.Context, args []string) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
peerAPIBase, lastSeen, isOffline, err := discoverPeerAPIBase(ctx, ip)
|
peerAPIBase, isOffline, err := discoverPeerAPIBase(ctx, ip)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("can't send to %s: %v", target, err)
|
return fmt.Errorf("can't send to %s: %v", target, err)
|
||||||
}
|
}
|
||||||
if isOffline {
|
if isOffline {
|
||||||
fmt.Fprintf(os.Stderr, "# warning: %s is offline\n", target)
|
fmt.Fprintf(os.Stderr, "# warning: %s is offline\n", target)
|
||||||
} else if !lastSeen.IsZero() && time.Since(lastSeen) > lastSeenOld {
|
|
||||||
fmt.Fprintf(os.Stderr, "# warning: %s last seen %v ago\n", target, time.Since(lastSeen).Round(time.Minute))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(files) > 1 {
|
if len(files) > 1 {
|
||||||
@ -182,14 +180,14 @@ func runCp(ctx context.Context, args []string) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func discoverPeerAPIBase(ctx context.Context, ipStr string) (base string, lastSeen time.Time, isOffline bool, err error) {
|
func discoverPeerAPIBase(ctx context.Context, ipStr string) (base string, isOffline bool, err error) {
|
||||||
ip, err := netaddr.ParseIP(ipStr)
|
ip, err := netaddr.ParseIP(ipStr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", time.Time{}, false, err
|
return "", false, err
|
||||||
}
|
}
|
||||||
fts, err := tailscale.FileTargets(ctx)
|
fts, err := tailscale.FileTargets(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", time.Time{}, false, err
|
return "", false, err
|
||||||
}
|
}
|
||||||
for _, ft := range fts {
|
for _, ft := range fts {
|
||||||
n := ft.Node
|
n := ft.Node
|
||||||
@ -197,14 +195,11 @@ func discoverPeerAPIBase(ctx context.Context, ipStr string) (base string, lastSe
|
|||||||
if a.IP() != ip {
|
if a.IP() != ip {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if n.LastSeen != nil {
|
|
||||||
lastSeen = *n.LastSeen
|
|
||||||
}
|
|
||||||
isOffline = n.Online != nil && !*n.Online
|
isOffline = n.Online != nil && !*n.Online
|
||||||
return ft.PeerAPIURL, lastSeen, isOffline, nil
|
return ft.PeerAPIURL, isOffline, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return "", time.Time{}, false, fileTargetErrorDetail(ctx, ip)
|
return "", false, fileTargetErrorDetail(ctx, ip)
|
||||||
}
|
}
|
||||||
|
|
||||||
// fileTargetErrorDetail returns a non-nil error saying why ip is an
|
// fileTargetErrorDetail returns a non-nil error saying why ip is an
|
||||||
@ -274,8 +269,6 @@ func (r *slowReader) Read(p []byte) (n int, err error) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
const lastSeenOld = 20 * time.Minute
|
|
||||||
|
|
||||||
func runCpTargets(ctx context.Context, args []string) error {
|
func runCpTargets(ctx context.Context, args []string) error {
|
||||||
if len(args) > 0 {
|
if len(args) > 0 {
|
||||||
return errors.New("invalid arguments with --targets")
|
return errors.New("invalid arguments with --targets")
|
||||||
|
@ -42,7 +42,8 @@ import (
|
|||||||
// 17: 2021-04-18: MapResponse.Domain empty means unchanged
|
// 17: 2021-04-18: MapResponse.Domain empty means unchanged
|
||||||
// 18: 2021-04-19: MapResponse.Node nil means unchanged (all fields now omitempty)
|
// 18: 2021-04-19: MapResponse.Node nil means unchanged (all fields now omitempty)
|
||||||
// 19: 2021-04-21: MapResponse.Debug.SleepSeconds
|
// 19: 2021-04-21: MapResponse.Debug.SleepSeconds
|
||||||
const CurrentMapRequestVersion = 19
|
// 20: 2021-06-11: MapResponse.LastSeen used even less (https://github.com/tailscale/tailscale/issues/2107)
|
||||||
|
const CurrentMapRequestVersion = 20
|
||||||
|
|
||||||
type StableID string
|
type StableID string
|
||||||
|
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
package wgengine
|
package wgengine
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
"runtime"
|
"runtime"
|
||||||
"strconv"
|
"strconv"
|
||||||
@ -173,10 +174,6 @@ func (e *userspaceEngine) onOpenTimeout(flow flowtrack.Tuple) {
|
|||||||
e.logf("open-conn-track: timeout opening %v; peer node %v not connected to any DERP relay", flow, n.Key.ShortString())
|
e.logf("open-conn-track: timeout opening %v; peer node %v not connected to any DERP relay", flow, n.Key.ShortString())
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
var lastSeen time.Time
|
|
||||||
if n.LastSeen != nil {
|
|
||||||
lastSeen = *n.LastSeen
|
|
||||||
}
|
|
||||||
|
|
||||||
var ps *ipnstate.PeerStatusLite
|
var ps *ipnstate.PeerStatusLite
|
||||||
if st, err := e.getStatus(); err == nil {
|
if st, err := e.getStatus(); err == nil {
|
||||||
@ -228,9 +225,11 @@ func (e *userspaceEngine) onOpenTimeout(flow flowtrack.Tuple) {
|
|||||||
online = "no"
|
online = "no"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
e.logf("open-conn-track: timeout opening %v to node %v; lastSeen=%v, online=%v, lastRecv=%v",
|
if n.LastSeen != nil && online != "yes" {
|
||||||
|
online += fmt.Sprintf(", lastseen=%v", durFmt(*n.LastSeen))
|
||||||
|
}
|
||||||
|
e.logf("open-conn-track: timeout opening %v to node %v; online=%v, lastRecv=%v",
|
||||||
flow, n.Key.ShortString(),
|
flow, n.Key.ShortString(),
|
||||||
durFmt(lastSeen),
|
|
||||||
online,
|
online,
|
||||||
durFmt(e.magicConn.LastRecvActivityOfDisco(n.DiscoKey)))
|
durFmt(e.magicConn.LastRecvActivityOfDisco(n.DiscoKey)))
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user