Skip to content

Commit f8bc40e

Browse files
committed
MDEV-36340: Reset Connects_Tried with Master_Retry_Count=X
CHANGE MASTER can set `Master_Retry_Count` to be lower than `Connects_Tried`, which’ll look strange to those unaware of that CHANGE. Now, setting `Master_Retry_Count` also resets `Connects_Tried` to 0. Reviewed-by: Susil Behera <susil.behera@mariadb.com> Reviewed-by: Brandon Nesterenko <brandon.nesterenko@mariadb.com>
1 parent 8a95409 commit f8bc40e

File tree

3 files changed

+36
-14
lines changed

3 files changed

+36
-14
lines changed

mysql-test/suite/multi_source/connects_tried.result

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -80,27 +80,36 @@ SELECT *
8080
FROM status_after JOIN status_stop USING(Connection_name)
8181
WHERE status_stop.Connects_Tried <> status_after.Connects_Tried;
8282
Connection_name Connects_Tried Connects_Tried
83-
START SLAVE;
84-
include/wait_for_slave_to_start.inc
83+
include/start_slave.inc
8584
# START SLAVE recounts `Connects_Tried` from 1 (for the restarted connection only).
8685
CREATE TEMPORARY TABLE status_restart AS
8786
SELECT Connection_name, Connects_Tried FROM information_schema.SLAVE_STATUS;
8887
SELECT *
89-
FROM status_restart JOIN status_stop USING(Connection_name)
88+
FROM status_stop JOIN status_restart USING(Connection_name)
9089
WHERE status_restart.Connects_Tried NOT BETWEEN IF(
9190
Connection_name = '', 1, status_stop.Connects_Tried
9291
) AND status_stop.Connects_Tried;
9392
Connection_name Connects_Tried Connects_Tried
94-
STOP SLAVE;
95-
include/wait_for_slave_to_stop.inc
93+
include/stop_slave.inc
94+
CHANGE MASTER TO Master_Retry_Count=777;
95+
# Setting `Master_Retry_Count` resets `Connects_Tried` to 0 (for the changed connection only).
96+
CREATE TEMPORARY TABLE status_change AS
97+
SELECT Connection_name, Connects_Tried FROM information_schema.SLAVE_STATUS;
98+
SELECT *
99+
FROM status_restart JOIN status_change USING(Connection_name)
100+
WHERE status_change.Connects_Tried <>
101+
IF(Connection_name = '', 0, status_restart.Connects_Tried);
102+
Connection_name Connects_Tried Connects_Tried
103+
include/start_slave.inc
104+
include/stop_slave.inc
96105
RESET SLAVE;
97106
# RESET SLAVE resets `Connects_Tried` to 0 (for the resetted connection only).
98107
CREATE TEMPORARY TABLE status_reset AS
99108
SELECT Connection_name, Connects_Tried FROM information_schema.SLAVE_STATUS;
100109
SELECT *
101-
FROM status_reset JOIN status_restart USING(Connection_name)
110+
FROM status_change JOIN status_reset USING(Connection_name)
102111
WHERE status_reset.Connects_Tried <>
103-
IF(Connection_name = '', 0, status_restart.Connects_Tried);
112+
IF(Connection_name = '', 0, status_change.Connects_Tried);
104113
Connection_name Connects_Tried Connects_Tried
105114
# Cleanup
106115
RESET SLAVE 'named' ALL;

mysql-test/suite/multi_source/connects_tried.test

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -122,27 +122,37 @@ SELECT *
122122
FROM status_after JOIN status_stop USING(Connection_name)
123123
WHERE status_stop.Connects_Tried <> status_after.Connects_Tried;
124124

125-
START SLAVE;
126-
--source include/wait_for_slave_to_start.inc
125+
--source include/start_slave.inc
127126
--echo # START SLAVE recounts `Connects_Tried` from 1 (for the restarted connection only).
128127
CREATE TEMPORARY TABLE status_restart AS
129128
SELECT Connection_name, Connects_Tried FROM information_schema.SLAVE_STATUS;
130129
SELECT *
131-
FROM status_restart JOIN status_stop USING(Connection_name)
130+
FROM status_stop JOIN status_restart USING(Connection_name)
132131
WHERE status_restart.Connects_Tried NOT BETWEEN IF(
133132
Connection_name = '', 1, status_stop.Connects_Tried
134133
) AND status_stop.Connects_Tried;
135134

136-
STOP SLAVE;
137-
--source include/wait_for_slave_to_stop.inc
135+
--source include/stop_slave.inc
136+
# MDEV-36340 Master_Retry_Count should never be less than Connects_Tried
137+
CHANGE MASTER TO Master_Retry_Count=777;
138+
--echo # Setting `Master_Retry_Count` resets `Connects_Tried` to 0 (for the changed connection only).
139+
CREATE TEMPORARY TABLE status_change AS
140+
SELECT Connection_name, Connects_Tried FROM information_schema.SLAVE_STATUS;
141+
SELECT *
142+
FROM status_restart JOIN status_change USING(Connection_name)
143+
WHERE status_change.Connects_Tried <>
144+
IF(Connection_name = '', 0, status_restart.Connects_Tried);
145+
146+
--source include/start_slave.inc # build up Connects_Tried again
147+
--source include/stop_slave.inc
138148
RESET SLAVE;
139149
--echo # RESET SLAVE resets `Connects_Tried` to 0 (for the resetted connection only).
140150
CREATE TEMPORARY TABLE status_reset AS
141151
SELECT Connection_name, Connects_Tried FROM information_schema.SLAVE_STATUS;
142152
SELECT *
143-
FROM status_reset JOIN status_restart USING(Connection_name)
153+
FROM status_change JOIN status_reset USING(Connection_name)
144154
WHERE status_reset.Connects_Tried <>
145-
IF(Connection_name = '', 0, status_restart.Connects_Tried);
155+
IF(Connection_name = '', 0, status_change.Connects_Tried);
146156

147157
--echo # Cleanup
148158
RESET SLAVE 'named' ALL;

sql/sql_repl.cc

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4052,7 +4052,10 @@ bool change_master(THD* thd, Master_info* mi, bool *master_info_added)
40524052
if (lex_mi->connect_retry)
40534053
mi->connect_retry = lex_mi->connect_retry;
40544054
if (lex_mi->retry_count)
4055+
{
40554056
mi->retry_count= lex_mi->retry_count;
4057+
mi->connects_tried= 0;
4058+
}
40564059
if (lex_mi->heartbeat_opt != LEX_MASTER_INFO::LEX_MI_UNCHANGED)
40574060
mi->heartbeat_period = lex_mi->heartbeat_period;
40584061
else

0 commit comments

Comments
 (0)