From: Marc Alff Date: July 26 2010 5:20pm Subject: bzr push into mysql-next-mr branch (marc.alff:3168 to 3169) List-Archive: http://lists.mysql.com/commits/114367 Message-Id: <20100726172053.7E79F45E80@linux-su11.site> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============0875977680583265870==" --===============0875977680583265870== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline 3169 Marc Alff 2010-07-26 Fixed build break when compiling without the performance schema modified: include/mysql/psi/mysql_table.h mysys/thr_lock.c sql/handler.cc 3168 Alexander Nozdrin 2010-07-24 [merge] Auto-merge from mysql-next-mr-wl4895. added: Doxyfile-wl4895 include/mysql/psi/mysql_table.h mysql-test/suite/perfschema/include/table_io_basic_dml.inc mysql-test/suite/perfschema/include/table_io_cleanup_helper.inc mysql-test/suite/perfschema/include/table_io_result_helper.inc mysql-test/suite/perfschema/include/table_io_setup_helper.inc mysql-test/suite/perfschema/r/csv_table_io.result mysql-test/suite/perfschema/r/indexed_table_io.result mysql-test/suite/perfschema/r/innodb_table_io.result mysql-test/suite/perfschema/r/memory_table_io.result mysql-test/suite/perfschema/r/merge_table_io.result mysql-test/suite/perfschema/r/multi_table_io.result mysql-test/suite/perfschema/r/myisam_table_io.result mysql-test/suite/perfschema/r/part_table_io.result mysql-test/suite/perfschema/r/privilege_table_io.result mysql-test/suite/perfschema/r/rollback_table_io.result mysql-test/suite/perfschema/r/start_server_no_table_hdl.result mysql-test/suite/perfschema/r/start_server_no_table_inst.result mysql-test/suite/perfschema/r/start_server_nothing.result mysql-test/suite/perfschema/r/temp_table_io.result mysql-test/suite/perfschema/r/trigger_table_io.result mysql-test/suite/perfschema/r/view_table_io.result mysql-test/suite/perfschema/t/csv_table_io.test mysql-test/suite/perfschema/t/indexed_table_io.test mysql-test/suite/perfschema/t/innodb_table_io.test mysql-test/suite/perfschema/t/memory_table_io.test mysql-test/suite/perfschema/t/merge_table_io.test mysql-test/suite/perfschema/t/multi_table_io.test mysql-test/suite/perfschema/t/myisam_table_io.test mysql-test/suite/perfschema/t/part_table_io.test mysql-test/suite/perfschema/t/privilege_table_io.test mysql-test/suite/perfschema/t/rollback_table_io.test mysql-test/suite/perfschema/t/start_server_no_table_hdl-master.opt mysql-test/suite/perfschema/t/start_server_no_table_hdl.test mysql-test/suite/perfschema/t/start_server_no_table_inst-master.opt mysql-test/suite/perfschema/t/start_server_no_table_inst.test mysql-test/suite/perfschema/t/start_server_nothing-master.opt mysql-test/suite/perfschema/t/start_server_nothing.test mysql-test/suite/perfschema/t/temp_table_io.test mysql-test/suite/perfschema/t/trigger_table_io.test mysql-test/suite/perfschema/t/view_table_io.test storage/perfschema/table_helper.h modified: include/Makefile.am include/mysql/psi/psi.h include/mysql/psi/psi_abi_v1.h.pp include/mysql/psi/psi_abi_v2.h.pp mysql-test/include/mtr_check.sql mysql-test/r/mysqld--help-notwin.result mysql-test/r/mysqld--help-win.result mysql-test/suite/perfschema/include/start_server_common.inc mysql-test/suite/perfschema/r/dml_events_waits_current.result mysql-test/suite/perfschema/r/dml_events_waits_history.result mysql-test/suite/perfschema/r/dml_events_waits_history_long.result mysql-test/suite/perfschema/r/func_file_io.result mysql-test/suite/perfschema/r/func_mutex.result mysql-test/suite/perfschema/r/myisam_file_io.result mysql-test/suite/perfschema/r/no_threads.result mysql-test/suite/perfschema/r/selects.result mysql-test/suite/perfschema/r/start_server_no_cond_class.result mysql-test/suite/perfschema/r/start_server_no_cond_inst.result mysql-test/suite/perfschema/r/start_server_no_file_class.result mysql-test/suite/perfschema/r/start_server_no_file_inst.result mysql-test/suite/perfschema/r/start_server_no_mutex_class.result mysql-test/suite/perfschema/r/start_server_no_mutex_inst.result mysql-test/suite/perfschema/r/start_server_no_rwlock_class.result mysql-test/suite/perfschema/r/start_server_no_rwlock_inst.result mysql-test/suite/perfschema/r/start_server_no_thread_class.result mysql-test/suite/perfschema/r/start_server_no_thread_inst.result mysql-test/suite/perfschema/r/start_server_off.result mysql-test/suite/perfschema/r/start_server_on.result mysql-test/suite/perfschema/t/dml_events_waits_current.test mysql-test/suite/perfschema/t/dml_events_waits_history.test mysql-test/suite/perfschema/t/dml_events_waits_history_long.test mysql-test/suite/perfschema/t/func_file_io.test mysql-test/suite/perfschema/t/func_mutex.test mysql-test/suite/perfschema/t/myisam_file_io.test mysql-test/suite/perfschema/t/no_threads.test mysql-test/suite/perfschema/t/selects.test mysys/thr_lock.c sql/event_db_repository.cc sql/filesort.cc sql/ha_partition.cc sql/handler.cc sql/handler.h sql/item_subselect.cc sql/lock.cc sql/log_event.cc sql/log_event_old.cc sql/opt_range.cc sql/opt_sum.cc sql/records.cc sql/sp.cc sql/sql_acl.cc sql/sql_base.cc sql/sql_cursor.cc sql/sql_handler.cc sql/sql_help.cc sql/sql_insert.cc sql/sql_plugin.cc sql/sql_select.cc sql/sql_servers.cc sql/sql_show.cc sql/sql_table.cc sql/sql_udf.cc sql/sql_update.cc sql/table.cc sql/tztime.cc storage/perfschema/CMakeLists.txt storage/perfschema/Makefile.am storage/perfschema/ha_perfschema.cc storage/perfschema/pfs.cc storage/perfschema/pfs_column_types.h storage/perfschema/pfs_engine_table.h storage/perfschema/pfs_events_waits.h storage/perfschema/pfs_instr.cc storage/perfschema/pfs_instr.h storage/perfschema/pfs_instr_class.cc storage/perfschema/pfs_instr_class.h storage/perfschema/pfs_server.h storage/perfschema/table_all_instr.h storage/perfschema/table_events_waits.cc storage/perfschema/table_events_waits.h storage/perfschema/table_events_waits_summary.h storage/perfschema/table_setup_instruments.cc storage/perfschema/table_setup_instruments.h storage/perfschema/table_setup_objects.cc storage/perfschema/table_setup_objects.h storage/perfschema/unittest/pfs_instr-t.cc storage/perfschema/unittest/pfs_instr_class-t.cc === modified file 'include/mysql/psi/mysql_table.h' --- a/include/mysql/psi/mysql_table.h 2010-07-23 17:08:41 +0000 +++ b/include/mysql/psi/mysql_table.h 2010-07-26 17:20:27 +0000 @@ -30,35 +30,56 @@ */ /** + @def MYSQL_TABLE_WAIT_VARIABLES + Instrumentation helper for table waits. + This instrumentation declares local variables. + Do not use a ';' after this macro + @param LOCKER the locker + @param STATE the locker state + @sa MYSQL_START_TABLE_WAIT. + @sa MYSQL_END_TABLE_WAIT. +*/ +#ifdef HAVE_PSI_INTERFACE + #define MYSQL_TABLE_WAIT_VARIABLES(LOCKER, STATE) \ + struct PSI_table_locker* LOCKER; \ + PSI_table_locker_state STATE; +#else + #define MYSQL_TABLE_WAIT_VARIABLES(LOCKER, STATE) +#endif + +/** @def MYSQL_START_TABLE_WAIT Instrumentation helper for table waits. This instrumentation marks the start of a wait event. - @param STATE The locker state - @param PSI The instrumented table - @param OP The table operation to be performed - @param INDEX The table index used if any, or MAY_KEY. - @param FLAGS Per table operation flags. + @param LOCKER the locker + @param STATE the locker state + @param PSI the instrumented table + @param OP the table operation to be performed + @param INDEX the table index used if any, or MAY_KEY. + @param FLAGS per table operation flags. @sa MYSQL_END_TABLE_WAIT. */ #ifdef HAVE_PSI_INTERFACE - #define MYSQL_START_TABLE_WAIT(STATE, PSI, OP, INDEX, FLAGS) \ - inline_mysql_start_table_wait(STATE, PSI, OP, INDEX, FLAGS, __FILE__, __LINE__) + #define MYSQL_START_TABLE_WAIT(LOCKER, STATE, PSI, OP, INDEX, FLAGS) \ + LOCKER= inline_mysql_start_table_wait(STATE, PSI, \ + OP, INDEX, FLAGS, __FILE__, __LINE__) #else - #define MYSQL_START_TABLE_WAIT(STATE, PSI, OP, INDEX, FLAGS) \ - NULL + #define MYSQL_START_TABLE_WAIT(LOCKER, STATE, PSI, OP, INDEX, FLAGS) \ + do {} while (0) #endif /** @def MYSQL_END_TABLE_WAIT Instrumentation helper for table waits. This instrumentation marks the end of a wait event. + @param LOCKER the locker @sa MYSQL_START_TABLE_WAIT. */ #ifdef HAVE_PSI_INTERFACE - #define MYSQL_END_TABLE_WAIT(L) \ - inline_mysql_end_table_wait(L) + #define MYSQL_END_TABLE_WAIT(LOCKER) \ + inline_mysql_end_table_wait(LOCKER) #else - #define MYSQL_END_TABLE_WAIT(L) \ + #define MYSQL_END_TABLE_WAIT(LOCKER) \ do {} while (0) #endif === modified file 'mysys/thr_lock.c' --- a/mysys/thr_lock.c 2010-07-23 17:08:41 +0000 +++ b/mysys/thr_lock.c 2010-07-26 17:20:27 +0000 @@ -514,8 +514,7 @@ thr_lock(THR_LOCK_DATA *data, THR_LOCK_O enum enum_thr_lock_result result= THR_LOCK_SUCCESS; struct st_lock_list *wait_queue; THR_LOCK_DATA *lock_owner; - struct PSI_table_locker *locker; - PSI_table_locker_state state; + MYSQL_TABLE_WAIT_VARIABLES(locker, state) /* no ';' */ DBUG_ENTER("thr_lock"); data->next=0; @@ -523,7 +522,8 @@ thr_lock(THR_LOCK_DATA *data, THR_LOCK_O data->type=lock_type; data->owner= owner; /* Must be reset ! */ - locker= MYSQL_START_TABLE_WAIT(& state, data->m_psi, PSI_TABLE_LOCK, 0, lock_type); + MYSQL_START_TABLE_WAIT(locker, &state, data->m_psi, + PSI_TABLE_LOCK, 0, lock_type); mysql_mutex_lock(&lock->mutex); DBUG_PRINT("lock",("data: 0x%lx thread: 0x%lx lock: 0x%lx type: %d", === modified file 'sql/handler.cc' --- a/sql/handler.cc 2010-07-23 17:08:41 +0000 +++ b/sql/handler.cc 2010-07-26 17:20:27 +0000 @@ -2191,9 +2191,10 @@ int handler::ha_close(void) int handler::ha_rnd_next(uchar *buf) { int result; - struct PSI_table_locker *locker; - PSI_table_locker_state state; - locker= MYSQL_START_TABLE_WAIT(&state, m_psi, PSI_TABLE_FETCH_ROW, MAX_KEY, 0); + MYSQL_TABLE_WAIT_VARIABLES(locker, state) /* no ';' */ + + MYSQL_START_TABLE_WAIT(locker, &state, m_psi, + PSI_TABLE_FETCH_ROW, MAX_KEY, 0); result= rnd_next(buf); MYSQL_END_TABLE_WAIT(locker); return result; @@ -2202,9 +2203,10 @@ int handler::ha_rnd_next(uchar *buf) int handler::ha_rnd_pos(uchar *buf, uchar *pos) { int result; - struct PSI_table_locker *locker; - PSI_table_locker_state state; - locker= MYSQL_START_TABLE_WAIT(&state, m_psi, PSI_TABLE_FETCH_ROW, MAX_KEY, 0); + MYSQL_TABLE_WAIT_VARIABLES(locker, state) /* no ';' */ + + MYSQL_START_TABLE_WAIT(locker, &state, m_psi, + PSI_TABLE_FETCH_ROW, MAX_KEY, 0); result= rnd_pos(buf, pos); MYSQL_END_TABLE_WAIT(locker); return result; @@ -2215,9 +2217,10 @@ int handler::ha_index_read_map(uchar *bu enum ha_rkey_function find_flag) { int result; - struct PSI_table_locker *locker; - PSI_table_locker_state state; - locker= MYSQL_START_TABLE_WAIT(&state, m_psi, PSI_TABLE_FETCH_ROW, active_index, 0); + MYSQL_TABLE_WAIT_VARIABLES(locker, state) /* no ';' */ + + MYSQL_START_TABLE_WAIT(locker, &state, m_psi, + PSI_TABLE_FETCH_ROW, active_index, 0); result= index_read_map(buf, key, keypart_map, find_flag); MYSQL_END_TABLE_WAIT(locker); return result; @@ -2228,9 +2231,10 @@ int handler::ha_index_read_idx_map(uchar enum ha_rkey_function find_flag) { int result; - struct PSI_table_locker *locker; - PSI_table_locker_state state; - locker= MYSQL_START_TABLE_WAIT(&state, m_psi, PSI_TABLE_FETCH_ROW, index, 0); + MYSQL_TABLE_WAIT_VARIABLES(locker, state) /* no ';' */ + + MYSQL_START_TABLE_WAIT(locker, &state, m_psi, + PSI_TABLE_FETCH_ROW, index, 0); result= index_read_idx_map(buf, index, key, keypart_map, find_flag); MYSQL_END_TABLE_WAIT(locker); return result; @@ -2239,9 +2243,10 @@ int handler::ha_index_read_idx_map(uchar int handler::ha_index_next(uchar * buf) { int result; - struct PSI_table_locker *locker; - PSI_table_locker_state state; - locker= MYSQL_START_TABLE_WAIT(&state, m_psi, PSI_TABLE_FETCH_ROW, active_index, 0); + MYSQL_TABLE_WAIT_VARIABLES(locker, state) /* no ';' */ + + MYSQL_START_TABLE_WAIT(locker, &state, m_psi, + PSI_TABLE_FETCH_ROW, active_index, 0); result= index_next(buf); MYSQL_END_TABLE_WAIT(locker); return result; @@ -2250,9 +2255,10 @@ int handler::ha_index_next(uchar * buf) int handler::ha_index_prev(uchar * buf) { int result; - struct PSI_table_locker *locker; - PSI_table_locker_state state; - locker= MYSQL_START_TABLE_WAIT(&state, m_psi, PSI_TABLE_FETCH_ROW, active_index, 0); + MYSQL_TABLE_WAIT_VARIABLES(locker, state) /* no ';' */ + + MYSQL_START_TABLE_WAIT(locker, &state, m_psi, + PSI_TABLE_FETCH_ROW, active_index, 0); result= index_prev(buf); MYSQL_END_TABLE_WAIT(locker); return result; @@ -2261,9 +2267,10 @@ int handler::ha_index_prev(uchar * buf) int handler::ha_index_first(uchar * buf) { int result; - struct PSI_table_locker *locker; - PSI_table_locker_state state; - locker= MYSQL_START_TABLE_WAIT(&state, m_psi, PSI_TABLE_FETCH_ROW, active_index, 0); + MYSQL_TABLE_WAIT_VARIABLES(locker, state) /* no ';' */ + + MYSQL_START_TABLE_WAIT(locker, &state, m_psi, + PSI_TABLE_FETCH_ROW, active_index, 0); result= index_first(buf); MYSQL_END_TABLE_WAIT(locker); return result; @@ -2272,9 +2279,10 @@ int handler::ha_index_first(uchar * buf) int handler::ha_index_last(uchar * buf) { int result; - struct PSI_table_locker *locker; - PSI_table_locker_state state; - locker= MYSQL_START_TABLE_WAIT(&state, m_psi, PSI_TABLE_FETCH_ROW, active_index, 0); + MYSQL_TABLE_WAIT_VARIABLES(locker, state) /* no ';' */ + + MYSQL_START_TABLE_WAIT(locker, &state, m_psi, + PSI_TABLE_FETCH_ROW, active_index, 0); result= index_last(buf); MYSQL_END_TABLE_WAIT(locker); return result; @@ -2283,9 +2291,10 @@ int handler::ha_index_last(uchar * buf) int handler::ha_index_next_same(uchar *buf, const uchar *key, uint keylen) { int result; - struct PSI_table_locker *locker; - PSI_table_locker_state state; - locker= MYSQL_START_TABLE_WAIT(&state, m_psi, PSI_TABLE_FETCH_ROW, active_index, 0); + MYSQL_TABLE_WAIT_VARIABLES(locker, state) /* no ';' */ + + MYSQL_START_TABLE_WAIT(locker, &state, m_psi, + PSI_TABLE_FETCH_ROW, active_index, 0); result= index_next_same(buf, key, keylen); MYSQL_END_TABLE_WAIT(locker); return result; @@ -2295,9 +2304,10 @@ int handler::ha_index_read(uchar *buf, c enum ha_rkey_function find_flag) { int result; - struct PSI_table_locker *locker; - PSI_table_locker_state state; - locker= MYSQL_START_TABLE_WAIT(&state, m_psi, PSI_TABLE_FETCH_ROW, active_index, 0); + MYSQL_TABLE_WAIT_VARIABLES(locker, state) /* no ';' */ + + MYSQL_START_TABLE_WAIT(locker, &state, m_psi, + PSI_TABLE_FETCH_ROW, active_index, 0); result= index_read(buf, key, key_len, find_flag); MYSQL_END_TABLE_WAIT(locker); return result; @@ -2306,9 +2316,10 @@ int handler::ha_index_read(uchar *buf, c int handler::ha_index_read_last(uchar *buf, const uchar *key, uint key_len) { int result; - struct PSI_table_locker *locker; - PSI_table_locker_state state; - locker= MYSQL_START_TABLE_WAIT(&state, m_psi, PSI_TABLE_FETCH_ROW, active_index, 0); + MYSQL_TABLE_WAIT_VARIABLES(locker, state) /* no ';' */ + + MYSQL_START_TABLE_WAIT(locker, &state, m_psi, + PSI_TABLE_FETCH_ROW, active_index, 0); result= index_read_last(buf, key, key_len); MYSQL_END_TABLE_WAIT(locker); return result; @@ -4785,6 +4796,8 @@ static int binlog_log_row(TABLE* table, int handler::ha_external_lock(THD *thd, int lock_type) { + MYSQL_TABLE_WAIT_VARIABLES(locker, state) /* no ';' */ + DBUG_ENTER("handler::ha_external_lock"); /* Whether this is lock or unlock, this should be true, and is to verify that @@ -4814,10 +4827,8 @@ int handler::ha_external_lock(THD *thd, } } - struct PSI_table_locker *locker; - PSI_table_locker_state state; - locker= MYSQL_START_TABLE_WAIT(&state, m_psi, - PSI_TABLE_EXTERNAL_LOCK, MAX_KEY, lock_type); + MYSQL_START_TABLE_WAIT(locker, &state, m_psi, + PSI_TABLE_EXTERNAL_LOCK, MAX_KEY, lock_type); /* We cache the table flags if the locking succeeded. Otherwise, we keep them as they were when they were fetched in ha_open(). @@ -4876,13 +4887,14 @@ int handler::ha_write_row(uchar *buf) { int error; Log_func *log_func= Write_rows_log_event::binlog_row_logging_function; + MYSQL_TABLE_WAIT_VARIABLES(locker, state) /* no ';' */ + DBUG_ENTER("handler::ha_write_row"); MYSQL_INSERT_ROW_START(table_share->db.str, table_share->table_name.str); mark_trx_read_write(); - struct PSI_table_locker *locker; - PSI_table_locker_state state; - locker= MYSQL_START_TABLE_WAIT(&state, m_psi, PSI_TABLE_WRITE_ROW, MAX_KEY, 0); + MYSQL_START_TABLE_WAIT(locker, &state, m_psi, + PSI_TABLE_WRITE_ROW, MAX_KEY, 0); error= write_row(buf); @@ -4901,6 +4913,7 @@ int handler::ha_update_row(const uchar * { int error; Log_func *log_func= Update_rows_log_event::binlog_row_logging_function; + MYSQL_TABLE_WAIT_VARIABLES(locker, state) /* no ';' */ /* Some storage engines require that the new record is in record[0] @@ -4911,9 +4924,8 @@ int handler::ha_update_row(const uchar * MYSQL_UPDATE_ROW_START(table_share->db.str, table_share->table_name.str); mark_trx_read_write(); - struct PSI_table_locker *locker; - PSI_table_locker_state state; - locker= MYSQL_START_TABLE_WAIT(&state, m_psi, PSI_TABLE_UPDATE_ROW, MAX_KEY, 0); + MYSQL_START_TABLE_WAIT(locker, &state, m_psi, + PSI_TABLE_UPDATE_ROW, MAX_KEY, 0); error= update_row(old_data, new_data); @@ -4930,13 +4942,13 @@ int handler::ha_delete_row(const uchar * { int error; Log_func *log_func= Delete_rows_log_event::binlog_row_logging_function; + MYSQL_TABLE_WAIT_VARIABLES(locker, state) /* no ';' */ MYSQL_DELETE_ROW_START(table_share->db.str, table_share->table_name.str); mark_trx_read_write(); - struct PSI_table_locker *locker; - PSI_table_locker_state state; - locker= MYSQL_START_TABLE_WAIT(&state, m_psi, PSI_TABLE_DELETE_ROW, MAX_KEY, 0); + MYSQL_START_TABLE_WAIT(locker, &state, m_psi, + PSI_TABLE_DELETE_ROW, MAX_KEY, 0); error= delete_row(buf); --===============0875977680583265870== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/marc.alff@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: marc.alff@stripped # target_branch: file:///home/malff/BZR_TREE/mysql-next-mr-stage/ # testament_sha1: 3cabe5e17ed3a249c6b964f17f2edad3dcae0ddf # timestamp: 2010-07-26 11:20:53 -0600 # base_revision_id: alik@stripped # # Begin bundle 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 --===============0875977680583265870==--