From: Mattias Jonsson Date: October 1 2010 11:40am Subject: bzr commit into mysql-5.1-bugteam branch (mattias.jonsson:3520) List-Archive: http://lists.mysql.com/commits/119635 Message-Id: <201010011141.o8UHId5E005024@rcsinet15.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============4859862168317046816==" --===============4859862168317046816== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///Users/mattiasj/mysql-bzr/topush-51-bugteam/ based on revid:georgi.kodinov@stripped 3520 Mattias Jonsson 2010-10-01 [merge] merge 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-09-10 09:52:35 +0000 +++ b/sql/ha_partition.cc 2010-10-01 11:39:49 +0000 @@ -2451,6 +2451,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 @@ -2607,6 +2622,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-09-07 15:56:43 +0000 +++ b/sql/ha_partition.h 2010-10-01 11:39:49 +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; @@ -948,8 +949,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() @@ -962,7 +964,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. */ /* --===============4859862168317046816== 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\ # efecregidigm4bz5 # target_branch: file:///Users/mattiasj/mysql-bzr/topush-51-bugteam/ # testament_sha1: 30811e15cdedf3e600ba2326b5206d5205dc2366 # timestamp: 2010-10-01 13:40:19 +0200 # source_branch: file:///Users/mattiasj/mysql-bzr/b49161-51-bugteam/ # base_revision_id: georgi.kodinov@stripped\ # hjzk6j9zzhbwurpd # # Begin bundle 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 --===============4859862168317046816==--