[asterisk-bugs] [JIRA] (ASTERISK-27760) Asterisk ODBC Voicemail Prompt storage fails with recent MariaDB version.
Joshua Colp (JIRA)
noreply at issues.asterisk.org
Tue Mar 27 19:20:39 CDT 2018
[ https://issues.asterisk.org/jira/browse/ASTERISK-27760?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=242853#comment-242853 ]
Joshua Colp commented on ASTERISK-27760:
----------------------------------------
You can use the "Cherrypick" button to move it to 13, and then abandon the 13.20 review.
> Asterisk ODBC Voicemail Prompt storage fails with recent MariaDB version.
> -------------------------------------------------------------------------
>
> Key: ASTERISK-27760
> URL: https://issues.asterisk.org/jira/browse/ASTERISK-27760
> Project: Asterisk
> Issue Type: Bug
> Security Level: None
> Components: Applications/app_voicemail/ODBC
> Affects Versions: 13.20.0
> Environment: Ubuntu 16.04.4 LTS
> Asterisk 13.20.0
> MariaDB ODBC Driver Version: 3.0.3
> MariaDB Version (Working): 5.5.5-10.1.30
> MariaDB Version (Failing): 5.5.5-10.2.13
> Reporter: Nic Colledge
> Assignee: Unassigned
> Severity: Minor
> Labels: patch
> Attachments: app_voicemail2.patch
>
>
> TLDR; When saving Voicemail prompts (unavailable and busy messages) Asterisk tries to insert integer columns as SQL_CHAR. This patch changes the parameter types on the query to match the types in the database (as defined by contrib/realtime script). This breaks with recent MariaDB versions.
> Long Version:
> Trying to record voicemail unavailable prompt messages using the voicemail app tonight and ran into an issue saving the message to the database with the following message on the console:
> WARNING[45801][C-00000000]: app_voicemail.c:4301 insert_data_cb: SQL Direct Execute failed!
> WARNING[45801][C-00000000]: app_voicemail.c:4419 store_file: SQL Execute error!
> [INSERT INTO voicemail_messages (dir,msgnum,recording,context,macrocontext,callerid,origtime,duration,mailboxuser,mailboxcontext,flag,msg_id) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)]
> Turning on ODBC logging and checking the detail gave:
> [ODBC][45692][1521677051.260334][SQLExecDirect.c][240]
> Entry:
> Statement = 0x36d9ed0
> SQL = [INSERT INTO voicemail_messages (dir,msgnum,recording,context,macrocontext,callerid,origtime,duration,mailboxuser,mailboxcontext,...][leng$
> [ODBC][45692][1521677051.261761][SQLExecDirect.c][503]
> Exit:[SQL_ERROR]
> DIAG [22007] [ma-3.0.3][10.2.13-MariaDB-10.2.13+maria~xenial-log]Incorrect integer value: '' for column 'origtime' at row 1
> Confirmed by checking the source code against the voicemail_messages table create script in contrib/realtime; Asterisk app_voicemail is trying to insert a empty string into an integer column in the database. This gets rejected by version 10.2.13 of MariaDB (see below).
> The attached patch changes the data types of the integer parameters to match the database column types.
> Please check the patch for correctness. I'm not a C programmer but hopefully I've not done anything too stupid.
> Checking for the issue without asterisk (MariaDB has changed behavior at some point):
> Create a voicemail_messages table using the mysql script from the asterisk contrib/realtime directory.
> Run this on the two versions of MariaDB (kind of what asterisk does through ODBC with the origtime int):
> INSERT INTO voicemail_messages (dir, msgnum, origtime) VALUES ('/TEST/X', 1, '')
> 10.2.13 errors: SQL1.sql: Error (1,46): Incorrect integer value: '' for column 'origtime' at row 1
> 10.1.30 works: SQL1.sql: 1 row inserted [0.036s]
> It only seems fussy about the "empty string" entry for integer types. '1' for example works fine.
> I'm not sure if this change is deliberate on MariaDBs part and/or if it affects newer MySQL also. I will probably raise it with MariaDB also to be sure.
> Either way, it feels like the "right thing" to do is for the datatypes in asterisk to match the DB data types.
>
> Patch Testing:
> Recorded a few Voicemail unavailable messages after applying the patch.
> No errors on asterisk console.
> Observed record appearing in MariaDB database.
> Checked ODBC log for success:
> [ODBC][22408][1521675540.973168][SQLExecDirect.c][240]
> Entry:
> Statement = 0x7f9a800108d0
> SQL = [INSERT INTO voicemail_messages (dir,msgnum,recording,context,macrocontext,callerid,origtime,duration,mailboxuser,mailboxcontext,...][leng$
> [ODBC][22408][1521675541.008201][SQLExecDirect.c][503]
> Exit:[SQL_SUCCESS]
--
This message was sent by Atlassian JIRA
(v6.2#6252)
More information about the asterisk-bugs
mailing list