diff --git a/internal/worker/state_asleep.go b/internal/worker/state_asleep.go index 03ecd0ed..feaf0970 100644 --- a/internal/worker/state_asleep.go +++ b/internal/worker/state_asleep.go @@ -6,8 +6,6 @@ import ( "context" "time" - "github.com/rs/zerolog/log" - "git.blender.org/flamenco/pkg/api" ) @@ -25,7 +23,7 @@ func (w *Worker) gotoStateAsleep(ctx context.Context) { func (w *Worker) runStateAsleep(ctx context.Context) { defer w.doneWg.Done() - logger := log.With().Str("status", string(w.state)).Logger() + logger := w.loggerWithStatus() logger.Info().Msg("sleeping") for { diff --git a/internal/worker/state_awake.go b/internal/worker/state_awake.go index 4ef7322f..1df44981 100644 --- a/internal/worker/state_awake.go +++ b/internal/worker/state_awake.go @@ -36,9 +36,9 @@ func (w *Worker) runStateAwake(ctx context.Context) { err := recover() if err != nil { w.SignOff(ctx) - log.Panic(). + logger := w.loggerWithStatus() + logger.Panic(). Interface("panic", err). - Str("workerStatus", string(w.state)). Msg("panic, so signed off and going to stop") } }() @@ -71,7 +71,7 @@ func (w *Worker) runStateAwake(ctx context.Context) { // fetchTasks periodically tries to fetch a task from the Manager, returning it when obtained. // Returns nil when a task could not be obtained and the period loop was cancelled. func (w *Worker) fetchTask(ctx context.Context) *api.AssignedTask { - logger := log.With().Str("status", string(w.state)).Logger() + logger := w.loggerWithStatus() // Initially don't wait at all. var wait time.Duration diff --git a/internal/worker/statemachine.go b/internal/worker/statemachine.go index added9a2..6416c780 100644 --- a/internal/worker/statemachine.go +++ b/internal/worker/statemachine.go @@ -5,6 +5,7 @@ package worker import ( "context" + "github.com/rs/zerolog" "github.com/rs/zerolog/log" "git.blender.org/flamenco/pkg/api" @@ -65,3 +66,13 @@ func (w *Worker) ackStateChange(ctx context.Context, state api.WorkerStatus) { return } } + +// loggerWithStatus returns a logger with its current status mentioned. +// This is a thread-safe way of getting the logger. +func (w *Worker) loggerWithStatus() zerolog.Logger { + w.stateMutex.Lock() + defer w.stateMutex.Unlock() + + logger := log.With().Str("workerStatus", string(w.state)).Logger() + return logger +}