From d6eacad494128e23ecf77bf8f75428414b34b32f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Budai?= Date: Tue, 29 Aug 2023 14:14:15 +0200 Subject: [PATCH] jobimpl-osbuild: report a failed job on panic MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Previously, the worker would happily report success if osbuild succeeded, there was no JobError, but the job actually panicked in the meantime. Let's fix this by adding a recovery mechanism. Signed-off-by: Ondřej Budai --- cmd/osbuild-worker/jobimpl-osbuild.go | 9 +++++++++ internal/worker/clienterrors/errors.go | 1 + 2 files changed, 10 insertions(+) diff --git a/cmd/osbuild-worker/jobimpl-osbuild.go b/cmd/osbuild-worker/jobimpl-osbuild.go index 02e8da7db..1f4fe9571 100644 --- a/cmd/osbuild-worker/jobimpl-osbuild.go +++ b/cmd/osbuild-worker/jobimpl-osbuild.go @@ -280,6 +280,15 @@ func (impl *OSBuildJobImpl) Run(job worker.Job) error { // In all cases it is necessary to report result back to osbuild-composer worker API. defer func() { + if r := recover(); r != nil { + logWithId.Errorf("Recovered from panic: %v", r) + + osbuildJobResult.JobError = clienterrors.WorkerClientError( + clienterrors.ErrorJobPanicked, + fmt.Sprintf("job panicked:\n%v\n\noriginal error:\n%v", r, osbuildJobResult.JobError), + nil, + ) + } validateResult(osbuildJobResult, job.Id().String()) err := job.Update(osbuildJobResult) diff --git a/internal/worker/clienterrors/errors.go b/internal/worker/clienterrors/errors.go index 1e5cd4a37..67beb9732 100644 --- a/internal/worker/clienterrors/errors.go +++ b/internal/worker/clienterrors/errors.go @@ -41,6 +41,7 @@ const ( ErrorOSTreeParamsInvalid ClientErrorCode = 34 ErrorOSTreeDependency ClientErrorCode = 35 ErrorRemoteFileResolution ClientErrorCode = 36 + ErrorJobPanicked ClientErrorCode = 37 ) type ClientErrorCode int