diff --git a/codersdk/workspaceagents.go b/codersdk/workspaceagents.go index 3acb52d474..f6c7fbdab6 100644 --- a/codersdk/workspaceagents.go +++ b/codersdk/workspaceagents.go @@ -436,7 +436,10 @@ func (tac *tailnetAPIConnector) dial() (proto.DRPCTailnetClient, error) { } return nil, err } - client, err := tailnet.NewDRPCClient(websocket.NetConn(tac.ctx, ws, websocket.MessageBinary)) + client, err := tailnet.NewDRPCClient( + websocket.NetConn(tac.ctx, ws, websocket.MessageBinary), + tac.logger, + ) if err != nil { tac.logger.Debug(tac.ctx, "failed to create DRPCClient", slog.Error(err)) _ = ws.Close(websocket.StatusInternalError, "") diff --git a/enterprise/wsproxy/wsproxysdk/wsproxysdk.go b/enterprise/wsproxy/wsproxysdk/wsproxysdk.go index e9303857aa..1163f7c435 100644 --- a/enterprise/wsproxy/wsproxysdk/wsproxysdk.go +++ b/enterprise/wsproxy/wsproxysdk/wsproxysdk.go @@ -458,7 +458,7 @@ func (c *Client) DialCoordinator(ctx context.Context) (agpl.MultiAgentConn, erro go httpapi.HeartbeatClose(ctx, logger, cancel, conn) nc := websocket.NetConn(ctx, conn, websocket.MessageBinary) - client, err := agpl.NewDRPCClient(nc) + client, err := agpl.NewDRPCClient(nc, logger) if err != nil { logger.Debug(ctx, "failed to create DRPCClient", slog.Error(err)) _ = conn.Close(websocket.StatusInternalError, "") @@ -488,7 +488,9 @@ func (c *Client) DialCoordinator(ctx context.Context) (agpl.MultiAgentConn, erro go func() { <-ctx.Done() - ma.Close() + _ = ma.Close() + _ = client.DRPCConn().Close() + <-client.DRPCConn().Closed() _ = conn.Close(websocket.StatusGoingAway, "closed") }() diff --git a/tailnet/client.go b/tailnet/client.go index d48f10c181..232e534799 100644 --- a/tailnet/client.go +++ b/tailnet/client.go @@ -1,19 +1,21 @@ package tailnet import ( - "io" + "context" "net" "github.com/hashicorp/yamux" "golang.org/x/xerrors" + "cdr.dev/slog" "github.com/coder/coder/v2/codersdk/drpc" "github.com/coder/coder/v2/tailnet/proto" ) -func NewDRPCClient(conn net.Conn) (proto.DRPCTailnetClient, error) { +func NewDRPCClient(conn net.Conn, logger slog.Logger) (proto.DRPCTailnetClient, error) { config := yamux.DefaultConfig() - config.LogOutput = io.Discard + config.LogOutput = nil + config.Logger = slog.Stdlib(context.Background(), logger, slog.LevelInfo) session, err := yamux.Client(conn, config) if err != nil { return nil, xerrors.Errorf("multiplex client: %w", err) diff --git a/tailnet/coordinator_test.go b/tailnet/coordinator_test.go index c3e1508b7d..ab38f91bd0 100644 --- a/tailnet/coordinator_test.go +++ b/tailnet/coordinator_test.go @@ -464,7 +464,7 @@ func TestRemoteCoordination(t *testing.T) { serveErr <- err }() - client, err := tailnet.NewDRPCClient(cC) + client, err := tailnet.NewDRPCClient(cC, logger) require.NoError(t, err) protocol, err := client.Coordinate(ctx) require.NoError(t, err) diff --git a/tailnet/service_test.go b/tailnet/service_test.go index bb5683afa0..e821734991 100644 --- a/tailnet/service_test.go +++ b/tailnet/service_test.go @@ -51,7 +51,7 @@ func TestClientService_ServeClient_V2(t *testing.T) { errCh <- err }() - client, err := tailnet.NewDRPCClient(c) + client, err := tailnet.NewDRPCClient(c, logger) require.NoError(t, err) // Coordinate