From a78786119dd171daaff7b9a8b4eee1935375c127 Mon Sep 17 00:00:00 2001 From: Kyle Carberry Date: Wed, 8 Mar 2023 21:12:20 -0600 Subject: [PATCH] chore: resolve race when running load tests with logs (#6523) See https://github.com/coder/coder/actions/runs/4370166746/jobs/7644793277 --- scaletest/agentconn/run.go | 5 +++-- scaletest/loadtestutil/syncwriter.go | 15 +++++++++++++-- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/scaletest/agentconn/run.go b/scaletest/agentconn/run.go index 02f9fc66a1..8e65a232ce 100644 --- a/scaletest/agentconn/run.go +++ b/scaletest/agentconn/run.go @@ -45,11 +45,12 @@ func NewRunner(client *codersdk.Client, cfg Config) *Runner { } // Run implements Runnable. -func (r *Runner) Run(ctx context.Context, _ string, logs io.Writer) error { +func (r *Runner) Run(ctx context.Context, _ string, w io.Writer) error { ctx, span := tracing.StartSpan(ctx) defer span.End() - logs = loadtestutil.NewSyncWriter(logs) + logs := loadtestutil.NewSyncWriter(w) + defer logs.Close() logger := slog.Make(sloghuman.Sink(logs)).Leveled(slog.LevelDebug) r.client.Logger = logger r.client.LogBodies = true diff --git a/scaletest/loadtestutil/syncwriter.go b/scaletest/loadtestutil/syncwriter.go index caeb362af9..f0b603ccb6 100644 --- a/scaletest/loadtestutil/syncwriter.go +++ b/scaletest/loadtestutil/syncwriter.go @@ -7,8 +7,9 @@ import ( // SyncWriter wraps an io.Writer in a sync.Mutex. type SyncWriter struct { - mut *sync.Mutex - w io.Writer + mut *sync.Mutex + w io.Writer + closed bool } func NewSyncWriter(w io.Writer) *SyncWriter { @@ -22,5 +23,15 @@ func NewSyncWriter(w io.Writer) *SyncWriter { func (sw *SyncWriter) Write(p []byte) (n int, err error) { sw.mut.Lock() defer sw.mut.Unlock() + if sw.closed { + return -1, io.ErrClosedPipe + } return sw.w.Write(p) } + +func (sw *SyncWriter) Close() error { + sw.mut.Lock() + defer sw.mut.Unlock() + sw.closed = true + return nil +}