[MXS-1776] Hang with mysql test case `test_basic_cursors` Created: 2018-04-11  Updated: 2018-04-12  Resolved: 2018-04-12

Status: Closed
Project: MariaDB MaxScale
Component/s: readwritesplit
Affects Version/s: 2.2
Fix Version/s: 2.2.5

Type: Bug Priority: Major
Reporter: dapeng huang Assignee: markus makela
Resolution: Fixed Votes: 0
Labels: None

Attachments: HTML File hang_with_test_case_`test_basic_cursors`    

 Comments   
Comment by markus makela [ 2018-04-11 ]

Reproduced with this code:

#include <stdio.h>
#include <iostream>
#include <stdlib.h>
#include <mysql.h>
#include <string.h>
#include <unistd.h>
#include <string>
 
using namespace std;
 
int main(int argc, char** argv)
{
    MYSQL *mysql;
 
    if ((mysql = mysql_init(NULL)) == NULL)
    {
        cout << "Failed initialize client library." << endl;
    }
 
    if (!mysql_real_connect(mysql, "127.0.0.1", "maxuser", "maxpwd", NULL, 4006, NULL,
                            CLIENT_MULTI_STATEMENTS | CLIENT_MULTI_RESULTS))
    {
        cout << "Failed to connect to database: " << mysql_error(mysql) << endl;
        mysql_close(mysql);
        return 1;
    }
 
    MYSQL_STMT *stmt = mysql_stmt_init(mysql);
    std::string query = "SELECT * FROM test.t1";
    unsigned long cursor_type = CURSOR_TYPE_READ_ONLY;
    mysql_stmt_attr_set(stmt, STMT_ATTR_CURSOR_TYPE, &cursor_type);
 
    if (mysql_stmt_prepare(stmt, query.c_str(), query.size()) ||
        mysql_stmt_execute(stmt) ||
        mysql_stmt_execute(stmt) ||
        mysql_stmt_execute(stmt) ||
        mysql_stmt_execute(stmt))
    {
        cout << "Prepared statement failure: " << mysql_stmt_error(stmt) << endl;
    }
 
    mysql_stmt_close(stmt);
    mysql_close(mysql);
    return 0;
}

Comment by markus makela [ 2018-04-12 ]

The router did not correctly process multiple COM_STMT_EXECUTE commands when cursors were enabled.

Generated at Thu Feb 08 04:09:18 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.