-
Notifications
You must be signed in to change notification settings - Fork 4k
/
Copy pathheartbeat_2replicas.inc
156 lines (131 loc) · 5.26 KB
/
heartbeat_2replicas.inc
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
144
145
146
147
148
149
150
151
152
153
154
155
156
#############################################################
# Author: Serge Kozlov <Serge.Kozlov@Sun.COM>
# Date: 02/19/2009
# Purpose: Testing heartbeat for schema
# 1 master and 2 slaves
#############################################################
--let $rpl_topology= 1->2,1->3
--source include/rpl/init.inc
--let $rpl_connection_name= master
--let $rpl_server_number= 1
--source include/rpl/connect.inc
--let $rpl_connection_name= slave_1
--let $rpl_server_number= 2
--source include/rpl/connect.inc
--let $rpl_connection_name= slave_2
--let $rpl_server_number= 3
--source include/rpl/connect.inc
#
# Set different heartbeat periods for slaves
#
--connection slave_1
--source include/rpl/stop_replica.inc
CHANGE REPLICATION SOURCE TO SOURCE_HEARTBEAT_PERIOD = 0.1;
--source include/rpl/start_replica.inc
--connection slave_2
--source include/rpl/stop_replica.inc
--replace_column 2 ####
CHANGE REPLICATION SOURCE TO SOURCE_HEARTBEAT_PERIOD = 1;
--source include/rpl/start_replica.inc
#
# Testing heartbeat for one master and two slaves
#
# Check that heartbeat events sent to both slaves with correct periods
--connection slave_1
# As per WL7817, status variables are moved to PS replication tables.
# Replacing slave_received_heartbeats with count_received_heartbeats.
let $status_col= count_received_heartbeats;
let $table=replication_connection_status;
let $status_col_value= query_get_value(select $status_col from performance_schema.$table, $status_col, 1);
let $status_col_comparsion= >;
--source include/wait_for_pfs_status.inc
--echo Slave has received heartbeat event
--connection slave_2
# As per WL7817, status variables are moved to PS replication tables.
# Replacing slave_received_heartbeats with count_received_heartbeats.
let $status_col= count_received_heartbeats;
let $table=replication_connection_status;
let $status_col_value= query_get_value(select count_received_heartbeats from
performance_schema.replication_connection_status, count_received_heartbeats, 1);
let $status_col_comparsion= >;
--source include/wait_for_pfs_status.inc
let $table=replication_connection_status;
--let $assert_cond= [slave_1:select count_received_heartbeats from performance_schema.replication_connection_status, count_received_heartbeats, 1]> [slave_2:select count_received_heartbeats from performance_schema.replication_connection_status, count_received_heartbeats, 1]
--let $assert_text= slave_1 should have received more heartbeats than slave_2
--source include/assert.inc
--echo
# Create topology master->slave_2->slave_1 and check that slave_1
# receives heartbeat while slave_2 gets data.
# slave_2 was started w/o --log-replica-updates because slave_2 should
# not send data from master to slave_1
--source include/rpl/stop_all_replicas.inc
--let $rpl_topology= 1->3->2
--source include/rpl/change_topology.inc
--source include/rpl/start_all_replicas.inc
--connection slave_1
--source include/rpl/stop_replica.inc
--replace_column 2 ####
CHANGE REPLICATION SOURCE TO SOURCE_HEARTBEAT_PERIOD=0.1;
--source include/rpl/start_replica.inc
# Check heartbeat for new replication channel slave_2->slave
# As per WL7817, status variables are moved to PS replication tables.
# Replacing slave_received_heartbeats with count_received_heartbeats.
let $status_col= count_received_heartbeats;
let $status_col_value= query_get_value(select count_received_heartbeats from performance_schema.replication_connection_status, count_received_heartbeats, 1);
let $status_col_comparsion= >;
--source include/wait_for_pfs_status.inc
--echo slave_1 has received heartbeat event
--connection master
--echo [on master]
CREATE TABLE t1 (a INT PRIMARY KEY, b VARCHAR(10), c LONGTEXT);
INSERT INTO t1 VALUES (1, 'on master', '');
SHOW TABLES;
--echo [on slave_2]
--let $sync_slave_connection= slave_2
--source include/rpl/sync_to_replica.inc
SHOW TABLES;
let $slave_2_pos_before= query_get_value(SHOW REPLICA STATUS, Read_Source_Log_Pos, 1);
--echo [on slave_1]
--let $sync_slave_connection= slave_1
--source include/rpl/sync_to_replica.inc
SHOW TABLES;
--connection master
--echo [on master]
--echo creating updates on master and send to slave_2 during 5 second
# Generate events on master and send to slave_2 during 5 second
let $i= 1;
let $j= 1;
let $k= 1;
--disable_query_log
while ($i) {
eval SET @c_text=REPEAT('1234567890', $j);
eval UPDATE t1 SET a=$j, c=@c_text;
--connection slave_2
let $slave_2_pos= query_get_value(SHOW REPLICA STATUS, Read_Source_Log_Pos, 1);
if (`SELECT ($k*($slave_2_pos - $slave_2_pos_before)) > 0`) {
--connection slave_1
let $slave_1_rcvd_heartbeats_before= query_get_value(SELECT count_received_heartbeats from performance_schema.replication_connection_status,count_received_heartbeats, 1);
let $k= 0;
let $time_before = `SELECT NOW()`;
}
if (`SELECT ((1-$k)*TIMESTAMPDIFF(SECOND,'$time_before',NOW())) > 5`) {
let $i= 0;
}
--connection master
inc $j;
sleep 0.1;
}
--enable_query_log
--connection slave_1
--echo [on slave_1]
--let $assert_cond= [select count_received_heartbeats from performance_schema.replication_connection_status, count_received_heartbeats, 1]> $slave_1_rcvd_heartbeats_before
--let $assert_text= slave_1 should have received heartbeats
--source include/assert.inc
--echo
#
# Clean up
#
--echo *** Clean up ***
--connection master
DROP TABLE t1;
--source include/rpl/deinit.inc