Bug #38606 | delete in lock write concurrent | ||
---|---|---|---|
Submitted: | 6 Aug 2008 15:36 | Modified: | 9 Jan 2009 14:53 |
Reporter: | Sergei Golubchik | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | MySQL Server: Maria storage engine | Severity: | S3 (Non-critical) |
Version: | 5.1 maria, 6.0.6 | OS: | Any |
Assigned to: | Oleksandr Byelkin | CPU Architecture: | Any |
[6 Aug 2008 15:36]
Sergei Golubchik
[12 Aug 2008 12:15]
Oleksandr Byelkin
=== modified file 'mysql-test/r/maria.result' --- mysql-test/r/maria.result 2008-07-10 14:51:59 +0000 +++ mysql-test/r/maria.result 2008-08-12 10:51:42 +0000 @@ -1900,3 +1900,9 @@ check table t2 extended; Table Op Msg_type Msg_text test.t2 check status OK drop table t2; +create table t1 (a int) engine=maria transactional=1; +insert into t1 values (1); +lock table t1 write concurrent; +delete from t1; +ERROR 42000: The storage engine for the table doesn't support DELETE in WRITE CONCURRENT +drop table t1; === modified file 'mysql-test/t/maria.test' --- mysql-test/t/maria.test 2008-07-10 14:51:59 +0000 +++ mysql-test/t/maria.test 2008-08-12 10:51:27 +0000 @@ -1186,6 +1186,17 @@ insert into t2 values (repeat('x',28)), check table t2 extended; drop table t2; +# +# BUG#38606 test suite +# +create table t1 (a int) engine=maria transactional=1; +insert into t1 values (1); +lock table t1 write concurrent; +# should be fixed with fully implemented versioning +--error ER_CHECK_NOT_IMPLEMENTED +delete from t1; +drop table t1; + --disable_result_log --disable_query_log eval set global storage_engine=$default_engine, maria_page_checksum=$default_checksum; === modified file 'storage/maria/ha_maria.cc' --- storage/maria/ha_maria.cc 2008-07-11 14:33:47 +0000 +++ storage/maria/ha_maria.cc 2008-08-12 10:46:55 +0000 @@ -1958,10 +1958,18 @@ bool ha_maria::is_crashed() const (my_disable_locking && file->s->state.open_count)); } +#define CHECK_UNTIL_WE_FULLY_IMPLEMENTED_VERSIONING(msg) \ + do { \ + if (file->lock.type == TL_WRITE_CONCURRENT_INSERT) \ + { \ + my_error(ER_CHECK_NOT_IMPLEMENTED, MYF(0), msg); \ + return 1; \ + } \ + } while(0) int ha_maria::update_row(const uchar * old_data, uchar * new_data) { - DBUG_ASSERT(file->lock.type != TL_WRITE_CONCURRENT_INSERT); + CHECK_UNTIL_WE_FULLY_IMPLEMENTED_VERSIONING("UPDATE in WRITE CONCURRENT"); ha_statistic_increment(&SSV::ha_update_count); if (table->timestamp_field_type & TIMESTAMP_AUTO_SET_ON_UPDATE) table->timestamp_field->set_time(); @@ -1971,7 +1979,7 @@ int ha_maria::update_row(const uchar * o int ha_maria::delete_row(const uchar * buf) { - DBUG_ASSERT(file->lock.type != TL_WRITE_CONCURRENT_INSERT); + CHECK_UNTIL_WE_FULLY_IMPLEMENTED_VERSIONING("DELETE in WRITE CONCURRENT"); ha_statistic_increment(&SSV::ha_delete_count); return maria_delete(file, buf); }
[25 Aug 2008 8:29]
Sergei Golubchik
pushed on behalf of sanja
[14 Sep 2008 0:37]
Bugs System
Pushed into 6.0.7-alpha (revid:serg@mysql.com-20080825083525-k3z80rwdrnx3j34r) (version source revid:vvaintroub@mysql.com-20080804094710-jb2qpqxpf2ir2gf3) (pib:3)
[9 Jan 2009 14:53]
MC Brown
A note has been added to the 6.0.7 changelog: Performing a DELETE on a Maria table where the table has been locked using LOCK TABLE ... WRITE CONCURRENT would result in an assertion failure.