Map AggegateError and Error.cause to ApplicationFailureInfo #1734
+35
−1
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
What was changed
Change how
ensureApplicationFailureand theDefaultFailureConverterhandleError.causeandAggregateError.errors.Why?
ensureApplicationFailurewas not providingError.causetoApplicationFailure.createwhich meant that cause information was not being builtAggegateError.errorswasn't being handled in eitherensureApplicationFailureor theDefaultFailureConverter. It is not possible to map that directly to anIFailure, so that information is added to thenApplicationFailureInfo.detailsfield.Checklist
Closes [Feature Request] support AggregateError #1675
How was this tested:
I was using an activity that looks like this:
Previously, this was all the information available in the Temporal web site for the error:
{ "type": "workflowExecutionFailedEventAttributes", "failure": { "message": "Activity task failed", "cause": { "message": "Scrape workflow quits!", "source": "TypeScriptSDK", "stackTrace": "AggregateError: Scrape workflow quits!\n at getLastScrape (file:///Users/matthew/adology/adology-backend/packages/ad-scraper/src/activities/last-scrape.ts:16:9)", "applicationFailureInfo": { "type": "AggregateError" }, }, "activityFailureInfo": { "scheduledEventId": "5", "startedEventId": "6", "identity": "[email protected]", "activityType": { "name": "getLastScrape" }, "activityId": "1", "retryState": "RETRY_STATE_MAXIMUM_ATTEMPTS_REACHED", }, }, "retryState": "RETRY_STATE_RETRY_POLICY_NOT_SET", "workflowTaskCompletedEventId": "10", }After this PR, this is how the failed activity is reported:
{ "type": "workflowExecutionFailedEventAttributes", "failure": { "message": "Activity task failed", "cause": { "message": "Scrape workflow quits!", "source": "TypeScriptSDK", "stackTrace": "AggregateError: Scrape workflow quits!\n at getLastScrape (file:///Users/matthew/adology/adology-backend/packages/ad-scraper/src/activities/last-scrape.ts:16:9)", "cause": { "message": "Scrape workflow is a drama queen x2.", "source": "TypeScriptSDK", "stackTrace": "AggregateError: Scrape workflow is a drama queen x2.\n at getLastScrape (file:///Users/matthew/adology/adology-backend/packages/ad-scraper/src/activities/last-scrape.ts:31:14)", "applicationFailureInfo": { "details": { "payloads": [ [ { "source": "TypeScriptSDK", "message": "Scrape workflow is a drama queen", "stackTrace": "Error: Scrape workflow is a drama queen\n at getLastScrape (file:///Users/matthew/adology/adology-backend/packages/ad-scraper/src/activities/last-scrape.ts:33:11)" }, { "source": "TypeScriptSDK", "message": "Did I mention, scrape workflow is a drama queen?", "stackTrace": "Error: Did I mention, scrape workflow is a drama queen?\n at getLastScrape (file:///Users/matthew/adology/adology-backend/packages/ad-scraper/src/activities/last-scrape.ts:34:11)" } ] ] } } }, "applicationFailureInfo": { "type": "AggregateError", "details": { "payloads": [ { "message": "Analyze workflow gets all the love.", "type": "Error", "stack": "Error: Analyze workflow gets all the love.\n at getLastScrape (file:///Users/matthew/adology/adology-backend/packages/ad-scraper/src/activities/last-scrape.ts:18:7)", "cause": { "message": "Analyze workflow is the money machine.", "type": "Error", "stack": "Error: Analyze workflow is the money machine.\n at getLastScrape (file:///Users/matthew/adology/adology-backend/packages/ad-scraper/src/activities/last-scrape.ts:19:16)" } }, { "message": "Acquire workflow gets all the praise.", "type": "AggregateError", "stack": "AggregateError: Acquire workflow gets all the praise.\n at getLastScrape (file:///Users/matthew/adology/adology-backend/packages/ad-scraper/src/activities/last-scrape.ts:21:7)", "details": [ { "message": "Everyone knows acquire does the hard work", "type": "Error", "stack": "Error: Everyone knows acquire does the hard work\n at getLastScrape (file:///Users/matthew/adology/adology-backend/packages/ad-scraper/src/activities/last-scrape.ts:23:11)" }, { "message": "Everyone can see what acquire does", "type": "Error", "stack": "Error: Everyone can see what acquire does\n at getLastScrape (file:///Users/matthew/adology/adology-backend/packages/ad-scraper/src/activities/last-scrape.ts:24:11)" } ] } ] } } }, "activityFailureInfo": { "scheduledEventId": "5", "startedEventId": "6", "identity": "[email protected]", "activityType": { "name": "getLastScrape" }, "activityId": "1", "retryState": "RETRY_STATE_MAXIMUM_ATTEMPTS_REACHED" } }, "retryState": "RETRY_STATE_RETRY_POLICY_NOT_SET", "workflowTaskCompletedEventId": "10" }