Skip to content

UX for httpStatusCodes misleading and feature itself does not work as expected. #9538

Description

@asos-martinsmith

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

{
    "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.

Image

Environment

N/A

Additional context

No response

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    PortalThis issue resides in PortalbugSomething isn't workingpriority:mediumIssues to address in current sprint

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions