From: Mattias Jonsson Date: October 1 2010 11:35am Subject: bzr commit into mysql-5.1-bugteam branch (mattias.jonsson:3498) Bug#51851 List-Archive: http://lists.mysql.com/commits/119631 X-Bug: 51851 Message-Id: <201010011136.o8U8IN1F006430@rcsinet13.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============9004972815884875248==" --===============9004972815884875248== 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:34:54 +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:34:54 +0000 @@ -0,0 +1,28 @@ +--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 +perl; +open( INIT, ">init_file.txt"); +print INIT "abcd\n"; +close( INIT ); +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:34:54 +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:34:54 +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:34:54 +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:34:54 +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. */ /* --===============9004972815884875248== 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\ # uyrx9ypkuszh0f91 # target_branch: file:///Users/mattiasj/mysql-bzr/b51851-51-bt_small/ # testament_sha1: 52b42b738acd23e39775c409af51bd822e2b1d72 # timestamp: 2010-10-01 13:35:09 +0200 # base_revision_id: davi.arnaut@stripped\ # h459kwlylg6h745v # # Begin bundle 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 --===============9004972815884875248==--