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.
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

View File

@ -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
}