Retry-After Header Calculation
You can control how the Oracle Communications Session Border Controller calculates the value for Retry-Header when rejecting calls.
When CPU usage reaches the configured load-limit (per thread) or syscpu-load-limit, (system-wide), the SBC starts rejecting calls. It send a 503 Service Unavailable response that includes a Retry-After header.
By default, the SBC uses a static calculation to set the Retry-After value, multiplying the current rejection rate (divided by ten) by the configured reject-interval (thread-level) or syscpu-reject-interval (system-level). However, this may result in identical Retry-After values for a surge of calls. Retrying all of the calls at the same time risks further overloading the system.
Instead, you can enable the retry-after-enhancement parameter to use a randomized calculation. With this enabled, the SBC randomly selects a Retry-After value from a dynamic range, which is determined by the current rejection rate and the configured reject-interval (thread-level) or syscpu-reject-interval (system-level).
The randomized calculation determines which range to use based on 10% rejection rate increments. When the rejection rate is low, the minimum Retry-After value will also be low, and the range of possible Retry-After values will be small. This allows calls to be retried quickly when the system is operating well.
As the rejection rate increases, the minimum Retry-After value and the size of the range also increase exponentially. Using higher Retry-After times under heavy load helps give the system a chance to recover. Choosing from a broader range of values distributes retry attempts over a longer period of time, preventing a surge of retries from further overloading the system.
Because reject-interval (or syscpu-reject-interval) acts as a multiplier for the range calculation, increasing it will also cause the minimum Retry-After value and the size of the range to increase.
Choosing a Reject Interval
- When retry-after-enhancement is enabled, use a reject interval of 2 to 7.
For example, when the rejection rate is 100%, the minimum value for the range roughly corresponds to the number set for the reject interval, multiplied by 100:
- If reject-interval or syscpu-reject-interval is 2, a different Retry-After value between 214 and 282 seconds is selected at random for each message.
- If reject-interval or syscpu-reject-interval is 7, a different Retry-After value between 724 and 962 seconds is selected at random for each message.
- When retry-after-enhancement is disabled, use a reject interval of 30 to 90.
For example, when the rejection rate is 100%:
- If reject-interval or syscpu-reject-interval is 30, the calculation is 100 / 10 x 30 = 300
- If reject-interval or syscpu-reject-interval is 90, the calculation is 100 / 10 x 90 = 900