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 with usrloc 'handle_lost_tcp' and dmq_usrloc 'usrloc_delete' #3479
Comments
Thanks for the report, will have a look |
We have managed to reproduce it. Its actually quite a tricky bug, that it will synchronise the data back to itself in certain conditions. Could you please verify the output of kamcmd dmq.list_nodes? It should show only the number of nodes. In our broken scenario it was showing the number of nodes two times. We will investigate why this happens now. |
@henningw I don't think we are talking about the same issue here. I don't see any data being synchronized anywhere. I checked kamcmd dmq.list_nodes but I don't see the same issue you are talking about. Our issue is that when handle_lost_tcp logic is ran, instead of deleting the entry it instead labels it as "deleted" and allows some timer to remove it after 10sec or so. This process of setting it "deleted" then removing the entry doesn't sync with DMQ. It also causes issues with save("location") because when a rereg happens during this 10sec when the entry is labeled as "deleted" but not actually removed it sees it as an update in the registrar instead of a new registration. I purpose changing the handle_lost_tcp logic so that it uses the same logic as unregister("location"). As the unregister command correctly removes the entry from the registrar table and correctly syncs via DMQ. |
You are right, there are probably three issues here:
Regarding 1 - this is another topic, which we are looking into right now. |
Description
When a TLS connection is closed and handle_lost_tcp=1 the entry is deleted for usrloc. This deletion is not synced via DMQ even though usrloc_delete=1.
There is also an issue on the same server if a re-registration happens after it's deleted by handle_lost_tcp (before the registration timeout was supposed to expire) then save("location", "0x01") = 2 even though the usrloc table is empty. So it seems like the way handle_lost_tcp deletes is not deleting fully in registrar.
usrloc db_mode is 0
Troubleshooting
Reproduction
Setup 2 servers with usrloc and dmq_usrloc.
Additional Information
kamailio -v
The text was updated successfully, but these errors were encountered: