This is an automated email from the ASF dual-hosted git repository. heneveld pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/brooklyn-server.git
commit 93dd3dd73bb9140c79f7402fbc7998169db77140 Author: Alex Heneveld <a...@cloudsoft.io> AuthorDate: Fri Feb 2 18:37:36 2024 +0000 remove log warn on explicit workflow fail step, simplifying code --- .../core/workflow/WorkflowErrorHandling.java | 47 ++++++++++++++++------ .../core/workflow/WorkflowExecutionContext.java | 21 ++-------- 2 files changed, 37 insertions(+), 31 deletions(-) diff --git a/core/src/main/java/org/apache/brooklyn/core/workflow/WorkflowErrorHandling.java b/core/src/main/java/org/apache/brooklyn/core/workflow/WorkflowErrorHandling.java index e93c30dd4d..c6f64edb68 100644 --- a/core/src/main/java/org/apache/brooklyn/core/workflow/WorkflowErrorHandling.java +++ b/core/src/main/java/org/apache/brooklyn/core/workflow/WorkflowErrorHandling.java @@ -37,6 +37,7 @@ import java.util.Collection; import java.util.List; import java.util.concurrent.Callable; import java.util.function.BiConsumer; +import java.util.function.Supplier; import static org.apache.brooklyn.core.workflow.WorkflowExecutionContext.*; @@ -241,15 +242,7 @@ public class WorkflowErrorHandling implements Callable<WorkflowErrorHandling.Wor } } catch (Exception e2) { - if (Exceptions.getCausalChain(e2).stream().anyMatch(e3 -> e3== error)) { - // is, or wraps, original error, don't need to log - } else if (e2 instanceof WorkflowFailException) { - log.debug("Workflow fail in step '"+stepTaskThrowingError.getDisplayName()+"'; new error -- "+Exceptions.collapseText(e2)+" -- replacing original error: "+Exceptions.collapseText(error)); - log.trace("Full trace of original error was: " + error, error); - } else { - logWarnOnExceptionOrDebugIfKnown(entity, e2, "Error in step '" + stepTaskThrowingError.getDisplayName() + "' error handler for -- " + Exceptions.collapseText(error) + " -- threw another error (rethrowing): " + Exceptions.collapseText(e2)); - log.debug("Full trace of original error was: " + error, error); - } + logExceptionWhileHandlingException(() -> "in step '"+stepTaskThrowingError.getDisplayName()+"'", entity, e2, error); throw Exceptions.propagate(e2); } finally { if (errorStepIfNested==null) currentStepInstance.getWorkflowExectionContext().lastErrorHandlerOutput = null; @@ -271,10 +264,38 @@ public class WorkflowErrorHandling implements Callable<WorkflowErrorHandling.Wor throw Exceptions.propagate(error); } - public static void logWarnOnExceptionOrDebugIfKnown(Entity entity, Exception e, String msg) { - if (Exceptions.getFirstThrowableOfType(e, DanglingWorkflowException.class)!=null) { log.debug(msg); return; } - if (Entities.isUnmanagingOrNoLongerManaged(entity)) { log.debug(msg); return; } - log.warn(msg); + public static void logExceptionWhileHandlingException(Supplier<String> src, Entity entity, Exception newError, Throwable oldError) { + if (Exceptions.getCausalChain(newError).stream().anyMatch(e3 -> e3== oldError)) { + // is, or wraps, original error, don't need to log + +// } else if (Exceptions.isCausedByInterruptInAnyThread(e) && Exceptions.isCausedByInterruptInAnyThread(e2)) { +// // now either handled prior to this, or rethrown by the interruption +// // if both are interrupted we can drop the trace, and return original; +// log.debug("Error where error handler was interrupted, after main thread was also interrupted: " + e2); +// log.trace("Full trace of original error was: " + e, e); + + } else if (newError instanceof WorkflowFailException) { + log.debug("Workflow fail " + src.get() + "; throwing failure object -- "+Exceptions.collapseText(newError)+" -- and dropping original error: "+Exceptions.collapseText(oldError)); + log.trace("Full trace of original error was: " + oldError, oldError); + } else { + logWarnOnExceptionOrDebugIfKnown(entity, newError, "Error "+src.get()+"; error handler for -- " + Exceptions.collapseText(oldError) + " -- threw another error (rethrowing): " + Exceptions.collapseText(newError), oldError); + } + } + + public static void logWarnOnExceptionOrDebugIfKnown(Entity entity, Throwable e, String msg) { + logWarnOnExceptionOrDebugIfKnown(entity, e, msg, null); + } + public static void logWarnOnExceptionOrDebugIfKnown(Entity entity, Throwable e, String msg, Throwable optionalErrorForStackTrace) { + boolean logDebug = false; + logDebug |= (Exceptions.getFirstThrowableOfType(e, DanglingWorkflowException.class)!=null); + logDebug |= (Entities.isUnmanagingOrNoLongerManaged(entity)); + if (logDebug) { + log.debug(msg); + if (optionalErrorForStackTrace!=null) log.trace("Trace of error:", optionalErrorForStackTrace); + } else { + log.warn(msg); + if (optionalErrorForStackTrace != null) log.debug("Trace of error:", optionalErrorForStackTrace); + } } } \ No newline at end of file diff --git a/core/src/main/java/org/apache/brooklyn/core/workflow/WorkflowExecutionContext.java b/core/src/main/java/org/apache/brooklyn/core/workflow/WorkflowExecutionContext.java index 28e19b5ec3..87ea371b61 100644 --- a/core/src/main/java/org/apache/brooklyn/core/workflow/WorkflowExecutionContext.java +++ b/core/src/main/java/org/apache/brooklyn/core/workflow/WorkflowExecutionContext.java @@ -42,6 +42,7 @@ import org.apache.brooklyn.core.mgmt.BrooklynTaskTags; import org.apache.brooklyn.core.resolve.jackson.JsonPassThroughDeserializer; import org.apache.brooklyn.core.sensor.Sensors; import org.apache.brooklyn.core.typereg.RegisteredTypes; +import org.apache.brooklyn.core.workflow.steps.flow.FailWorkflowStep.WorkflowFailException; import org.apache.brooklyn.core.workflow.store.WorkflowRetentionAndExpiration; import org.apache.brooklyn.core.workflow.store.WorkflowStatePersistenceViaSensors; import org.apache.brooklyn.core.workflow.utils.WorkflowRetentionParser; @@ -1236,20 +1237,8 @@ public class WorkflowExecutionContext { } // else errorHandled remains false and will fail below } catch (Exception e2) { - Throwable e0 = e; - if (Exceptions.getCausalChain(e2).stream().anyMatch(e3 -> e3==e0)) { - // wraps/rethrows original, don't need to log, but do return the new one - e = e2; -// } else if (Exceptions.isCausedByInterruptInAnyThread(e) && Exceptions.isCausedByInterruptInAnyThread(e2)) { -// // now handled above -// // if both are interrupted we can drop the trace, and return original; -// log.debug("Error where error handler was interrupted, after main thread was also interrupted: " + e2); -// log.trace("Full trace of original error was: " + e, e); - } else { - log.warn("Error in workflow '" + getName() + "' around step " + workflowStepReference(currentStepIndex) + " error handler for -- " + Exceptions.collapseText(e) + " -- threw another error (rethrowing): " + Exceptions.collapseText(e2)); - log.debug("Full trace of original error was: " + e, e); - e = e2; - } + WorkflowErrorHandling.logExceptionWhileHandlingException(() -> "in '" + getName() + "' around step " + workflowStepReference(currentStepIndex), entity, e2, e); + e = e2; } } else { @@ -1570,10 +1559,6 @@ public class WorkflowExecutionContext { WorkflowErrorHandling.handleErrorAtStep(getEntity(), step, currentStepInstance, stepTaskThrowingError, onFinish, error, null); } - private void logWarnOnExceptionOrDebugIfKnown(Exception e, String msg) { - WorkflowErrorHandling.logWarnOnExceptionOrDebugIfKnown(getEntity(), e, msg); - } - private void moveToNextStep(String prefix, boolean inferredNext) { prefix = prefix + "; ";