From 321b2c7c236dbd7c2ac300d0c6fee8476bdafb89 Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Mon, 14 Feb 2022 14:24:22 +0100 Subject: [PATCH] :bug: Fix error handling on s3 delete-in-bulk operation --- backend/src/app/storage/s3.clj | 10 +++++++--- backend/src/app/worker.clj | 23 ++++++++++------------- 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/backend/src/app/storage/s3.clj b/backend/src/app/storage/s3.clj index 2d42277a7c..10c5710e06 100644 --- a/backend/src/app/storage/s3.clj +++ b/backend/src/app/storage/s3.clj @@ -33,6 +33,7 @@ software.amazon.awssdk.services.s3.model.GetObjectRequest software.amazon.awssdk.services.s3.model.ObjectIdentifier software.amazon.awssdk.services.s3.model.PutObjectRequest + software.amazon.awssdk.services.s3.model.S3Error ;; software.amazon.awssdk.services.s3.model.GetObjectResponse software.amazon.awssdk.services.s3.presigner.S3Presigner software.amazon.awssdk.services.s3.presigner.model.GetObjectPresignRequest @@ -231,6 +232,9 @@ ^DeleteObjectsRequest dor)] (when (.hasErrors ^DeleteObjectsResponse dres) (let [errors (seq (.errors ^DeleteObjectsResponse dres))] - (ex/raise :type :s3-error - :code :error-on-bulk-delete - :context errors))))) + (ex/raise :type :internal + :code :error-on-s3-bulk-delete + :s3-errors (mapv (fn [^S3Error error] + {:key (.key error) + :msg (.message error)}) + errors)))))) diff --git a/backend/src/app/worker.clj b/backend/src/app/worker.clj index 3bd8461fc5..976b15d30e 100644 --- a/backend/src/app/worker.clj +++ b/backend/src/app/worker.clj @@ -414,21 +414,18 @@ (defn- execute-scheduled-task [{:keys [executor pool] :as cfg} {:keys [id] :as task}] (letfn [(run-task [conn] - (try - (when (db/exec-one! conn [sql:lock-scheduled-task (d/name id)]) - (l/debug :action "execute scheduled task" :id id) - ((:fn task) task)) - (catch Throwable e - e))) + (when (db/exec-one! conn [sql:lock-scheduled-task (d/name id)]) + (l/debug :action "execute scheduled task" :id id) + ((:fn task) task))) (handle-task [] - (db/with-atomic [conn pool] - (let [result (run-task conn)] - (when (ex/exception? result) - (l/error :cause result - :hint "unhandled exception on scheduled task" - :id id)))))] - + (try + (db/with-atomic [conn pool] + (run-task conn)) + (catch Throwable cause + (l/error :hint "unhandled exception on scheduled task" + :task-id id + :cause cause))))] (try (px/run! executor handle-task) (finally