[OpenSIPS-Devel] [opensips] uac_registrant wrong hash sequence (#758)

Artem Chalkov notifications at github.com
Fri Jan 15 10:59:47 CET 2016


version: opensips 211 (x86_64/linux)
flags: STATS: On, DISABLE_NAGLE, USE_MCAST, SHM_MMAP, PKG_MALLOC, F_MALLOC, FAST_LOCK-ADAPTIVE_WAIT
ADAPTIVE_WAIT_LOOPS=1024, MAX_RECV_BUFFER_SIZE 262144, MAX_LISTEN 16, MAX_URI_SIZE 1024, BUF_SIZE 65535
poll method support: poll, epoll_lt, epoll_et, sigio_rt, select
git revision: 1535a27
mainc compiled on 12:21:10 Jan 12 2016 with gcc 482


I use uac_registrant with: 

modparam("uac_registrant", "hash_size", 4)
modparam("uac_registrant", "timer_interval", 16)

so i have 16 hash buckets and checking 1 hash bucket per second
As i see it, opensips must check hash buckets in sequence (1234 etc) on purpose of providing well-timed detecting of expired records, but opensips checks hashes in random sequence:

Jan 15 12:51:49 opensips-uac-test /usr/sbin/opensips[19953]: DBG:uac_registrant:timer_check: checking  [1452851509] on htable[2]
Jan 15 12:51:50 opensips-uac-test /usr/sbin/opensips[19946]: DBG:uac_registrant:timer_check: checking  [1452851510] on htable[9]
Jan 15 12:51:52 opensips-uac-test /usr/sbin/opensips[19981]: DBG:uac_registrant:timer_check: checking  [1452851512] on htable[6]
Jan 15 12:51:53 opensips-uac-test /usr/sbin/opensips[19981]: DBG:uac_registrant:timer_check: checking  [1452851513] on htable[7]
Jan 15 12:51:54 opensips-uac-test /usr/sbin/opensips[19946]: DBG:uac_registrant:timer_check: checking  [1452851514] on htable[10]
Jan 15 12:51:55 opensips-uac-test /usr/sbin/opensips[19980]: DBG:uac_registrant:timer_check: checking  [1452851515] on htable[3]
Jan 15 12:51:56 opensips-uac-test /usr/sbin/opensips[19956]: DBG:uac_registrant:timer_check: checking  [1452851516] on htable[0]
Jan 15 12:51:57 opensips-uac-test /usr/sbin/opensips[19947]: DBG:uac_registrant:timer_check: checking  [1452851517] on htable[5]
Jan 15 12:51:58 opensips-uac-test /usr/sbin/opensips[19948]: DBG:uac_registrant:timer_check: checking  [1452851518] on htable[5]
Jan 15 12:51:59 opensips-uac-test /usr/sbin/opensips[19982]: DBG:uac_registrant:timer_check: checking  [1452851519] on htable[6]
Jan 15 12:52:00 opensips-uac-test /usr/sbin/opensips[19947]: DBG:uac_registrant:timer_check: checking  [1452851520] on htable[6]
Jan 15 12:52:01 opensips-uac-test /usr/sbin/opensips[19944]: DBG:uac_registrant:timer_check: checking  [1452851521] on htable[2]
Jan 15 12:52:02 opensips-uac-test /usr/sbin/opensips[19978]: DBG:uac_registrant:timer_check: checking  [1452851522] on htable[2]
Jan 15 12:52:03 opensips-uac-test /usr/sbin/opensips[19979]: DBG:uac_registrant:timer_check: checking  [1452851523] on htable[0]
Jan 15 12:52:04 opensips-uac-test /usr/sbin/opensips[19946]: DBG:uac_registrant:timer_check: checking  [1452851524] on htable[11]
Jan 15 12:52:05 opensips-uac-test /usr/sbin/opensips[19947]: DBG:uac_registrant:timer_check: checking  [1452851525] on htable[7]
Jan 15 12:52:06 opensips-uac-test /usr/sbin/opensips[19979]: DBG:uac_registrant:timer_check: checking  [1452851526] on htable[1]
Jan 15 12:52:07 opensips-uac-test /usr/sbin/opensips[19947]: DBG:uac_registrant:timer_check: checking  [1452851527] on htable[8]
Jan 15 12:52:08 opensips-uac-test /usr/sbin/opensips[19947]: DBG:uac_registrant:timer_check: checking  [1452851528] on htable[9]
Jan 15 12:52:09 opensips-uac-test /usr/sbin/opensips[19948]: DBG:uac_registrant:timer_check: checking  [1452851529] on htable[6]
Jan 15 12:52:10 opensips-uac-test /usr/sbin/opensips[19951]: DBG:uac_registrant:timer_check: checking  [1452851530] on htable[1]
Jan 15 12:52:11 opensips-uac-test /usr/sbin/opensips[19946]: DBG:uac_registrant:timer_check: checking  [1452851531] on htable[12]
Jan 15 12:52:12 opensips-uac-test /usr/sbin/opensips[19982]: DBG:uac_registrant:timer_check: checking  [1452851532] on htable[7]
Jan 15 12:52:13 opensips-uac-test /usr/sbin/opensips[19946]: DBG:uac_registrant:timer_check: checking  [1452851533] on htable[13]
Jan 15 12:52:14 opensips-uac-test /usr/sbin/opensips[19948]: DBG:uac_registrant:timer_check: checking  [1452851534] on htable[7]
Jan 15 12:52:15 opensips-uac-test /usr/sbin/opensips[19948]: DBG:uac_registrant:timer_check: checking  [1452851535] on htable[8]
Jan 15 12:52:16 opensips-uac-test /usr/sbin/opensips[19982]: DBG:uac_registrant:timer_check: checking  [1452851536] on htable[8]
Jan 15 12:52:17 opensips-uac-test /usr/sbin/opensips[19947]: DBG:uac_registrant:timer_check: checking  [1452851537] on htable[10]
Jan 15 12:52:18 opensips-uac-test /usr/sbin/opensips[19947]: DBG:uac_registrant:timer_check: checking  [1452851538] on htable[11]
Jan 15 12:52:19 opensips-uac-test /usr/sbin/opensips[19947]: DBG:uac_registrant:timer_check: checking  [1452851539] on htable[12]
Jan 15 12:52:20 opensips-uac-test /usr/sbin/opensips[19946]: DBG:uac_registrant:timer_check: checking  [1452851540] on htable[14]
Jan 15 12:52:21 opensips-uac-test /usr/sbin/opensips[19947]: DBG:uac_registrant:timer_check: checking  [1452851541] on htable[13]
Jan 15 12:52:22 opensips-uac-test /usr/sbin/opensips[19946]: DBG:uac_registrant:timer_check: checking  [1452851542] on htable[15]
Jan 15 12:52:23 opensips-uac-test /usr/sbin/opensips[19947]: DBG:uac_registrant:timer_check: checking  [1452851543] on htable[14]
Jan 15 12:52:24 opensips-uac-test /usr/sbin/opensips[19978]: DBG:uac_registrant:timer_check: checking  [1452851544] on htable[3]
Jan 15 12:52:25 opensips-uac-test /usr/sbin/opensips[19946]: DBG:uac_registrant:timer_check: checking  [1452851545] on htable[0]
Jan 15 12:52:26 opensips-uac-test /usr/sbin/opensips[19946]: DBG:uac_registrant:timer_check: checking  [1452851546] on htable[1]
Jan 15 12:52:27 opensips-uac-test /usr/sbin/opensips[19982]: DBG:uac_registrant:timer_check: checking  [1452851547] on htable[9]
Jan 15 12:52:28 opensips-uac-test /usr/sbin/opensips[19979]: DBG:uac_registrant:timer_check: checking  [1452851548] on htable[2]
Jan 15 12:52:29 opensips-uac-test /usr/sbin/opensips[19946]: DBG:uac_registrant:timer_check: checking  [1452851549] on htable[2]
Jan 15 12:52:30 opensips-uac-test /usr/sbin/opensips[19976]: DBG:uac_registrant:timer_check: checking  [1452851550] on htable[0]
Jan 15 12:52:31 opensips-uac-test /usr/sbin/opensips[19976]: DBG:uac_registrant:timer_check: checking  [1452851551] on htable[1]
Jan 15 12:52:32 opensips-uac-test /usr/sbin/opensips[19976]: DBG:uac_registrant:timer_check: checking  [1452851552] on htable[2]
Jan 15 12:52:33 opensips-uac-test /usr/sbin/opensips[19946]: DBG:uac_registrant:timer_check: checking  [1452851553] on htable[3]
Jan 15 12:52:34 opensips-uac-test /usr/sbin/opensips[19946]: DBG:uac_registrant:timer_check: checking  [1452851554] on htable[4]
Jan 15 12:52:35 opensips-uac-test /usr/sbin/opensips[19977]: DBG:uac_registrant:timer_check: checking  [1452851555] on htable[2]
Jan 15 12:52:36 opensips-uac-test /usr/sbin/opensips[19947]: DBG:uac_registrant:timer_check: checking  [1452851556] on htable[15]
Jan 15 12:52:37 opensips-uac-test /usr/sbin/opensips[19947]: DBG:uac_registrant:timer_check: checking  [1452851557] on htable[0]
Jan 15 12:52:38 opensips-uac-test /usr/sbin/opensips[19947]: DBG:uac_registrant:timer_check: checking  [1452851558] on htable[1]
Jan 15 12:52:39 opensips-uac-test /usr/sbin/opensips[19949]: DBG:uac_registrant:timer_check: checking  [1452851559] on htable[2]
Jan 15 12:52:40 opensips-uac-test /usr/sbin/opensips[19982]: DBG:uac_registrant:timer_check: checking  [1452851560] on htable[10]
Jan 15 12:52:41 opensips-uac-test /usr/sbin/opensips[19980]: DBG:uac_registrant:timer_check: checking  [1452851561] on htable[4]
Jan 15 12:52:42 opensips-uac-test /usr/sbin/opensips[19946]: DBG:uac_registrant:timer_check: checking  [1452851562] on htable[5]
Jan 15 12:52:43 opensips-uac-test /usr/sbin/opensips[19975]: DBG:uac_registrant:timer_check: checking  [1452851563] on htable[2]
Jan 15 12:52:44 opensips-uac-test /usr/sbin/opensips[19945]: DBG:uac_registrant:timer_check: checking  [1452851564] on htable[8]
Jan 15 12:52:45 opensips-uac-test /usr/sbin/opensips[19944]: DBG:uac_registrant:timer_check: checking  [1452851565] on htable[3]
Jan 15 12:52:46 opensips-uac-test /usr/sbin/opensips[19945]: DBG:uac_registrant:timer_check: checking  [1452851566] on htable[9]
Jan 15 12:52:47 opensips-uac-test /usr/sbin/opensips[19944]: DBG:uac_registrant:timer_check: checking  [1452851567] on htable[4]
Jan 15 12:52:48 opensips-uac-test /usr/sbin/opensips[19945]: DBG:uac_registrant:timer_check: checking  [1452851568] on htable[10]

Because of that, registrants sometimes re-registering later then expires their previous registration

---
Reply to this email directly or view it on GitHub:
https://github.com/OpenSIPS/opensips/issues/758
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.opensips.org/pipermail/devel/attachments/20160115/f5cc3829/attachment.htm>


More information about the Devel mailing list