Regarding the issue 1274 (https://github.com/kamailio/kamailio/issues/1274) 
there's a problem in highly scalable environments to avoid conflicts in storing 
dialogs in the same DB.

As @miconda pointed out:
> The internal id is made from two integers, hash entry and hash id (h_entry, 
> h_id). h_entry is the index of the slot in the hash table used to store the 
> dialog structure, computed by hashing over call id. h_id is an incremented 
> integer specific for each hash table slot.
> 
> So, when loading a new record from database, if its h_id is not conflicting 
> with an existing dialog on the same hash table slot, all is ok, otherwise the 
> module is not going to work properly with two dialogs having same h_id.
> 
> So, when loading a new record from database, if its h_id is not conflicting 
> with an existing dialog on the same hash table slot, all is ok, otherwise the 
> module is not going to work properly with two dialogs having same h_id.
> 
> Among solutions I thought of:
> 
> 1. have the servers generating non conflicting h_id, by having a start value 
> different per server and an increment step larger than the number of servers. 
> Iirc, here was at some point a similar attempt, but somehow didn't make it. 
> Let's say one has two servers, first server starts allocating h_id from 1 and 
> increments by 2 (e.g: 1, 3, 5, ...) and the seconds start from 2 and 
> increments with 2 (2, 4, 6, ...). Those values can be set via mod params, 
> eventually with an option to rely on server_id.
> This should be the least intrusive in the other modules built on top of 
> dialog. But it is rather rigid, with the example above, if one adds an extra 
> server, it needs to reconfigure the old ones, so each server starts from 
> either 1, 2 or 3 and increment by 3. Of course, one can set increment step to 
> a larger value, like 100, and then has flexibility to deploy up to 1 hundred 
> servers before having to reconfigure in case there is need for more server.
> 
> 2. add server_id as the third field in the dialog id. It will require review 
> of other modules using dialog and eventual code updates in those modules. One 
> column to store the server_id needs to be added to dialog db tables.
> 
> 3. switch from this conflicting id system to something like string unique 
> ids, similar to what we have in usrloc records. This will require coding in 
> other modules, changes to database schema, etc., so more work comparing with 
> the above two, but could be the best in long term.

It would be great to have the option 3 developed if possible but we would also 
be satisfied with the option 2 to have a third field, server_id, in the dialog 
id.

Thank You!
--
Alex

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/kamailio/kamailio/issues/1500
_______________________________________________
Kamailio (SER) - Development Mailing List
sr-dev@lists.kamailio.org
https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-dev

Reply via email to