<div dir="ltr"><div dir="ltr"><div>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. <br></div><div><br></div><div>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.</div><div><br></div><div>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.</div><div><br></div><div>Anyway I am suspecting that the ubuntu unixodbc package is now compiled without threading enabled. <br></div><div><br></div><div>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?<br></div><div><br></div><div><span style="font-family:monospace"><span style="color:rgb(0,0,0);background-color:rgb(255,255,255)">root@phone:~# cat /etc/odbc.ini
</span><br>[cdr-bmaria]
<br>Driver          = maodbc
<br>DATABASE        = cdr
<br>DESCRIPTION     = MariaDB ODBC to remote-cdr-database
<br>SERVER          = 192.168.1.11
<br>UID             = cdr-reporter
<br>PASSWORD        = secret<br>PORT            = 3306
<br>
<br>[call-process-maria]
<br>Driver          = maodbc
<br>DATABASE        = phone
<br>DESCRIPTION     = MariaDB ODBC local (to 
self)<br>SERVER          = 192.168.2.22
<br>UID             = dialplan-user
<br>PASSWORD        = secret
<br>PORT            = 3306
<br>
<br>
root@phone:~# cat /etc/odbcinst.ini     <br>[maodbc]
<br>Driver64        = /usr/local/lib64/mariadb/libmaodbc.so
<br>Description     = MariaDB ODBC Connector
<br>Threading       = 2</span></div><div><span style="font-family:monospace">
<br></span></div><div><span style="font-family:monospace"><br></span></div><div><span style="font-family:monospace"><br></span></div><div><span style="font-family:monospace">!!!!!!!!!!!!!!!!!! The proposed addition: - also changing the cdr-maria conection key to Driver=maodbc-cdr<br></span></div><div><span style="font-family:monospace"><span style="font-family:monospace">[maodbc-cdr]
<br>Driver64        = /usr/local/lib64/mariadb/libmaodbc.so
<br>Description     = MariaDB ODBC Connector
<br></span></span></div><div><span style="font-family:monospace"><br></span></div><div><span style="font-family:monospace"><br></span></div><div><span style="font-family:monospace"><br></span></div><div><span style="font-family:monospace">Anthony,<br></span></div><div><span style="font-family:monospace">...anyway, enough about my problems. Have you put a:</span></div><div><span style="font-family:monospace">Verbose(0, Your built out sql statement) <br></span></div><div><span style="font-family:monospace">...before your ODBC application in both contexts to see if you just have maybe an undefined variable creating a syntax error in your sql?<br></span></div><div><span style="font-family:monospace"><br></span></div><div><span style="font-family:monospace">John<br></span></div><div><span style="font-family:monospace"><br></span></div><div><span style="font-family:monospace"><br></span></div><div><span style="font-family:monospace"><br></span></div><div><span style="font-family:monospace">Here is a bit about odbc threads:</span></div><div><span style="font-family:monospace"><a href="https://stackoverflow.com/questions/4207458/using-unixodbc-in-a-multithreaded-concurrent-setting">https://stackoverflow.com/questions/4207458/using-unixodbc-in-a-multithreaded-concurrent-setting</a></span></div><div><span style="font-family:monospace"><br></span></div><div><span style="font-family:monospace"><br></span></div><div><span style="font-family:monospace"><br></span></div><div><span style="font-family:monospace"><br></span></div><div><span style="font-family:monospace"><br></span></div><br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Feb 28, 2023 at 9:02 AM Antony Stone <<a href="mailto:Antony.Stone@asterisk.open.source.it">Antony.Stone@asterisk.open.source.it</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On Wednesday 22 February 2023 at 15:29:38, John Harragin wrote:<br>
<br>
> If there are multiple connections that the utilize the same driver, try<br>
> putting:<br>
> <br>
> Threading       = 2<br>
> <br>
> in the appropriate driver section of<br>
> /etc/odbcinst.ini<br>
<br>
I'll give that a go, however I doubt that it is the problem, since I see the <br>
correct result from the ODBC query recorded in the assignment verbose log <br>
output, therefore the query is done and the result has been used by the time <br>
Asterisk freezes.<br>
<br>
> ...this would be a possibility if the problem is intermittent.<br>
<br>
It's actually extremely repeatable - I have not seen call processing proiceed <br>
beyond this stage once so far.<br>
<br>
> Also can you successfully execute the same SQL from the cli?<br>
<br>
Yes, and as I say, they query is working fine and Asterisk is correctly using <br>
the returned value in the assignment.<br>
<br>
The further detail which I think I added in a later post is that this is <br>
actually in a context which gets called using a Gosub() from two different <br>
places in the dialplan.<br>
<br>
>From one, it works fine; from the other, it gets stuck.  Completely consistent.<br>
<br>
> By the way, what driver is asterisk using?<br>
<br>
You mean ODBC?  That's connected to MariaDB.<br>
<br>
> On Mon, Feb 20, 2023 at 11:12 PM Antony Stone wrote:<br>
> > Hi.<br>
> > <br>
> > I have a strange problem and I'm looking for suggestions on how to<br>
> > investigate it.<br>
> > <br>
> > I have a dialplan which is processing a call, and Asterisk simply stops<br>
> > doing anything for that call.<br>
> > <br>
> > I have verbose and debug logging turned on.<br>
> > <br>
> > There are two steps at a particular point in the dialplan:<br>
> >         Set(UserCredit=${ODBC_GENERIC(select Credit('${DDI}'))})<br>
> >         <br>
> >         Verbose(6,Current credit level for user ${DDI} is ${UserCredit}<br>
> > pence)<br>
> > <br>
> > <br>
> > Everything gets processed up to and including the first line - the<br>
> > verbose log file shows me:<br>
> > <br>
> > pbx.c:2946 in pbx_extension_helper: Executing<br>
> > [0044xxxx509903@DialBleg:46]<br>
> > Set("SIP/TrunkTwo-00001184", "UserCredit=999") in new stack<br>
> > <br>
> > (Phone number obscured here for anonymity).<br>
> > <br>
> > Then, that is it.  Nothing further happens with call processing (until<br>
> > one of the parties hangs up) and the second dialplan command above never<br>
> > appears in the verbose log file.  I have several other Verbose(6,.....)<br>
> > commands preceding this, and they all output into the log file as expected.<br>
> > <br>
> > If another call arrives on the same server, Asterisk quite happily starts<br>
> > processing it and records what it's doing in the log files.<br>
> > <br>
> > <br>
> > Can anyone suggest how I can investigate what Asterisk is doing at the<br>
> > point where it "gets stuck", and how to find out why it simply stops<br>
> > processing the call and doesn't continue with the dialplan commands?<br>
> > <br>
> > <br>
> > Thanks,<br>
> > <br>
> > <br>
> > Antony.<br>
<br>
-- <br>
Why are they called "The Rocky Mountains"?<br>
What are other mountains made of?<br>
<br>
                                                   Please reply to the list;<br>
                                                         please *don't* CC me.<br>
<br>
-- <br>
_____________________________________________________________________<br>
-- Bandwidth and Colocation Provided by <a href="http://www.api-digital.com" rel="noreferrer" target="_blank">http://www.api-digital.com</a> --<br>
<br>
Check out the new Asterisk community forum at: <a href="https://community.asterisk.org/" rel="noreferrer" target="_blank">https://community.asterisk.org/</a><br>
<br>
New to Asterisk? Start here:<br>
      <a href="https://wiki.asterisk.org/wiki/display/AST/Getting+Started" rel="noreferrer" target="_blank">https://wiki.asterisk.org/wiki/display/AST/Getting+Started</a><br>
<br>
asterisk-users mailing list<br>
To UNSUBSCRIBE or update options visit:<br>
   <a href="http://lists.digium.com/mailman/listinfo/asterisk-users" rel="noreferrer" target="_blank">http://lists.digium.com/mailman/listinfo/asterisk-users</a></blockquote></div></div>