chore: resolve race when running load tests with logs (#6523)

See https://github.com/coder/coder/actions/runs/4370166746/jobs/7644793277
This commit is contained in:
Kyle Carberry 2023-03-08 21:12:20 -06:00 committed by GitHub
parent 5304b4e483
commit a78786119d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 16 additions and 4 deletions

View File

@ -45,11 +45,12 @@ func NewRunner(client *codersdk.Client, cfg Config) *Runner {
} }
// Run implements Runnable. // 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) ctx, span := tracing.StartSpan(ctx)
defer span.End() defer span.End()
logs = loadtestutil.NewSyncWriter(logs) logs := loadtestutil.NewSyncWriter(w)
defer logs.Close()
logger := slog.Make(sloghuman.Sink(logs)).Leveled(slog.LevelDebug) logger := slog.Make(sloghuman.Sink(logs)).Leveled(slog.LevelDebug)
r.client.Logger = logger r.client.Logger = logger
r.client.LogBodies = true r.client.LogBodies = true

View File

@ -7,8 +7,9 @@ import (
// SyncWriter wraps an io.Writer in a sync.Mutex. // SyncWriter wraps an io.Writer in a sync.Mutex.
type SyncWriter struct { type SyncWriter struct {
mut *sync.Mutex mut *sync.Mutex
w io.Writer w io.Writer
closed bool
} }
func NewSyncWriter(w io.Writer) *SyncWriter { 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) { func (sw *SyncWriter) Write(p []byte) (n int, err error) {
sw.mut.Lock() sw.mut.Lock()
defer sw.mut.Unlock() defer sw.mut.Unlock()
if sw.closed {
return -1, io.ErrClosedPipe
}
return sw.w.Write(p) return sw.w.Write(p)
} }
func (sw *SyncWriter) Close() error {
sw.mut.Lock()
defer sw.mut.Unlock()
sw.closed = true
return nil
}