[sr-dev] Distinguish between local 408 generated after "fr_inv_timer" and "fr_timer"

Iñaki Baz Castillo ibc at aliax.net
Thu Mar 25 13:44:32 CET 2010


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 at aliax.net>



More information about the sr-dev mailing list