Skip to content
Open
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@

<!-- DurableTask Packages -->
<ItemGroup>
<PackageVersion Include="Microsoft.Azure.DurableTask.Core" Version="3.4.0" />
<PackageVersion Include="Microsoft.Azure.DurableTask.Core" Version="3.5.0" />
<PackageVersion Include="Microsoft.Azure.Functions.Worker.Extensions.DurableTask" Version="1.2.2" />
</ItemGroup>

Expand Down
3 changes: 2 additions & 1 deletion src/Abstractions/DurableTaskCoreExceptionsExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ static class DurableTaskCoreExceptionsExtensions
failureDetails.ErrorType,
failureDetails.ErrorMessage,
failureDetails.StackTrace,
failureDetails.InnerFailure?.ToTaskFailureDetails());
failureDetails.InnerFailure?.ToTaskFailureDetails(),
failureDetails.Properties);
}
}
18 changes: 12 additions & 6 deletions src/Abstractions/TaskFailureDetails.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,8 @@
/// <param name="ErrorMessage">A summary description of the failure.</param>
/// <param name="StackTrace">The stack trace of the failure.</param>
/// <param name="InnerFailure">The inner cause of the task failure.</param>
public record TaskFailureDetails(string ErrorType, string ErrorMessage, string? StackTrace, TaskFailureDetails? InnerFailure)
/// <param name="Properties">Additional properties associated with the exception.</param>
public record TaskFailureDetails(string ErrorType, string ErrorMessage, string? StackTrace, TaskFailureDetails? InnerFailure, IDictionary<string, object?>? Properties)
{
Type? loadedExceptionType;

Expand Down Expand Up @@ -123,7 +124,8 @@
this.ErrorMessage,
this.StackTrace,
this.InnerFailure?.ToCoreFailureDetails(),
isNonRetriable: false);
isNonRetriable: false,
this.Properties);
}

/// <summary>
Expand All @@ -143,7 +145,8 @@
coreFailureDetails.ErrorType,
coreFailureDetails.ErrorMessage,
coreFailureDetails.StackTrace,
FromCoreFailureDetails(coreFailureDetails.InnerFailure));
FromCoreFailureDetails(coreFailureDetails.InnerFailure),
coreFailureDetails.Properties);
}

[return: NotNullIfNotNull(nameof(exception))]
Expand All @@ -160,14 +163,16 @@
coreEx.FailureDetails?.ErrorType ?? "(unknown)",
coreEx.FailureDetails?.ErrorMessage ?? "(unknown)",
coreEx.FailureDetails?.StackTrace,
FromCoreFailureDetailsRecursive(coreEx.FailureDetails?.InnerFailure) ?? FromExceptionRecursive(coreEx.InnerException));
FromCoreFailureDetailsRecursive(coreEx.FailureDetails?.InnerFailure) ?? FromExceptionRecursive(coreEx.InnerException),
coreEx.FailureDetails?.Properties ?? null);
}

return new TaskFailureDetails(
exception.GetType().ToString(),
exception.Message,
exception.StackTrace,
FromExceptionRecursive(exception.InnerException));
FromExceptionRecursive(exception.InnerException),
null);// might need to udpate this later

Check warning on line 175 in src/Abstractions/TaskFailureDetails.cs

View workflow job for this annotation

GitHub Actions / build

Check warning on line 175 in src/Abstractions/TaskFailureDetails.cs

View workflow job for this annotation

GitHub Actions / build

Copy link
Contributor Author

@nytian nytian Oct 2, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Question for the public static TaskFailureDetails FromException(Exception exception)

I checked all the reference, and it seems all the cases we called this is when the exception is a DTCore.OrchestrationExcep, which means it should already have properties included. Thus currently we don't need to extract properties here.

But I am not sure if there might be a case when the exception is not from dt.core and this return new ... is reached. If so, then we need to extract properties in this repo, which means I need to update OrchestrationContextWrapper class etc. But I didn't find a case like this from current code path. Let me know if there is any other thought on this.

}

static TaskFailureDetails? FromCoreFailureDetailsRecursive(CoreFailureDetails? coreFailureDetails)
Expand All @@ -181,6 +186,7 @@
coreFailureDetails.ErrorType,
coreFailureDetails.ErrorMessage,
coreFailureDetails.StackTrace,
FromCoreFailureDetailsRecursive(coreFailureDetails.InnerFailure));
FromCoreFailureDetailsRecursive(coreFailureDetails.InnerFailure),
coreFailureDetails.Properties);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ public static Core.OrchestrationStatus ConvertToCore(this OrchestrationRuntimeSt
}

TaskFailureDetails? inner = details.InnerFailure?.ConvertFromCore();
return new TaskFailureDetails(details.ErrorType, details.ErrorMessage, details.StackTrace, inner);
return new TaskFailureDetails(details.ErrorType, details.ErrorMessage, details.StackTrace, inner, details.Properties);
}

/// <summary>
Expand Down
Loading
Loading