File: rpl_gtid_server_sighup.test

package info (click to toggle)
mysql-8.0 8.0.43-3
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 1,273,924 kB
  • sloc: cpp: 4,684,605; ansic: 412,450; pascal: 108,398; java: 83,641; perl: 30,221; cs: 27,067; sql: 26,594; sh: 24,181; python: 21,816; yacc: 17,169; php: 11,522; xml: 7,388; javascript: 7,076; makefile: 2,194; lex: 1,075; awk: 670; asm: 520; objc: 183; ruby: 97; lisp: 86
file content (143 lines) | stat: -rw-r--r-- 4,883 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
###############################################################################
# Bug #17026898 PREVIOUS GTID EVENT IS NOT WRITTEN WHEN BINLOG IS ROTATED VIA
# SIGHUP

# Problem: When Bin(Relay)log is rotated via SIGHUP signal, the newly generated
# binlog does not contain previous gtid event which is very important
# for processing that bin(relay)log's gtid events later.

# Fix: If reload_acl_and_cache() (which does rotation of Bin(Relay) log)
# is called from SIGHUP handler, then allocate temporary THD for
# execution of rotate bin(relay)log.

# Steps to reproduce the issue:
# 1) Get the server pid
# 2) Send Kill -1 signal (SIGHUP) signal to server pid
# 3) Wait until rotation is done
# 4) Verify the newly generated log contains prev_gtid_event
# 5) Restart the server to see the processing of the new log is not an issue.
# 6) Verify that Replication works fine at the end of the scenario

# Execute the same steps on both Master and Slave do prove that
#   a) no problem in binary log rotation (i.e., prev_gtids_event exists)
#   b) no problem in relay log rotation (i.e., prev_gtids event exists)
#   c) no problem in restarting master
#   d) no problem in restarting slave
#   e) Replication works fine after receiving SIGHUP.
###############################################################################

# Test involves sending SIGHUP signal using kill linux cmd
--source include/linux.inc

# Problem appears only with gtid

# Testing SIGHUP behaviour with one mode is enough
--source include/have_binlog_format_statement.inc
--source include/master-slave.inc

# Bug#23297190 :RPL_GTID_SERVER_SIGHUP AND RPL_SOURCE_POS_WAIT_AFTER_STARTUP FAILS
# IN VALGRIND : Increased the time interval between the connection retries.
--connection slave
--source include/stop_slave.inc
CHANGE REPLICATION SOURCE TO SOURCE_CONNECT_RETRY=30, SOURCE_RETRY_COUNT=30;
--source include/start_slave.inc

--connection master
CREATE TABLE pid_table(pid_no INT);


# Execute above mentioned steps in two iterations
# Iteration 1 : Master and Iteration 2: Slave
--let $_rpl_server= 1
while ($_rpl_server <= 2)
{
  --let $rpl_connection_name= server_$_rpl_server
  --source include/rpl_connection.inc
  --let $pid_file=`SELECT @@pid_file`
  --replace_result $pid_file pid_file
  --eval LOAD DATA LOCAL INFILE '$pid_file' INTO TABLE pid_table
  # Step1: Get server pid
  --let $server_pid=`SELECT pid_no FROM pid_table`

  # Get current master binlog name
  if ($_rpl_server == 1)
  {
    --let $before_sighup_log_name=query_get_value(SHOW MASTER STATUS, File, 1)
  }
  if ($_rpl_server == 2)
  {
    --let $before_sighup_log_name=query_get_value(SHOW SLAVE STATUS, Relay_Log_File, 1)
  }

  # Step2: send SIGHUP(signal 1) to server which will rotate bin(relay)log
  --exec kill -1 $server_pid

  # Step3: Wait until signal handler does required work
  # (i.e., completes rotation of binary/relay log) after receiving SIGHUP signal.
  if ($_rpl_server == 1)
  {
    --let $show_statement=SHOW MASTER STATUS
    --let $field=File
  }
  if ($_rpl_server == 2)
  {
    --let $show_statement=SHOW SLAVE STATUS
    --let $field=Relay_Log_File
  }
  --let $condition= <> '$before_sighup_log_name'
  --source include/wait_show_condition.inc

  # Write something to newly generated binary log/relay log
  if ($_rpl_server == 2)
  {
    --let $rpl_connection_name= server_1
    --source include/rpl_connection.inc
  }
  DELETE FROM pid_table;
  --source include/sync_slave_sql_with_master.inc
  if ($_rpl_server == 1)
  {
    --let $rpl_connection_name= server_1
    --source include/rpl_connection.inc
  }
  # Step 4:Show that newly generated binary/relaylog has previous gtid event as well
  --let $keep_gtid_events= 1
  --let $binlog_file= LAST
  if ($_rpl_server == 1)
  {
    --source include/show_binlog_events.inc
  }
  if ($_rpl_server == 2)
  {
    --source include/show_relaylog_events.inc
  }
  # Step5: Restart server to make sure that
  # newly generated binary log/relay log does not cause any issues
  --let $rpl_server_number= $_rpl_server
  --source include/rpl_stop_server.inc
  --let $rpl_start_with_gtids= 1
  --source include/rpl_start_server.inc
  if ($_rpl_server == 2)
  {
    --source include/rpl_start_slaves.inc
  }
  if ($_rpl_server == 1)
  {
    # We must be sure that the IO thread has connected again with the master
    # that has just restarted, or else the results of the test case may vary.
    # As no new GTID was generated since last sync, we will force the use of
    # positions on the sync.
    --let $ignore_gtids_on_sync= 1
    --source include/sync_slave_sql_with_master.inc
    --let $ignore_gtids_on_sync= 0
  }
  --inc $_rpl_server
}

# Now just make sure replication works fine
--let $rpl_connection_name= server_1
--source include/rpl_connection.inc
DROP TABLE pid_table;
--source include/sync_slave_sql_with_master.inc

--source include/rpl_end.inc