From: Mattias Jonsson Date: October 1 2010 11:39am Subject: bzr commit into mysql-5.1-bugteam branch (mattias.jonsson:3498) Bug#51851 List-Archive: http://lists.mysql.com/commits/119634 X-Bug: 51851 Message-Id: <201010011139.o919vvwb001618@acsinet15.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============6213266064766707673==" --===============6213266064766707673== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///Users/mattiasj/mysql-bzr/b51851-51-bt_small/ based on revid:davi.arnaut@stripped 3498 Mattias Jonsson 2010-10-01 Bug#51851: Server with SBR locks mutex twice on LOAD DATA into partitioned MyISAM table Problem was that both partitioning and myisam used the same table_share->mutex for different protections (auto inc and repair). Solved by adding a specific mutex for the partitioning auto_increment. Also adding destroying the ha_data structure in free_table_share (which is to be propagated into 5.5). This is a 5.1 ONLY patch, already fixed in 5.5+. added: mysql-test/r/partition_binlog_stmt.result mysql-test/t/partition_binlog_stmt.test modified: sql/ha_partition.cc sql/ha_partition.h sql/table.cc sql/table.h === added file 'mysql-test/r/partition_binlog_stmt.result' --- a/mysql-test/r/partition_binlog_stmt.result 1970-01-01 00:00:00 +0000 +++ b/mysql-test/r/partition_binlog_stmt.result 2010-10-01 11:39:04 +0000 @@ -0,0 +1,13 @@ +DROP TABLE IF EXISTS t1; +# +# Bug#51851: Server with SBR locks mutex twice on LOAD DATA into +# partitioned MyISAM table +CREATE TABLE t1 +(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, +name TINYBLOB NOT NULL, +modified TIMESTAMP DEFAULT '0000-00-00 00:00:00', +INDEX namelocs (name(255))) ENGINE = MyISAM +PARTITION BY HASH(id) PARTITIONS 2; +LOAD DATA LOCAL INFILE 'init_file.txt' +INTO TABLE t1 (name); +DROP TABLE t1; === added file 'mysql-test/t/partition_binlog_stmt.test' --- a/mysql-test/t/partition_binlog_stmt.test 1970-01-01 00:00:00 +0000 +++ b/mysql-test/t/partition_binlog_stmt.test 2010-10-01 11:39:04 +0000 @@ -0,0 +1,26 @@ +--source include/have_partition.inc +--source include/have_binlog_format_statement.inc + +--disable_warnings +DROP TABLE IF EXISTS t1; +--enable_warnings + +--echo # +--echo # Bug#51851: Server with SBR locks mutex twice on LOAD DATA into +--echo # partitioned MyISAM table +--write_file init_file.txt +abcd +EOF + +CREATE TABLE t1 +(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, + name TINYBLOB NOT NULL, + modified TIMESTAMP DEFAULT '0000-00-00 00:00:00', + INDEX namelocs (name(255))) ENGINE = MyISAM +PARTITION BY HASH(id) PARTITIONS 2; + +LOAD DATA LOCAL INFILE 'init_file.txt' +INTO TABLE t1 (name); + +--remove_file init_file.txt +DROP TABLE t1; === modified file 'sql/ha_partition.cc' --- a/sql/ha_partition.cc 2010-08-19 07:20:17 +0000 +++ b/sql/ha_partition.cc 2010-10-01 11:39:04 +0000 @@ -2449,6 +2449,21 @@ err1: /**************************************************************************** MODULE open/close object ****************************************************************************/ + + +/** + A destructor for partition-specific TABLE_SHARE data. +*/ + +void ha_data_partition_destroy(void *ha_data) +{ + if (ha_data) + { + HA_DATA_PARTITION *ha_part_data= (HA_DATA_PARTITION*) ha_data; + pthread_mutex_destroy(&ha_part_data->LOCK_auto_inc); + } +} + /* Open handler object @@ -2605,6 +2620,8 @@ int ha_partition::open(const char *name, } DBUG_PRINT("info", ("table_share->ha_data 0x%p", ha_data)); bzero(ha_data, sizeof(HA_DATA_PARTITION)); + table_share->ha_data_destroy= ha_data_partition_destroy; + VOID(pthread_mutex_init(&ha_data->LOCK_auto_inc, MY_MUTEX_INIT_FAST)); } if (is_not_tmp_table) pthread_mutex_unlock(&table_share->mutex); === modified file 'sql/ha_partition.h' --- a/sql/ha_partition.h 2010-07-09 13:00:33 +0000 +++ b/sql/ha_partition.h 2010-10-01 11:39:04 +0000 @@ -44,6 +44,7 @@ typedef struct st_partition_share typedef struct st_ha_data_partition { ulonglong next_auto_inc_val; /**< first non reserved value */ + pthread_mutex_t LOCK_auto_inc; bool auto_inc_initialized; } HA_DATA_PARTITION; @@ -944,8 +945,9 @@ private: DBUG_ASSERT(table_share->ha_data && !auto_increment_lock); if(table_share->tmp_table == NO_TMP_TABLE) { + HA_DATA_PARTITION *ha_data= (HA_DATA_PARTITION*) table_share->ha_data; auto_increment_lock= TRUE; - pthread_mutex_lock(&table_share->mutex); + pthread_mutex_lock(&ha_data->LOCK_auto_inc); } } virtual void unlock_auto_increment() @@ -958,7 +960,8 @@ private: */ if(auto_increment_lock && !auto_increment_safe_stmt_log_lock) { - pthread_mutex_unlock(&table_share->mutex); + HA_DATA_PARTITION *ha_data= (HA_DATA_PARTITION*) table_share->ha_data; + pthread_mutex_unlock(&ha_data->LOCK_auto_inc); auto_increment_lock= FALSE; } } === modified file 'sql/table.cc' --- a/sql/table.cc 2010-07-20 18:07:36 +0000 +++ b/sql/table.cc 2010-10-01 11:39:04 +0000 @@ -425,6 +425,11 @@ void free_table_share(TABLE_SHARE *share key_info->flags= 0; } } + if (share->ha_data_destroy) + { + share->ha_data_destroy(share->ha_data); + share->ha_data_destroy= NULL; + } /* We must copy mem_root from share because share is allocated through it */ memcpy((char*) &mem_root, (char*) &share->mem_root, sizeof(mem_root)); free_root(&mem_root, MYF(0)); // Free's share @@ -1616,6 +1621,11 @@ static int open_binary_frm(THD *thd, TAB delete crypted; delete handler_file; hash_free(&share->name_hash); + if (share->ha_data_destroy) + { + share->ha_data_destroy(share->ha_data); + share->ha_data_destroy= NULL; + } open_table_error(share, error, share->open_errno, errarg); DBUG_RETURN(error); === modified file 'sql/table.h' --- a/sql/table.h 2010-08-02 07:50:15 +0000 +++ b/sql/table.h 2010-10-01 11:39:04 +0000 @@ -463,6 +463,7 @@ typedef struct st_table_share /** place to store storage engine specific data */ void *ha_data; + void (*ha_data_destroy)(void *); /* An optional destructor for ha_data. */ /* --===============6213266064766707673== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/mattias.jonsson@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: mattias.jonsson@stripped\ # infsa6ypr0cmxapj # target_branch: file:///Users/mattiasj/mysql-bzr/b51851-51-bt_small/ # testament_sha1: c65ae23ebcd1c341cfd75742b14e80000d981252 # timestamp: 2010-10-01 13:39:20 +0200 # base_revision_id: davi.arnaut@stripped\ # h459kwlylg6h745v # # Begin bundle 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 PYpx7RY3LmMX+LuSKcKEhEdr93g= --===============6213266064766707673==--