Hi, this is a common issue reported by other users. Imagine I do
failover between two gateways based on request timeout:
------------------------------
failure_route[FAILURE_ROUTE_OUT] {
# Locally generated 408 due to transaction timeout:
if (t_local_replied("last") && $T_reply_code==408) {
xlog("L_ERROR", "_ERROR_ $T_reply_code local replied =>
failover\n");
... do failover ...
}
}
------------------------------
The above code runs when the gateway-1 doesn't reply at all so
"fr_timer" expires (let's say 5 seconds).
The problem is that such code also runs when no final response at all
is received from gateway-1 in "fr_inv_timer" (let's say 150 seconds).
This is, 408 is locallly generated even if the proxy has received
provisional responses for such transaction.
Main problem this originates is the fact that the list of gateways
could end without any of them giving a final reply, and when no more
gateways are available it's common to reply 500/503 to the client.
Two workarounds:
a) When no more gateways are available inspect if $T_reply_code==408
and then reply 408 rather than 500/503.
I don't like it as if no one gateways has replied a provisional
response in "fr_timer" then I have a *real* problem and I should reply
500/503.
b) Enable a flag(PROVISIONAL_RECEIVED) when a provisional response is
received and then reply 408/480 when no more gateways are available.
Anyhow, there should be (IMHO) a in-built way to determine if the 408
occurs after "fr_timer" or "fr_inv_timer". Do I miss something? do
you
consider this a real need?
Regards.
--
Iñaki Baz Castillo
<ibc(a)aliax.net>