From eac71ced18e281e2b4e6bd9bb1739d227e9d55d2 Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Thu, 12 Mar 2015 05:23:05 +1100 Subject: [PATCH 1/6] Add Slave_skipped_errors to global status This counts the number of times a replication event is ignored due to slave_skip_errors. --- mysql-test/suite/engines/funcs/t/rpl_variables.test | 1 + sql/log_event.cc | 8 ++++++-- sql/mysqld.cc | 2 ++ sql/slave.h | 1 + 4 files changed, 10 insertions(+), 2 deletions(-) diff --git a/mysql-test/suite/engines/funcs/t/rpl_variables.test b/mysql-test/suite/engines/funcs/t/rpl_variables.test index 031131a3f2b..24a2bcb229c 100644 --- a/mysql-test/suite/engines/funcs/t/rpl_variables.test +++ b/mysql-test/suite/engines/funcs/t/rpl_variables.test @@ -15,6 +15,7 @@ show variables like 'slave_load_tmpdir'; # We just set some arbitrary values in variables-master.opt so we can test # that a list of values works correctly show variables like 'slave_skip_errors'; +show global status like 'slave_skipped_errors'; # Cleanup set global slave_net_timeout=@my_slave_net_timeout; diff --git a/sql/log_event.cc b/sql/log_event.cc index b8fd02e96d4..d128a5bae44 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -440,8 +440,12 @@ inline int ignored_error_code(int err_code) break; } #endif - return ((err_code == ER_SLAVE_IGNORED_TABLE) || - (use_slave_mask && bitmap_is_set(&slave_error_mask, err_code))); + if (use_slave_mask && bitmap_is_set(&slave_error_mask, err_code)) + { + statistic_increment(slave_skipped_errors, LOCK_status); + return true; + } + return err_code == ER_SLAVE_IGNORED_TABLE; } /* diff --git a/sql/mysqld.cc b/sql/mysqld.cc index 7138027ff0a..992a9035289 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -516,6 +516,7 @@ ulong binlog_stmt_cache_use= 0, binlog_stmt_cache_disk_use= 0; ulong max_connections, max_connect_errors; ulong extra_max_connections; ulong slave_retried_transactions; +ulonglong slave_skipped_errors; ulong feature_files_opened_with_delayed_keys; ulonglong denied_connections; my_decimal decimal_zero; @@ -7921,6 +7922,7 @@ SHOW_VAR status_vars[]= { {"Slave_received_heartbeats",(char*) &show_slave_received_heartbeats, SHOW_SIMPLE_FUNC}, {"Slave_retried_transactions",(char*)&slave_retried_transactions, SHOW_LONG}, {"Slave_running", (char*) &show_slave_running, SHOW_SIMPLE_FUNC}, + {"Slave_skipped_errors", (char*) &slave_skipped_errors, SHOW_LONGLONG}, #endif {"Slow_launch_threads", (char*) &slow_launch_threads, SHOW_LONG}, {"Slow_queries", (char*) offsetof(STATUS_VAR, long_query_count), SHOW_LONG_STATUS}, diff --git a/sql/slave.h b/sql/slave.h index e16f801b577..fc48476a6d8 100644 --- a/sql/slave.h +++ b/sql/slave.h @@ -130,6 +130,7 @@ extern my_bool opt_log_slave_updates; extern char *opt_slave_skip_errors; extern my_bool opt_replicate_annotate_row_events; extern ulonglong relay_log_space_limit; +extern ulonglong slave_skipped_errors; /* 3 possible values for Master_info::slave_running and From fa5809ce109a8966059ea3cbda982cf2f160c430 Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Thu, 12 Mar 2015 06:43:38 +1100 Subject: [PATCH 2/6] Add Master_gtid_wait_{count,time,timeouts} status MASTER_GTID_WAIT function needs some status to evaluate its use. master_gtid_wait_count indicates how many times the function is called. master_gtid_wait_time indicates how much time in microseconds occurred waiting (or timing out) master_gtid_timeouts indicates how many time times this function timed out rather than all successful gtids events being available. --- mysql-test/suite/rpl/r/rpl_gtid_basic.result | 40 +++++++++++++++++++- mysql-test/suite/rpl/t/rpl_gtid_basic.test | 24 +++++++++++- sql/mysqld.cc | 3 ++ sql/rpl_gtid.cc | 13 +++++++ sql/sql_class.h | 5 +++ 5 files changed, 82 insertions(+), 3 deletions(-) diff --git a/mysql-test/suite/rpl/r/rpl_gtid_basic.result b/mysql-test/suite/rpl/r/rpl_gtid_basic.result index f3b52d89eb4..bdb965e3fcc 100644 --- a/mysql-test/suite/rpl/r/rpl_gtid_basic.result +++ b/mysql-test/suite/rpl/r/rpl_gtid_basic.result @@ -231,6 +231,15 @@ NULL SELECT master_gtid_wait('', NULL); master_gtid_wait('', NULL) 0 +SHOW STATUS LIKE 'Master_gtid_wait_count'; +Variable_name Value +Master_gtid_wait_count 1 +SHOW STATUS LIKE 'Master_gtid_wait_timeouts'; +Variable_name Value +Master_gtid_wait_timeouts 0 +SHOW STATUS LIKE 'Master_gtid_wait_time'; +Variable_name Value +Master_gtid_wait_time 0 SELECT master_gtid_wait(@pos, 0.5); master_gtid_wait(@pos, 0.5) -1 @@ -271,13 +280,43 @@ SELECT master_gtid_wait('2-1-5'); SELECT master_gtid_wait('2-1-10'); SELECT master_gtid_wait('2-1-5,1-1-4,0-1-110'); SELECT master_gtid_wait('2-1-2'); +SHOW STATUS LIKE 'Master_gtid_wait_timeouts'; +Variable_name Value +Master_gtid_wait_timeouts 0 +SHOW STATUS LIKE 'Master_gtid_wait_count'; +Variable_name Value +Master_gtid_wait_count 3 SELECT master_gtid_wait('1-1-1'); master_gtid_wait('1-1-1') 0 +SHOW STATUS LIKE 'Master_gtid_wait_timeouts'; +Variable_name Value +Master_gtid_wait_timeouts 0 +SHOW STATUS LIKE 'Master_gtid_wait_count'; +Variable_name Value +Master_gtid_wait_count 4 +SELECT MASTER_GTID_WAIT_TIME <= 1000000 AS Master_gtid_wait_less_than_second; +Master_gtid_wait_less_than_second +1 SELECT master_gtid_wait('0-1-109'); +SHOW STATUS LIKE 'Master_gtid_wait_timeouts'; +Variable_name Value +Master_gtid_wait_timeouts 0 +SHOW STATUS LIKE 'Master_gtid_wait_count'; +Variable_name Value +Master_gtid_wait_count 4 SELECT master_gtid_wait('2-1-2', 0.5); master_gtid_wait('2-1-2', 0.5) -1 +SHOW STATUS LIKE 'Master_gtid_wait_timeouts'; +Variable_name Value +Master_gtid_wait_timeouts 1 +SHOW STATUS LIKE 'Master_gtid_wait_count'; +Variable_name Value +Master_gtid_wait_count 5 +SELECT MASTER_GTID_WAIT_TIME BETWEEN 500000 AND 3000000 AS Master_gtid_wait_time_between_half_and_3_seconds; +Master_gtid_wait_time_between_half_and_3_seconds +1 KILL QUERY KILL_ID; ERROR 70100: Query execution was interrupted SET gtid_domain_id=2; @@ -433,6 +472,5 @@ a 31 32 33 -34 DROP TABLE t1; include/rpl_end.inc diff --git a/mysql-test/suite/rpl/t/rpl_gtid_basic.test b/mysql-test/suite/rpl/t/rpl_gtid_basic.test index 778cf427d99..307bbbab850 100644 --- a/mysql-test/suite/rpl/t/rpl_gtid_basic.test +++ b/mysql-test/suite/rpl/t/rpl_gtid_basic.test @@ -232,6 +232,10 @@ eval SET @pos= '$pos'; SELECT master_gtid_wait(NULL); # Check empty argument returns immediately. SELECT master_gtid_wait('', NULL); +# Check this gets counted +SHOW STATUS LIKE 'Master_gtid_wait_count'; +SHOW STATUS LIKE 'Master_gtid_wait_timeouts'; +SHOW STATUS LIKE 'Master_gtid_wait_time'; # Let's check that we get a timeout SELECT master_gtid_wait(@pos, 0.5); SELECT * FROM t1 ORDER BY a; @@ -276,7 +280,7 @@ SELECT master_gtid_wait('1-1-1', 0); send SELECT master_gtid_wait('2-1-1,1-1-4,0-1-110'); --connect (s2,127.0.0.1,root,,test,$SERVER_MYPORT_2,) -# This will time out. +# This will time out. No event 0-1-1000 exists send SELECT master_gtid_wait('0-1-1000', 0.5); --connect (s3,127.0.0.1,root,,test,$SERVER_MYPORT_2,) @@ -305,15 +309,31 @@ send SELECT master_gtid_wait('2-1-5,1-1-4,0-1-110'); send SELECT master_gtid_wait('2-1-2'); --connection server_2 -# This one completes immediately. +# This one completes immediately ( < 1 ms). +SHOW STATUS LIKE 'Master_gtid_wait_timeouts'; +SHOW STATUS LIKE 'Master_gtid_wait_count'; SELECT master_gtid_wait('1-1-1'); +SHOW STATUS LIKE 'Master_gtid_wait_timeouts'; +SHOW STATUS LIKE 'Master_gtid_wait_count'; +let $wait_time = query_get_value(SHOW STATUS LIKE 'Master_gtid_wait_time', Value, 1); +--replace_result $wait_time MASTER_GTID_WAIT_TIME +eval SELECT $wait_time <= 1000000 AS Master_gtid_wait_less_than_second; + --connect (s10,127.0.0.1,root,,test,$SERVER_MYPORT_2,) send SELECT master_gtid_wait('0-1-109'); --connection server_2 # This one should time out. +SHOW STATUS LIKE 'Master_gtid_wait_timeouts'; +SHOW STATUS LIKE 'Master_gtid_wait_count'; SELECT master_gtid_wait('2-1-2', 0.5); +SHOW STATUS LIKE 'Master_gtid_wait_timeouts'; +SHOW STATUS LIKE 'Master_gtid_wait_count'; +# (0.5-3 seconds) +let $wait_time = query_get_value(SHOW STATUS LIKE 'Master_gtid_wait_time', Value, 1); +--replace_result $wait_time MASTER_GTID_WAIT_TIME +eval SELECT $wait_time BETWEEN 500000 AND 3000000 AS Master_gtid_wait_time_between_half_and_3_seconds; --replace_result $kill1_id KILL_ID eval KILL QUERY $kill1_id; diff --git a/sql/mysqld.cc b/sql/mysqld.cc index 7138027ff0a..c5fbbfc9003 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -7879,6 +7879,9 @@ SHOW_VAR status_vars[]= { {"Handler_write", (char*) offsetof(STATUS_VAR, ha_write_count), SHOW_LONG_STATUS}, {"Key", (char*) &show_default_keycache, SHOW_FUNC}, {"Last_query_cost", (char*) offsetof(STATUS_VAR, last_query_cost), SHOW_DOUBLE_STATUS}, + {"Master_gtid_wait_count", (char*) offsetof(STATUS_VAR, master_gtid_wait_count), SHOW_LONGLONG_STATUS}, + {"Master_gtid_wait_timeouts", (char*) offsetof(STATUS_VAR, master_gtid_wait_timeouts), SHOW_LONGLONG_STATUS}, + {"Master_gtid_wait_time", (char*) offsetof(STATUS_VAR, master_gtid_wait_time), SHOW_LONGLONG_STATUS}, {"Max_used_connections", (char*) &max_used_connections, SHOW_LONG}, {"Memory_used", (char*) offsetof(STATUS_VAR, memory_used), SHOW_LONGLONG_STATUS}, {"Not_flushed_delayed_rows", (char*) &delayed_rows_in_use, SHOW_LONG_NOFLUSH}, diff --git a/sql/rpl_gtid.cc b/sql/rpl_gtid.cc index f17ece298d3..b57eb208580 100644 --- a/sql/rpl_gtid.cc +++ b/sql/rpl_gtid.cc @@ -1911,10 +1911,14 @@ gtid_waiting::wait_for_pos(THD *thd, String *gtid_str, longlong timeout_us) rpl_gtid *wait_pos; uint32 count, i; struct timespec wait_until, *wait_until_ptr; + ulonglong before; /* Wait for the empty position returns immediately. */ if (gtid_str->length() == 0) + { + status_var_increment(thd->status_var.master_gtid_wait_count); return 0; + } if (!(wait_pos= gtid_parse_string_to_list(gtid_str->ptr(), gtid_str->length(), &count))) @@ -1922,6 +1926,8 @@ gtid_waiting::wait_for_pos(THD *thd, String *gtid_str, longlong timeout_us) my_error(ER_INCORRECT_GTID_STATE, MYF(0)); return 1; } + status_var_increment(thd->status_var.master_gtid_wait_count); + before = microsecond_interval_timer(); if (timeout_us >= 0) { @@ -1936,6 +1942,13 @@ gtid_waiting::wait_for_pos(THD *thd, String *gtid_str, longlong timeout_us) if ((err= wait_for_gtid(thd, &wait_pos[i], wait_until_ptr))) break; } + switch (err) + { + case -1: + status_var_increment(thd->status_var.master_gtid_wait_timeouts); + case 0: /* deliberate fall through */ + status_var_add(thd->status_var.master_gtid_wait_time, microsecond_interval_timer() - before); + } my_free(wait_pos); return err; } diff --git a/sql/sql_class.h b/sql/sql_class.h index 5d64837a2c1..a3401855328 100644 --- a/sql/sql_class.h +++ b/sql/sql_class.h @@ -726,6 +726,11 @@ typedef struct system_status_var ulong feature_trigger; /* +1 opening a table with triggers */ ulong feature_xml; /* +1 when XPATH is used */ + /* From MASTER_GTID_WAIT usage */ + ulonglong master_gtid_wait_timeouts; /* # of timeouts */ + ulonglong master_gtid_wait_time; /* Time in microseconds */ + ulonglong master_gtid_wait_count; + ulong empty_queries; ulong access_denied_errors; ulong lost_connections; From 51ea3939b4b5dfd3b72c4b1a6e6a9681a10f21e6 Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Mon, 16 Mar 2015 23:06:30 +1100 Subject: [PATCH 3/6] Complete test for status slave_skipped_errors --- mysql-test/suite/engines/funcs/t/rpl_variables.test | 1 - mysql-test/suite/rpl/r/rpl_skip_error.result | 3 +++ mysql-test/suite/rpl/t/rpl_skip_error.test | 1 + 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/mysql-test/suite/engines/funcs/t/rpl_variables.test b/mysql-test/suite/engines/funcs/t/rpl_variables.test index 24a2bcb229c..031131a3f2b 100644 --- a/mysql-test/suite/engines/funcs/t/rpl_variables.test +++ b/mysql-test/suite/engines/funcs/t/rpl_variables.test @@ -15,7 +15,6 @@ show variables like 'slave_load_tmpdir'; # We just set some arbitrary values in variables-master.opt so we can test # that a list of values works correctly show variables like 'slave_skip_errors'; -show global status like 'slave_skipped_errors'; # Cleanup set global slave_net_timeout=@my_slave_net_timeout; diff --git a/mysql-test/suite/rpl/r/rpl_skip_error.result b/mysql-test/suite/rpl/r/rpl_skip_error.result index aff83e1b99e..cb25f59ce06 100644 --- a/mysql-test/suite/rpl/r/rpl_skip_error.result +++ b/mysql-test/suite/rpl/r/rpl_skip_error.result @@ -104,6 +104,9 @@ DELETE FROM t2 WHERE id = 5; SET SQL_LOG_BIN=1; UPDATE t2 SET id= id + 3, data = 2; +show global status like 'slave_skipped_errors'; +Variable_name Value +Slave_skipped_errors 5 **** We cannot execute a select as there are differences in the **** behavior between STMT and RBR. ==== Clean Up ==== diff --git a/mysql-test/suite/rpl/t/rpl_skip_error.test b/mysql-test/suite/rpl/t/rpl_skip_error.test index 142cd53b9dd..2a1a772052c 100644 --- a/mysql-test/suite/rpl/t/rpl_skip_error.test +++ b/mysql-test/suite/rpl/t/rpl_skip_error.test @@ -157,6 +157,7 @@ sync_slave_with_master; let $error= query_get_value("SHOW SLAVE STATUS", Last_SQL_Error, 1); echo $error; +show global status like 'slave_skipped_errors'; --echo **** We cannot execute a select as there are differences in the --echo **** behavior between STMT and RBR. From 9362dd43ff6f08d3cde4f62c11aa0588ed84eee1 Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Mon, 16 Mar 2015 23:15:36 +1100 Subject: [PATCH 4/6] additional slave_skip_errors status --- mysql-test/suite/rpl/r/rpl_skip_error.result | 3 +++ mysql-test/suite/rpl/t/rpl_skip_error.test | 1 + 2 files changed, 4 insertions(+) diff --git a/mysql-test/suite/rpl/r/rpl_skip_error.result b/mysql-test/suite/rpl/r/rpl_skip_error.result index cb25f59ce06..105b9d5c65f 100644 --- a/mysql-test/suite/rpl/r/rpl_skip_error.result +++ b/mysql-test/suite/rpl/r/rpl_skip_error.result @@ -95,6 +95,9 @@ t2 CREATE TABLE `t2` ( `data` int(11) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 +show global status like 'slave_skipped_errors'; +Variable_name Value +Slave_skipped_errors 4 INSERT INTO t2 VALUES(1, 1); INSERT INTO t2 VALUES(2, 1); INSERT INTO t2 VALUES(3, 1); diff --git a/mysql-test/suite/rpl/t/rpl_skip_error.test b/mysql-test/suite/rpl/t/rpl_skip_error.test index 2a1a772052c..4348675884b 100644 --- a/mysql-test/suite/rpl/t/rpl_skip_error.test +++ b/mysql-test/suite/rpl/t/rpl_skip_error.test @@ -140,6 +140,7 @@ connection slave; CREATE TABLE t2(id INT NOT NULL PRIMARY KEY, data INT) Engine=MyIsam; SHOW CREATE TABLE t2; +show global status like 'slave_skipped_errors'; connection master; From ef4d8db5ece5edfe3574561a8cec70863d390c91 Mon Sep 17 00:00:00 2001 From: Kristian Nielsen Date: Mon, 16 Mar 2015 14:40:29 +0100 Subject: [PATCH 5/6] MDEV-6981: feature request MASTER_GTID_WAIT status variables Review fixes: - Coding style - Fix bad .result file - Fix test to be tolerant of different timing. - Fix test to give better info in case of unexpected timing. --- mysql-test/suite/rpl/r/rpl_gtid_basic.result | 16 ++++++++++------ mysql-test/suite/rpl/t/rpl_gtid_basic.test | 13 +++++++++---- sql/rpl_gtid.cc | 8 +++++--- sql/sql_class.h | 4 ++-- 4 files changed, 26 insertions(+), 15 deletions(-) diff --git a/mysql-test/suite/rpl/r/rpl_gtid_basic.result b/mysql-test/suite/rpl/r/rpl_gtid_basic.result index bdb965e3fcc..22f284d6716 100644 --- a/mysql-test/suite/rpl/r/rpl_gtid_basic.result +++ b/mysql-test/suite/rpl/r/rpl_gtid_basic.result @@ -295,9 +295,11 @@ Master_gtid_wait_timeouts 0 SHOW STATUS LIKE 'Master_gtid_wait_count'; Variable_name Value Master_gtid_wait_count 4 -SELECT MASTER_GTID_WAIT_TIME <= 1000000 AS Master_gtid_wait_less_than_second; -Master_gtid_wait_less_than_second -1 +SET @a= MASTER_GTID_WAIT_TIME; +SELECT IF(@a <= 100*1000*1000, "OK", CONCAT("Error: wait time ", @a, " is larger than expected")) +AS Master_gtid_wait_time_as_expected; +Master_gtid_wait_time_as_expected +OK SELECT master_gtid_wait('0-1-109'); SHOW STATUS LIKE 'Master_gtid_wait_timeouts'; Variable_name Value @@ -314,9 +316,10 @@ Master_gtid_wait_timeouts 1 SHOW STATUS LIKE 'Master_gtid_wait_count'; Variable_name Value Master_gtid_wait_count 5 -SELECT MASTER_GTID_WAIT_TIME BETWEEN 500000 AND 3000000 AS Master_gtid_wait_time_between_half_and_3_seconds; -Master_gtid_wait_time_between_half_and_3_seconds -1 +SET @a= MASTER_GTID_WAIT_TIME; +SELECT IF(@a BETWEEN 0.4*1000*1000 AND 100*1000*1000, "OK", CONCAT("Error: wait time ", @a, " not as expected")) AS Master_gtid_wait_time_as_expected; +Master_gtid_wait_time_as_expected +OK KILL QUERY KILL_ID; ERROR 70100: Query execution was interrupted SET gtid_domain_id=2; @@ -472,5 +475,6 @@ a 31 32 33 +34 DROP TABLE t1; include/rpl_end.inc diff --git a/mysql-test/suite/rpl/t/rpl_gtid_basic.test b/mysql-test/suite/rpl/t/rpl_gtid_basic.test index 307bbbab850..b6a4c7f7e2b 100644 --- a/mysql-test/suite/rpl/t/rpl_gtid_basic.test +++ b/mysql-test/suite/rpl/t/rpl_gtid_basic.test @@ -309,7 +309,7 @@ send SELECT master_gtid_wait('2-1-5,1-1-4,0-1-110'); send SELECT master_gtid_wait('2-1-2'); --connection server_2 -# This one completes immediately ( < 1 ms). +# This one completes immediately. SHOW STATUS LIKE 'Master_gtid_wait_timeouts'; SHOW STATUS LIKE 'Master_gtid_wait_count'; SELECT master_gtid_wait('1-1-1'); @@ -317,7 +317,9 @@ SHOW STATUS LIKE 'Master_gtid_wait_timeouts'; SHOW STATUS LIKE 'Master_gtid_wait_count'; let $wait_time = query_get_value(SHOW STATUS LIKE 'Master_gtid_wait_time', Value, 1); --replace_result $wait_time MASTER_GTID_WAIT_TIME -eval SELECT $wait_time <= 1000000 AS Master_gtid_wait_less_than_second; +eval SET @a= $wait_time; +SELECT IF(@a <= 100*1000*1000, "OK", CONCAT("Error: wait time ", @a, " is larger than expected")) + AS Master_gtid_wait_time_as_expected; --connect (s10,127.0.0.1,root,,test,$SERVER_MYPORT_2,) @@ -330,10 +332,13 @@ SHOW STATUS LIKE 'Master_gtid_wait_count'; SELECT master_gtid_wait('2-1-2', 0.5); SHOW STATUS LIKE 'Master_gtid_wait_timeouts'; SHOW STATUS LIKE 'Master_gtid_wait_count'; -# (0.5-3 seconds) let $wait_time = query_get_value(SHOW STATUS LIKE 'Master_gtid_wait_time', Value, 1); --replace_result $wait_time MASTER_GTID_WAIT_TIME -eval SELECT $wait_time BETWEEN 500000 AND 3000000 AS Master_gtid_wait_time_between_half_and_3_seconds; +eval SET @a= $wait_time; +# We expect a wait time of just a bit over 0.5 seconds. But thread scheduling +# and timer inaccuracies could introduce significant jitter. So allow a +# generous interval. +SELECT IF(@a BETWEEN 0.4*1000*1000 AND 100*1000*1000, "OK", CONCAT("Error: wait time ", @a, " not as expected")) AS Master_gtid_wait_time_as_expected; --replace_result $kill1_id KILL_ID eval KILL QUERY $kill1_id; diff --git a/sql/rpl_gtid.cc b/sql/rpl_gtid.cc index 078ec74b263..1dc6a2720ad 100644 --- a/sql/rpl_gtid.cc +++ b/sql/rpl_gtid.cc @@ -2011,7 +2011,7 @@ gtid_waiting::wait_for_pos(THD *thd, String *gtid_str, longlong timeout_us) return 1; } status_var_increment(thd->status_var.master_gtid_wait_count); - before = microsecond_interval_timer(); + before= microsecond_interval_timer(); if (timeout_us >= 0) { @@ -2030,8 +2030,10 @@ gtid_waiting::wait_for_pos(THD *thd, String *gtid_str, longlong timeout_us) { case -1: status_var_increment(thd->status_var.master_gtid_wait_timeouts); - case 0: /* deliberate fall through */ - status_var_add(thd->status_var.master_gtid_wait_time, microsecond_interval_timer() - before); + /* Deliberate fall through. */ + case 0: + status_var_add(thd->status_var.master_gtid_wait_time, + microsecond_interval_timer() - before); } my_free(wait_pos); return err; diff --git a/sql/sql_class.h b/sql/sql_class.h index 8871e6ace98..f7aa54b6693 100644 --- a/sql/sql_class.h +++ b/sql/sql_class.h @@ -739,8 +739,8 @@ typedef struct system_status_var ulong feature_xml; /* +1 when XPATH is used */ /* From MASTER_GTID_WAIT usage */ - ulonglong master_gtid_wait_timeouts; /* # of timeouts */ - ulonglong master_gtid_wait_time; /* Time in microseconds */ + ulonglong master_gtid_wait_timeouts; /* Number of timeouts */ + ulonglong master_gtid_wait_time; /* Time in microseconds */ ulonglong master_gtid_wait_count; ulong empty_queries; From be1c5660f45503ab911cc72797ff9fee10d0db8f Mon Sep 17 00:00:00 2001 From: Kristian Nielsen Date: Mon, 16 Mar 2015 15:02:05 +0100 Subject: [PATCH 6/6] MDEV-6981: feature request MASTER_GTID_WAIT status variables Missing .result file update. --- mysql-test/r/max_statement_time.result | 1 + 1 file changed, 1 insertion(+) diff --git a/mysql-test/r/max_statement_time.result b/mysql-test/r/max_statement_time.result index 38334c59baa..93c793b265a 100644 --- a/mysql-test/r/max_statement_time.result +++ b/mysql-test/r/max_statement_time.result @@ -87,6 +87,7 @@ SLEEP(2) 1 SHOW STATUS LIKE '%timeout%'; Variable_name Value +Master_gtid_wait_timeouts 0 Ssl_default_timeout 0 Ssl_session_cache_timeouts 0 SET @@max_statement_time=0;