I've been having a related problem. I have Asterisk with some call
processing accessing Maria (hosted on the phone server, running Ubuntu) via
func_odbc. That same odbc driver is used to write cdr records on a
different server. I had never noticed a problem (and no threading attribute
defined) until after I did a system update several months ago.

Now if the ethernet cable is disconnected to the cdr server, call
processing then hangs when func_odbc trys to access the locally hosted
(same machine as asterisk) call process database. The zombied channels then
accumulate.

In my research, I read that the default threading value was changed in
unixodbc to assume that threading would be handled by the individual
odbc-drivers - rather than the odbc framework. Also, I read that unixodbc
has to be compiled with a threading directive set to yes for the
odbcinst.ini key-value to have any effect.

Anyway I am suspecting that the ubuntu unixodbc package is now compiled
without threading enabled.

This is happening on a production machine, so I am somewhat limited in when
& how much experimentation I can do. One thing I'd like to try is to
redefine the maria driver as maodbc-cdr in odbcinst.ini and see if it
exists in it's own thread?

root@phone:~# cat /etc/odbc.ini
[cdr-bmaria]
Driver          = maodbc
DATABASE        = cdr
DESCRIPTION     = MariaDB ODBC to remote-cdr-database
SERVER          = 192.168.1.11
UID             = cdr-reporter
PASSWORD        = secret
PORT            = 3306

[call-process-maria]
Driver          = maodbc
DATABASE        = phone
DESCRIPTION     = MariaDB ODBC local (to  self)
SERVER          = 192.168.2.22
UID             = dialplan-user
PASSWORD        = secret
PORT            = 3306

root@phone:~# cat /etc/odbcinst.ini
[maodbc]
Driver64        = /usr/local/lib64/mariadb/libmaodbc.so
Description     = MariaDB ODBC Connector
Threading       = 2



!!!!!!!!!!!!!!!!!! The proposed addition: - also changing the cdr-maria
conection key to Driver=maodbc-cdr
[maodbc-cdr]
Driver64        = /usr/local/lib64/mariadb/libmaodbc.so
Description     = MariaDB ODBC Connector



Anthony,
...anyway, enough about my problems. Have you put a:
Verbose(0, Your built out sql statement)
...before your ODBC application in both contexts to see if you just have
maybe an undefined variable creating a syntax error in your sql?

John



Here is a bit about odbc threads:
https://stackoverflow.com/questions/4207458/using-unixodbc-in-a-multithreaded-concurrent-setting







On Tue, Feb 28, 2023 at 9:02 AM Antony Stone <
antony.st...@asterisk.open.source.it> wrote:

> On Wednesday 22 February 2023 at 15:29:38, John Harragin wrote:
>
> > If there are multiple connections that the utilize the same driver, try
> > putting:
> >
> > Threading       = 2
> >
> > in the appropriate driver section of
> > /etc/odbcinst.ini
>
> I'll give that a go, however I doubt that it is the problem, since I see
> the
> correct result from the ODBC query recorded in the assignment verbose log
> output, therefore the query is done and the result has been used by the
> time
> Asterisk freezes.
>
> > ...this would be a possibility if the problem is intermittent.
>
> It's actually extremely repeatable - I have not seen call processing
> proiceed
> beyond this stage once so far.
>
> > Also can you successfully execute the same SQL from the cli?
>
> Yes, and as I say, they query is working fine and Asterisk is correctly
> using
> the returned value in the assignment.
>
> The further detail which I think I added in a later post is that this is
> actually in a context which gets called using a Gosub() from two different
> places in the dialplan.
>
> From one, it works fine; from the other, it gets stuck.  Completely
> consistent.
>
> > By the way, what driver is asterisk using?
>
> You mean ODBC?  That's connected to MariaDB.
>
> > On Mon, Feb 20, 2023 at 11:12 PM Antony Stone wrote:
> > > Hi.
> > >
> > > I have a strange problem and I'm looking for suggestions on how to
> > > investigate it.
> > >
> > > I have a dialplan which is processing a call, and Asterisk simply stops
> > > doing anything for that call.
> > >
> > > I have verbose and debug logging turned on.
> > >
> > > There are two steps at a particular point in the dialplan:
> > >         Set(UserCredit=${ODBC_GENERIC(select Credit('${DDI}'))})
> > >
> > >         Verbose(6,Current credit level for user ${DDI} is ${UserCredit}
> > > pence)
> > >
> > >
> > > Everything gets processed up to and including the first line - the
> > > verbose log file shows me:
> > >
> > > pbx.c:2946 in pbx_extension_helper: Executing
> > > [0044xxxx509903@DialBleg:46]
> > > Set("SIP/TrunkTwo-00001184", "UserCredit=999") in new stack
> > >
> > > (Phone number obscured here for anonymity).
> > >
> > > Then, that is it.  Nothing further happens with call processing (until
> > > one of the parties hangs up) and the second dialplan command above
> never
> > > appears in the verbose log file.  I have several other Verbose(6,.....)
> > > commands preceding this, and they all output into the log file as
> expected.
> > >
> > > If another call arrives on the same server, Asterisk quite happily
> starts
> > > processing it and records what it's doing in the log files.
> > >
> > >
> > > Can anyone suggest how I can investigate what Asterisk is doing at the
> > > point where it "gets stuck", and how to find out why it simply stops
> > > processing the call and doesn't continue with the dialplan commands?
> > >
> > >
> > > Thanks,
> > >
> > >
> > > Antony.
>
> --
> Why are they called "The Rocky Mountains"?
> What are other mountains made of?
>
>                                                    Please reply to the
> list;
>                                                          please *don't* CC
> me.
>
> --
> _____________________________________________________________________
> -- Bandwidth and Colocation Provided by http://www.api-digital.com --
>
> Check out the new Asterisk community forum at:
> https://community.asterisk.org/
>
> New to Asterisk? Start here:
>       https://wiki.asterisk.org/wiki/display/AST/Getting+Started
>
> asterisk-users mailing list
> To UNSUBSCRIBE or update options visit:
>    http://lists.digium.com/mailman/listinfo/asterisk-users
-- 
_____________________________________________________________________
-- Bandwidth and Colocation Provided by http://www.api-digital.com --

Check out the new Asterisk community forum at: https://community.asterisk.org/

New to Asterisk? Start here:
      https://wiki.asterisk.org/wiki/display/AST/Getting+Started

asterisk-users mailing list
To UNSUBSCRIBE or update options visit:
   http://lists.digium.com/mailman/listinfo/asterisk-users

Reply via email to