UX for httpStatusCodes misleading and feature itself does not work as expected.
- Dominant language
- TypeScript
- Stars
- 111
- Forks
- 109
- Avg merge
- 1d 23h
- Merged PRs (30d)
- 20
Description
### Severity
P3 - Medium (Minor functionality affected)
### Describe the Bug with repro steps
I was glad to see the Http Status codes are now selectable when creating a retry policy but have the following feedback on the feature.
**The UX is missing information and is misleading**
It is not stated in the UX whether the selected "HTTP status codes" are _instead of_ the standard set of 408, 429, and 5xx or are _in addition_ to it.
It is left up to the user to experiment to find out for themselves.
The list of HTTP Status codes that you can select *includes* 408, 429 and all of the 5xx ones so my guess would be that this is _instead of_. This guess would be wrong.
I suggest the info tooltip be expanded to state this explicitly and additionally 408, 429 and all of the 5xx ones removed from the list (as selecting them will have no effect). I would also propose adding 499 to the list (thrown on stateless workflow timeout) as this is a use case I often want retried
**When the custom status code is encountered the specified retry policy is ignored and it degrades to default exponential**
I would expect the action below to retry 7 times not 4
```
"418_With_Custom_Status": {
"type": "Http",
"inputs": {
"uri": "https://httpbin.org/status/418",
"method": "GET",
"retryPolicy": {
"type": "exponential",
"count": 7,
"interval": "PT20S",
"minimumInterval": "PT5S",
"maximumInterval": "PT30S",
"httpStatusCodes": [
418
]
}
}
```
### What type of Logic App Is this happening in?
Standard (Portal)
### Are you experiencing a regression?
_No response_
### Which operating system are you using?
Windows
### Did you refer to the TSG before filing this issue? https://aka.ms/lauxtsg
Yes
### Workflow JSON
```json
{
"definition": {
"$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
"contentVersion": "1.0.0.0",
"actions": {
"418_No_Custom_Status": {
"type": "Http",
"inputs": {
"uri": "https://httpbin.org/status/418",
"method": "GET",
"retryPolicy": {
"type": "exponential",
"count": 7,
"interval": "PT20S",
"minimumInterval": "PT5S",
"maximumInterval": "PT30S"
}
},
"runAfter": {},
"runtimeConfiguration": {
"contentTransfer": {
"transferMode": "Chunked"
}
}
},
"418_With_Custom_Status": {
"type": "Http",
"inputs": {
"uri": "https://httpbin.org/status/418",
"method": "GET",
"retryPolicy": {
"type": "exponential",
"count": 7,
"interval": "PT20S",
"minimumInterval": "PT5S",
"maximumInterval": "PT30S",
"httpStatusCodes": [
418
]
}
},
"runAfter": {
"418_No_Custom_Status": [
"SUCCEEDED",
"TIMEDOUT",
"SKIPPED",
"FAILED"
]
},
"runtimeConfiguration": {
"contentTransfer": {
"transferMode": "Chunked"
}
}
},
"500_With_Custom_Status": {
"type": "Http",
"inputs": {
"uri": "https://httpbin.org/status/500",
"method": "GET",
"retryPolicy": {
"type": "exponential",
"count": 7,
"interval": "PT20S",
"minimumInterval": "PT5S",
"maximumInterval": "PT30S",
"httpStatusCodes": [
418
]
}
},
"runAfter": {
"418_With_Custom_Status": [
"SUCCEEDED",
"TIMEDOUT",
"SKIPPED",
"FAILED"
]
},
"runtimeConfiguration": {
"contentTransfer": {
"transferMode": "Chunked"
}
}
},
"500_No_Custom_Status": {
"type": "Http",
"inputs": {
"uri": "https://httpbin.org/status/500",
"method": "GET",
"retryPolicy": {
"type": "exponential",
"count": 7,
"interval": "PT20S",
"minimumInterval": "PT5S",
"maximumInterval": "PT30S"
}
},
"runAfter": {
"500_With_Custom_Status": [
"SUCCEEDED",
"TIMEDOUT",
"SKIPPED",
"FAILED"
]
},
"runtimeConfiguration": {
"contentTransfer": {
"transferMode": "Chunked"
}
}
}
},
"outputs": {},
"triggers": {
"When_an_HTTP_request_is_received": {
"type": "Request",
"kind": "Http"
}
}
},
"kind": "Stateful"
}
```
### Screenshots or Videos
From the below if it encounters exclusively 418 responses it retries 4x, if it encounters exclusively 500 responses it retries 7x. I have no idea what it does if it encounters a mix of these.
### Environment
N/A
### Additional context
_No response_
Contributor guide
No contributing guide indexed for this repository
Research direction
Start with the Standard Portal retry-policy UI and the workflow JSON's httpStatusCodes handling. Reproduce the supplied 418 and 500 workflows, compare custom and default retry counts, and inspect how the status-code selector explains its relationship to 408, 429, and 5xx. Done means the UX is explicit, irrelevant options are handled as intended, and the configured retry count is honored for custom statuses.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- react, typescript
- Domain
- frontend
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100