From a368230afab3a64517be462fe49e01210babd7ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sybren=20A=2E=20St=C3=BCvel?= Date: Fri, 17 Jun 2022 17:13:32 +0200 Subject: [PATCH] Manager: fix race condition in logging of worker name/UUID Instead of updating the logger in the context, just store a new logger in a new sub-context. --- internal/manager/api_impl/worker_auth.go | 18 ++++++------------ internal/manager/api_impl/zerolog.go | 3 +-- 2 files changed, 7 insertions(+), 14 deletions(-) diff --git a/internal/manager/api_impl/worker_auth.go b/internal/manager/api_impl/worker_auth.go index 4dffaf09..f5e59634 100644 --- a/internal/manager/api_impl/worker_auth.go +++ b/internal/manager/api_impl/worker_auth.go @@ -9,7 +9,6 @@ import ( oapi_middle "github.com/deepmap/oapi-codegen/pkg/middleware" "github.com/getkin/kin-openapi/openapi3filter" "github.com/labstack/echo/v4" - "github.com/rs/zerolog" "golang.org/x/crypto/bcrypt" "git.blender.org/flamenco/internal/manager/persistence" @@ -65,19 +64,14 @@ func requestWorkerStore(e echo.Context, w *persistence.Worker) { req := e.Request() reqCtx := context.WithValue(req.Context(), workerKey, w) - // Take copies now to avoid race conditions later. - wUUID := w.UUID - wName := w.Name - // Update the logger in this context to reflect the Worker. - l := zerolog.Ctx(reqCtx) - l.UpdateContext(func(c zerolog.Context) zerolog.Context { - return c. - Str("wUUID", wUUID). - Str("wName", wName) - }) + logger := requestLogger(e).With(). + Str("wUUID", w.UUID). + Str("wName", w.Name). + Logger() - e.SetRequest(req.WithContext(reqCtx)) + newCtx := logger.WithContext(reqCtx) + e.SetRequest(req.WithContext(newCtx)) } // requestWorker returns the Worker associated with this HTTP request, or nil if there is none. diff --git a/internal/manager/api_impl/zerolog.go b/internal/manager/api_impl/zerolog.go index 6cf055bd..e40741cc 100644 --- a/internal/manager/api_impl/zerolog.go +++ b/internal/manager/api_impl/zerolog.go @@ -5,10 +5,9 @@ package api_impl import ( "github.com/labstack/echo/v4" "github.com/rs/zerolog" - "github.com/rs/zerolog/log" ) func requestLogger(e echo.Context) zerolog.Logger { - logger := log.Ctx(e.Request().Context()) + logger := zerolog.Ctx(e.Request().Context()) return *logger }