diff --git a/cmd/tailscale/cli/file.go b/cmd/tailscale/cli/file.go index 01dc68d83..bc54e4d81 100644 --- a/cmd/tailscale/cli/file.go +++ b/cmd/tailscale/cli/file.go @@ -97,14 +97,12 @@ func runCp(ctx context.Context, args []string) error { return err } - peerAPIBase, lastSeen, isOffline, err := discoverPeerAPIBase(ctx, ip) + peerAPIBase, isOffline, err := discoverPeerAPIBase(ctx, ip) if err != nil { return fmt.Errorf("can't send to %s: %v", target, err) } if isOffline { 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 { @@ -182,14 +180,14 @@ func runCp(ctx context.Context, args []string) error { 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) if err != nil { - return "", time.Time{}, false, err + return "", false, err } fts, err := tailscale.FileTargets(ctx) if err != nil { - return "", time.Time{}, false, err + return "", false, err } for _, ft := range fts { n := ft.Node @@ -197,14 +195,11 @@ func discoverPeerAPIBase(ctx context.Context, ipStr string) (base string, lastSe if a.IP() != ip { continue } - if n.LastSeen != nil { - lastSeen = *n.LastSeen - } 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 @@ -274,8 +269,6 @@ func (r *slowReader) Read(p []byte) (n int, err error) { return } -const lastSeenOld = 20 * time.Minute - func runCpTargets(ctx context.Context, args []string) error { if len(args) > 0 { return errors.New("invalid arguments with --targets") diff --git a/tailcfg/tailcfg.go b/tailcfg/tailcfg.go index 5a6ad8cc5..a4ec682dd 100644 --- a/tailcfg/tailcfg.go +++ b/tailcfg/tailcfg.go @@ -42,7 +42,8 @@ import ( // 17: 2021-04-18: MapResponse.Domain empty means unchanged // 18: 2021-04-19: MapResponse.Node nil means unchanged (all fields now omitempty) // 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 diff --git a/wgengine/pendopen.go b/wgengine/pendopen.go index fb87c16e5..039da4deb 100644 --- a/wgengine/pendopen.go +++ b/wgengine/pendopen.go @@ -5,6 +5,7 @@ package wgengine import ( + "fmt" "os" "runtime" "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()) return } - var lastSeen time.Time - if n.LastSeen != nil { - lastSeen = *n.LastSeen - } var ps *ipnstate.PeerStatusLite if st, err := e.getStatus(); err == nil { @@ -228,9 +225,11 @@ func (e *userspaceEngine) onOpenTimeout(flow flowtrack.Tuple) { 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(), - durFmt(lastSeen), online, durFmt(e.magicConn.LastRecvActivityOfDisco(n.DiscoKey))) }