From 70723d3b517061909ae1ccc419bb791b42a35cc9 Mon Sep 17 00:00:00 2001 From: Mathias Fredriksson Date: Thu, 12 Jun 2025 13:50:50 +0300 Subject: [PATCH] fix(coderd): fix panics by always checking for non-nil request logger (#18228) --- coderd/inboxnotifications.go | 4 +++- coderd/provisionerjobs.go | 4 +++- coderd/workspaceagents.go | 12 +++++++++--- enterprise/coderd/provisionerdaemons.go | 4 +++- 4 files changed, 18 insertions(+), 6 deletions(-) diff --git a/coderd/inboxnotifications.go b/coderd/inboxnotifications.go index bc357bf2e3..4bb3f9ec95 100644 --- a/coderd/inboxnotifications.go +++ b/coderd/inboxnotifications.go @@ -221,7 +221,9 @@ func (api *API) watchInboxNotifications(rw http.ResponseWriter, r *http.Request) defer encoder.Close(websocket.StatusNormalClosure) // Log the request immediately instead of after it completes. - loggermw.RequestLoggerFromContext(ctx).WriteLog(ctx, http.StatusAccepted) + if rl := loggermw.RequestLoggerFromContext(ctx); rl != nil { + rl.WriteLog(ctx, http.StatusAccepted) + } for { select { diff --git a/coderd/provisionerjobs.go b/coderd/provisionerjobs.go index 5a8a0a5126..800b2916ef 100644 --- a/coderd/provisionerjobs.go +++ b/coderd/provisionerjobs.go @@ -557,7 +557,9 @@ func (f *logFollower) follow() { } // Log the request immediately instead of after it completes. - loggermw.RequestLoggerFromContext(f.ctx).WriteLog(f.ctx, http.StatusAccepted) + if rl := loggermw.RequestLoggerFromContext(f.ctx); rl != nil { + rl.WriteLog(f.ctx, http.StatusAccepted) + } // no need to wait if the job is done if f.complete { diff --git a/coderd/workspaceagents.go b/coderd/workspaceagents.go index 6b25fcbcfe..ed3f554a89 100644 --- a/coderd/workspaceagents.go +++ b/coderd/workspaceagents.go @@ -578,7 +578,9 @@ func (api *API) workspaceAgentLogs(rw http.ResponseWriter, r *http.Request) { defer t.Stop() // Log the request immediately instead of after it completes. - loggermw.RequestLoggerFromContext(ctx).WriteLog(ctx, http.StatusAccepted) + if rl := loggermw.RequestLoggerFromContext(ctx); rl != nil { + rl.WriteLog(ctx, http.StatusAccepted) + } go func() { defer func() { @@ -1047,7 +1049,9 @@ func (api *API) derpMapUpdates(rw http.ResponseWriter, r *http.Request) { defer encoder.Close(websocket.StatusGoingAway) // Log the request immediately instead of after it completes. - loggermw.RequestLoggerFromContext(ctx).WriteLog(ctx, http.StatusAccepted) + if rl := loggermw.RequestLoggerFromContext(ctx); rl != nil { + rl.WriteLog(ctx, http.StatusAccepted) + } go func(ctx context.Context) { // TODO(mafredri): Is this too frequent? Use separate ping disconnect timeout? @@ -1501,7 +1505,9 @@ func (api *API) watchWorkspaceAgentMetadata( defer sendTicker.Stop() // Log the request immediately instead of after it completes. - loggermw.RequestLoggerFromContext(ctx).WriteLog(ctx, http.StatusAccepted) + if rl := loggermw.RequestLoggerFromContext(ctx); rl != nil { + rl.WriteLog(ctx, http.StatusAccepted) + } // Send initial metadata. sendMetadata() diff --git a/enterprise/coderd/provisionerdaemons.go b/enterprise/coderd/provisionerdaemons.go index 9039d2e97d..30f4ddd66d 100644 --- a/enterprise/coderd/provisionerdaemons.go +++ b/enterprise/coderd/provisionerdaemons.go @@ -384,7 +384,9 @@ func (api *API) provisionerDaemonServe(rw http.ResponseWriter, r *http.Request) }) // Log the request immediately instead of after it completes. - loggermw.RequestLoggerFromContext(ctx).WriteLog(ctx, http.StatusAccepted) + if rl := loggermw.RequestLoggerFromContext(ctx); rl != nil { + rl.WriteLog(ctx, http.StatusAccepted) + } err = server.Serve(ctx, session) srvCancel()