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