File: rpl_row_img_parts_master_slave.inc

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 (104 lines) | stat: -rw-r--r-- 3,110 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
#
# This is a wrapper to help minimize writing of assertions
# that resort to rpl_row_img_parts_assertion.inc on a 
# master-slave scenario.
#
# This script takes a statement to be executed and master
# and slave expected images description as parameters. Before
# statement execution (on the master only), both servers are
# synchronized, and positions explicitly saved. These are
# then used as starting position in mysqlbinlog -v (see
# suite/rpl/include/rpl_row_img_parts_assertion.inc).
# 
# Parameters:
#  - $row_img_query
#    The query to be executed on the master, which will
#    make master and slave log one or more row events.
#
#  - $row_img_expected_master
#    String representation of the expected images to search
#    on master's mysqlbinlog -v output
#
#  - $row_img_expected_slave
#    String representation of the expected images to search
#    on slaves's mysqlbinlog -v output
#
# Sample usage:
#
#  -- let $row_img_query= INSERT INTO t VALUES (1, 2, 3)
#  -- let $row_img_expected_master= | 1:1 2:2 3:3
#  -- let $row_img_expected_slave = | 1:1 2:2 3:3
#  -- source include/rpl_row_img_parts_master_slave.inc
#
#  -- let $row_img_query= UPDATE t SET c2= 4 WHERE c1=1
#  -- let $row_img_expected_master= 1:1 | 2:4
#  -- let $row_img_expected_slave = 1:1 2:2 3:3 | 1:1 2:4 3:3
#  -- source include/rpl_row_img_parts_master_slave.inc
#
#  -- let $row_img_query= DELETE FROM t WHERE c2=4
#  -- let $row_img_expected_master= 1:1 |
#  -- let $row_img_expected_slave = 1:1 2:4 3:3 | 
#  -- source include/rpl_row_img_parts_master_slave.inc
#
# NOTES:
#
#  1. Both master and slave are synchronized before execution
#     of the query takes place
#  
#  2. original connection - the one in use before including
#     this script - is restored at the end

-- let $old_conn= $CURRENT_CONNECTION

SET sql_mode = 'NO_ENGINE_SUBSTITUTION';

-- connection master
-- sync_slave_with_master

-- let $row_img_pos_slave= query_get_value(SHOW MASTER STATUS, Position, 1)

-- connection master
-- let $row_img_pos_master= query_get_value(SHOW MASTER STATUS, Position, 1)

# execute the query
-- connection master
-- eval $row_img_query

# lets wait until the binary log position changes
-- let $_pos= query_get_value("SHOW MASTER STATUS", Position, 1)

# wait for 5 minutes
-- let $iterations=3000
while($_pos == $row_img_pos_master)
{
  -- sleep 0.1
  -- let $_pos= query_get_value("SHOW MASTER STATUS", Position, 1)
  -- dec $iterations
}

if (!$iterations)
{
  -- echo Time out while waiting for the event to be written to the binary log at the master!
  -- echo Query: $row_img_query
  -- source include/show_rpl_debug_info.inc
  -- exit
}

# now sync the slave
-- sync_slave_with_master

# master assertion
-- connection master
-- let $row_img_expected= $row_img_expected_master
-- let $row_img_pos= $row_img_pos_master
-- source include/rpl_row_img_parts_assertion.inc

# slave assertion 
-- connection slave
-- let $row_img_expected= $row_img_expected_slave
-- let $row_img_pos= $row_img_pos_slave
-- source include/rpl_row_img_parts_assertion.inc

-- connection $old_conn

SET sql_mode = default;