[SR-Users] TM question

Daniel-Constantin Mierla miconda at gmail.com
Tue Sep 7 21:02:59 CEST 2010


  Hi Alex,

this warning is given when the transaction is created but no stateful 
reply or relay was done.

Cheers,
Daniel


On 9/7/10 6:41 PM, Alex Balashov wrote:
> Hi,
>
> I have a somewhat unusual log entry after some calls:
>
> Sep  3 09:12:23 kamgw01 /usr/local/sbin/kamailio[542]: WARNING: tm 
> [t_lookup.c:1551]: WARNING: script writer didn't release transaction
>
> These calls fail in that they are processed instantly, but no time is 
> ever given to receive a response from the upstream gateway.  For 
> instance, the above call's initial INVITE was received at 09:12:23, a 
> final request URI was resolved, and then this message, all in < 1 
> second.   Trace on upstream gateway shows that the initial request was 
> never received from Kamailio.
>
> There is one additional aspect to how these calls are being processed 
> in script that almost certainly has a bearing on this, though I don't 
> know what it is:
>
> They are handled through a gateway route route called 
> route[OUTBOUND-ROUTE-TRY] that is, under normal circumstances 
> reflecting its name, initially called from the request route, and 
> subsequently from a failure route meant to advance it.
>
> Normal operation mode is like this:
>
>    route {
>       ...
>
>       route(OUTBOUND-ROUTE-TRY);
>    }
>
>    route[OUTBOUND-ROUTE-TRY] {
>        if(dialog_count_of_vendor_gw < limit) {
>            t_on_failure("OUTBOUND-ROUTE-FAILURE");
>
>            if(!t_relay()) { sl_reply_error(); }
>
>
>            exit;
>        } else {
>           ...
>           # Advance index of AVP array to next gateway, etc.
>           #
>
>           if(!t_lookup_request())
>              t_newtran();
>
>           route(OUTBOUND-ROUTE-TRY);
>           exit;
>        }
>    }
>
>    ...
>
>    # Armed in OUTBOUND-ROUTE-TRY with t_on_failure().
>
>    failure_route[OUTBOUND-ROUTE-FAILURE] {
>       ...
>
>       # If we have more routes to retry, call
>       # OUTBOUND-ROUTE-TRY again.
>
>       route(OUTBOUND-ROUTE-TRY);
>    }
>
>
> However, what is happening to cause this error is a little different 
> from the usual scenario.  On the initial attempt, the dialog limit 
> check you see in OUTBOUND-ROUTE-TRY is failing, so the route adds a 
> new transaction and calls itself again once.
>
> Now, the reason I am creating a new transaction is because in certain 
> failure modes when a transaction was never created (like, if the call 
> also fails on the next attempt), it is otherwise not possible to send 
> a stateful failure reply to the originating endpoint from the failure 
> route, which is a requirement (one cannot issue stateless replies from 
> failure routes).  So, because this routine is called both from the 
> failure route and from the request route, I create a new transaction 
> in order to make it possible to send stateful replies (t_reply()) from 
> within this route regardless of the type of the parent route calling 
> it, whether it is failure route or request route.
>
> So, again, what is happening in the scenario in which I get the above 
> log message is:
>
>    1. INVITE is received
>    2. Master request route runs OUTBOUND-ROUTE-TRY request route
>    3. OUTBOUND-ROUTE-TRY checks gateway limit, finds it is exceeded
>    4. OUTBOUND-ROUTE-TRY checks request against existing transaction,
>       and if not found, creates a new one with t_newtran()
>    5. OUTBOUND-ROUTE-TRY calls itself again.
>    6. OUTBOUND-ROUTE-TRY succeeds this time, but evidently,
>       t_relay() fails with the above message, or above message appears
>       sometime before t_relay() is called.
>
> Any insight is appreciated!
>
> Thanks,
>

-- 
Daniel-Constantin Mierla
http://www.asipto.com




More information about the sr-users mailing list