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