Situation: Two Kamailio nodes syncing dialog profiles via DMQ

Observation: When a dialog timeout is encountered, about half of the time, the 
timeout is triggered on the peer node not handling the dialog preventing the 
call to be correctly terminated and also leaving entries in the dialog database 
which never get deleted.

https://kamailio.org/docs/modules/5.7.x/modules/dialog.html#dialog.p.enable_dmq

Makes clear, that only the node which is handling the dialog in question, can 
make changes not related to the dialog profiles. So when a dialog times out, it 
is this node which has to trigger the timeout, not any other one.

When looking at the source code, it is clear, that the 'lifetime' is 
transmitted via DMQ dialog message to the peer nodes, which in turn arm a 
timer. So it is obvious, this time will trigger, sometimes before the instance 
handling the dialog itself triggers that timer.

With some assistance of @oej I found a way to alter the JSON payload to extend 
the lifetime on the peer nodes:

```
route[DMQ_CAPTURE]
{
        if(is_method("KDMQ"))
        {
                if(has_body("application/json") && $fU == 'dialog')
                {
                        if (jansson_get("lifetime", $rb, "$var(lifetime)"))
                        {
                                $var(new_lifetime) = $var(lifetime) + 60; # Add 
60 seconds on DMQ peer to make sure it expires AFTER main node.
                                $var(newrb) = $rb;
                                jansson_set("integer", "lifetime", 
$var(new_lifetime), "$var(newrb)");
                                set_body("$var(newrb)","application/json");
                                msg_apply_changes();
                        }
                }
                dmq_handle_message();
                exit;
        }
}
```

Testing with this config fixed the issue of the timeout firing on a peer node 
instead of the node handling the dialog.

Issue is present in 5.5, 5.6 and after looking at the code, I assume also on 5.7

-Benoît

-- 
Reply to this email directly or view it on GitHub:
https://github.com/kamailio/kamailio/issues/3656
You are receiving this because you are subscribed to this thread.

Message ID: <kamailio/kamailio/issues/3...@github.com>
_______________________________________________
Kamailio (SER) - Development Mailing List
To unsubscribe send an email to sr-dev-le...@lists.kamailio.org

Reply via email to