From 72d2122cad6c48655a2ba97f478abf23de5622fe Mon Sep 17 00:00:00 2001 From: Marwan Sulaiman Date: Thu, 17 Aug 2023 14:09:58 -0400 Subject: [PATCH] cmd/tailscale: change serve and funnel calls to StatusWithoutPeers The tailscale serve|funnel commands frequently call the LocalBackend's Status but they never need the peers to be included. This PR changes the call to be StatusWithoutPeers which should gain a noticeable speed improvement Updates #8489 Signed-off-by: Marwan Sulaiman --- cmd/tailscale/cli/funnel.go | 4 ++-- cmd/tailscale/cli/serve.go | 14 ++++++++------ cmd/tailscale/cli/serve_test.go | 4 ++-- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/cmd/tailscale/cli/funnel.go b/cmd/tailscale/cli/funnel.go index e63e7e121..63583d834 100644 --- a/cmd/tailscale/cli/funnel.go +++ b/cmd/tailscale/cli/funnel.go @@ -83,7 +83,7 @@ func (e *serveEnv) runFunnel(ctx context.Context, args []string) error { if sc == nil { sc = new(ipn.ServeConfig) } - st, err := e.getLocalClientStatus(ctx) + st, err := e.getLocalClientStatusWithoutPeers(ctx) if err != nil { return fmt.Errorf("getting client status: %w", err) } @@ -146,7 +146,7 @@ func (e *serveEnv) verifyFunnelEnabled(ctx context.Context, st *ipnstate.Status, return nil // already enabled } enableErr := e.enableFeatureInteractive(ctx, "funnel", hasFunnelAttrs) - st, statusErr := e.getLocalClientStatus(ctx) // get updated status; interactive flow may block + st, statusErr := e.getLocalClientStatusWithoutPeers(ctx) // get updated status; interactive flow may block switch { case statusErr != nil: return fmt.Errorf("getting client status: %w", statusErr) diff --git a/cmd/tailscale/cli/serve.go b/cmd/tailscale/cli/serve.go index dc2dbb251..8d51d4f49 100644 --- a/cmd/tailscale/cli/serve.go +++ b/cmd/tailscale/cli/serve.go @@ -129,7 +129,7 @@ func (e *serveEnv) newFlags(name string, setup func(fs *flag.FlagSet)) *flag.Fla // // The purpose of this interface is to allow tests to provide a mock. type localServeClient interface { - Status(context.Context) (*ipnstate.Status, error) + StatusWithoutPeers(context.Context) (*ipnstate.Status, error) GetServeConfig(context.Context) (*ipn.ServeConfig, error) SetServeConfig(context.Context, *ipn.ServeConfig) error QueryFeature(ctx context.Context, feature string) (*tailcfg.QueryFeatureResponse, error) @@ -158,19 +158,21 @@ type serveEnv struct { // The trailing dot is removed. // Returns an error if local client status fails. func (e *serveEnv) getSelfDNSName(ctx context.Context) (string, error) { - st, err := e.getLocalClientStatus(ctx) + st, err := e.getLocalClientStatusWithoutPeers(ctx) if err != nil { return "", fmt.Errorf("getting client status: %w", err) } return strings.TrimSuffix(st.Self.DNSName, "."), nil } -// getLocalClientStatus returns the Status of the local client. +// getLocalClientStatusWithoutPeers returns the Status of the local client +// without any peers in the response. +// // Returns error if unable to reach tailscaled or if self node is nil. // // Exits if status is not running or starting. -func (e *serveEnv) getLocalClientStatus(ctx context.Context) (*ipnstate.Status, error) { - st, err := e.lc.Status(ctx) +func (e *serveEnv) getLocalClientStatusWithoutPeers(ctx context.Context) (*ipnstate.Status, error) { + st, err := e.lc.StatusWithoutPeers(ctx) if err != nil { return nil, fixTailscaledConnectError(err) } @@ -641,7 +643,7 @@ func (e *serveEnv) runServeStatus(ctx context.Context, args []string) error { printf("No serve config\n") return nil } - st, err := e.getLocalClientStatus(ctx) + st, err := e.getLocalClientStatusWithoutPeers(ctx) if err != nil { return err } diff --git a/cmd/tailscale/cli/serve_test.go b/cmd/tailscale/cli/serve_test.go index cae6b2bee..4b2c98fd8 100644 --- a/cmd/tailscale/cli/serve_test.go +++ b/cmd/tailscale/cli/serve_test.go @@ -810,7 +810,7 @@ func TestVerifyFunnelEnabled(t *testing.T) { defer func() { fakeStatus.Self.Capabilities = oldCaps }() // reset after test fakeStatus.Self.Capabilities = tt.caps } - st, err := e.getLocalClientStatus(ctx) + st, err := e.getLocalClientStatusWithoutPeers(ctx) if err != nil { t.Fatal(err) } @@ -861,7 +861,7 @@ var fakeStatus = &ipnstate.Status{ }, } -func (lc *fakeLocalServeClient) Status(ctx context.Context) (*ipnstate.Status, error) { +func (lc *fakeLocalServeClient) StatusWithoutPeers(ctx context.Context) (*ipnstate.Status, error) { return fakeStatus, nil }