summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mysql-test/suite/rpl/r/rpl_gtid_excess_initial_delay.result23
-rw-r--r--mysql-test/suite/rpl/t/rpl_gtid_excess_initial_delay.test58
-rw-r--r--sql/slave.cc6
3 files changed, 81 insertions, 6 deletions
diff --git a/mysql-test/suite/rpl/r/rpl_gtid_excess_initial_delay.result b/mysql-test/suite/rpl/r/rpl_gtid_excess_initial_delay.result
new file mode 100644
index 00000000000..641d186ab78
--- /dev/null
+++ b/mysql-test/suite/rpl/r/rpl_gtid_excess_initial_delay.result
@@ -0,0 +1,23 @@
+include/master-slave.inc
+[connection master]
+CREATE TABLE t1 (i INT);
+connection slave;
+include/stop_slave.inc
+CHANGE MASTER TO MASTER_USE_GTID= current_pos, MASTER_DELAY= 10;
+include/start_slave.inc
+connection master;
+INSERT INTO t1 VALUES (1);
+include/sync_slave_io_with_master.inc
+connection slave;
+"Sleeping for 15"
+# Asserted this: Seconds_Behind_Master should be less than MASTER_DELAY
+# Asserted this: One row shoule be found in table t1.
+"======= Clean up ========"
+STOP SLAVE;
+CHANGE MASTER TO MASTER_USE_GTID=no, MASTER_DELAY=0;
+START SLAVE;
+connection master;
+DROP TABLE t1;
+connection slave;
+connection master;
+include/rpl_end.inc
diff --git a/mysql-test/suite/rpl/t/rpl_gtid_excess_initial_delay.test b/mysql-test/suite/rpl/t/rpl_gtid_excess_initial_delay.test
new file mode 100644
index 00000000000..10af684dbd3
--- /dev/null
+++ b/mysql-test/suite/rpl/t/rpl_gtid_excess_initial_delay.test
@@ -0,0 +1,58 @@
+# ==== Purpose ====
+#
+# Test verifies that when "Master_Delay" is specified on slave with GTIDS there
+# will not be any extra delay initially.
+#
+# ==== Implementation ====
+#
+# Steps:
+# 0 - Stop the slave and execute CHANGE MASTER command with
+# master_use_gtid= curren_pos and master_delay= 10
+# 1 - On slave introduce a sleep of 15 seconds and check that the
+# Seconds_Behind_Master is within specified master_delay limit. It should
+# not be more that "10" seconds.
+#
+# ==== References ====
+#
+# MDEV-13895: GTID and Master_Delay causes excessive initial delay
+
+--source include/master-slave.inc
+--source include/have_binlog_format_mixed.inc
+
+CREATE TABLE t1 (i INT);
+--sync_slave_with_master
+
+--source include/stop_slave.inc
+CHANGE MASTER TO MASTER_USE_GTID= current_pos, MASTER_DELAY= 10;
+--source include/start_slave.inc
+
+--connection master
+INSERT INTO t1 VALUES (1);
+--source include/sync_slave_io_with_master.inc
+
+--connection slave
+--let $actual_delay= query_get_value(SHOW SLAVE STATUS, SQL_Delay, 1)
+--let $sleep_time= `SELECT 5 + $actual_delay`
+--echo "Sleeping for $sleep_time"
+--sleep $sleep_time
+
+--let $assert_cond= [SHOW SLAVE STATUS, Seconds_Behind_Master, 1] <= 10
+--let $assert_text= Seconds_Behind_Master should be less than MASTER_DELAY
+--source include/rpl_assert.inc
+
+# The row should be available in table after master_delay=20 seconds.
+--let $assert_text= One row shoule be found in table t1.
+--let $assert_cond= COUNT(*) = 1 FROM t1
+--source include/rpl_assert.inc
+
+--echo "======= Clean up ========"
+STOP SLAVE;
+CHANGE MASTER TO MASTER_USE_GTID=no, MASTER_DELAY=0;
+START SLAVE;
+
+--connection master
+DROP TABLE t1;
+--sync_slave_with_master
+
+--connection master
+--source include/rpl_end.inc
diff --git a/sql/slave.cc b/sql/slave.cc
index f3e08f14213..6b234697f09 100644
--- a/sql/slave.cc
+++ b/sql/slave.cc
@@ -3532,12 +3532,6 @@ apply_event_and_update_pos_setup(Log_event* ev, THD* thd, rpl_group_info *rgi)
thd->variables.server_id = ev->server_id;
thd->set_time(); // time the query
thd->lex->current_select= 0;
- if (!ev->when)
- {
- my_hrtime_t hrtime= my_hrtime();
- ev->when= hrtime_to_my_time(hrtime);
- ev->when_sec_part= hrtime_sec_part(hrtime);
- }
thd->variables.option_bits=
(thd->variables.option_bits & ~OPTION_SKIP_REPLICATION) |
(ev->flags & LOG_EVENT_SKIP_REPLICATION_F ? OPTION_SKIP_REPLICATION : 0);