New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
issue about "usrloc expiring location record from different registrar after startup" #601
Comments
Hi @hd16861686, In my email I explained how the current DB modes do work for the usrloc module (how they work per design). What exactly are you looking for ? |
Hi bogdan, I'm so excited to receive your reply! |
I'm not understanding why it is a problem if Opensips deletes expired usrloc records, wherever they may be. This may be an issue for you, but it is problematic sharing location table among multiple opensips instances on other levels. Most of all, lookups will not work properly because a user might have NAT open with another registrar. I'm not advocating any change in the code though, because there are ways around it, they are just complex. My suggestion is a bit unconventional and works around the problem, by not using the lookup function. Scenario: Registrations are not being forwarded and a user may register wherever they want using the same credentilas based on the max allowed contacts limit. Using mongo DB for user location storage. Load balancing using DNSSRV. User is registered on four servers and receives a call. .. call comes in: Query the location table for contacts, bflags and socket Manually set the bflags for callee on the receiving remote server based on the custom rr header. Use dialog variables to remember them, then route it out, again no lookup(). For the answered branch, use dialog variables to set bflags again for caller to callee on each reinvite (video request for example during call). On reboot, the DB will always be current based on the max contacts. This is not a simple setup though and requires many constructs depending on who the message is from and the type of rtp proxy being used, what routes and flags to be set. As for the statistics, you might be able to use mode 1 (Write-Through Scheme) with the method above. save("server1location") query the commonlocation for the users, do the lookup againtst serverXlocation if found in common and then append branches for the remote contacts found elsewhere. This second method works nicely without worrying about the bflags etc., But there are issues when a user registers with another registrar and did not unregister from the previous. |
Any updates here? No progress has been made in the last 15 days, marking as stale. Will close this issue if no further updates are made in the next 30 days. |
This topic is outdated since the clustering support was added for usrloc module (the reported issue were side effects of an forced usage of the db-modes in usrloc). |
Hello, how are you?
I got the followed mail from below link,
http://article.gmane.org/gmane.comp.voip.opensips.user/8242/match=database+synchronization+delete+wrong+contact
But I don't understand why non db-only modes don't support location table sharing.
I met the same scene issue as described in below mail but in Write-Back scheme of db-mode.
According to "it is only written (cache flushed into DB) and never read (only at startup) ", actually we can read location table through avp_db_query in script in non db-only modes, and the only issue is when opensips 1 restart and load all online user from location table and after a while opensips 1 find some users expired which is regisgtered in opensips 2, but then opensips 1 delete these users even these users is not belong to opensips 1, that's the issue.
But I think this issue can be solved by modifying the code.
for example in opensips 2.1 in wb_timer function of usrloc module, the deleting user from db logic below, besides the condition "st_expired_ucontact(t) == 1", we can also add one more condition like "t->sock != 0", so that those expired users not belong to opensips node will not be deleted from db and the issue solved.
Is this right ? or if i missing something?
From: Bogdan-Andrei Iancu bogdan@...
Subject: Re: usrloc expiring location record from different registrar after startup
Newsgroups: gmane.comp.voip.opensips.user
Date: 2009-12-02 09:44:47 GMT (5 years, 36 weeks, 2 days, 15 hours and 6 minutes ago)
Hi Henk,
In non db-only modes, the primary storage is the mem cache - the DB is
used only as a secondary storage support (for persistence across
reboots) and it is only written (cache flushed into DB) and never read
(only at startup) - this is why you cannot share a location table via 2
servers.
Let me know if you experience the same problem while using the db-only mode.
Regards,
Bogdan
Henk Hesselink wrote:
The text was updated successfully, but these errors were encountered: