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>
This commit is contained in:
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 @@ type fakeLocalServeClient struct {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
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…
Reference in New Issue
Block a user