From: Christopher Powers Date: March 10 2011 5:56pm Subject: bzr push into mysql-trunk branch (chris.powers:3246 to 3249) WL#4896 List-Archive: http://lists.mysql.com/commits/132781 Message-Id: <20110310175718.8218C1DB0335@xeno.mysql.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============5341200365823537009==" --===============5341200365823537009== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline 3249 Christopher Powers 2011-03-10 WL#4896 "Performance Schema Net IO" - Removed unused parameters from mysql_socket_accept() modified: include/mysql/psi/mysql_socket.h 3248 cpowers 2011-03-10 WL#4896 "Performance Schema Net IO" Socket summary tables - Added PFS_byte_stat constructor to initialize fields - This should also correct valgrind errors socket accept() - Removed wait -- used in listen() only - Moved PSI initialization to after accept() call to capture new fd Windows build - Pulled build break fixes from mysql-trunk modified: include/mysql/psi/mysql_socket.h storage/perfschema/pfs_stat.h storage/perfschema/pfs_visitor.cc 3247 Christopher Powers 2011-03-10 [merge] Merge with mysql-trunk added: mysql-test/suite/perfschema/r/relaylog.result mysql-test/suite/perfschema/t/relaylog.test modified: include/my_sys.h mysql-test/collections/default.weekly mysql-test/r/sp.result mysql-test/r/trigger.result mysql-test/t/disabled.def mysql-test/t/sp.test mysql-test/t/trigger.test mysys/my_conio.c sql/binlog.cc sql/binlog.h sql/item_strfunc.cc sql/item_strfunc.h sql/mysqld.cc sql/mysqld.h sql/rpl_rli.cc sql/sql_trigger.cc 3246 Christopher Powers 2011-03-09 WL#4896 "Performance Schema Net IO" - Fixed build warnings modified: include/mysql/psi/mysql_socket.h include/mysql/psi/psi.h include/mysql/psi/psi_abi_v1.h.pp mysql-test/suite/perfschema/r/start_server_nothing.result sql/mysqld.cc storage/perfschema/pfs.cc === modified file 'include/my_sys.h' --- a/include/my_sys.h 2011-03-09 20:54:55 +0000 +++ b/include/my_sys.h 2011-03-10 08:49:21 +0000 @@ -947,12 +947,12 @@ void my_security_attr_free(SECURITY_ATTR /* implemented in my_conio.c */ my_bool my_win_is_console(FILE *file); -char *my_win_console_readline(CHARSET_INFO *cs, char *mbbuf, size_t mbbufsize); -void my_win_console_write(CHARSET_INFO *cs, const char *data, size_t datalen); -void my_win_console_fputs(CHARSET_INFO *cs, const char *data); -void my_win_console_putc(CHARSET_INFO *cs, int c); -void my_win_console_vfprintf(CHARSET_INFO *cs, const char *fmt, va_list args); -int my_win_translate_command_line_args(CHARSET_INFO *cs, int *ac, char ***av); +char *my_win_console_readline(const CHARSET_INFO *cs, char *mbbuf, size_t mbbufsize); +void my_win_console_write(const CHARSET_INFO *cs, const char *data, size_t datalen); +void my_win_console_fputs(const CHARSET_INFO *cs, const char *data); +void my_win_console_putc(const CHARSET_INFO *cs, int c); +void my_win_console_vfprintf(const CHARSET_INFO *cs, const char *fmt, va_list args); +int my_win_translate_command_line_args(const CHARSET_INFO *cs, int *ac, char ***av); #endif /* __WIN__ */ #include === modified file 'include/mysql/psi/mysql_socket.h' --- a/include/mysql/psi/mysql_socket.h 2011-03-09 23:28:32 +0000 +++ b/include/mysql/psi/mysql_socket.h 2011-03-10 17:56:04 +0000 @@ -303,7 +303,7 @@ inline_mysql_end_socket_wait(struct PSI_ #ifdef HAVE_PSI_INTERFACE #define mysql_socket_accept(K, FD, A, LP) \ - inline_mysql_socket_accept(K, __FILE__, __LINE__, FD, A, LP) + inline_mysql_socket_accept(K, /*__FILE__, __LINE__,*/ FD, A, LP) #else #define mysql_socket_accept(FD, A, LP) \ inline_mysql_socket_accept(FD, A, LP) @@ -785,35 +785,23 @@ static inline MYSQL_SOCKET inline_mysql_socket_accept ( #ifdef HAVE_PSI_INTERFACE - PSI_socket_key key, const char *src_file, uint src_line, + PSI_socket_key key, //const char *src_file, uint src_line, #endif MYSQL_SOCKET socket_listen, struct sockaddr *addr, socklen_t *addr_len) { MYSQL_SOCKET socket_accept = {0, NULL}; -#ifdef HAVE_PSI_INTERFACE - struct PSI_socket_locker *locker= NULL; - PSI_socket_locker_state state; - - socket_accept.m_psi = PSI_server ? PSI_server->init_socket(key, NULL) // TBD: Doc this - : NULL; - if (likely(PSI_server != NULL && socket_accept.m_psi != NULL)) - { - locker= PSI_server->get_thread_socket_locker(&state, socket_accept.m_psi, PSI_SOCKET_CONNECT); - if (likely(locker !=NULL)) - PSI_server->start_socket_wait(locker, (size_t)0, src_file, src_line); - } -#endif socket_accept.fd= accept(socket_listen.fd, addr, addr_len); -#ifdef HAVE_PSI_INTERFACE - /** Set socket address info */ + /** Initialize the instrument with the new socket descriptor and address */ + #ifdef HAVE_PSI_INTERFACE + socket_accept.m_psi = PSI_server ? + PSI_server->init_socket(key, (const void *)&socket_accept.fd) : NULL; + if (likely(PSI_server != NULL && socket_accept.m_psi != NULL - && socket_accept.fd != -1)) + && socket_accept.fd != -1)) PSI_server->set_socket_info(socket_accept.m_psi, &socket_accept.fd, addr, addr_len); - if (likely(locker != NULL)) - PSI_server->end_socket_wait(locker, (size_t)0); #endif return socket_accept; } === modified file 'mysql-test/collections/default.weekly' --- a/mysql-test/collections/default.weekly 2011-02-08 13:56:25 +0000 +++ b/mysql-test/collections/default.weekly 2011-03-10 04:29:36 +0000 @@ -1,8 +1,8 @@ -perl mysql-test-run.pl --timer --force --debug-server --parallel=auto --comment=big-tests --experimental=collections/default.experimental --vardir=var-big-tests --big-test --testcase-timeout=60 --suite-timeout=600 main.alter_table-big main.archive-big main.count_distinct3 main.create-big main.events_stress main.events_time_zone main.information_schema-big main.log_tables-big main.merge-big main.mysqlbinlog_row_big main.read_many_rows_innodb main.ssl-big main.sum_distinct-big main.type_newdecimal-big main.variables-big parts.part_supported_sql_func_innodb parts.partition_alter1_1_2_innodb parts.partition_alter1_2_innodb parts.partition_alter2_1_1_innodb parts.partition_alter2_1_2_innodb parts.partition_alter2_2_2_innodb parts.partition_alter4_innodb funcs_1.myisam_views-big -perl mysql-test-run.pl --timer --force --debug-server --parallel=auto --comment=eits-tests-myisam-engine --experimental=collections/default.experimental --vardir=var-stmt-eits-tests-myisam-engine --suite=engines/iuds,engines/funcs --suite-timeout=500 --max-test-fail=0 --retry-failure=0 --mysqld=--default-storage-engine=myisam -perl mysql-test-run.pl --timer --force --debug-server --parallel=auto --comment=eits-rpl-binlog-row-tests-myisam-engine --experimental=collections/default.experimental --vardir=var-binlog-row-eits-tests-myisam-engine --suite=engines/iuds,engines/funcs --suite-timeout=500 --max-test-fail=0 --retry-failure=0 --mysqld=--default-storage-engine=myisam --do-test=rpl --mysqld=--binlog-format=row -perl mysql-test-run.pl --timer --force --debug-server --parallel=auto --comment=eits-rpl-binlog-mixed-tests-myisam-engine --experimental=collections/default.experimental --vardir=var-binlog-mixed-eits-tests-myisam-engine --suite=engines/iuds,engines/funcs --suite-timeout=500 --max-test-fail=0 --retry-failure=0 --mysqld=--default-storage-engine=myisam --do-test=rpl --mysqld=--binlog-format=mixed -perl mysql-test-run.pl --timer --force --debug-server --parallel=auto --comment=eits-tests-innodb-engine --experimental=collections/default.experimental --vardir=var-stmt-eits-tests-innodb-engine --suite=engines/iuds,engines/funcs --suite-timeout=500 --max-test-fail=0 --retry-failure=0 --mysqld=--default-storage-engine=innodb --mysqld=--innodb -perl mysql-test-run.pl --timer --force --debug-server --parallel=auto --comment=eits-rpl-binlog-row-tests-innodb-engine --experimental=collections/default.experimental --vardir=var-binlog-row-eits-tests-innodb-engine --suite=engines/iuds,engines/funcs --suite-timeout=500 --max-test-fail=0 --retry-failure=0 --mysqld=--default-storage-engine=innodb --mysqld=--innodb --do-test=rpl --mysqld=--binlog-format=row -perl mysql-test-run.pl --timer --force --debug-server --parallel=auto --comment=eits-rpl-binlog-mixed-tests-innodb-engine --experimental=collections/default.experimental --vardir=var-binlog-mixed-eits-tests-innodb-engine --suite=engines/iuds,engines/funcs --suite-timeout=500 --max-test-fail=0 --retry-failure=0 --mysqld=--default-storage-engine=innodb --mysqld=--innodb --do-test=rpl --mysqld=--binlog-format=mixed -perl mysql-test-run.pl --timer --force --debug-server --parallel=auto --comment=all_binlog_checksum --experimental=collections/default.experimental --mysqld=--binlog-checksum=CRC32 --vardir=var-all_binlog_checksum --suite=main,binlog,innodb,federated,rpl,sys_vars,perfschema +perl mysql-test-run.pl --timer --force --debug-server --parallel=auto --comment=big-tests --experimental=collections/default.experimental --vardir=var-big-tests --big-test --testcase-timeout=60 --suite-timeout=600 main.alter_table-big main.archive-big main.count_distinct3 main.create-big main.events_stress main.events_time_zone main.information_schema-big main.log_tables-big main.merge-big main.mysqlbinlog_row_big main.read_many_rows_innodb main.ssl-big main.sum_distinct-big main.type_newdecimal-big main.variables-big parts.part_supported_sql_func_innodb parts.partition_alter1_1_2_innodb parts.partition_alter1_2_innodb parts.partition_alter2_1_1_innodb parts.partition_alter2_1_2_innodb parts.partition_alter2_2_2_innodb parts.partition_alter4_innodb funcs_1.myisam_views-big --skip-test-list=collections/disabled-weekly.list +perl mysql-test-run.pl --timer --force --debug-server --parallel=auto --comment=eits-tests-myisam-engine --experimental=collections/default.experimental --vardir=var-stmt-eits-tests-myisam-engine --suite=engines/iuds,engines/funcs --suite-timeout=500 --max-test-fail=0 --retry-failure=0 --mysqld=--default-storage-engine=myisam --skip-test-list=collections/disabled-weekly.list +perl mysql-test-run.pl --timer --force --debug-server --parallel=auto --comment=eits-rpl-binlog-row-tests-myisam-engine --experimental=collections/default.experimental --vardir=var-binlog-row-eits-tests-myisam-engine --suite=engines/iuds,engines/funcs --suite-timeout=500 --max-test-fail=0 --retry-failure=0 --mysqld=--default-storage-engine=myisam --do-test=rpl --mysqld=--binlog-format=row --skip-test-list=collections/disabled-weekly.list +perl mysql-test-run.pl --timer --force --debug-server --parallel=auto --comment=eits-rpl-binlog-mixed-tests-myisam-engine --experimental=collections/default.experimental --vardir=var-binlog-mixed-eits-tests-myisam-engine --suite=engines/iuds,engines/funcs --suite-timeout=500 --max-test-fail=0 --retry-failure=0 --mysqld=--default-storage-engine=myisam --do-test=rpl --mysqld=--binlog-format=mixed --skip-test-list=collections/disabled-weekly.list +perl mysql-test-run.pl --timer --force --debug-server --parallel=auto --comment=eits-tests-innodb-engine --experimental=collections/default.experimental --vardir=var-stmt-eits-tests-innodb-engine --suite=engines/iuds,engines/funcs --suite-timeout=500 --max-test-fail=0 --retry-failure=0 --mysqld=--default-storage-engine=innodb --mysqld=--innodb --skip-test-list=collections/disabled-weekly.list +perl mysql-test-run.pl --timer --force --debug-server --parallel=auto --comment=eits-rpl-binlog-row-tests-innodb-engine --experimental=collections/default.experimental --vardir=var-binlog-row-eits-tests-innodb-engine --suite=engines/iuds,engines/funcs --suite-timeout=500 --max-test-fail=0 --retry-failure=0 --mysqld=--default-storage-engine=innodb --mysqld=--innodb --do-test=rpl --mysqld=--binlog-format=row --skip-test-list=collections/disabled-weekly.list +perl mysql-test-run.pl --timer --force --debug-server --parallel=auto --comment=eits-rpl-binlog-mixed-tests-innodb-engine --experimental=collections/default.experimental --vardir=var-binlog-mixed-eits-tests-innodb-engine --suite=engines/iuds,engines/funcs --suite-timeout=500 --max-test-fail=0 --retry-failure=0 --mysqld=--default-storage-engine=innodb --mysqld=--innodb --do-test=rpl --mysqld=--binlog-format=mixed --skip-test-list=collections/disabled-weekly.list +perl mysql-test-run.pl --timer --force --debug-server --parallel=auto --comment=all_binlog_checksum --experimental=collections/default.experimental --mysqld=--binlog-checksum=CRC32 --vardir=var-all_binlog_checksum --suite=main,binlog,innodb,federated,rpl,sys_vars,perfschema --skip-test-list=collections/disabled-weekly.list === modified file 'mysql-test/r/sp.result' --- a/mysql-test/r/sp.result 2010-11-10 11:26:45 +0000 +++ b/mysql-test/r/sp.result 2011-03-10 08:33:54 +0000 @@ -7452,4 +7452,34 @@ c1 # Cleanup drop table t1; drop procedure p1; + +# -- +# -- Bug 11765684 - 58674: SP-cache does not detect changes in +# -- pre-locking list caused by triggers +# --- +DROP TABLE IF EXISTS t1; +DROP TABLE IF EXISTS t2; +DROP TABLE IF EXISTS t3; +DROP PROCEDURE IF EXISTS p1; +CREATE TABLE t1(a INT); +CREATE TABLE t2(a INT); +CREATE TABLE t3(a INT); +CREATE PROCEDURE p1() +INSERT INTO t1(a) VALUES (1); + +CREATE TRIGGER t1_ai AFTER INSERT ON t1 +FOR EACH ROW +INSERT INTO t2(a) VALUES (new.a); + +CALL p1(); + +CREATE TRIGGER t1_bi BEFORE INSERT ON t1 +FOR EACH ROW +INSERT INTO t3(a) VALUES (new.a); + +CALL p1(); + +DROP TABLE t1, t2, t3; +DROP PROCEDURE p1; + # End of 5.5 test === modified file 'mysql-test/r/trigger.result' --- a/mysql-test/r/trigger.result 2011-02-15 11:47:33 +0000 +++ b/mysql-test/r/trigger.result 2011-03-10 08:33:54 +0000 @@ -809,7 +809,6 @@ drop trigger t1_bi; create trigger t1_bi after insert on t1 for each row insert into t3 values (new.id); execute stmt1; call p1(); -ERROR 42S02: Table 'test.t3' doesn't exist deallocate prepare stmt1; drop procedure p1; drop table t1, t2, t3; === added file 'mysql-test/suite/perfschema/r/relaylog.result' --- a/mysql-test/suite/perfschema/r/relaylog.result 1970-01-01 00:00:00 +0000 +++ b/mysql-test/suite/perfschema/r/relaylog.result 2011-03-10 12:30:05 +0000 @@ -0,0 +1,161 @@ +include/master-slave.inc +[connection master] +drop table if exists test.t1; +reset master; +create table test.t1(a int); +drop table test.t1; +show binlog events from ; +Log_name Pos Event_type Server_id End_log_pos Info +slave-bin.000001 # Query # # use `test`; create table test.t1(a int) +slave-bin.000001 # Query # # use `test`; DROP TABLE `t1` /* generated by server */ +"============ Performance schema on master ============" +select +substring(file_name, locate("master-", file_name)) as FILE_NAME, +EVENT_NAME, +if (count_read > 0, "MANY", "NONE") as COUNT_READ, +if (count_write > 0,"MANY", "NONE") as COUNT_WRITE, +if (sum_number_of_bytes_read > 0, "MANY", "NONE") as SUM_NUMBER_OF_BYTES_READ, +if (sum_number_of_bytes_write > 0, "MANY", "NONE") as SUM_NUMBER_OF_BYTES_WRITE +from performance_schema.file_summary_by_instance +where file_name like "%master-%" order by file_name; +FILE_NAME EVENT_NAME COUNT_READ COUNT_WRITE SUM_NUMBER_OF_BYTES_READ SUM_NUMBER_OF_BYTES_WRITE +master-bin.000001 wait/io/file/sql/binlog MANY MANY MANY MANY +master-bin.index wait/io/file/sql/binlog_index NONE NONE NONE NONE +select * from performance_schema.file_summary_by_instance +where file_name like "%slave-%" order by file_name; +FILE_NAME EVENT_NAME COUNT_READ COUNT_WRITE SUM_NUMBER_OF_BYTES_READ SUM_NUMBER_OF_BYTES_WRITE +"Expect a master binlog + binlog_index" +select +substring(file_name, locate("master-", file_name)) as FILE_NAME, +EVENT_NAME, +if (count_read > 0, "MANY", "NONE") as COUNT_READ, +if (count_write > 0,"MANY", "NONE") as COUNT_WRITE, +if (sum_number_of_bytes_read > 0, "MANY", "NONE") as SUM_NUMBER_OF_BYTES_READ, +if (sum_number_of_bytes_write > 0, "MANY", "NONE") as SUM_NUMBER_OF_BYTES_WRITE +from performance_schema.file_summary_by_instance +where event_name like "%binlog%" order by file_name; +FILE_NAME EVENT_NAME COUNT_READ COUNT_WRITE SUM_NUMBER_OF_BYTES_READ SUM_NUMBER_OF_BYTES_WRITE +master-bin.000001 wait/io/file/sql/binlog MANY MANY MANY MANY +master-bin.index wait/io/file/sql/binlog_index NONE NONE NONE NONE +select +EVENT_NAME, +if (count_read > 0, "MANY", "NONE") as COUNT_READ, +if (count_write > 0,"MANY", "NONE") as COUNT_WRITE, +if (sum_number_of_bytes_read > 0, "MANY", "NONE") as SUM_NUMBER_OF_BYTES_READ, +if (sum_number_of_bytes_write > 0, "MANY", "NONE") as SUM_NUMBER_OF_BYTES_WRITE +from performance_schema.file_summary_by_event_name +where event_name like "%binlog%" order by event_name; +EVENT_NAME COUNT_READ COUNT_WRITE SUM_NUMBER_OF_BYTES_READ SUM_NUMBER_OF_BYTES_WRITE +wait/io/file/sql/binlog MANY MANY MANY MANY +wait/io/file/sql/binlog_index MANY NONE NONE NONE +select +EVENT_NAME, +if (count_star > 0, "MANY", "NONE") as COUNT_STAR +from performance_schema.events_waits_summary_global_by_event_name +where event_name like "%MYSQL_BIN_LOG%" order by event_name; +EVENT_NAME COUNT_STAR +wait/synch/cond/sql/MYSQL_BIN_LOG::COND_prep_xids NONE +wait/synch/cond/sql/MYSQL_BIN_LOG::update_cond MANY +wait/synch/mutex/sql/MYSQL_BIN_LOG::LOCK_index MANY +wait/synch/mutex/sql/MYSQL_BIN_LOG::LOCK_prep_xids NONE +"Expect no slave relay log" +select * from performance_schema.file_summary_by_instance +where event_name like "%relaylog%" order by file_name; +FILE_NAME EVENT_NAME COUNT_READ COUNT_WRITE SUM_NUMBER_OF_BYTES_READ SUM_NUMBER_OF_BYTES_WRITE +select * from performance_schema.file_summary_by_event_name +where event_name like "%relaylog%" order by event_name; +EVENT_NAME COUNT_READ COUNT_WRITE SUM_NUMBER_OF_BYTES_READ SUM_NUMBER_OF_BYTES_WRITE +wait/io/file/sql/relaylog 0 0 0 0 +wait/io/file/sql/relaylog_index 0 0 0 0 +select * from performance_schema.events_waits_summary_global_by_event_name +where event_name like "%MYSQL_RELAY_LOG%" order by event_name; +EVENT_NAME COUNT_STAR SUM_TIMER_WAIT MIN_TIMER_WAIT AVG_TIMER_WAIT MAX_TIMER_WAIT +wait/synch/cond/sql/MYSQL_RELAY_LOG::update_cond 0 0 0 0 0 +wait/synch/mutex/sql/MYSQL_RELAY_LOG::LOCK_index 0 0 0 0 0 +"============ Performance schema on slave ============" +select * from performance_schema.file_summary_by_instance +where file_name like "%master-%" order by file_name; +FILE_NAME EVENT_NAME COUNT_READ COUNT_WRITE SUM_NUMBER_OF_BYTES_READ SUM_NUMBER_OF_BYTES_WRITE +select +substring(file_name, locate("slave-", file_name)) as FILE_NAME, +EVENT_NAME, +if (count_read > 0, "MANY", "NONE") as COUNT_READ, +if (count_write > 0,"MANY", "NONE") as COUNT_WRITE, +if (sum_number_of_bytes_read > 0, "MANY", "NONE") as SUM_NUMBER_OF_BYTES_READ, +if (sum_number_of_bytes_write > 0, "MANY", "NONE") as SUM_NUMBER_OF_BYTES_WRITE +from performance_schema.file_summary_by_instance +where file_name like "%slave-%" order by file_name; +FILE_NAME EVENT_NAME COUNT_READ COUNT_WRITE SUM_NUMBER_OF_BYTES_READ SUM_NUMBER_OF_BYTES_WRITE +slave-bin.000001 wait/io/file/sql/binlog MANY MANY MANY MANY +slave-bin.index wait/io/file/sql/binlog_index NONE NONE NONE NONE +slave-relay-bin.000001 wait/io/file/sql/relaylog MANY MANY MANY MANY +slave-relay-bin.000002 wait/io/file/sql/relaylog MANY MANY MANY MANY +slave-relay-bin.index wait/io/file/sql/binlog_index NONE NONE NONE NONE +"Expect a slave binlog + binlog_index" +select +substring(file_name, locate("slave-", file_name)) as FILE_NAME, +EVENT_NAME, +if (count_read > 0, "MANY", "NONE") as COUNT_READ, +if (count_write > 0,"MANY", "NONE") as COUNT_WRITE, +if (sum_number_of_bytes_read > 0, "MANY", "NONE") as SUM_NUMBER_OF_BYTES_READ, +if (sum_number_of_bytes_write > 0, "MANY", "NONE") as SUM_NUMBER_OF_BYTES_WRITE +from performance_schema.file_summary_by_instance +where event_name like "%binlog%" order by file_name; +FILE_NAME EVENT_NAME COUNT_READ COUNT_WRITE SUM_NUMBER_OF_BYTES_READ SUM_NUMBER_OF_BYTES_WRITE +slave-bin.000001 wait/io/file/sql/binlog MANY MANY MANY MANY +slave-bin.index wait/io/file/sql/binlog_index NONE NONE NONE NONE +slave-relay-bin.index wait/io/file/sql/binlog_index NONE NONE NONE NONE +select +EVENT_NAME, +if (count_read > 0, "MANY", "NONE") as COUNT_READ, +if (count_write > 0,"MANY", "NONE") as COUNT_WRITE, +if (sum_number_of_bytes_read > 0, "MANY", "NONE") as SUM_NUMBER_OF_BYTES_READ, +if (sum_number_of_bytes_write > 0, "MANY", "NONE") as SUM_NUMBER_OF_BYTES_WRITE +from performance_schema.file_summary_by_event_name +where event_name like "%binlog%" order by event_name; +EVENT_NAME COUNT_READ COUNT_WRITE SUM_NUMBER_OF_BYTES_READ SUM_NUMBER_OF_BYTES_WRITE +wait/io/file/sql/binlog MANY MANY MANY MANY +wait/io/file/sql/binlog_index MANY NONE MANY NONE +select +EVENT_NAME, +if (count_star > 0, "MANY", "NONE") as COUNT_STAR +from performance_schema.events_waits_summary_global_by_event_name +where event_name like "%MYSQL_BIN_LOG%" order by event_name; +EVENT_NAME COUNT_STAR +wait/synch/cond/sql/MYSQL_BIN_LOG::COND_prep_xids NONE +wait/synch/cond/sql/MYSQL_BIN_LOG::update_cond NONE +wait/synch/mutex/sql/MYSQL_BIN_LOG::LOCK_index MANY +wait/synch/mutex/sql/MYSQL_BIN_LOG::LOCK_prep_xids NONE +"Expect a slave relay log" +select +substring(file_name, locate("slave-", file_name)) as FILE_NAME, +EVENT_NAME, +if (count_read > 0, "MANY", "NONE") as COUNT_READ, +if (count_write > 0,"MANY", "NONE") as COUNT_WRITE, +if (sum_number_of_bytes_read > 0, "MANY", "NONE") as SUM_NUMBER_OF_BYTES_READ, +if (sum_number_of_bytes_write > 0, "MANY", "NONE") as SUM_NUMBER_OF_BYTES_WRITE +from performance_schema.file_summary_by_instance +where event_name like "%relaylog%" order by file_name; +FILE_NAME EVENT_NAME COUNT_READ COUNT_WRITE SUM_NUMBER_OF_BYTES_READ SUM_NUMBER_OF_BYTES_WRITE +slave-relay-bin.000001 wait/io/file/sql/relaylog MANY MANY MANY MANY +slave-relay-bin.000002 wait/io/file/sql/relaylog MANY MANY MANY MANY +select +EVENT_NAME, +if (count_read > 0, "MANY", "NONE") as COUNT_READ, +if (count_write > 0,"MANY", "NONE") as COUNT_WRITE, +if (sum_number_of_bytes_read > 0, "MANY", "NONE") as SUM_NUMBER_OF_BYTES_READ, +if (sum_number_of_bytes_write > 0, "MANY", "NONE") as SUM_NUMBER_OF_BYTES_WRITE +from performance_schema.file_summary_by_event_name +where event_name like "%relaylog%" order by event_name; +EVENT_NAME COUNT_READ COUNT_WRITE SUM_NUMBER_OF_BYTES_READ SUM_NUMBER_OF_BYTES_WRITE +wait/io/file/sql/relaylog MANY MANY MANY MANY +wait/io/file/sql/relaylog_index MANY NONE NONE NONE +select +EVENT_NAME, +if (count_star > 0, "MANY", "NONE") as COUNT_STAR +from performance_schema.events_waits_summary_global_by_event_name +where event_name like "%MYSQL_RELAY_LOG%" order by event_name; +EVENT_NAME COUNT_STAR +wait/synch/cond/sql/MYSQL_RELAY_LOG::update_cond MANY +wait/synch/mutex/sql/MYSQL_RELAY_LOG::LOCK_index MANY +include/stop_slave.inc === added file 'mysql-test/suite/perfschema/t/relaylog.test' --- a/mysql-test/suite/perfschema/t/relaylog.test 1970-01-01 00:00:00 +0000 +++ b/mysql-test/suite/perfschema/t/relaylog.test 2011-03-10 12:02:28 +0000 @@ -0,0 +1,159 @@ +# Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA + +# Tests for PERFORMANCE_SCHEMA + +--source include/have_log_bin.inc +--source include/not_embedded.inc +--source include/have_perfschema.inc +--source include/master-slave.inc + +--disable_warnings +drop table if exists test.t1; +--sync_slave_with_master +reset master; +--enable_warnings + +create table test.t1(a int); +drop table test.t1; + +--source include/show_binlog_events.inc + +connection master; +-- echo "============ Performance schema on master ============" + +select + substring(file_name, locate("master-", file_name)) as FILE_NAME, + EVENT_NAME, + if (count_read > 0, "MANY", "NONE") as COUNT_READ, + if (count_write > 0,"MANY", "NONE") as COUNT_WRITE, + if (sum_number_of_bytes_read > 0, "MANY", "NONE") as SUM_NUMBER_OF_BYTES_READ, + if (sum_number_of_bytes_write > 0, "MANY", "NONE") as SUM_NUMBER_OF_BYTES_WRITE + from performance_schema.file_summary_by_instance + where file_name like "%master-%" order by file_name; + +select * from performance_schema.file_summary_by_instance + where file_name like "%slave-%" order by file_name; + +-- echo "Expect a master binlog + binlog_index" + +select + substring(file_name, locate("master-", file_name)) as FILE_NAME, + EVENT_NAME, + if (count_read > 0, "MANY", "NONE") as COUNT_READ, + if (count_write > 0,"MANY", "NONE") as COUNT_WRITE, + if (sum_number_of_bytes_read > 0, "MANY", "NONE") as SUM_NUMBER_OF_BYTES_READ, + if (sum_number_of_bytes_write > 0, "MANY", "NONE") as SUM_NUMBER_OF_BYTES_WRITE + from performance_schema.file_summary_by_instance + where event_name like "%binlog%" order by file_name; + +select + EVENT_NAME, + if (count_read > 0, "MANY", "NONE") as COUNT_READ, + if (count_write > 0,"MANY", "NONE") as COUNT_WRITE, + if (sum_number_of_bytes_read > 0, "MANY", "NONE") as SUM_NUMBER_OF_BYTES_READ, + if (sum_number_of_bytes_write > 0, "MANY", "NONE") as SUM_NUMBER_OF_BYTES_WRITE + from performance_schema.file_summary_by_event_name + where event_name like "%binlog%" order by event_name; + +select + EVENT_NAME, + if (count_star > 0, "MANY", "NONE") as COUNT_STAR + from performance_schema.events_waits_summary_global_by_event_name + where event_name like "%MYSQL_BIN_LOG%" order by event_name; + +-- echo "Expect no slave relay log" + +select * from performance_schema.file_summary_by_instance + where event_name like "%relaylog%" order by file_name; + +select * from performance_schema.file_summary_by_event_name + where event_name like "%relaylog%" order by event_name; + +select * from performance_schema.events_waits_summary_global_by_event_name + where event_name like "%MYSQL_RELAY_LOG%" order by event_name; + +sync_slave_with_master; +-- echo "============ Performance schema on slave ============" + +select * from performance_schema.file_summary_by_instance + where file_name like "%master-%" order by file_name; + +select + substring(file_name, locate("slave-", file_name)) as FILE_NAME, + EVENT_NAME, + if (count_read > 0, "MANY", "NONE") as COUNT_READ, + if (count_write > 0,"MANY", "NONE") as COUNT_WRITE, + if (sum_number_of_bytes_read > 0, "MANY", "NONE") as SUM_NUMBER_OF_BYTES_READ, + if (sum_number_of_bytes_write > 0, "MANY", "NONE") as SUM_NUMBER_OF_BYTES_WRITE + from performance_schema.file_summary_by_instance + where file_name like "%slave-%" order by file_name; + +-- echo "Expect a slave binlog + binlog_index" + +select + substring(file_name, locate("slave-", file_name)) as FILE_NAME, + EVENT_NAME, + if (count_read > 0, "MANY", "NONE") as COUNT_READ, + if (count_write > 0,"MANY", "NONE") as COUNT_WRITE, + if (sum_number_of_bytes_read > 0, "MANY", "NONE") as SUM_NUMBER_OF_BYTES_READ, + if (sum_number_of_bytes_write > 0, "MANY", "NONE") as SUM_NUMBER_OF_BYTES_WRITE + from performance_schema.file_summary_by_instance + where event_name like "%binlog%" order by file_name; + +select + EVENT_NAME, + if (count_read > 0, "MANY", "NONE") as COUNT_READ, + if (count_write > 0,"MANY", "NONE") as COUNT_WRITE, + if (sum_number_of_bytes_read > 0, "MANY", "NONE") as SUM_NUMBER_OF_BYTES_READ, + if (sum_number_of_bytes_write > 0, "MANY", "NONE") as SUM_NUMBER_OF_BYTES_WRITE + from performance_schema.file_summary_by_event_name + where event_name like "%binlog%" order by event_name; + +select + EVENT_NAME, + if (count_star > 0, "MANY", "NONE") as COUNT_STAR + from performance_schema.events_waits_summary_global_by_event_name + where event_name like "%MYSQL_BIN_LOG%" order by event_name; + +-- echo "Expect a slave relay log" + +select + substring(file_name, locate("slave-", file_name)) as FILE_NAME, + EVENT_NAME, + if (count_read > 0, "MANY", "NONE") as COUNT_READ, + if (count_write > 0,"MANY", "NONE") as COUNT_WRITE, + if (sum_number_of_bytes_read > 0, "MANY", "NONE") as SUM_NUMBER_OF_BYTES_READ, + if (sum_number_of_bytes_write > 0, "MANY", "NONE") as SUM_NUMBER_OF_BYTES_WRITE + from performance_schema.file_summary_by_instance + where event_name like "%relaylog%" order by file_name; + +select + EVENT_NAME, + if (count_read > 0, "MANY", "NONE") as COUNT_READ, + if (count_write > 0,"MANY", "NONE") as COUNT_WRITE, + if (sum_number_of_bytes_read > 0, "MANY", "NONE") as SUM_NUMBER_OF_BYTES_READ, + if (sum_number_of_bytes_write > 0, "MANY", "NONE") as SUM_NUMBER_OF_BYTES_WRITE + from performance_schema.file_summary_by_event_name + where event_name like "%relaylog%" order by event_name; + +select + EVENT_NAME, + if (count_star > 0, "MANY", "NONE") as COUNT_STAR + from performance_schema.events_waits_summary_global_by_event_name + where event_name like "%MYSQL_RELAY_LOG%" order by event_name; + +--source include/stop_slave.inc + === modified file 'mysql-test/t/disabled.def' --- a/mysql-test/t/disabled.def 2011-03-01 14:47:01 +0000 +++ b/mysql-test/t/disabled.def 2011-03-10 04:19:54 +0000 @@ -16,3 +16,4 @@ read_many_rows_innodb : Bug#37635 201 sum_distinct-big : Bug#56927 2010-11-15 mattiasj was not tested alter_table-big : Bug#37248 2010-11-15 mattiasj was not tested create-big : Bug#37248 2010-11-15 mattiasj was not tested +archive-big : Bug#11817185 2011-03-10 Anitha Disabled since this leads to timeout on Solaris Sparc === modified file 'mysql-test/t/sp.test' --- a/mysql-test/t/sp.test 2010-08-04 10:34:01 +0000 +++ b/mysql-test/t/sp.test 2011-03-10 08:33:54 +0000 @@ -8713,4 +8713,45 @@ call p1(3, 2); drop table t1; drop procedure p1; +--echo +--echo # -- +--echo # -- Bug 11765684 - 58674: SP-cache does not detect changes in +--echo # -- pre-locking list caused by triggers +--echo # --- + +--disable_warnings +DROP TABLE IF EXISTS t1; +DROP TABLE IF EXISTS t2; +DROP TABLE IF EXISTS t3; +DROP PROCEDURE IF EXISTS p1; +--enable_warnings + +CREATE TABLE t1(a INT); +CREATE TABLE t2(a INT); +CREATE TABLE t3(a INT); + +CREATE PROCEDURE p1() + INSERT INTO t1(a) VALUES (1); + +--echo +CREATE TRIGGER t1_ai AFTER INSERT ON t1 + FOR EACH ROW + INSERT INTO t2(a) VALUES (new.a); + +--echo +CALL p1(); + +--echo +CREATE TRIGGER t1_bi BEFORE INSERT ON t1 + FOR EACH ROW + INSERT INTO t3(a) VALUES (new.a); + +--echo +CALL p1(); + +--echo +DROP TABLE t1, t2, t3; +DROP PROCEDURE p1; +--echo + --echo # End of 5.5 test === modified file 'mysql-test/t/trigger.test' --- a/mysql-test/t/trigger.test 2011-02-15 11:47:33 +0000 +++ b/mysql-test/t/trigger.test 2011-03-10 08:33:54 +0000 @@ -984,10 +984,6 @@ call p1(); drop trigger t1_bi; create trigger t1_bi after insert on t1 for each row insert into t3 values (new.id); execute stmt1; -# Until we implement proper mechanism for invalidation of SP statements -# invoked whenever a table used in SP changes, this statement will fail with -# 'Table ... does not exist' error. ---error ER_NO_SUCH_TABLE call p1(); deallocate prepare stmt1; drop procedure p1; === modified file 'mysys/my_conio.c' --- a/mysys/my_conio.c 2011-02-23 04:53:07 +0000 +++ b/mysys/my_conio.c 2011-03-10 08:49:21 +0000 @@ -59,7 +59,7 @@ my_win_is_console(FILE *file) @rerval Pointer to mbbuf, or NULL on I/0 error. */ char * -my_win_console_readline(CHARSET_INFO *cs, char *mbbuf, size_t mbbufsize) +my_win_console_readline(const CHARSET_INFO *cs, char *mbbuf, size_t mbbufsize) { uint dummy_errors; static wchar_t u16buf[MAX_CONSOLE_LINE_SIZE + 1], *pos; @@ -109,10 +109,10 @@ my_win_console_readline(CHARSET_INFO *cs @param to_chars Number of characters available in "to" */ static size_t -my_mbstou16s(CHARSET_INFO *cs, const uchar * from, size_t from_length, +my_mbstou16s(const CHARSET_INFO *cs, const uchar * from, size_t from_length, wchar_t *to, size_t to_chars) { - CHARSET_INFO *to_cs= &my_charset_utf16le_bin; + const CHARSET_INFO *to_cs= &my_charset_utf16le_bin; const uchar *from_end= from + from_length; wchar_t *to_orig= to, *to_end= to + to_chars; my_charset_conv_mb_wc mb_wc= cs->cset->mb_wc; @@ -179,7 +179,7 @@ outp: @param datalen Length of input string in bytes */ void -my_win_console_write(CHARSET_INFO *cs, const char *data, size_t datalen) +my_win_console_write(const CHARSET_INFO *cs, const char *data, size_t datalen) { static wchar_t u16buf[MAX_CONSOLE_LINE_SIZE + 1]; size_t nchars= my_mbstou16s(cs, (const uchar *) data, datalen, @@ -200,7 +200,7 @@ my_win_console_write(CHARSET_INFO *cs, c @param c Character (single byte) */ void -my_win_console_putc(CHARSET_INFO *cs, int c) +my_win_console_putc(const CHARSET_INFO *cs, int c) { char ch= (char) c; my_win_console_write(cs, &ch, 1); @@ -214,7 +214,7 @@ my_win_console_putc(CHARSET_INFO *cs, in @param data String to print */ void -my_win_console_fputs(CHARSET_INFO *cs, const char *data) +my_win_console_fputs(const CHARSET_INFO *cs, const char *data) { my_win_console_write(cs, data, strlen(data)); } @@ -224,7 +224,7 @@ my_win_console_fputs(CHARSET_INFO *cs, c Handle formatted output on the Windows console. */ void -my_win_console_vfprintf(CHARSET_INFO *cs, const char *fmt, va_list args) +my_win_console_vfprintf(const CHARSET_INFO *cs, const char *fmt, va_list args) { static char buff[MAX_CONSOLE_LINE_SIZE + 1]; size_t len= vsnprintf(buff, sizeof(buff) - 1, fmt, args); @@ -244,7 +244,7 @@ my_win_console_vfprintf(CHARSET_INFO *cs @param[OUT] argv Write pointer to allocated parameters here. */ int -my_win_translate_command_line_args(CHARSET_INFO *cs, int *argc, char ***argv) +my_win_translate_command_line_args(const CHARSET_INFO *cs, int *argc, char ***argv) { int i, ac; char **av; === modified file 'sql/binlog.cc' --- a/sql/binlog.cc 2011-01-10 06:17:31 +0000 +++ b/sql/binlog.cc 2011-03-10 10:08:09 +0000 @@ -1602,11 +1602,9 @@ void MYSQL_BIN_LOG::init(bool no_auto_ev void MYSQL_BIN_LOG::init_pthread_objects() { - DBUG_ASSERT(inited == 0); - inited= 1; - mysql_mutex_init(key_LOG_LOCK_log, &LOCK_log, MY_MUTEX_INIT_SLOW); - mysql_mutex_init(key_BINLOG_LOCK_index, &LOCK_index, MY_MUTEX_INIT_SLOW); - mysql_cond_init(key_BINLOG_update_cond, &update_cond, 0); + MYSQL_LOG::init_pthread_objects(); + mysql_mutex_init(m_key_LOCK_index, &LOCK_index, MY_MUTEX_INIT_SLOW); + mysql_cond_init(m_key_update_cond, &update_cond, 0); } @@ -1650,7 +1648,7 @@ bool MYSQL_BIN_LOG::open_index_file(cons return TRUE; } - if ((index_file_nr= mysql_file_open(key_file_binlog_index, + if ((index_file_nr= mysql_file_open(m_key_file_log_index, index_file_name, O_RDWR | O_CREAT | O_BINARY, MYF(MY_WME))) < 0 || @@ -1766,7 +1764,7 @@ bool MYSQL_BIN_LOG::open(const char *log /* open the main log file */ if (MYSQL_LOG::open( #ifdef HAVE_PSI_INTERFACE - key_file_binlog, + m_key_file_log, #endif log_name, log_type_arg, new_name, io_cache_type_arg)) { @@ -2909,7 +2907,7 @@ int MYSQL_BIN_LOG::purge_index_entry(THD /* Get rid of the trailing '\n' */ log_info.log_file_name[length-1]= 0; - if (!mysql_file_stat(key_file_binlog, log_info.log_file_name, &s, MYF(0))) + if (!mysql_file_stat(m_key_file_log, log_info.log_file_name, &s, MYF(0))) { if (my_errno == ENOENT) { @@ -3084,7 +3082,7 @@ int MYSQL_BIN_LOG::purge_logs_before_dat !is_active(log_info.log_file_name) && !log_in_use(log_info.log_file_name)) { - if (!mysql_file_stat(key_file_binlog, + if (!mysql_file_stat(m_key_file_log, log_info.log_file_name, &stat_area, MYF(0))) { if (my_errno == ENOENT) === modified file 'sql/binlog.h' --- a/sql/binlog.h 2011-01-10 06:17:31 +0000 +++ b/sql/binlog.h 2011-03-10 10:08:09 +0000 @@ -26,6 +26,16 @@ class Format_description_log_event; class MYSQL_BIN_LOG: public TC_LOG, private MYSQL_LOG { private: +#ifdef HAVE_PSI_INTERFACE + /** The instrumentation key to use for @ LOCK_index. */ + PSI_mutex_key m_key_LOCK_index; + /** The instrumentation key to use for @ update_cond. */ + PSI_cond_key m_key_update_cond; + /** The instrumentation key to use for opening the log file. */ + PSI_file_key m_key_file_log; + /** The instrumentation key to use for opening the log index file. */ + PSI_file_key m_key_file_log_index; +#endif /* LOCK_log and LOCK_index are inited by init_pthread_objects() */ mysql_mutex_t LOCK_index; mysql_mutex_t LOCK_prep_xids; @@ -155,6 +165,19 @@ public: on exit() - but only during the correct shutdown process */ +#ifdef HAVE_PSI_INTERFACE + void set_psi_keys(PSI_mutex_key key_LOCK_index, + PSI_cond_key key_update_cond, + PSI_file_key key_file_log, + PSI_file_key key_file_log_index) + { + m_key_LOCK_index= key_LOCK_index; + m_key_update_cond= key_update_cond; + m_key_file_log= key_file_log; + m_key_file_log_index= key_file_log_index; + } +#endif + int open(const char *opt_name); void close(); int log_xid(THD *thd, my_xid xid); === modified file 'sql/item_strfunc.cc' --- a/sql/item_strfunc.cc 2011-03-09 20:54:55 +0000 +++ b/sql/item_strfunc.cc 2011-03-10 08:23:14 +0000 @@ -2075,7 +2075,7 @@ void Item_func_decode::crypto_transform( } -Item *Item_func_sysconst::safe_charset_converter(CHARSET_INFO *tocs) +Item *Item_func_sysconst::safe_charset_converter(const CHARSET_INFO *tocs) { Item_string *conv; uint conv_errors; === modified file 'sql/item_strfunc.h' --- a/sql/item_strfunc.h 2011-03-09 20:54:55 +0000 +++ b/sql/item_strfunc.h 2011-03-10 08:23:14 +0000 @@ -454,7 +454,7 @@ class Item_func_sysconst :public Item_st public: Item_func_sysconst() { collation.set(system_charset_info,DERIVATION_SYSCONST); } - Item *safe_charset_converter(CHARSET_INFO *tocs); + Item *safe_charset_converter(const CHARSET_INFO *tocs); /* Used to create correct Item name in new converted item in safe_charset_converter, return string representation of this function === modified file 'sql/mysqld.cc' --- a/sql/mysqld.cc 2011-03-09 23:28:32 +0000 +++ b/sql/mysqld.cc 2011-03-10 15:04:18 +0000 @@ -3179,6 +3179,18 @@ int init_common_variables() */ global_system_variables.time_zone= my_tz_SYSTEM; +#ifdef HAVE_PSI_INTERFACE + /* + Complete the mysql_bin_log initialization. + Instrumentation keys are known only after the performance schema initialization, + and can not be set in the MYSQL_BIN_LOG constructor (called before main()). + */ + mysql_bin_log.set_psi_keys(key_BINLOG_LOCK_index, + key_BINLOG_update_cond, + key_file_binlog, + key_file_binlog_index); +#endif + /* Init mutexes for the global MYSQL_BIN_LOG objects. As safe_mutex depends on what MY_INIT() does, we can't init the mutexes of @@ -7968,6 +7980,7 @@ PSI_mutex_key key_BINLOG_LOCK_index, key key_structure_guard_mutex, key_TABLE_SHARE_LOCK_ha_data, key_LOCK_error_messages, key_LOG_INFO_lock, key_LOCK_thread_count, key_PARTITION_LOCK_auto_inc; +PSI_mutex_key key_RELAYLOG_LOCK_index; static PSI_mutex_info all_server_mutexes[]= { @@ -7984,6 +7997,7 @@ static PSI_mutex_info all_server_mutexes { &key_BINLOG_LOCK_index, "MYSQL_BIN_LOG::LOCK_index", 0}, { &key_BINLOG_LOCK_prep_xids, "MYSQL_BIN_LOG::LOCK_prep_xids", 0}, + { &key_RELAYLOG_LOCK_index, "MYSQL_RELAY_LOG::LOCK_index", 0}, { &key_delayed_insert_mutex, "Delayed_insert::mutex", 0}, { &key_hash_filo_lock, "hash_filo::lock", 0}, { &key_LOCK_active_mi, "LOCK_active_mi", PSI_FLAG_GLOBAL}, @@ -8050,6 +8064,7 @@ PSI_cond_key key_BINLOG_COND_prep_xids, key_relay_log_info_start_cond, key_relay_log_info_stop_cond, key_TABLE_SHARE_cond, key_user_level_lock_cond, key_COND_thread_count, key_COND_thread_cache, key_COND_flush_thread_cache; +PSI_cond_key key_RELAYLOG_update_cond; static PSI_cond_info all_server_conds[]= { @@ -8063,6 +8078,7 @@ static PSI_cond_info all_server_conds[]= #endif /* HAVE_MMAP */ { &key_BINLOG_COND_prep_xids, "MYSQL_BIN_LOG::COND_prep_xids", 0}, { &key_BINLOG_update_cond, "MYSQL_BIN_LOG::update_cond", 0}, + { &key_RELAYLOG_update_cond, "MYSQL_RELAY_LOG::update_cond", 0}, { &key_COND_cache_status_changed, "Query_cache::COND_cache_status_changed", 0}, { &key_COND_manager, "COND_manager", PSI_FLAG_GLOBAL}, { &key_COND_server_started, "COND_server_started", PSI_FLAG_GLOBAL}, @@ -8125,6 +8141,7 @@ PSI_file_key key_file_binlog, key_file_b key_file_pid, key_file_relay_log_info, key_file_send_file, key_file_tclog, key_file_trg, key_file_trn, key_file_init; PSI_file_key key_file_query_log, key_file_slow_log; +PSI_file_key key_file_relaylog, key_file_relaylog_index; static PSI_file_info all_server_files[]= { @@ -8133,6 +8150,8 @@ static PSI_file_info all_server_files[]= #endif /* HAVE_MMAP */ { &key_file_binlog, "binlog", 0}, { &key_file_binlog_index, "binlog_index", 0}, + { &key_file_relaylog, "relaylog", 0}, + { &key_file_relaylog_index, "relaylog_index", 0}, { &key_file_casetest, "casetest", 0}, { &key_file_dbopt, "dbopt", 0}, { &key_file_des_key_file, "des_key_file", 0}, === modified file 'sql/mysqld.h' --- a/sql/mysqld.h 2011-03-09 21:42:42 +0000 +++ b/sql/mysqld.h 2011-03-10 15:04:18 +0000 @@ -254,6 +254,7 @@ extern PSI_mutex_key key_BINLOG_LOCK_ind key_relay_log_info_log_space_lock, key_relay_log_info_run_lock, key_structure_guard_mutex, key_TABLE_SHARE_LOCK_ha_data, key_LOCK_error_messages, key_LOCK_thread_count, key_PARTITION_LOCK_auto_inc; +extern PSI_mutex_key key_RELAYLOG_LOCK_index; extern PSI_rwlock_key key_rwlock_LOCK_grant, key_rwlock_LOCK_logger, key_rwlock_LOCK_sys_init_connect, key_rwlock_LOCK_sys_init_slave, @@ -273,6 +274,7 @@ extern PSI_cond_key key_BINLOG_COND_prep key_relay_log_info_start_cond, key_relay_log_info_stop_cond, key_TABLE_SHARE_cond, key_user_level_lock_cond, key_COND_thread_count, key_COND_thread_cache, key_COND_flush_thread_cache; +extern PSI_cond_key key_RELAYLOG_update_cond; extern PSI_thread_key key_thread_bootstrap, key_thread_delayed_insert, key_thread_handle_manager, key_thread_kill_server, key_thread_main, @@ -290,6 +292,7 @@ extern PSI_file_key key_file_binlog, key key_file_pid, key_file_relay_log_info, key_file_send_file, key_file_tclog, key_file_trg, key_file_trn, key_file_init; extern PSI_file_key key_file_query_log, key_file_slow_log; +extern PSI_file_key key_file_relaylog, key_file_relaylog_index; extern PSI_socket_key key_socket_tcpip, key_socket_unix, key_socket_client_connection; void init_server_psi_keys(); === modified file 'sql/rpl_rli.cc' --- a/sql/rpl_rli.cc 2010-12-21 09:33:41 +0000 +++ b/sql/rpl_rli.cc 2011-03-10 10:08:09 +0000 @@ -77,6 +77,13 @@ Relay_log_info::Relay_log_info(bool is_s { DBUG_ENTER("Relay_log_info::Relay_log_info"); +#ifdef HAVE_PSI_INTERFACE + relay_log.set_psi_keys(key_RELAYLOG_LOCK_index, + key_RELAYLOG_update_cond, + key_file_relaylog, + key_file_relaylog_index); +#endif + group_relay_log_name[0]= event_relay_log_name[0]= group_master_log_name[0]= 0; until_log_name[0]= ign_master_log_name_end[0]= 0; @@ -104,7 +111,7 @@ static inline int add_relay_log(Relay_lo { MY_STAT s; DBUG_ENTER("add_relay_log"); - if (!mysql_file_stat(key_file_binlog, + if (!mysql_file_stat(key_file_relaylog, linfo->log_file_name, &s, MYF(0))) { sql_print_error("log %s listed in the index, but failed to stat", === modified file 'sql/sql_trigger.cc' --- a/sql/sql_trigger.cc 2011-03-09 20:54:55 +0000 +++ b/sql/sql_trigger.cc 2011-03-10 08:33:54 +0000 @@ -30,6 +30,7 @@ #include "sql_db.h" // get_default_db_collation #include "sql_acl.h" // *_ACL, is_acl_user #include "sql_handler.h" // mysql_ha_rm_tables +#include "sp_cache.h" // sp_invalidate_cache /*************************************************************************/ @@ -517,6 +518,12 @@ bool mysql_create_or_drop_trigger(THD *t */ thd->locked_tables_list.reopen_tables(thd); + /* + Invalidate SP-cache. That's needed because triggers may change list of + pre-locking tables. + */ + sp_cache_invalidate(); + end: if (!result) { === modified file 'storage/perfschema/pfs_stat.h' --- a/storage/perfschema/pfs_stat.h 2011-03-09 21:28:05 +0000 +++ b/storage/perfschema/pfs_stat.h 2011-03-10 17:34:04 +0000 @@ -96,6 +96,11 @@ struct PFS_byte_stat m_bytes+= stat->m_bytes; } + PFS_byte_stat() + { + reset(); + } + inline void reset(void) { m_waits.reset(); === modified file 'storage/perfschema/pfs_visitor.cc' --- a/storage/perfschema/pfs_visitor.cc 2011-02-25 21:19:58 +0000 +++ b/storage/perfschema/pfs_visitor.cc 2011-03-10 17:34:04 +0000 @@ -516,8 +516,7 @@ void PFS_table_lock_stat_visitor::visit_ /** Socket IO stat visitor */ PFS_instance_socket_io_stat_visitor::PFS_instance_socket_io_stat_visitor() -{ -} +{} PFS_instance_socket_io_stat_visitor::~PFS_instance_socket_io_stat_visitor() {} --===============5341200365823537009== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/chris.powers@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: chris.powers@stripped # target_branch: file:///home/cpowers/work/dev/base_mysql-trunk-\ # wl4896/ # testament_sha1: 99c34ee120e3cbe03d393fbac273e350b58f5e66 # timestamp: 2011-03-10 11:57:18 -0600 # base_revision_id: chris.powers@stripped\ # yf7mts4qqwmr0mv7 # # Begin bundle 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 JBFTDW2A --===============5341200365823537009==--