all: use Go 1.20's errors.Join instead of our multierr package

Updates #7123

Change-Id: Ie9be6814831f661ad5636afcd51d063a0d7a907d
Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
pull/17292/head
Brad Fitzpatrick 2 months ago committed by Brad Fitzpatrick
parent 91fa51ca15
commit c2f37c891c

@ -151,7 +151,6 @@ tailscale.com/cmd/derper dependencies: (generated by github.com/tailscale/depawa
💣 tailscale.com/util/hashx from tailscale.com/util/deephash 💣 tailscale.com/util/hashx from tailscale.com/util/deephash
tailscale.com/util/lineiter from tailscale.com/hostinfo+ tailscale.com/util/lineiter from tailscale.com/hostinfo+
tailscale.com/util/mak from tailscale.com/health+ tailscale.com/util/mak from tailscale.com/health+
tailscale.com/util/multierr from tailscale.com/health+
tailscale.com/util/nocasemaps from tailscale.com/types/ipproto tailscale.com/util/nocasemaps from tailscale.com/types/ipproto
tailscale.com/util/rands from tailscale.com/tsweb tailscale.com/util/rands from tailscale.com/tsweb
tailscale.com/util/set from tailscale.com/derp/derpserver+ tailscale.com/util/set from tailscale.com/derp/derpserver+

@ -840,7 +840,6 @@ tailscale.com/cmd/k8s-operator dependencies: (generated by github.com/tailscale/
tailscale.com/util/httpm from tailscale.com/client/tailscale+ tailscale.com/util/httpm from tailscale.com/client/tailscale+
tailscale.com/util/lineiter from tailscale.com/hostinfo+ tailscale.com/util/lineiter from tailscale.com/hostinfo+
tailscale.com/util/mak from tailscale.com/appc+ tailscale.com/util/mak from tailscale.com/appc+
tailscale.com/util/multierr from tailscale.com/control/controlclient+
tailscale.com/util/must from tailscale.com/logpolicy+ tailscale.com/util/must from tailscale.com/logpolicy+
tailscale.com/util/nocasemaps from tailscale.com/types/ipproto tailscale.com/util/nocasemaps from tailscale.com/types/ipproto
💣 tailscale.com/util/osdiag from tailscale.com/ipn/localapi 💣 tailscale.com/util/osdiag from tailscale.com/ipn/localapi

@ -177,7 +177,6 @@ tailscale.com/cmd/tailscale dependencies: (generated by github.com/tailscale/dep
tailscale.com/util/httpm from tailscale.com/client/tailscale+ tailscale.com/util/httpm from tailscale.com/client/tailscale+
tailscale.com/util/lineiter from tailscale.com/hostinfo+ tailscale.com/util/lineiter from tailscale.com/hostinfo+
tailscale.com/util/mak from tailscale.com/cmd/tailscale/cli+ tailscale.com/util/mak from tailscale.com/cmd/tailscale/cli+
tailscale.com/util/multierr from tailscale.com/health+
tailscale.com/util/must from tailscale.com/clientupdate/distsign+ tailscale.com/util/must from tailscale.com/clientupdate/distsign+
tailscale.com/util/nocasemaps from tailscale.com/types/ipproto tailscale.com/util/nocasemaps from tailscale.com/types/ipproto
tailscale.com/util/prompt from tailscale.com/cmd/tailscale/cli tailscale.com/util/prompt from tailscale.com/cmd/tailscale/cli

@ -164,7 +164,6 @@ tailscale.com/cmd/tailscaled dependencies: (generated by github.com/tailscale/de
tailscale.com/util/httpm from tailscale.com/ipn/ipnlocal+ tailscale.com/util/httpm from tailscale.com/ipn/ipnlocal+
tailscale.com/util/lineiter from tailscale.com/hostinfo+ tailscale.com/util/lineiter from tailscale.com/hostinfo+
tailscale.com/util/mak from tailscale.com/control/controlclient+ tailscale.com/util/mak from tailscale.com/control/controlclient+
tailscale.com/util/multierr from tailscale.com/cmd/tailscaled+
tailscale.com/util/must from tailscale.com/logpolicy+ tailscale.com/util/must from tailscale.com/logpolicy+
tailscale.com/util/nocasemaps from tailscale.com/types/ipproto tailscale.com/util/nocasemaps from tailscale.com/types/ipproto
tailscale.com/util/osdiag from tailscale.com/ipn/localapi tailscale.com/util/osdiag from tailscale.com/ipn/localapi

@ -190,7 +190,6 @@ tailscale.com/cmd/tailscaled dependencies: (generated by github.com/tailscale/de
tailscale.com/util/httpm from tailscale.com/ipn/ipnlocal+ tailscale.com/util/httpm from tailscale.com/ipn/ipnlocal+
tailscale.com/util/lineiter from tailscale.com/hostinfo+ tailscale.com/util/lineiter from tailscale.com/hostinfo+
tailscale.com/util/mak from tailscale.com/control/controlclient+ tailscale.com/util/mak from tailscale.com/control/controlclient+
tailscale.com/util/multierr from tailscale.com/cmd/tailscaled+
tailscale.com/util/must from tailscale.com/logpolicy+ tailscale.com/util/must from tailscale.com/logpolicy+
tailscale.com/util/nocasemaps from tailscale.com/types/ipproto tailscale.com/util/nocasemaps from tailscale.com/types/ipproto
tailscale.com/util/osdiag from tailscale.com/ipn/localapi tailscale.com/util/osdiag from tailscale.com/ipn/localapi

@ -427,7 +427,7 @@ tailscale.com/cmd/tailscaled dependencies: (generated by github.com/tailscale/de
tailscale.com/util/lineiter from tailscale.com/hostinfo+ tailscale.com/util/lineiter from tailscale.com/hostinfo+
L tailscale.com/util/linuxfw from tailscale.com/wgengine/router/osrouter L tailscale.com/util/linuxfw from tailscale.com/wgengine/router/osrouter
tailscale.com/util/mak from tailscale.com/control/controlclient+ tailscale.com/util/mak from tailscale.com/control/controlclient+
tailscale.com/util/multierr from tailscale.com/cmd/tailscaled+ tailscale.com/util/multierr from tailscale.com/feature/taildrop
tailscale.com/util/must from tailscale.com/clientupdate/distsign+ tailscale.com/util/must from tailscale.com/clientupdate/distsign+
tailscale.com/util/nocasemaps from tailscale.com/types/ipproto tailscale.com/util/nocasemaps from tailscale.com/types/ipproto
💣 tailscale.com/util/osdiag from tailscale.com/cmd/tailscaled+ 💣 tailscale.com/util/osdiag from tailscale.com/cmd/tailscaled+

@ -257,6 +257,7 @@ func TestMinTailscaledWithCLI(t *testing.T) {
"cbor", "cbor",
"hujson", "hujson",
"pprof", "pprof",
"multierr", // https://github.com/tailscale/tailscale/pull/17379
} }
deptest.DepChecker{ deptest.DepChecker{
GOOS: "linux", GOOS: "linux",

@ -56,7 +56,6 @@ import (
"tailscale.com/types/logger" "tailscale.com/types/logger"
"tailscale.com/types/logid" "tailscale.com/types/logid"
"tailscale.com/util/clientmetric" "tailscale.com/util/clientmetric"
"tailscale.com/util/multierr"
"tailscale.com/util/osshare" "tailscale.com/util/osshare"
"tailscale.com/util/syspolicy/pkey" "tailscale.com/util/syspolicy/pkey"
"tailscale.com/util/syspolicy/policyclient" "tailscale.com/util/syspolicy/policyclient"
@ -701,7 +700,7 @@ func createEngine(logf logger.Logf, sys *tsd.System) (onlyNetstack bool, err err
logf("wgengine.NewUserspaceEngine(tun %q) error: %v", name, err) logf("wgengine.NewUserspaceEngine(tun %q) error: %v", name, err)
errs = append(errs, err) errs = append(errs, err)
} }
return false, multierr.New(errs...) return false, errors.Join(errs...)
} }
// handleSubnetsInNetstack reports whether netstack should handle subnet routers // handleSubnetsInNetstack reports whether netstack should handle subnet routers

@ -267,7 +267,6 @@ tailscale.com/cmd/tsidp dependencies: (generated by github.com/tailscale/depawar
tailscale.com/util/httpm from tailscale.com/client/web+ tailscale.com/util/httpm from tailscale.com/client/web+
tailscale.com/util/lineiter from tailscale.com/hostinfo+ tailscale.com/util/lineiter from tailscale.com/hostinfo+
tailscale.com/util/mak from tailscale.com/appc+ tailscale.com/util/mak from tailscale.com/appc+
tailscale.com/util/multierr from tailscale.com/control/controlclient+
tailscale.com/util/must from tailscale.com/cmd/tsidp+ tailscale.com/util/must from tailscale.com/cmd/tsidp+
tailscale.com/util/nocasemaps from tailscale.com/types/ipproto tailscale.com/util/nocasemaps from tailscale.com/types/ipproto
💣 tailscale.com/util/osdiag from tailscale.com/ipn/localapi 💣 tailscale.com/util/osdiag from tailscale.com/ipn/localapi

@ -54,7 +54,6 @@ import (
"tailscale.com/types/tkatype" "tailscale.com/types/tkatype"
"tailscale.com/util/clientmetric" "tailscale.com/util/clientmetric"
"tailscale.com/util/eventbus" "tailscale.com/util/eventbus"
"tailscale.com/util/multierr"
"tailscale.com/util/singleflight" "tailscale.com/util/singleflight"
"tailscale.com/util/syspolicy/pkey" "tailscale.com/util/syspolicy/pkey"
"tailscale.com/util/syspolicy/policyclient" "tailscale.com/util/syspolicy/policyclient"
@ -1307,7 +1306,7 @@ func loadServerPubKeys(ctx context.Context, httpc *http.Client, serverURL string
out = tailcfg.OverTLSPublicKeyResponse{} out = tailcfg.OverTLSPublicKeyResponse{}
k, err := key.ParseMachinePublicUntyped(mem.B(b)) k, err := key.ParseMachinePublicUntyped(mem.B(b))
if err != nil { if err != nil {
return nil, multierr.New(jsonErr, err) return nil, errors.Join(jsonErr, err)
} }
out.LegacyPublicKey = k out.LegacyPublicKey = k
return &out, nil return &out, nil

@ -28,7 +28,6 @@ import (
"tailscale.com/types/key" "tailscale.com/types/key"
"tailscale.com/types/logger" "tailscale.com/types/logger"
"tailscale.com/util/mak" "tailscale.com/util/mak"
"tailscale.com/util/multierr"
"tailscale.com/util/singleflight" "tailscale.com/util/singleflight"
) )
@ -295,13 +294,13 @@ func (nc *NoiseClient) Close() error {
nc.connPool = nil nc.connPool = nil
nc.mu.Unlock() nc.mu.Unlock()
var errors []error var errs []error
for _, c := range conns { for _, c := range conns {
if err := c.Close(); err != nil { if err := c.Close(); err != nil {
errors = append(errors, err) errs = append(errs, err)
} }
} }
return multierr.New(errors...) return errors.Join(errs...)
} }
// dial opens a new connection to tailcontrol, fetching the server noise key // dial opens a new connection to tailcontrol, fetching the server noise key

@ -14,7 +14,6 @@ import (
"github.com/cilium/ebpf" "github.com/cilium/ebpf"
"github.com/cilium/ebpf/link" "github.com/cilium/ebpf/link"
"github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus"
"tailscale.com/util/multierr"
) )
//go:generate go run github.com/cilium/ebpf/cmd/bpf2go -type config -type counters_key -type counter_key_af -type counter_key_packets_bytes_action -type counter_key_prog_end bpf xdp.c -- -I headers //go:generate go run github.com/cilium/ebpf/cmd/bpf2go -type config -type counters_key -type counter_key_af -type counter_key_packets_bytes_action -type counter_key_prog_end bpf xdp.c -- -I headers
@ -110,7 +109,7 @@ func (s *STUNServer) Close() error {
errs = append(errs, s.link.Close()) errs = append(errs, s.link.Close())
} }
errs = append(errs, s.objs.Close()) errs = append(errs, s.objs.Close())
return multierr.New(errs...) return errors.Join(errs...)
} }
type stunServerMetrics struct { type stunServerMetrics struct {

@ -6,6 +6,7 @@ package tap
import ( import (
"bytes" "bytes"
"errors"
"fmt" "fmt"
"net" "net"
"net/netip" "net/netip"
@ -29,7 +30,6 @@ import (
"tailscale.com/syncs" "tailscale.com/syncs"
"tailscale.com/types/ipproto" "tailscale.com/types/ipproto"
"tailscale.com/types/logger" "tailscale.com/types/logger"
"tailscale.com/util/multierr"
) )
// TODO: this was randomly generated once. Maybe do it per process start? But // TODO: this was randomly generated once. Maybe do it per process start? But
@ -482,7 +482,7 @@ func (t *tapDevice) Write(buffs [][]byte, offset int) (int, error) {
wrote++ wrote++
} }
} }
return wrote, multierr.New(errs...) return wrote, errors.Join(errs...)
} }
func (t *tapDevice) MTU() (int, error) { func (t *tapDevice) MTU() (int, error) {

@ -27,7 +27,6 @@ import (
"tailscale.com/util/cibuild" "tailscale.com/util/cibuild"
"tailscale.com/util/eventbus" "tailscale.com/util/eventbus"
"tailscale.com/util/mak" "tailscale.com/util/mak"
"tailscale.com/util/multierr"
"tailscale.com/util/usermetric" "tailscale.com/util/usermetric"
"tailscale.com/version" "tailscale.com/version"
) )
@ -992,8 +991,8 @@ func (t *Tracker) selfCheckLocked() {
// OverallError returns a summary of the health state. // OverallError returns a summary of the health state.
// //
// If there are multiple problems, the error will be of type // If there are multiple problems, the error will be joined using
// multierr.Error. // [errors.Join].
func (t *Tracker) OverallError() error { func (t *Tracker) OverallError() error {
if t.nil() { if t.nil() {
return nil return nil
@ -1071,7 +1070,7 @@ func (t *Tracker) errorsLocked() []error {
// This function is here for legacy compatibility purposes and is deprecated. // This function is here for legacy compatibility purposes and is deprecated.
func (t *Tracker) multiErrLocked() error { func (t *Tracker) multiErrLocked() error {
errs := t.errorsLocked() errs := t.errorsLocked()
return multierr.New(errs...) return errors.Join(errs...)
} }
var fakeErrForTesting = envknob.RegisterString("TS_DEBUG_FAKE_HEALTH_ERROR") var fakeErrForTesting = envknob.RegisterString("TS_DEBUG_FAKE_HEALTH_ERROR")

@ -90,7 +90,6 @@ import (
"tailscale.com/util/eventbus" "tailscale.com/util/eventbus"
"tailscale.com/util/goroutines" "tailscale.com/util/goroutines"
"tailscale.com/util/mak" "tailscale.com/util/mak"
"tailscale.com/util/multierr"
"tailscale.com/util/osuser" "tailscale.com/util/osuser"
"tailscale.com/util/rands" "tailscale.com/util/rands"
"tailscale.com/util/set" "tailscale.com/util/set"
@ -3981,7 +3980,7 @@ func (b *LocalBackend) checkPrefsLocked(p *ipn.Prefs) error {
if err := b.checkAutoUpdatePrefsLocked(p); err != nil { if err := b.checkAutoUpdatePrefsLocked(p); err != nil {
errs = append(errs, err) errs = append(errs, err)
} }
return multierr.New(errs...) return errors.Join(errs...)
} }
func (b *LocalBackend) checkSSHPrefsLocked(p *ipn.Prefs) error { func (b *LocalBackend) checkSSHPrefsLocked(p *ipn.Prefs) error {
@ -4225,7 +4224,7 @@ func (b *LocalBackend) checkEditPrefsAccessLocked(actor ipnauth.Actor, prefs ipn
} }
} }
return multierr.New(errs...) return errors.Join(errs...)
} }
// changeDisablesExitNodeLocked reports whether applying the change // changeDisablesExitNodeLocked reports whether applying the change

@ -11,6 +11,7 @@ import (
"bufio" "bufio"
"bytes" "bytes"
"context" "context"
"errors"
"fmt" "fmt"
"io" "io"
"net" "net"
@ -19,7 +20,6 @@ import (
"net/netip" "net/netip"
"strings" "strings"
"github.com/pkg/errors"
"go.uber.org/zap" "go.uber.org/zap"
"tailscale.com/client/tailscale/apitype" "tailscale.com/client/tailscale/apitype"
"tailscale.com/k8s-operator/sessionrecording/spdy" "tailscale.com/k8s-operator/sessionrecording/spdy"
@ -31,7 +31,6 @@ import (
"tailscale.com/tsnet" "tailscale.com/tsnet"
"tailscale.com/tstime" "tailscale.com/tstime"
"tailscale.com/util/clientmetric" "tailscale.com/util/clientmetric"
"tailscale.com/util/multierr"
) )
const ( const (
@ -166,7 +165,7 @@ func (h *Hijacker) setUpRecording(ctx context.Context, conn net.Conn) (net.Conn,
} }
msg = msg + "; failure mode is 'fail closed'; closing connection." msg = msg + "; failure mode is 'fail closed'; closing connection."
if err := closeConnWithWarning(conn, msg); err != nil { if err := closeConnWithWarning(conn, msg); err != nil {
return nil, multierr.New(errors.New(msg), err) return nil, errors.Join(errors.New(msg), err)
} }
return nil, errors.New(msg) return nil, errors.New(msg)
} else { } else {
@ -245,7 +244,7 @@ func closeConnWithWarning(conn net.Conn, msg string) error {
b := io.NopCloser(bytes.NewBuffer([]byte(msg))) b := io.NopCloser(bytes.NewBuffer([]byte(msg)))
resp := http.Response{Status: http.StatusText(http.StatusForbidden), StatusCode: http.StatusForbidden, Body: b} resp := http.Response{Status: http.StatusText(http.StatusForbidden), StatusCode: http.StatusForbidden, Body: b}
if err := resp.Write(conn); err != nil { if err := resp.Write(conn); err != nil {
return multierr.New(fmt.Errorf("error writing msg %q to conn: %v", msg, err), conn.Close()) return errors.Join(fmt.Errorf("error writing msg %q to conn: %v", msg, err), conn.Close())
} }
return conn.Close() return conn.Close()
} }

@ -21,7 +21,6 @@ import (
"k8s.io/apimachinery/pkg/util/remotecommand" "k8s.io/apimachinery/pkg/util/remotecommand"
"tailscale.com/k8s-operator/sessionrecording/tsrecorder" "tailscale.com/k8s-operator/sessionrecording/tsrecorder"
"tailscale.com/sessionrecording" "tailscale.com/sessionrecording"
"tailscale.com/util/multierr"
) )
// New wraps the provided network connection and returns a connection whose reads and writes will get triggered as data is received on the hijacked connection. // New wraps the provided network connection and returns a connection whose reads and writes will get triggered as data is received on the hijacked connection.
@ -316,7 +315,7 @@ func (c *conn) Close() error {
c.closed = true c.closed = true
connCloseErr := c.Conn.Close() connCloseErr := c.Conn.Close()
recCloseErr := c.rec.Close() recCloseErr := c.rec.Close()
return multierr.New(connCloseErr, recCloseErr) return errors.Join(connCloseErr, recCloseErr)
} }
// writeBufHasIncompleteFragment returns true if the latest data message // writeBufHasIncompleteFragment returns true if the latest data message

@ -15,6 +15,7 @@ import (
"crypto/tls" "crypto/tls"
"crypto/x509" "crypto/x509"
"encoding/json" "encoding/json"
"errors"
"fmt" "fmt"
"io" "io"
"log" "log"
@ -29,7 +30,6 @@ import (
"tailscale.com/kube/kubeapi" "tailscale.com/kube/kubeapi"
"tailscale.com/tstime" "tailscale.com/tstime"
"tailscale.com/util/multierr"
) )
const ( const (
@ -397,7 +397,7 @@ func (c *client) CheckSecretPermissions(ctx context.Context, secretName string)
} }
} }
if len(errs) > 0 { if len(errs) > 0 {
return false, false, multierr.New(errs...) return false, false, errors.Join(errs...)
} }
canPatch, err = c.checkPermission(ctx, "patch", TypeSecrets, secretName) canPatch, err = c.checkPermission(ctx, "patch", TypeSecrets, secretName)
if err != nil { if err != nil {

@ -13,7 +13,6 @@ import (
"tailscale.com/net/stun" "tailscale.com/net/stun"
"tailscale.com/types/logger" "tailscale.com/types/logger"
"tailscale.com/types/nettype" "tailscale.com/types/nettype"
"tailscale.com/util/multierr"
) )
// Standalone creates the necessary UDP sockets on the given bindAddr and starts // Standalone creates the necessary UDP sockets on the given bindAddr and starts
@ -62,7 +61,7 @@ func (c *Client) Standalone(ctx context.Context, bindAddr string) error {
// If both v4 and v6 failed, report an error, otherwise let one succeed. // If both v4 and v6 failed, report an error, otherwise let one succeed.
if len(errs) == 2 { if len(errs) == 2 {
return multierr.New(errs...) return errors.Join(errs...)
} }
return nil return nil
} }

@ -10,6 +10,7 @@ import (
"context" "context"
"crypto/rand" "crypto/rand"
"encoding/binary" "encoding/binary"
"errors"
"fmt" "fmt"
"io" "io"
"log" "log"
@ -24,7 +25,6 @@ import (
"golang.org/x/net/ipv6" "golang.org/x/net/ipv6"
"tailscale.com/types/logger" "tailscale.com/types/logger"
"tailscale.com/util/mak" "tailscale.com/util/mak"
"tailscale.com/util/multierr"
) )
const ( const (
@ -157,17 +157,17 @@ func (p *Pinger) Close() error {
p.conns = nil p.conns = nil
p.mu.Unlock() p.mu.Unlock()
var errors []error var errs []error
for _, c := range conns { for _, c := range conns {
if err := c.Close(); err != nil { if err := c.Close(); err != nil {
errors = append(errors, err) errs = append(errs, err)
} }
} }
p.wg.Wait() p.wg.Wait()
p.cleanupOutstanding() p.cleanupOutstanding()
return multierr.New(errors...) return errors.Join(errs...)
} }
func (p *Pinger) run(ctx context.Context, conn net.PacketConn, typ string) { func (p *Pinger) run(ctx context.Context, conn net.PacketConn, typ string) {

@ -7,14 +7,13 @@ import (
"context" "context"
"crypto/tls" "crypto/tls"
"crypto/x509" "crypto/x509"
"errors"
"fmt" "fmt"
"io" "io"
"net/http" "net/http"
"net/netip" "net/netip"
"slices" "slices"
"time" "time"
"tailscale.com/util/multierr"
) )
const expiresSoon = 7 * 24 * time.Hour // 7 days from now const expiresSoon = 7 * 24 * time.Hour // 7 days from now
@ -69,7 +68,7 @@ func probeTLS(ctx context.Context, config *tls.Config, dialHostPort string) erro
func validateConnState(ctx context.Context, cs *tls.ConnectionState) (returnerr error) { func validateConnState(ctx context.Context, cs *tls.ConnectionState) (returnerr error) {
var errs []error var errs []error
defer func() { defer func() {
returnerr = multierr.New(errs...) returnerr = errors.Join(errs...)
}() }()
latestAllowedExpiration := time.Now().Add(expiresSoon) latestAllowedExpiration := time.Now().Add(expiresSoon)

@ -20,7 +20,6 @@ import (
"sync" "sync"
"time" "time"
"tailscale.com/util/multierr"
"tailscale.com/version/mkversion" "tailscale.com/version/mkversion"
) )
@ -176,7 +175,7 @@ func (b *Build) Build(targets []Target) (files []string, err error) {
} }
sort.Strings(files) sort.Strings(files)
return files, multierr.New(errs...) return files, errors.Join(errs...)
} }
// Once runs fn if Once hasn't been called with name before. // Once runs fn if Once hasn't been called with name before.

@ -21,7 +21,6 @@ import (
"tailscale.com/net/netx" "tailscale.com/net/netx"
"tailscale.com/tailcfg" "tailscale.com/tailcfg"
"tailscale.com/util/httpm" "tailscale.com/util/httpm"
"tailscale.com/util/multierr"
) )
const ( const (
@ -91,7 +90,7 @@ func ConnectToRecorder(ctx context.Context, recs []netip.AddrPort, dial netx.Dia
} }
return pw, attempts, errChan, nil return pw, attempts, errChan, nil
} }
return nil, attempts, nil, multierr.New(errs...) return nil, attempts, nil, errors.Join(errs...)
} }
// supportsV2 checks whether a recorder instance supports the /v2/record // supportsV2 checks whether a recorder instance supports the /v2/record

@ -262,7 +262,6 @@ tailscale.com/tsnet dependencies: (generated by github.com/tailscale/depaware)
tailscale.com/util/httpm from tailscale.com/client/web+ tailscale.com/util/httpm from tailscale.com/client/web+
tailscale.com/util/lineiter from tailscale.com/hostinfo+ tailscale.com/util/lineiter from tailscale.com/hostinfo+
tailscale.com/util/mak from tailscale.com/appc+ tailscale.com/util/mak from tailscale.com/appc+
tailscale.com/util/multierr from tailscale.com/control/controlclient+
tailscale.com/util/must from tailscale.com/logpolicy+ tailscale.com/util/must from tailscale.com/logpolicy+
tailscale.com/util/nocasemaps from tailscale.com/types/ipproto tailscale.com/util/nocasemaps from tailscale.com/types/ipproto
💣 tailscale.com/util/osdiag from tailscale.com/ipn/localapi 💣 tailscale.com/util/osdiag from tailscale.com/ipn/localapi

@ -50,7 +50,6 @@ import (
_ "tailscale.com/types/logid" _ "tailscale.com/types/logid"
_ "tailscale.com/util/clientmetric" _ "tailscale.com/util/clientmetric"
_ "tailscale.com/util/eventbus" _ "tailscale.com/util/eventbus"
_ "tailscale.com/util/multierr"
_ "tailscale.com/util/osshare" _ "tailscale.com/util/osshare"
_ "tailscale.com/util/syspolicy/pkey" _ "tailscale.com/util/syspolicy/pkey"
_ "tailscale.com/util/syspolicy/policyclient" _ "tailscale.com/util/syspolicy/policyclient"

@ -50,7 +50,6 @@ import (
_ "tailscale.com/types/logid" _ "tailscale.com/types/logid"
_ "tailscale.com/util/clientmetric" _ "tailscale.com/util/clientmetric"
_ "tailscale.com/util/eventbus" _ "tailscale.com/util/eventbus"
_ "tailscale.com/util/multierr"
_ "tailscale.com/util/osshare" _ "tailscale.com/util/osshare"
_ "tailscale.com/util/syspolicy/pkey" _ "tailscale.com/util/syspolicy/pkey"
_ "tailscale.com/util/syspolicy/policyclient" _ "tailscale.com/util/syspolicy/policyclient"

@ -50,7 +50,6 @@ import (
_ "tailscale.com/types/logid" _ "tailscale.com/types/logid"
_ "tailscale.com/util/clientmetric" _ "tailscale.com/util/clientmetric"
_ "tailscale.com/util/eventbus" _ "tailscale.com/util/eventbus"
_ "tailscale.com/util/multierr"
_ "tailscale.com/util/osshare" _ "tailscale.com/util/osshare"
_ "tailscale.com/util/syspolicy/pkey" _ "tailscale.com/util/syspolicy/pkey"
_ "tailscale.com/util/syspolicy/policyclient" _ "tailscale.com/util/syspolicy/policyclient"

@ -50,7 +50,6 @@ import (
_ "tailscale.com/types/logid" _ "tailscale.com/types/logid"
_ "tailscale.com/util/clientmetric" _ "tailscale.com/util/clientmetric"
_ "tailscale.com/util/eventbus" _ "tailscale.com/util/eventbus"
_ "tailscale.com/util/multierr"
_ "tailscale.com/util/osshare" _ "tailscale.com/util/osshare"
_ "tailscale.com/util/syspolicy/pkey" _ "tailscale.com/util/syspolicy/pkey"
_ "tailscale.com/util/syspolicy/policyclient" _ "tailscale.com/util/syspolicy/policyclient"

@ -60,7 +60,6 @@ import (
_ "tailscale.com/util/backoff" _ "tailscale.com/util/backoff"
_ "tailscale.com/util/clientmetric" _ "tailscale.com/util/clientmetric"
_ "tailscale.com/util/eventbus" _ "tailscale.com/util/eventbus"
_ "tailscale.com/util/multierr"
_ "tailscale.com/util/osdiag" _ "tailscale.com/util/osdiag"
_ "tailscale.com/util/osshare" _ "tailscale.com/util/osshare"
_ "tailscale.com/util/syspolicy/pkey" _ "tailscale.com/util/syspolicy/pkey"

@ -18,7 +18,6 @@ import (
"github.com/coreos/go-iptables/iptables" "github.com/coreos/go-iptables/iptables"
"tailscale.com/types/logger" "tailscale.com/types/logger"
"tailscale.com/util/multierr"
"tailscale.com/version/distro" "tailscale.com/version/distro"
) )
@ -67,7 +66,7 @@ func detectIptables() (int, error) {
default: default:
return 0, FWModeNotSupportedError{ return 0, FWModeNotSupportedError{
Mode: FirewallModeIPTables, Mode: FirewallModeIPTables,
Err: fmt.Errorf("iptables command run fail: %w", multierr.New(err, ip6err)), Err: fmt.Errorf("iptables command run fail: %w", errors.Join(err, ip6err)),
} }
} }
@ -232,5 +231,5 @@ func clearRules(proto iptables.Protocol, logf logger.Logf) error {
errs = append(errs, err) errs = append(errs, err)
} }
return multierr.New(errs...) return errors.Join(errs...)
} }

@ -19,7 +19,6 @@ import (
"github.com/dblohm7/wingoes" "github.com/dblohm7/wingoes"
"golang.org/x/sys/windows" "golang.org/x/sys/windows"
"tailscale.com/types/logger" "tailscale.com/types/logger"
"tailscale.com/util/multierr"
) )
var ( var (
@ -538,7 +537,7 @@ func (rps RestartableProcesses) Terminate(logf logger.Logf, exitCode uint32, tim
} }
if len(errs) != 0 { if len(errs) != 0 {
return multierr.New(errs...) return errors.Join(errs...)
} }
return nil return nil
} }

@ -10,6 +10,7 @@ package netlog
import ( import (
"context" "context"
"encoding/json" "encoding/json"
"errors"
"fmt" "fmt"
"io" "io"
"log" "log"
@ -28,7 +29,6 @@ import (
"tailscale.com/tailcfg" "tailscale.com/tailcfg"
"tailscale.com/types/logid" "tailscale.com/types/logid"
"tailscale.com/types/netlogtype" "tailscale.com/types/netlogtype"
"tailscale.com/util/multierr"
"tailscale.com/wgengine/router" "tailscale.com/wgengine/router"
) )
@ -272,5 +272,5 @@ func (nl *Logger) Shutdown(ctx context.Context) error {
nl.addrs = nil nl.addrs = nil
nl.prefixes = nil nl.prefixes = nil
return multierr.New(err1, err2) return errors.Join(err1, err2)
} }

@ -18,7 +18,6 @@ import (
"tailscale.com/net/netmon" "tailscale.com/net/netmon"
"tailscale.com/net/tsaddr" "tailscale.com/net/tsaddr"
"tailscale.com/net/tstun" "tailscale.com/net/tstun"
"tailscale.com/util/multierr"
"tailscale.com/wgengine/router" "tailscale.com/wgengine/router"
"tailscale.com/wgengine/winnet" "tailscale.com/wgengine/winnet"
@ -831,5 +830,5 @@ func syncRoutes(ifc *winipcfg.IPAdapterAddresses, want []*routeData, dontDelete
} }
} }
return multierr.New(errs...) return errors.Join(errs...)
} }

@ -32,7 +32,6 @@ import (
"tailscale.com/types/preftype" "tailscale.com/types/preftype"
"tailscale.com/util/eventbus" "tailscale.com/util/eventbus"
"tailscale.com/util/linuxfw" "tailscale.com/util/linuxfw"
"tailscale.com/util/multierr"
"tailscale.com/version/distro" "tailscale.com/version/distro"
"tailscale.com/wgengine/router" "tailscale.com/wgengine/router"
) )
@ -488,7 +487,7 @@ func (r *linuxRouter) Set(cfg *router.Config) error {
r.enableIPForwarding() r.enableIPForwarding()
} }
return multierr.New(errs...) return errors.Join(errs...)
} }
var dockerStatefulFilteringWarnable = health.Register(&health.Warnable{ var dockerStatefulFilteringWarnable = health.Register(&health.Warnable{

@ -4,6 +4,7 @@
package wgcfg package wgcfg
import ( import (
"errors"
"io" "io"
"sort" "sort"
@ -11,7 +12,6 @@ import (
"github.com/tailscale/wireguard-go/device" "github.com/tailscale/wireguard-go/device"
"github.com/tailscale/wireguard-go/tun" "github.com/tailscale/wireguard-go/tun"
"tailscale.com/types/logger" "tailscale.com/types/logger"
"tailscale.com/util/multierr"
) )
// NewDevice returns a wireguard-go Device configured for Tailscale use. // NewDevice returns a wireguard-go Device configured for Tailscale use.
@ -31,7 +31,7 @@ func DeviceConfig(d *device.Device) (*Config, error) {
cfg, fromErr := FromUAPI(r) cfg, fromErr := FromUAPI(r)
r.Close() r.Close()
getErr := <-errc getErr := <-errc
err := multierr.New(getErr, fromErr) err := errors.Join(getErr, fromErr)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -64,5 +64,5 @@ func ReconfigDevice(d *device.Device, cfg *Config, logf logger.Logf) (err error)
toErr := cfg.ToUAPI(logf, w, prev) toErr := cfg.ToUAPI(logf, w, prev)
w.Close() w.Close()
setErr := <-errc setErr := <-errc
return multierr.New(setErr, toErr) return errors.Join(setErr, toErr)
} }

Loading…
Cancel
Save