🐛 Fix error handling on s3 delete-in-bulk operation

This commit is contained in:
Andrey Antukh 2022-02-14 14:24:22 +01:00 committed by Andrés Moya
parent dee397615c
commit 321b2c7c23
2 changed files with 17 additions and 16 deletions

View file

@ -33,6 +33,7 @@
software.amazon.awssdk.services.s3.model.GetObjectRequest software.amazon.awssdk.services.s3.model.GetObjectRequest
software.amazon.awssdk.services.s3.model.ObjectIdentifier software.amazon.awssdk.services.s3.model.ObjectIdentifier
software.amazon.awssdk.services.s3.model.PutObjectRequest 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.model.GetObjectResponse
software.amazon.awssdk.services.s3.presigner.S3Presigner software.amazon.awssdk.services.s3.presigner.S3Presigner
software.amazon.awssdk.services.s3.presigner.model.GetObjectPresignRequest software.amazon.awssdk.services.s3.presigner.model.GetObjectPresignRequest
@ -231,6 +232,9 @@
^DeleteObjectsRequest dor)] ^DeleteObjectsRequest dor)]
(when (.hasErrors ^DeleteObjectsResponse dres) (when (.hasErrors ^DeleteObjectsResponse dres)
(let [errors (seq (.errors ^DeleteObjectsResponse dres))] (let [errors (seq (.errors ^DeleteObjectsResponse dres))]
(ex/raise :type :s3-error (ex/raise :type :internal
:code :error-on-bulk-delete :code :error-on-s3-bulk-delete
:context errors))))) :s3-errors (mapv (fn [^S3Error error]
{:key (.key error)
:msg (.message error)})
errors))))))

View file

@ -414,21 +414,18 @@
(defn- execute-scheduled-task (defn- execute-scheduled-task
[{:keys [executor pool] :as cfg} {:keys [id] :as task}] [{:keys [executor pool] :as cfg} {:keys [id] :as task}]
(letfn [(run-task [conn] (letfn [(run-task [conn]
(try
(when (db/exec-one! conn [sql:lock-scheduled-task (d/name id)]) (when (db/exec-one! conn [sql:lock-scheduled-task (d/name id)])
(l/debug :action "execute scheduled task" :id id) (l/debug :action "execute scheduled task" :id id)
((:fn task) task)) ((:fn task) task)))
(catch Throwable e
e)))
(handle-task [] (handle-task []
(try
(db/with-atomic [conn pool] (db/with-atomic [conn pool]
(let [result (run-task conn)] (run-task conn))
(when (ex/exception? result) (catch Throwable cause
(l/error :cause result (l/error :hint "unhandled exception on scheduled task"
:hint "unhandled exception on scheduled task" :task-id id
:id id)))))] :cause cause))))]
(try (try
(px/run! executor handle-task) (px/run! executor handle-task)
(finally (finally