[Home]

Summary:ASTERISK-29505: res_pjsip_registrar: Expires all contacts from realtime table, even if table is shared across multiple servers
Reporter:Andrew Yager (andrewyager)Labels:
Date Opened:2021-07-01 07:15:45Date Closed:
Priority:MinorRegression?
Status:Open/NewComponents:Resources/res_pjsip_registrar
Versions:18.4.0 18.5.0 Frequency of
Occurrence
Frequent
Related
Issues:
Environment:Attachments:
Description:In a multi-server environment with PJSIP using realtime tables, each asterisk server validates and expires all contacts, even if the server is not the active server (based on the systemname).

Each server with access to the contacts table will independently try to expire contacts at expiration time.

This has the effect of creating frequent deadlocks on MySQL environments in high volume contact environments (maybe around 1500+) unnecessarily.

While the specific behaviour that is here is probably complex, it seems that:

a) only one server should expire contacts, and this should ideally be the system that actually inserted the record
b) if that system is unavailable, I'm not sure what I think the correct behaviour should be, but given a server will not show a contact that it is not the "owner" of it probably should just do nothing
Comments:By: Asterisk Team (asteriskteam) 2021-07-01 07:15:48.088-0500

Thanks for creating a report! The issue has entered the triage process. That means the issue will wait in this status until a Bug Marshal has an opportunity to review the issue. Once the issue has been reviewed you will receive comments regarding the next steps towards resolution. Please note that log messages and other files should not be sent to the Sangoma Asterisk Team unless explicitly asked for. All files should be placed on this issue in a sanitized fashion as needed.

A good first step is for you to review the [Asterisk Issue Guidelines|https://wiki.asterisk.org/wiki/display/AST/Asterisk+Issue+Guidelines] if you haven't already. The guidelines detail what is expected from an Asterisk issue report.

Then, if you are submitting a patch, please review the [Patch Contribution Process|https://wiki.asterisk.org/wiki/display/AST/Patch+Contribution+Process].

Please note that once your issue enters an open state it has been accepted. As Asterisk is an open source project there is no guarantee or timeframe on when your issue will be looked into. If you need expedient resolution you will need to find and pay a suitable developer. Asking for an update on your issue will not yield any progress on it and will not result in a response. All updates are posted to the issue when they occur.

Please note that by submitting data, code, or documentation to Sangoma through JIRA, you accept the Terms of Use present at [https://www.asterisk.org/terms-of-use/|https://www.asterisk.org/terms-of-use/].

By: Andrew Yager (andrewyager) 2021-07-01 07:18:03.828-0500

Example log chunk showing the issue…

{code}
   -- Removed contact 'sip:106-domain1@1.1.1.1:5060;x-ast-txp=UDP' from AOR '106-domain1' due to expiration
 == Contact 106-domain1/sip:106-domain1@1.1.1.1:5060;x-ast-txp=UDP has been deleted
   -- Removed contact 'sip:107-domain2@1.1.1.1:5060;x-ast-txp=UDP' from AOR '107-domain2' due to expiration
   -- Removed contact 'sip:106-domain1@1.1.1.1:5060;x-ast-txp=UDP' from AOR '106-domain1' due to expiration
   -- Removed contact 'sip:208-domain3@1.1.1.1:5060;x-ast-txp=UDP' from AOR '208-domain3' due to expiration
[Jul  1 22:15:32] WARNING[2040]: res_odbc.c:538 ast_odbc_print_errors: SQL Execute returned an error: 40001: [ma-3.1.13][10.5.8-MariaDB-1:10.5.8+maria~bionic]Deadlock found when trying to get lock; try restarting transaction
[Jul  1 22:15:32] WARNING[2040]: res_odbc.c:433 ast_odbc_prepare_and_execute: SQL Execute error -1!
   -- Removed contact 'sip:212-domain3@1.1.1.1:5060;x-ast-txp=UDP' from AOR '212-domain3' due to expiration
   -- Removed contact 'sip:206-domain3@1.1.1.1:5060;x-ast-txp=UDP' from AOR '206-domain3' due to expiration
   -- Removed contact 'sip:209-domain3@1.1.1.1:5060;x-ast-txp=UDP' from AOR '209-domain3' due to expiration
   -- Removed contact 'sip:211-domain3@1.1.1.1:5060;x-ast-txp=UDP' from AOR '211-domain3' due to expiration
   -- Removed contact 'sip:202-domain3@1.1.1.1:5060;x-ast-txp=UDP' from AOR '202-domain3' due to expiration
[Jul  1 22:15:32] WARNING[2040]: res_odbc.c:538 ast_odbc_print_errors: SQL Execute returned an error: 40001: [ma-3.1.13][10.5.8-MariaDB-1:10.5.8+maria~bionic]Deadlock found when trying to get lock; try restarting transaction
[Jul  1 22:15:32] WARNING[2040]: res_odbc.c:433 ast_odbc_prepare_and_execute: SQL Execute error -1!
   -- Removed contact 'sip:204-domain3@1.1.1.1:5060;x-ast-txp=UDP' from AOR '204-domain3' due to expiration
{code}

By: Andrew Yager (andrewyager) 2021-07-01 07:32:22.197-0500

probably a useful note is that none of those contacts are presently registered actively to this server, so each of those listed expirations should probably not have been processed by this server. Changing this would probably also improve the stasis bus performance as there would be less state of things to check.