Close

Azure Function Exponential Retry

What’s the default retry interval for a Http action in a logic app? How do I specify an exponential retry interval? I performed a little experiment in Azure to find the answers. 

First I created a Http triggered Azure function. The function gets the name node of the request body using data.name instead of data?name. Using data.name, I simply assume the name node is always present. Bad coding, but fit for my case. Next I created a logic app with a Http action calling the function. To enforce a Http 500 exception, I simply trigger the logic app without passing a message body. The Http 500 in turn, results in a retry which I’m after. Note that the retry interval must be specified in ISO8601 format, which is like: PTxxxH/M/S.

Here are the results:

Default retry:

This policy sends up to four retries at exponentially increasing intervals, which scale by 7.5 seconds but are capped between 5 and 45 seconds.

  • Run 09:04:17
  • Retry 09:04:17
  • Retry 09:04:23
  • Retry 09:04:34
  • Retry 09:05:01

Retry 5 times, interval=5S, min interval=5S, max interval=2M

  • Run 09:11:15
  • Retry 09:11:15
  • Retry 09:11:20
  • Retry 09:11:31
  • Retry 09:11:45
  • Retry 09:12:14

Retry 8 times, interval 10S, min interval 5S, max interval 2M

  • Run 09:16:35
  • Retry 09:16:35
  • Retry 09:16:40
  • Retry 09:16:59
  • Retry 09:17:25
  • Retry 09:18:19
  • Retry 09:20:19
  • Retry 09:22:19
  • Retry 09:24:19

Retry 5 times, interval=1M, min interval=30S, max interval=3M

  • Run 09:27:49
  • Retry 09:27:49
  • Retry 09:28:22
  • Retry 09:29:43
  • Retry 09:32:44
  • Retry 09:35:44

Resume:

  • The first retry occurs immediately (both for exponential retry interval and fixed retry interval).
  • The min interval must be between 00:00:05 and the interval specified.
  • The second retry occurs between min interval and interval. It can be equal to min interval, but that doesn’t have to be the case.
  • The max interval is the max retry interval. The retries don’t have to be capped before the max interval (as the default interval states).