Hi,
I am initiating lots of subscriptions (several thousand) using the pua_subscribe MI command exported by the pua_mi module:
http://kamailio.org/docs/modules/4.2.x/modules/pua_mi.html#idp267208
The immediate issue I am having is that the From-tag and Call-ID are reused in multiple successive subscriptions--at least 10 to 20 out of my several thousand. When combined with PUA db_mode 2 (DB-backed) this is disastrous:
Jan 24 14:50:28 sip /usr/local/sbin/kamailio[27986]: ERROR: db_mysql [km_dbase.c:123]: db_mysql_submit_query(): driver error on query: Duplicate entry '6e14fe38006106fb-14b28de6edf11d3914a0aa090636030d-b1f4' for key 'pua_idx' Jan 24 14:50:28 sip /usr/local/sbin/kamailio[27986]: ERROR: <core> [db_query.c:235]: db_do_insert_cmd(): error while submitting query
Jan 24 14:50:28 sip /usr/local/sbin/kamailio[27986]: ERROR: pua [pua_db.c:1190]: insert_dialog_puadb(): DB insert failed
This is because the 'pua' table has a UNIQUE constraint on a tuple of <tuple_id, etag, call_id, from_tag> in the schema definition:
CREATE TABLE pua ( ... CONSTRAINT pua_idx UNIQUE (etag, tuple_id, call_id, from_tag) );
The 'etag' and 'tuple_id' values are empty strings (''), so the same call_id and from_tag cause this error.
If I remove the unique constraint, other problems result that ultimately do not lead to correct management of the subscriptions in the 'pua' table:
Jan 23 12:50:56 sip /usr/local/sbin/kamailio[12101]: ERROR: pua [pua_db.c:1263]: get_dialog_puadb(): Too many rows found (2)... deleting
The From-tag and Call-ID is not unique in the SUBSCRIBEs generated by PUA. So, what I am wondering if there is a global option I can set for TM that leads to absolutely unique tags and Call-ID GUIDs in every case. Otherwise, I suspect the issue is that the random seeds used to generate the GUIDs are based on time(NULL) or something of that ilk, because this is not so much a problem if the subscriptions are spread out across the time domain. It's a problem that arises when I send several thousand pua_subscribe MI commands within 1-2 seconds.
Thanks!
-- Alex