[SR-Users] Dispatcher alg:7 not working accordingly

Daniel-Constantin Mierla miconda at gmail.com
Thu Jun 14 10:20:02 CEST 2012


Hello,

On 6/13/12 11:47 AM, SamyGo wrote:
> Hi again,
> Nice to read the comment from you. Yes it could be a case - but this 
> race condition will remain valid until I put some check on the 
> insertion and lock the resource if one user is using that table, I 
> forgot what they say in programming terms
>
> What do you suggest i do to avoid this since I may have customers with 
> SIP trunks and I'd have to apply concurrent call limits to them using 
> the same logic.

you can use lock functions from cfgutils to synchronize on a resource 
(like uid), should be better than locking an entire db table -- this 
will require that the updates will be done only from config, not by 
other applications.

Cheers,
Daniel
>
> Regards,
> Sammy.
>
>
> On Wed, Jun 13, 2012 at 1:23 PM, Daniel-Constantin Mierla 
> <miconda at gmail.com <mailto:miconda at gmail.com>> wrote:
>
>     Hello,
>
>
>     On 6/12/12 12:01 PM, SamyGo wrote:
>>     Thanks Sir,
>>     Doing a static or even a run-time mapping of same UID calls to
>>     destination server is what I thought about this type of case
>>     almost an year ago.
>>
>>     What I am thinking is : create a table for UID/Destination
>>     Mapping; for a unique UID see if there is any destination in that
>>     table. If it exists just jump to that server directly. If no
>>     UID/destination entry is found for that UID then invoke
>>     Dispatcher; select destination, make call to it, and store this
>>     in UID/destination map table !!
>>
>>     Let me know if there could be any improvement in this.
>
>     can be a solution, indeed. You may have a race if that user does
>     calls in parallel first time and different destinations are
>     selected -- not sure it is the case for you.
>
>     Cheers,
>     Daniel
>
>
>>
>>     Thanks
>>     Best Regards,
>>     Sammy G.
>>
>>     On Tue, Jun 12, 2012 at 2:43 PM, Daniel-Constantin Mierla
>>     <miconda at gmail.com <mailto:miconda at gmail.com>> wrote:
>>
>>         Hello,
>>
>>         if you are using integer UID, I would suggest you use modulo
>>         operation to select the destination address -- this will
>>         require config operations only.
>>
>>         Another option you can map an UID to a dispatcher set id
>>         (e.g., via mtree or htable) and then you can do the alg 8.
>>
>>         Cheers,
>>         Daniel
>>
>>
>>         On 6/7/12 1:37 PM, SamyGo wrote:
>>>         Hi again,
>>>         yes my scenario is quiet simple. I've  lots of users  and
>>>         groups of those users are defined by UIDs, one UID means 70
>>>         users of one client whereas other UID could've 3 users of
>>>         another client.
>>>         So what I am trying to implement here is that calls from one
>>>         same UID are always routed to exactly one same destination
>>>         server. That'll help in issues like call-parking,
>>>         call-pickup, conference calls etc.
>>>
>>>         I hope I've explained the scenario in simpler terms here.
>>>
>>>         Regards,
>>>         Sammy Go.
>>>
>>>
>>>         On Thu, Jun 7, 2012 at 4:20 PM, Daniel-Constantin Mierla
>>>         <miconda at gmail.com <mailto:miconda at gmail.com>> wrote:
>>>
>>>             Hello,
>>>
>>>             that hash function is intended for hashing alpha-numeric
>>>             usernames and has a fair distribution for such cases.
>>>
>>>             I don't think is good for hashing numbers, at the end of
>>>             a day, a number is already like a hash code. You can use
>>>             in the config file modulo operation to select a
>>>             particular destination based on a number.
>>>
>>>             Maybe if you explain what is your target to implement,
>>>             we can provide the right hints to do it.
>>>
>>>             Cheers,
>>>             Daniel
>>>
>>>
>>>             On 6/6/12 6:09 PM, SamyGo wrote:
>>>>             Sorry for late reply: this wasn't very helpful. I think
>>>>             Hashing algo code needs to get bit smarter. If there is
>>>>             any possibility can you please let me know. !
>>>>
>>>>
>>>>             On Mon, Jun 4, 2012 at 3:33 PM, Daniel-Constantin
>>>>             Mierla <miconda at gmail.com <mailto:miconda at gmail.com>>
>>>>             wrote:
>>>>
>>>>                 To make the life easier to spot the hash code in
>>>>                 such case, I just committed a small patch to print
>>>>                 it for alg 7:
>>>>
>>>>                 http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=83a558fbad700198a8667ef01f756269d7e2c310
>>>>
>>>>                 Should be easy to backport if other version is used.
>>>>
>>>>                 Cheers,
>>>>                 Daniel
>>>>
>>>>
>>>>                 On 6/4/12 12:23 PM, Carsten Bock wrote:
>>>>
>>>>                     It's hard to say, most likely not. You find the
>>>>                     used hash-function here:
>>>>
>>>>                      841 unsigned int ds_get_hash(str *x, str *y)
>>>>                     http://git.sip-router.org/cgi-bin/gitweb.cgi?p=sip-router;a=blob;f=modules_k/dispatcher/dispatch.c;h=ae0c51b122d34e29b3474957a64b24ff492cfcd5;hb=HEAD
>>>>
>>>>                     It was originally implemented to distribute
>>>>                     usernames to servers,
>>>>                     which worked fine.
>>>>
>>>>                     Carsten
>>>>
>>>>                     2012/6/4 SamyGo <govoiper at gmail.com
>>>>                     <mailto:govoiper at gmail.com>>:
>>>>
>>>>                         Thanks Sir,
>>>>
>>>>                         Thats what I expected. Do you think this
>>>>                         will change if I use only two
>>>>                         values with huge difference in each other,
>>>>                         lets say {26000,29000} ?
>>>>
>>>>                         Regards,
>>>>                         Sammy
>>>>
>>>>                         On Mon, Jun 4, 2012 at 3:05 PM, Carsten
>>>>                         Bock <carsten at ng-voice.com
>>>>                         <mailto:carsten at ng-voice.com>> wrote:
>>>>
>>>>                             Hi,
>>>>
>>>>                             this functionality uses a generic
>>>>                             "hash" function to generate an
>>>>                             Integer-Value of the PVAR and then
>>>>                             reduces this to the number hosts in
>>>>                             your destination set.
>>>>                             If you have only using two different
>>>>                             values of the PVAR and only two
>>>>                             hosts in the dispatcher list, it can
>>>>                             likely happen, that the same host
>>>>                             is choosen. You should try a wider
>>>>                             range of values for your PVAR...
>>>>                             (e.g. try 1000 different values), then
>>>>                             you should see a distribution.
>>>>
>>>>                             Carsten
>>>>
>>>>                             2012/6/4 SamyGo <govoiper at gmail.com
>>>>                             <mailto:govoiper at gmail.com>>:
>>>>
>>>>                                 Hi,
>>>>
>>>>                                 No, nothing at all. I haven't went
>>>>                                 too deep into debug logs but no
>>>>                                 internal
>>>>                                 error was appearing. Everything was
>>>>                                 as calm as ever and I only get one
>>>>                                 destination uri.
>>>>
>>>>                                 So maybe what I'm getting from your
>>>>                                 email is that , for this to work the
>>>>                                 way
>>>>                                 I expect is to have more unique and
>>>>                                 random values in my hash_pvar to get
>>>>                                 the
>>>>                                 required functionality.
>>>>
>>>>                                 Thanks once again,
>>>>                                 BR
>>>>                                 SG
>>>>
>>>>                                 On Mon, Jun 4, 2012 at 11:52 AM,
>>>>                                 Daniel-Constantin Mierla
>>>>                                 <miconda at gmail.com
>>>>                                 <mailto:miconda at gmail.com>> wrote:
>>>>
>>>>                                     Hello,
>>>>
>>>>                                     do you get any errors in the log?
>>>>
>>>>                                     Be aware that hash functions
>>>>                                     may return same code for
>>>>                                     different input
>>>>                                     values. A hash function is
>>>>                                     guaranteed to return same code
>>>>                                     for same
>>>>                                     input
>>>>                                     value, but there can be
>>>>                                     collisions of codes for
>>>>                                     different values.
>>>>
>>>>                                     Cheers,
>>>>                                     Daniel
>>>>
>>>>
>>>>                                     On 6/3/12 3:41 PM, SamyGo wrote:
>>>>
>>>>                                     Hello,
>>>>
>>>>                                     I'm having trouble using
>>>>                                     algorithm 7 in dispatcher
>>>>                                     module. Here is my
>>>>                                     kamailio version. The problem
>>>>                                     is that despite multiple dispatcher
>>>>                                     entries
>>>>                                     corresponding to one set all
>>>>                                     calls go only to only one
>>>>                                     destination.
>>>>
>>>>
>>>>                                     [root at control1 ~]# kamailio -V
>>>>                                     version: kamailio 3.2.3
>>>>                                     (x86_64/linux) 59f87e
>>>>                                     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: 59f87e
>>>>                                     compiled on 18:04:08 Apr 19
>>>>                                     2012 with gcc 4.1.2
>>>>                                     [root at control1 ~]#
>>>>
>>>>                                     Here is the dipacther module
>>>>                                     params.
>>>>
>>>>
>>>>
>>>>                                     # ------- Load-balancer params
>>>>                                     ------
>>>>                                     modparam("dispatcher",
>>>>                                     "db_url", DBURL)
>>>>                                     modparam("dispatcher",
>>>>                                     "table_name", "dispatcher")
>>>>                                     modparam("dispatcher",
>>>>                                     "setid_col", "setid")
>>>>                                     modparam("dispatcher",
>>>>                                     "destination_col", "destination")
>>>>                                     modparam("dispatcher",
>>>>                                     "force_dst", 1)
>>>>                                     modparam("dispatcher", "flags", 3)
>>>>                                     modparam("dispatcher",
>>>>                                     "dst_avp", "$avp(i:271)")
>>>>                                     modparam("dispatcher",
>>>>                                     "cnt_avp", "$avp(i:273)")
>>>>                                     modparam("dispatcher",
>>>>                                     "ds_ping_from",
>>>>                                     "sip:proxy at 109.XXX.2XX.XX")
>>>>                                     modparam("dispatcher",
>>>>                                     "ds_ping_interval",15)
>>>>                                     modparam("dispatcher",
>>>>                                     "ds_probing_mode", 1)
>>>>                                     modparam("dispatcher",
>>>>                                     "ds_ping_reply_codes",
>>>>                                     "class=2;code=403;code=404;code=484;class=3")
>>>>                                     modparam("dispatcher",
>>>>                                     "hash_pvar", "$avp(i:274)")
>>>>                                     modparam("dispatcher",
>>>>                                     "ds_hash_size", 9)
>>>>                                     modparam("dispatcher",
>>>>                                     "ds_hash_initexpire", 60)
>>>>
>>>>
>>>>
>>>>                                     Below is the function call
>>>>                                     based on avp(i:274)
>>>>
>>>>
>>>>
>>>>                                     avp_db_query("select uid from
>>>>                                     uid_did_map where accountcode =
>>>>                                     '$fU'","$avp(i:274)");
>>>>                                     xlog("L_INFO","$rm from $fu
>>>>                                     (IP:$si:$sp) ---------
>>>>                                     UID:'$avp(i:274)-----------'\n");
>>>>                                     ds_load_update();
>>>>                                     if(!ds_select_dst("1","7")) {
>>>>                                     sl_send_reply("500", "No
>>>>                                     destination
>>>>                                     available");
>>>>                                     xlog("route[MAIN] : $rm : No
>>>>                                     destinations
>>>>                                     available for $rd");
>>>>                                     exit;
>>>>                                             }
>>>>
>>>>
>>>>                                     I'm getting two different
>>>>                                     values for avp(i:274) {26,29}
>>>>                                     but the
>>>>                                     destination are not hashed on
>>>>                                     its base.
>>>>
>>>>                                     Please help.
>>>>
>>>>                                     Regards,
>>>>                                     Sammy G.
>>>>
>>>>
>>>>
>>>>                                     _______________________________________________
>>>>                                     SIP Express Router (SER) and
>>>>                                     Kamailio (OpenSER) - sr-users
>>>>                                     mailing list
>>>>                                     sr-users at lists.sip-router.org
>>>>                                     <mailto:sr-users at lists.sip-router.org>
>>>>                                     http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users
>>>>
>>>>
>>>>                                     --
>>>>                                     Daniel-Constantin Mierla -
>>>>                                     http://www.asipto.com
>>>>                                     http://twitter.com/#!/miconda
>>>>                                     <http://twitter.com/#%21/miconda>
>>>>                                     -
>>>>                                     http://www.linkedin.com/in/miconda
>>>>                                     Kamailio Advanced Training,
>>>>                                     Seattle, USA, Sep 23-26, 2012 -
>>>>                                     http://asipto.com/u/katu
>>>>                                     Kamailio Practical Workshop,
>>>>                                     Netherlands, Sep 10-12, 2012 -
>>>>                                     http://asipto.com/u/kpw
>>>>
>>>>
>>>>
>>>>
>>>>                                 _______________________________________________
>>>>                                 SIP Express Router (SER) and
>>>>                                 Kamailio (OpenSER) - sr-users
>>>>                                 mailing list
>>>>                                 sr-users at lists.sip-router.org
>>>>                                 <mailto:sr-users at lists.sip-router.org>
>>>>                                 http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users
>>>>
>>>>
>>>>
>>>>                             --
>>>>                             Carsten Bock
>>>>                             CEO (Geschäftsführer)
>>>>
>>>>                             ng-voice GmbH
>>>>                             Schomburgstr. 80
>>>>                             D-22767 Hamburg / Germany
>>>>
>>>>                             http://www.ng-voice.com
>>>>                             mailto:carsten at ng-voice.com
>>>>                             <mailto:carsten at ng-voice.com>
>>>>
>>>>                             Mobile +49 179 2021244
>>>>                             <tel:%2B49%20179%202021244>
>>>>                             Office +49 40 34927219
>>>>                             <tel:%2B49%2040%2034927219>
>>>>                             Fax +49 40 34927220
>>>>                             <tel:%2B49%2040%2034927220>
>>>>
>>>>                             Sitz der Gesellschaft: Hamburg
>>>>                             Registergericht: Amtsgericht Hamburg,
>>>>                             HRB 120189
>>>>                             Geschäftsführer: Carsten Bock
>>>>                             Ust-ID: DE279344284
>>>>
>>>>                             Hier finden Sie unsere
>>>>                             handelsrechtlichen Pflichtangaben:
>>>>                             http://www.ng-voice.com/imprint/
>>>>
>>>>                             _______________________________________________
>>>>                             SIP Express Router (SER) and Kamailio
>>>>                             (OpenSER) - sr-users mailing list
>>>>                             sr-users at lists.sip-router.org
>>>>                             <mailto:sr-users at lists.sip-router.org>
>>>>                             http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users
>>>>
>>>>
>>>>
>>>>                         _______________________________________________
>>>>                         SIP Express Router (SER) and Kamailio
>>>>                         (OpenSER) - sr-users mailing list
>>>>                         sr-users at lists.sip-router.org
>>>>                         <mailto:sr-users at lists.sip-router.org>
>>>>                         http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users
>>>>
>>>>
>>>>
>>>>
>>>>                 -- 
>>>>                 Daniel-Constantin Mierla - http://www.asipto.com
>>>>                 http://twitter.com/#!/miconda
>>>>                 <http://twitter.com/#%21/miconda> -
>>>>                 http://www.linkedin.com/in/miconda
>>>>                 Kamailio Advanced Training, Seattle, USA, Sep
>>>>                 23-26, 2012 - http://asipto.com/u/katu
>>>>                 Kamailio Practical Workshop, Netherlands, Sep
>>>>                 10-12, 2012 - http://asipto.com/u/kpw
>>>>
>>>>
>>>>
>>>>
>>>>                 _______________________________________________
>>>>                 SIP Express Router (SER) and Kamailio (OpenSER) -
>>>>                 sr-users mailing list
>>>>                 sr-users at lists.sip-router.org
>>>>                 <mailto:sr-users at lists.sip-router.org>
>>>>                 http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users
>>>>
>>>>
>>>
>>>             -- 
>>>             Daniel-Constantin Mierla -http://www.asipto.com
>>>             http://twitter.com/#!/miconda  <http://twitter.com/#%21/miconda>  -http://www.linkedin.com/in/miconda
>>>             Kamailio Advanced Training, Seattle, USA, Sep 23-26, 2012 -http://asipto.com/u/katu
>>>             Kamailio Practical Workshop, Netherlands, Sep 10-12, 2012 -http://asipto.com/u/kpw
>>>
>>>
>>>
>>>
>>
>>         -- 
>>         Daniel-Constantin Mierla -http://www.asipto.com
>>         http://twitter.com/#!/miconda  <http://twitter.com/#%21/miconda>  -http://www.linkedin.com/in/miconda
>>         Kamailio Advanced Training, Seattle, USA, Sep 23-26, 2012 -http://asipto.com/u/katu
>>         Kamailio Practical Workshop, Netherlands, Sep 10-12, 2012 -http://asipto.com/u/kpw
>>
>>
>>
>>
>
>     -- 
>     Daniel-Constantin Mierla -http://www.asipto.com
>     http://twitter.com/#!/miconda  <http://twitter.com/#%21/miconda>  -http://www.linkedin.com/in/miconda
>     Kamailio Advanced Training, Seattle, USA, Sep 23-26, 2012 -http://asipto.com/u/katu
>     Kamailio Practical Workshop, Netherlands, Sep 10-12, 2012 -http://asipto.com/u/kpw
>
>
>
>

-- 
Daniel-Constantin Mierla - http://www.asipto.com
http://twitter.com/#!/miconda - http://www.linkedin.com/in/miconda
Kamailio Advanced Training, Seattle, USA, Sep 23-26, 2012 - http://asipto.com/u/katu
Kamailio Practical Workshop, Netherlands, Sep 10-12, 2012 - http://asipto.com/u/kpw



-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.sip-router.org/pipermail/sr-users/attachments/20120614/e8142575/attachment-0001.htm>


More information about the sr-users mailing list