I'm trying to finish developing a kamailio server cluster using database replication (db_mode=3). One of the issues is "split brain" when there is network connection problem that prevents the database servers from replicating data to each other for some time. This is especially bad for the serial int type primary keys defined in current kamailio tables. When there is a conflict in serial int primary keys, the record with the latest timestamp would win, but that record may not always be the correct one, or may not even for the same user. It seem the best solution to this problem is to use globally unique id as primary key instead of serial int.
I have tried to change the id in location table from serial int to uuid, and tested with pjsib clients. Things seem to work. uuid is supported by most common databases now (postgresql and mysql at least). Wonder if it is a good idea to change all serial int to uuid for all kamailio tables. I didn't verify all modules, but it seems the db modules can handle all db types without any code change. If I missed anything, or there is some spot we need to make code change, please let me know.
Here is the change I made to location table (postgresql).
current id:
id SERIAL PRIMARY KEY NOT NULL,
to:
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
—
Reply to this email directly or view it on GitHub.