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 <marwan@tailscale.com>
pull/8945/head
Marwan Sulaiman 1 year ago committed by Marwan Sulaiman
parent 121d1d002c
commit 72d2122cad

@ -83,7 +83,7 @@ func (e *serveEnv) runFunnel(ctx context.Context, args []string) error {
if sc == nil { if sc == nil {
sc = new(ipn.ServeConfig) sc = new(ipn.ServeConfig)
} }
st, err := e.getLocalClientStatus(ctx) st, err := e.getLocalClientStatusWithoutPeers(ctx)
if err != nil { if err != nil {
return fmt.Errorf("getting client status: %w", err) 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 return nil // already enabled
} }
enableErr := e.enableFeatureInteractive(ctx, "funnel", hasFunnelAttrs) 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 { switch {
case statusErr != nil: case statusErr != nil:
return fmt.Errorf("getting client status: %w", statusErr) return fmt.Errorf("getting client status: %w", statusErr)

@ -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. // The purpose of this interface is to allow tests to provide a mock.
type localServeClient interface { type localServeClient interface {
Status(context.Context) (*ipnstate.Status, error) StatusWithoutPeers(context.Context) (*ipnstate.Status, error)
GetServeConfig(context.Context) (*ipn.ServeConfig, error) GetServeConfig(context.Context) (*ipn.ServeConfig, error)
SetServeConfig(context.Context, *ipn.ServeConfig) error SetServeConfig(context.Context, *ipn.ServeConfig) error
QueryFeature(ctx context.Context, feature string) (*tailcfg.QueryFeatureResponse, error) QueryFeature(ctx context.Context, feature string) (*tailcfg.QueryFeatureResponse, error)
@ -158,19 +158,21 @@ type serveEnv struct {
// The trailing dot is removed. // The trailing dot is removed.
// Returns an error if local client status fails. // Returns an error if local client status fails.
func (e *serveEnv) getSelfDNSName(ctx context.Context) (string, error) { func (e *serveEnv) getSelfDNSName(ctx context.Context) (string, error) {
st, err := e.getLocalClientStatus(ctx) st, err := e.getLocalClientStatusWithoutPeers(ctx)
if err != nil { if err != nil {
return "", fmt.Errorf("getting client status: %w", err) return "", fmt.Errorf("getting client status: %w", err)
} }
return strings.TrimSuffix(st.Self.DNSName, "."), nil 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. // Returns error if unable to reach tailscaled or if self node is nil.
// //
// Exits if status is not running or starting. // Exits if status is not running or starting.
func (e *serveEnv) getLocalClientStatus(ctx context.Context) (*ipnstate.Status, error) { func (e *serveEnv) getLocalClientStatusWithoutPeers(ctx context.Context) (*ipnstate.Status, error) {
st, err := e.lc.Status(ctx) st, err := e.lc.StatusWithoutPeers(ctx)
if err != nil { if err != nil {
return nil, fixTailscaledConnectError(err) return nil, fixTailscaledConnectError(err)
} }
@ -641,7 +643,7 @@ func (e *serveEnv) runServeStatus(ctx context.Context, args []string) error {
printf("No serve config\n") printf("No serve config\n")
return nil return nil
} }
st, err := e.getLocalClientStatus(ctx) st, err := e.getLocalClientStatusWithoutPeers(ctx)
if err != nil { if err != nil {
return err return err
} }

@ -810,7 +810,7 @@ func TestVerifyFunnelEnabled(t *testing.T) {
defer func() { fakeStatus.Self.Capabilities = oldCaps }() // reset after test defer func() { fakeStatus.Self.Capabilities = oldCaps }() // reset after test
fakeStatus.Self.Capabilities = tt.caps fakeStatus.Self.Capabilities = tt.caps
} }
st, err := e.getLocalClientStatus(ctx) st, err := e.getLocalClientStatusWithoutPeers(ctx)
if err != nil { if err != nil {
t.Fatal(err) 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 return fakeStatus, nil
} }

Loading…
Cancel
Save