| Bug #38492 | assert in ha_maria.cc::external_lock | ||
|---|---|---|---|
| Submitted: | 31 Jul 2008 15:07 | Modified: | 9 Jan 2009 14:55 |
| Reporter: | Sergei Golubchik | Email Updates: | |
| Status: | Closed | Impact on me: | |
| Category: | MySQL Server: Maria storage engine | Severity: | S3 (Non-critical) |
| Version: | 6.0 | OS: | Any |
| Assigned to: | Oleksandr Byelkin | CPU Architecture: | Any |
[31 Jul 2008 15:07]
Sergei Golubchik
[31 Jul 2008 15:10]
Sergei Golubchik
Even easier - just connect with one client, LOCK TABLES t1 write concurrent; disconnect, voila.
[13 Aug 2008 9:39]
Oleksandr Byelkin
test suite script
Attachment: test.test (text/plain), 308 bytes.
[15 Aug 2008 7:00]
Oleksandr Byelkin
=== modified file 'mysql-test/mysql-test-run.pl' (properties changed: -x to +x)
=== modified file 'mysql-test/r/maria.result'
--- mysql-test/r/maria.result 2008-07-10 15:20:07 +0000
+++ mysql-test/r/maria.result 2008-08-15 06:33:40 +0000
@@ -1901,3 +1901,9 @@ check table t2 extended;
Table Op Msg_type Msg_text
test.t2 check status OK
drop table t2;
+create table t1 (a int, b int) engine=maria transactional=1;
+insert t1 values (1,2);
+insert t1 values (2,3), (sleep(10),sleep(20)), (4,5);;
+LOCK TABLES t1 write concurrent;
+insert t1 values (7,8);
+drop table t1;
=== modified file 'mysql-test/t/maria.test'
--- mysql-test/t/maria.test 2008-07-10 15:20:07 +0000
+++ mysql-test/t/maria.test 2008-08-15 06:31:44 +0000
@@ -1188,6 +1188,21 @@ insert into t2 values (repeat('x',28)),
check table t2 extended;
drop table t2;
+#
+# BUG#38492 test suite
+#
+create table t1 (a int, b int) engine=maria transactional=1;
+insert t1 values (1,2);
+--send insert t1 values (2,3), (sleep(10),sleep(20)), (4,5);
+connect (root2,localhost,root,,test);
+--connection root2
+LOCK TABLES t1 write concurrent;
+insert t1 values (7,8);
+-- disconnect root2
+connection default;
+--reap
+drop table t1;
+
--disable_result_log
--disable_query_log
eval set global storage_engine=$default_engine, maria_page_checksum=$default_ch
ecksum;
=== modified file 'sql/sql_class.cc'
--- sql/sql_class.cc 2008-07-20 22:39:29 +0000
+++ sql/sql_class.cc 2008-08-15 06:22:48 +0000
@@ -391,6 +391,7 @@ Diagnostics_area::reset_diagnostics_area
m_total_warn_count= 0;
#endif
is_sent= FALSE;
+ is_quit= FALSE;
/** Tiny reset in debug mode to see garbage right away */
m_status= DA_EMPTY;
DBUG_VOID_RETURN;
=== modified file 'sql/sql_class.h'
--- sql/sql_class.h 2008-07-14 22:06:19 +0000
+++ sql/sql_class.h 2008-08-15 06:22:48 +0000
@@ -1141,6 +1141,8 @@ public:
};
/** True if status information is sent to the client. */
bool is_sent;
+ /** True if connection is closed */
+ bool is_quit;
/** Set to make set_error_status after set_{ok,eof}_status possible. */
bool can_overwrite_status;
=== modified file 'sql/sql_parse.cc'
--- sql/sql_parse.cc 2008-07-20 22:39:29 +0000
+++ sql/sql_parse.cc 2008-08-15 06:22:48 +0000
@@ -1172,6 +1172,7 @@ bool dispatch_command(enum enum_server_c
general_log_print(thd, command, NullS);
net->error=0; // Don't give 'abort' message
thd->main_da.disable_status(); // Don't send anything back
+ thd->main_da.is_quit= TRUE; // Connection is closed
error=TRUE; // End server
break;
=== modified file 'storage/maria/ha_maria.cc'
--- storage/maria/ha_maria.cc 2008-07-10 14:58:31 +0000
+++ storage/maria/ha_maria.cc 2008-08-15 06:22:48 +0000
@@ -2229,11 +2229,12 @@ int ha_maria::external_lock(THD *thd, in
if (!trnman_decrement_locked_tables(trn))
{
/*
- OK should not have been sent to client yet (ACID).
+ OK should not have been sent to client yet (ACID),
+ exception: connection is closed by client.
This is a bit excessive, ACID requires this only if there are some
changes to commit (rollback shouldn't be tested).
*/
- DBUG_ASSERT(!thd->main_da.is_sent);
+ DBUG_ASSERT(!thd->main_da.is_sent || thd->main_da.is_quit);
/* autocommit ? rollback a transaction */
#ifdef MARIA_CANNOT_ROLLBACK
if (ma_commit(trn))
[15 Aug 2008 8:01]
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/commits/51700 2684 sanja@mysql.com 2008-08-15 Ignore OK "sent" to user if it is connection termination (BUG#38492).
[18 Aug 2008 17:58]
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/commits/51882 2684 sanja@mysql.com 2008-08-18 Ignore OK "sent" to user if it is connection termination (BUG#38492).
[20 Aug 2008 15:02]
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/commits/52063 2689 sanja@mysql.com 2008-08-20 Ignore OK "sent" to user if it is connection termination (BUG#38492).
[20 Aug 2008 15:04]
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/commits/52064 2689 sanja@mysql.com 2008-08-20 Ignore OK "sent" to user if it is connection termination (BUG#38492).
[25 Aug 2008 12:25]
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/commits/52441 2692 Sergei Golubchik 2008-08-25 different fix for Bug#38492 assert in ha_maria.cc::external_lock that makes no changes outside of ha_maria.cc and also works in embedded
[25 Aug 2008 13:45]
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/commits/52459 2692 Sergei Golubchik 2008-08-25 different fix for Bug#38492 assert in ha_maria.cc::external_lock that makes no changes outside of ha_maria.cc and also works in embedded
[13 Sep 2008 22:20]
Bugs System
Pushed into 6.0.6-alpha (revid:serg@mysql.com-20080825122507-b9fyfo6gucgayrs1) (version source revid:hakan@mysql.com-20080716105246-eg0utbybp122n2w9) (pib:3)
[9 Jan 2009 14:55]
MC Brown
A note has been added to the 6.0.6 changelog: Disconnecting a session where you have a applied a WRITE CONCURRENT lock on Maria tables would lead to a crash.
