Bug #13524 lock timeout gives incorrect warning on open cursor
| Submitted: | 27 Sep 2005 12:48 | Modified: | 24 Nov 2005 0:05 |
|---|---|---|---|
| Reporter: | Berto van de Kraats | Email Updates: | |
| Status: | Closed | Impact on me: | |
| Category: | MySQL Server | Severity: | S1 (Critical) |
| Version: | 5.0.14-rc-nightly-20050926 | OS: | Linux (Linux Suse SLES 9 FP 1) |
| Assigned to: | Konstantin Osipov | CPU Architecture: | Any |
[27 Sep 2005 12:50]
Berto van de Kraats
Cpp trace of problem
Attachment: bug13524.cpp (text/plain), 35.52 KiB.
[27 Sep 2005 13:52]
MySQL Verification Team
miguel@hegel:~/dbs/5.0> ./bug13524 !!! Error (297): Expected value:0 Returned value:2 error: bug13524: /home/miguel/dbs/5.0/bug13524.cpp:297: int main(): Assertion `0' failed. Aborted
[10 Nov 2005 8:29]
Konstantin Osipov
After fixing Bug#13488 I can't repeat the bug any more. Here is the patched test case that I use, and the test passes: Could you please check if the problem is still present in the latest tree? kostja@dragonfly:~> diff -u bug13524.cpp bug13524.new.cpp --- bug13524.cpp 2005-11-10 11:23:44.000000000 +0300 +++ bug13524.new.cpp 2005-11-10 10:36:08.000000000 +0300 @@ -33,13 +33,13 @@ // Connection parameters const char *MYSQL_CMD = "mysql"; // Used for table creation const char *HOST_NAME = NULL; -const char *USER_NAME = "bsp"; -const char *USER_PWD = "bsp"; -const char *DB_NAME = "baan"; -const char *UNIX_SOCKET = "/var/lib/mysql/mysql.sock"; +const char *USER_NAME = "kostja"; +const char *USER_PWD = ""; +const char *DB_NAME = "test"; +const char *UNIX_SOCKET = "/opt/local/var/mysql/mysql.sock"; // For ddl statements we use a different user/pwd -const char *OWNER_NAME = "baan"; -const char *OWNER_PWD = "baan"; +const char *OWNER_NAME = "kostja"; +const char *OWNER_PWD = ""; // use "#define M_EXPECT_EQUALS (void)" to disable data validation typedef enum { STR, SESS, STMT } ; @@ -281,8 +281,8 @@ m_ret = mysql_stmt_attr_set(stmt_5,STMT_ATTR_CURSOR_TYPE,(const void *) &select_cursor); M_EXPECT_EQUALS(0,m_ret,STMT,stmt_5); m_text = "SELECT table_name FROM table_locks WHERE table_name = 'tdbtst120280' LOCK IN SHARE MODE"; m_ret = mysql_stmt_prepare(stmt_5,m_text,strlen(m_text)); M_EXPECT_EQUALS( 0,m_ret,STMT,stmt_5 ); - m_ret = mysql_stmt_execute(stmt_5); M_EXPECT_EQUALS( 1,m_ret,STMT,stmt_5 ); - m_ret = mysql_stmt_errno(stmt_5); M_EXPECT_EQUALS( 1205,m_ret,STMT,stmt_5 ); // Lock wait timeout exceeded; try restarting transaction + m_ret = mysql_stmt_execute(stmt_5); M_EXPECT_EQUALS( 0,m_ret,STMT,stmt_5 ); + m_ret = mysql_stmt_errno(stmt_5); M_EXPECT_EQUALS( 0,m_ret,STMT,stmt_5 ); // Lock wait timeout exceeded; try restarting transaction mysql_stmt_close(stmt_5); // Continue fetching on the open cursor
[10 Nov 2005 10:36]
Berto van de Kraats
I've downloaded the latest snapshot (mysql-5.0.16-nightly-20051109-linux-i686) and applied the patch for bug 13488 (http://lists.mysql.com/internals/32112), but the problem still reproduces on my system: $ echo $MYSQLDIR /usr1/mysql/mysql-5.0.16-nightly-20051109-linux-i686 $ gcc -g -I $MYSQLDIR/include /home/bvdkraat/bug13524.cpp $MYSQLDIR/lib/libmysqlclient.a -lm -lz -lstdc++ $ ./a.out !!! Error (297): Expected value:0 Returned value:2 error: a.out: /home/bvdkraat/bug13524.cpp:297: int main(): Assertion `0' failed. Abort (core dumped) $
[17 Nov 2005 13:21]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/internals/32354
[17 Nov 2005 16:42]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/internals/32370
[17 Nov 2005 16:43]
Konstantin Osipov
Fixed in 5.0 tree, currently tagged 5.0.17
[24 Nov 2005 0:05]
Paul DuBois
Noted in 5.0.17 changelog.
Portions of this website are copyright © 2001, 2002 The PHP Group
Page generated in 0.044 sec. using MySQL 8.4.7-u6-cloud
Timestamp references displayed by the system are UTC.
Content reproduced on this site is the property of the
respective copyright holders.
It is not reviewed in advance
by Oracle and does not necessarily represent the opinion of
Oracle or any other party.
Description: If the following steps are done, then the fetch after the lock that times out gives incorrect warning messages. 1. Exclusively lock a row 2. Open a cursor 3. Attempt to lock the same row in a different session, which fails (time out) 4. Continue to fetch on the open cursor How to repeat: Compile and run the attached program. If the problem does not reproduce then it runs silently with exit status 0. If the problem reproduces then the output should be: !!! Error (297): Expected value:0 Returned value:2 error: a.out: t1.cpp:297: int main(): Assertion `0' failed. Abort (core dumped) Set innodb_lock_wait_timeout to a low value, because the program will wait for a lock time out.