Skip to content

Commit 41ae01d

Browse files
authored
fix: Improve closure of provisioner and agent tailnet dial (#6199)
1 parent 5df7872 commit 41ae01d

File tree

5 files changed

+17
-3
lines changed

5 files changed

+17
-3
lines changed

agent/apphealth_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ func TestAppHealth_NotSpamming(t *testing.T) {
158158
// Ensure we haven't made more than 2 (expected 1 + 1 for buffer) requests in the last second.
159159
// if there is a bug where we are spamming the healthcheck route this will catch it.
160160
time.Sleep(time.Second)
161-
require.LessOrEqual(t, *counter, int32(2))
161+
require.LessOrEqual(t, atomic.LoadInt32(counter), int32(2))
162162
}
163163

164164
func setupAppReporter(ctx context.Context, t *testing.T, apps []codersdk.WorkspaceApp, handlers []http.Handler) (agent.WorkspaceAgentApps, func()) {

coderd/coderdtest/coderdtest.go

+3
Original file line numberDiff line numberDiff line change
@@ -396,13 +396,16 @@ func NewProvisionerDaemon(t *testing.T, coderAPI *coderd.API) io.Closer {
396396
func NewExternalProvisionerDaemon(t *testing.T, client *codersdk.Client, org uuid.UUID, tags map[string]string) io.Closer {
397397
echoClient, echoServer := provisionersdk.MemTransportPipe()
398398
ctx, cancelFunc := context.WithCancel(context.Background())
399+
serveDone := make(chan struct{})
399400
t.Cleanup(func() {
400401
_ = echoClient.Close()
401402
_ = echoServer.Close()
402403
cancelFunc()
404+
<-serveDone
403405
})
404406
fs := afero.NewMemMapFs()
405407
go func() {
408+
defer close(serveDone)
406409
err := echo.Serve(ctx, fs, &provisionersdk.ServeOptions{
407410
Listener: echoServer,
408411
})

coderd/workspaceagents.go

+2
Original file line numberDiff line numberDiff line change
@@ -447,6 +447,8 @@ func (api *API) dialWorkspaceAgentTailnet(r *http.Request, agentID uuid.UUID) (*
447447
Logger: api.Logger.Named("tailnet"),
448448
})
449449
if err != nil {
450+
_ = clientConn.Close()
451+
_ = serverConn.Close()
450452
return nil, xerrors.Errorf("create tailnet conn: %w", err)
451453
}
452454

provisionerd/provisionerd.go

+4
Original file line numberDiff line numberDiff line change
@@ -520,5 +520,9 @@ func (p *Server) closeWithError(err error) error {
520520

521521
p.opts.Logger.Debug(context.Background(), "closing server with error", slog.Error(err))
522522

523+
if c, ok := p.clientValue.Load().(proto.DRPCProvisionerDaemonClient); ok {
524+
_ = c.DRPCConn().Close()
525+
}
526+
523527
return err
524528
}

provisionerd/provisionerd_test.go

+7-2
Original file line numberDiff line numberDiff line change
@@ -1097,7 +1097,6 @@ func createProvisionerDaemonClient(t *testing.T, server provisionerDaemonTestSer
10971097
}()
10981098
t.Cleanup(func() {
10991099
cancelFunc()
1100-
_ = serverPipe.Close()
11011100
<-closed
11021101
})
11031102
return proto.NewDRPCProvisionerDaemonClient(clientPipe)
@@ -1117,10 +1116,15 @@ func createProvisionerClient(t *testing.T, server provisionerTestServer) sdkprot
11171116
require.NoError(t, err)
11181117
srv := drpcserver.New(mux)
11191118
ctx, cancelFunc := context.WithCancel(context.Background())
1120-
t.Cleanup(cancelFunc)
1119+
closed := make(chan struct{})
11211120
go func() {
1121+
defer close(closed)
11221122
_ = srv.Serve(ctx, serverPipe)
11231123
}()
1124+
t.Cleanup(func() {
1125+
cancelFunc()
1126+
<-closed
1127+
})
11241128
return sdkproto.NewDRPCProvisionerClient(clientPipe)
11251129
}
11261130

@@ -1150,6 +1154,7 @@ type provisionerDaemonTestServer struct {
11501154
func (p *provisionerDaemonTestServer) AcquireJob(ctx context.Context, empty *proto.Empty) (*proto.AcquiredJob, error) {
11511155
return p.acquireJob(ctx, empty)
11521156
}
1157+
11531158
func (p *provisionerDaemonTestServer) CommitQuota(ctx context.Context, com *proto.CommitQuotaRequest) (*proto.CommitQuotaResponse, error) {
11541159
if p.commitQuota == nil {
11551160
return &proto.CommitQuotaResponse{

0 commit comments

Comments
 (0)