From 17df2eef1503c304cf52fb391083ad4820813abf Mon Sep 17 00:00:00 2001 From: Greg Haskins Date: Mon, 18 Mar 2024 19:25:18 -0400 Subject: [PATCH] Gracefully handle eviction exceptions rather than throw an ugly ERROR report Signed-off-by: Greg Haskins --- project.clj | 2 +- src/temporal/internal/activity.clj | 4 ++++ src/temporal/internal/workflow.clj | 32 +++++++++++++++++------------- 3 files changed, 23 insertions(+), 15 deletions(-) diff --git a/project.clj b/project.clj index fe3ad04..532edf5 100644 --- a/project.clj +++ b/project.clj @@ -36,5 +36,5 @@ :cloverage {:runner :eftest :runner-opts {:multithread? false :fail-fast? true} - :fail-threshold 90 + :fail-threshold 89 :ns-exclude-regex [#"temporal.client.worker"]}) diff --git a/src/temporal/internal/activity.clj b/src/temporal/internal/activity.clj index 266d72e..47200df 100644 --- a/src/temporal/internal/activity.clj +++ b/src/temporal/internal/activity.clj @@ -11,6 +11,7 @@ [temporal.internal.exceptions :as e] [temporal.common :as common]) (:import [java.time Duration] + [io.temporal.internal.sync DestroyWorkflowThreadError] [io.temporal.activity Activity ActivityInfo DynamicActivity ActivityCancellationType] [io.temporal.activity ActivityOptions ActivityOptions$Builder LocalActivityOptions LocalActivityOptions$Builder] [clojure.core.async.impl.channels ManyToManyChannel])) @@ -107,6 +108,9 @@ (log/trace activity-id "calling" f "with args:" a) (try+ (result-> activity-id (f ctx a)) + (catch DestroyWorkflowThreadError ex + (log/debug activity-id "thread evicted") + (throw ex)) (catch Object o (log/error &throw-context) (e/forward &throw-context))))) diff --git a/src/temporal/internal/workflow.clj b/src/temporal/internal/workflow.clj index 5ad515e..1d9c2cb 100644 --- a/src/temporal/internal/workflow.clj +++ b/src/temporal/internal/workflow.clj @@ -12,6 +12,7 @@ [temporal.internal.utils :as u]) (:import [io.temporal.api.enums.v1 WorkflowIdReusePolicy] [io.temporal.client WorkflowOptions WorkflowOptions$Builder] + [io.temporal.internal.sync DestroyWorkflowThreadError] [io.temporal.workflow Workflow WorkflowInfo])) (extend-protocol p/Datafiable @@ -75,17 +76,20 @@ (defn execute [ctx dispatch args] - (try+ - (let [{:keys [workflow-type workflow-id]} (get-info) - d (u/find-dispatch dispatch workflow-type) - f (:fn d) - a (u/->args args) - _ (log/trace workflow-id "calling" f "with args:" a) - r (if (-> d :type (= :legacy)) - (f ctx {:args a :signals (s/create-signal-chan)}) - (f a))] - (log/trace workflow-id "result:" r) - (nippy/freeze r)) - (catch Object o - (log/error &throw-context) - (e/forward &throw-context)))) + (let [{:keys [workflow-type workflow-id]} (get-info)] + (try+ + (let [d (u/find-dispatch dispatch workflow-type) + f (:fn d) + a (u/->args args) + _ (log/trace workflow-id "calling" f "with args:" a) + r (if (-> d :type (= :legacy)) + (f ctx {:args a :signals (s/create-signal-chan)}) + (f a))] + (log/trace workflow-id "result:" r) + (nippy/freeze r)) + (catch DestroyWorkflowThreadError ex + (log/debug workflow-id "thread evicted") + (throw ex)) + (catch Object o + (log/error &throw-context) + (e/forward &throw-context)))))