hello,
some initial details
- using Asterisk 13.23.1 in Production (5 instances) and Asterisk 13.38.2 in DEV (3 instances); both environments are virtualized
- each VM have 3 network interfaces: eth0, eth1, eth2; SIP and audio are managed by eth1; DB traffic by eth2;
- DB cluster is also virtualized and includes 3 Mariadb 10.6.x nodes using Galera for clustering; DB is accessed using a Virtual IP address that currently points to Node #1
- Asterisk uses CDR Odbc and CDR table has many extended fields
- Dialplan uses some func_odbc functions
Problem description:
The following issue happens in both environments, and in any VM.
The dialplan makes use of some Set(CDR(key)=value) before executing the Dial command.
Example:
same => n,Set(CDR(fromRoute)=${CHANNEL(accountcode)})
same => n,Goto(${context},${EXTEN},1)
same => n,Set(CDR(fromIP)=${SIPPEER(${peername},ip)})
The issue is that, from time to time, the Set(CDR(x)=y) command stops the dialplan for up to 30 seconds. It is like if the Set(CDR(x)=y) stalls the dialplan process and, after some kind of timeout, it continues executing normally.
In the above lines, if the first Set(CDR(fromRoute)…) stalls the dialplan process for 30 seconds, it will recover and continue to the next line. And the second Set(CDR(fromIP)…) will be executed normally, without any issue, until the dialplan is fully executed.
The end result is the call will have a very high PDD (A Leg makes a call request, diaplans stalls at Set(CDR(x)…), dialplan recovers, dial command is set to call B Leg) and most of the time, A Leg will cancel the call request prior to be redirected to B Leg.
I think this behaviour is related to how Asterisk’s DB connection/processing is managed, In fact, if the DB cluster is unavailable for some reason, the behaviour is very similar but without the timeout: the calls gets stuck in the first Set(CDR(x)…) command and won’t proceed.
I would expect that is DB cluster is unreachable, then the call would be processed normally and CDR saved on standard .CSV file (which is enabled).
These are the current CDR status:
CLI> cdr show status
Call Detail Record (CDR) settings
Logging: Enabled
Mode: Simple
Log unanswered calls: Yes
Log congestion: Yes
Does anyone have had similar issue? Any clue?