[SR-Users] RPC command dlg.list (for large amounts of dialogs)

Alex Balashov abalashov at evaristesys.com
Wed Aug 14 14:37:10 CEST 2013


Hello,

I am having trouble getting a large list of dialogs (800+) out of 
Kamailio using the dlg.list binrpc command.

I posted a while back that the list of dialog data was coming back 
truncated, and was told to increase:

     modparam("ctl", "binrpc_max_body_size", ...)
     modparam("ctl", "binrpc_struct_max_body_size", ...)

I did that, increasing the buffers to 20 MB.  Then, when I ran

    sercmd -s unixs:/tmp/kamailio_ctl dlg.list

I got:

    ERROR: reply too big

which clearly seemed to be on the client side now.

So, I looked in the sources for sercmd (now sercmd), in 
sip-router/utils/sercmd/sercmd.c, and found this:

	if ((ret=get_reply(s, reply_buf, MAX_REPLY_SIZE, cookie, &in_pkt,
					&msg_body))<0){
		switch(ret){
			case -1:
				goto error_read;
			case -2:
				goto error_parse;
			case -3:
				goto error_cookie;
			case -4:
				goto error_toobig;

So, I adjusted:

    #define MAX_REPLY_SIZE

to several megabytes as well, and tried the same with MAX_BODY_SIZE too.

Now, when I run the dlg.list command, it just hangs and never returns 
anything.  It was stuck there for well over 20 minutes.  An 'strace' on 
sercmd reveals that it receives what appears to be the full listing, but 
keeps wanting to read() more.  I don't have the exact output handy at 
the moment, but it looked like this:

    socket(PF_FILE, SOCK_STREAM, 0)         = 3
    connect(3, {sa_family=AF_FILE, path="/tmp/kamailio_ctl"}, 110) = 0
    writev(3, [{"\241\3\v%s\230\4", 7}, {"\221\tdlg.list\0", 11}], 2) = 18
    read(3, "\241\27\16\257%s\230\4\221Hhash:551:9521 state:4 "..., 
786432) = 340000
    read(3,
    [just hangs here]

Now, I would have assumed that perhaps there is more to read and the 
output is not returning due to some endless locking of the dialog 
profile table, which is constantly changing.  However, that cannot be 
the case because

    kamctl fifo dlg_list

works fine for any amount of dialogs, and always returns all the data 
near-instantly!

Any assistance is much appreciated!

-- Alex

[1] I don't have the output handy at the moment, but it was a read() value:

-- 
Alex Balashov - Principal
Evariste Systems LLC
235 E Ponce de Leon Ave
Suite 106
Decatur, GA 30030
United States
Tel: +1-678-954-0670
Web: http://www.evaristesys.com/, http://www.alexbalashov.com/



More information about the sr-users mailing list