Hello,
to fix such cases, we added the option to use ruid for updates to database:
http://kamailio.org/docs/modules/stable/modules/usrloc.html#usrloc.p.db_obs_...
There were couple of items opened to the tracker at some point, also a discussion on the mailing list, this being the solution that seemed most optimal.
Cheers, Daniel
On 7/16/13 2:47 PM, Alex Hermann wrote:
Hello,
I'm upgrading a 1.5 install to 4.0 and encounter a problem with registrations from a phone. The phone lost power and after rebooting it starts a new registration while the old registration hasn't expired yet. The phone uses the same aor and contact but a different call-id (and cseq) which all seems ok and used to work with 1.5.x.
Problem 1) When receiving this new registration, kamailio is trying to update the old registration even though the new registration doesn't match the old one. The database responds with 0 rows updated because the call-id is different.
Problem 2) To try to circumvent problem 1, i have usrloc configured to try an insert instead when the update fails. That insert fails because kamailio is trying to insert with the same ruid as the old registration.
Combining those, the real problem seems to be that kamailio is assigning the same ruid to both registrations. How could that be prevented?
The config parameters are set so that it matches my old 1.5 config as much as possible. No need for outbound, gruu, etc.
(Phone does send an +sip.instance, which happens to be identical in both registrations. I have gruu_enabled set to 0, so i would expect kamailio to ignore it as it did in 1.5. The outbound module is not loaded).
modparam("registrar", "min_expires", 60) modparam("registrar", "default_expires", 1800) modparam("registrar", "default_q", 0) modparam("registrar", "path_mode", 0) modparam("registrar", "use_path", 1) modparam("registrar", "path_use_received", 1) modparam("registrar", "gruu_enabled", 0)
modparam("usrloc", "db_mode", 2) modparam("usrloc", "timer_interval", 20) #modparam("usrloc", "db_obs_ruid", 0) # param does not really exist modparam("usrloc", "db_check_update", 1) modparam("usrloc", "timer_procs", 2) modparam("usrloc", "hash_size", 14) modparam("usrloc", "matching_mode", 0)