[SR-Users] Dialogs not removed from memory, and occasionally persistent in DB as well

Øyvind Kolbu oyvind.kolbu at usit.uio.no
Tue Jan 17 13:41:46 CET 2012


Hi,

we use the dialog-module to keep track of concurrent calls, and then set
a treshold for simultanious calls. After we upgraded from 1.5 to 3.2, we've
been having a lot of dialogs which are stuck in both the database and
memory.

kamailio -V
version: kamailio 3.2.1 (i386/linux) 918035-dirty
flags: STATS: Off, USE_IPV6, USE_TCP, USE_TLS, TLS_HOOKS, USE_RAW_SOCKS,
DISABLE_NAGLE, USE_MCAST, DNS_IP_HACK, SHM_MEM, SHM_MMAP, PKG_MALLOC,
DBG_QM_MALLOC, USE_FUTEX, FAST_LOCK-ADAPTIVE_WAIT, USE_DNS_CACHE,
USE_DNS_FAILOVER, USE_NAPTR, USE_DST_BLACKLIST, HAVE_RESOLV_RES
ADAPTIVE_WAIT_LOOPS=1024, MAX_RECV_BUFFER_SIZE 262144, MAX_LISTEN 16,
MAX_URI_SIZE 1024, BUF_SIZE 65535, DEFAULT PKG_SIZE 4MB
poll method support: poll, epoll_lt, epoll_et, sigio_rt, select.
id: 918035 -dirty
compiled on 10:00:10 Dec 20 2011 with gcc 4.1.2

Our configuration:

modparam("dialog", "dlg_flag", 3)
modparam("dialog", "default_timeout", 21600)
modparam("dialog", "dlg_match_mode", 1)
modparam("dialog", "db_url", VOIP_DATA4)
modparam("dialog", "db_mode", 1)
#!ifdef VOIP1
modparam("dialog", "table_name", "dialog1")
modparam("dialog", "vars_table_name", "dialog_vars1")
#!endif
#!ifdef VOIP2
modparam("dialog", "table_name", "dialog2")
modparam("dialog", "vars_table_name", "dialog_vars2")
#!endif
modparam("dialog", "profiles_with_value", "busy")

To Kamailio instances, voip1 and voip2, share the same config, but define VOIP1
and VOIP2, respectively.

Then in the main route:

        if !allow_trusted() {
                route(AUTH);
        }

        if (is_method("INVITE")) {
            setflag(3);
            dlg_manage();

            if ($avp(s:f_uid) != $null) {
                set_dlg_profile("busy","$avp(s:f_uid)");
                get_profile_size("busy", "$avp(s:f_uid)", "$var(dlg_busy)");
                xlog("L_INFO", "BUSY: f_uid: $avp(s:f_uid), dlg_busy: $var(dlg_busy)\n");
            }
        }

$avp(s:f_uid) is set in route(AUTH), so it will catch calls originating from one of
our users.

Then later in the callforward route:

        # Testing dialog
        $var(dlg_busy) = 0;
        $var(dlg_busy1) = 0;
        $var(dlg_busy2) = 0;
#!ifdef VOIP1
        get_profile_size("busy", "$rU", "$var(dlg_busy1)");
        sql_query("data4","select id from dialog2 where caller_contact like 'sip:$rU@%' or callee_contact like 'sip:$rU@%'", "dialog");
        $var(dlg_busy2) = $dbr(dialog=>rows);
#!endif
#!ifdef VOIP2
        get_profile_size("busy", "$rU", "$var(dlg_busy2)");
        sql_query("data4","select id from dialog1 where caller_contact like 'sip:$rU@%' or callee_contact like 'sip:$rU@%'", "dialog");
        $var(dlg_busy1) = $dbr(dialog=>rows);
#!endif
        sql_result_free("dialog");
        $var(dlg_busy) = $var(dlg_busy1) + $var(dlg_busy2);

And then check if $var(dlg_busy) is above a users treshold.

Finally when routing to a local user we mark it as busy:

        set_dlg_profile("busy","$rU");

As of writing I have 5 entries in the dialog1-table, all valid, but:

    # kamctl  fifo dlg_list | grep -c "^dialog"
    18
    # kamctl  fifo dlg_list | grep state | sort | uniq -c
         13         state:: 1
          5         state:: 4

on the other hand in the busy profile, which is the one we use:

    # kamctl  fifo profile_list_dlgs busy | grep -c "^dialog"
    11
    # kamctl  fifo profile_list_dlgs busy | grep state | sort | uniq -c
          6         state:: 1
          5         state:: 4

It seems as this happens when, for some reason, kamailio is trying to parse duplicate INVITEs.

From the logs:

# grep "^Jan 17" /var/log/messages | grep BUSY | grep -v "dlg_busy: 1" | cut -d\  -f8- |sort | uniq -c
      1 BUSY: f_uid: 2367449, dlg_busy: 2
      3 BUSY: f_uid: 2367453, dlg_busy: 2
      1 BUSY: f_uid: 2367453, dlg_busy: 3
      1 BUSY: f_uid: 2367453, dlg_busy: 4
      1 BUSY: f_uid: 2574912, dlg_busy: 2
      1 BUSY: f_uid: 2582270, dlg_busy: 2
      1 BUSY: f_uid: ahmedma, dlg_busy: 2
      1 BUSY: f_uid: josephim, dlg_busy: 2
      1 BUSY: f_uid: perla, dlg_busy: 2
      1 BUSY: f_uid: rosalinm, dlg_busy: 2
      1 BUSY: f_uid: suresha, dlg_busy: 2
      1 BUSY: f_uid: sveinb, dlg_busy: 2

I've full debugging logs available, if needed.

-- 
Øyvind Kolbu
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 196 bytes
Desc: not available
URL: <http://lists.sip-router.org/pipermail/sr-users/attachments/20120117/a2004cbe/attachment.pgp>


More information about the sr-users mailing list