in src/main/java/com/uber/cadence/internal/sync/WorkflowThreadImpl.java [79:141]
public void run() {
thread = Thread.currentThread();
originalName = thread.getName();
thread.setName(name);
DeterministicRunnerImpl.setCurrentThreadInternal(WorkflowThreadImpl.this);
decisionContext.getWorkflowId();
MDC.put(LoggerTag.WORKFLOW_ID, decisionContext.getWorkflowId());
MDC.put(LoggerTag.WORKFLOW_TYPE, decisionContext.getWorkflowType().getName());
MDC.put(LoggerTag.RUN_ID, decisionContext.getRunId());
MDC.put(LoggerTag.TASK_LIST, decisionContext.getTaskList());
MDC.put(LoggerTag.DOMAIN, decisionContext.getDomain());
// Repopulate the context(s)
ContextThreadLocal.setContextPropagators(this.contextPropagators);
ContextThreadLocal.propagateContextToCurrentThread(this.propagatedContexts);
try {
// initialYield blocks thread until the first runUntilBlocked is called.
// Otherwise r starts executing without control of the sync.
threadContext.initialYield();
cancellationScope.run();
} catch (DestroyWorkflowThreadError e) {
if (!threadContext.isDestroyRequested()) {
threadContext.setUnhandledException(e);
}
} catch (Error e) {
// Error aborts decision, not fails the workflow.
if (log.isErrorEnabled() && !root) {
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw, true);
e.printStackTrace(pw);
String stackTrace = sw.getBuffer().toString();
log.error(
String.format("Workflow thread \"%s\" run failed with Error:\n%s", name, stackTrace));
}
threadContext.setUnhandledException(e);
} catch (CancellationException e) {
if (!isCancelRequested()) {
threadContext.setUnhandledException(e);
}
if (log.isDebugEnabled()) {
log.debug(String.format("Workflow thread \"%s\" run cancelled", name));
}
} catch (Throwable e) {
if (log.isWarnEnabled() && !root) {
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw, true);
e.printStackTrace(pw);
String stackTrace = sw.getBuffer().toString();
log.warn(
String.format(
"Workflow thread \"%s\" run failed with unhandled exception:\n%s",
name, stackTrace));
}
threadContext.setUnhandledException(e);
} finally {
DeterministicRunnerImpl.setCurrentThreadInternal(null);
threadContext.setStatus(Status.DONE);
thread.setName(originalName);
thread = null;
MDC.clear();
}
}