summaryrefslogtreecommitdiff
path: root/mysql-test/suite/rpl/include/rpl_xa_empty_transaction_test_case.inc
blob: 6368336b8e36c99834be36c3f43e33e72fec2f92 (plain)
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
#
#   Helper script to create an XA transaction and validate it was not
# binlogged
#
# Parameters
#   $xa_completion_action     : The action to end the XA transaction, either
#                               COMMIT or ROLLBACK
#   $trx_statements           : A comma separated list specifying how to build
#                               the statements of the transaction. Each item in
#                               the list is either T (for transactional) or N
#                               (for non-transactional). An empty list will not
#                               add any statements to the transaction.
#   $use_disconnect           : When TRUE, disconnect after preparing the XA
#                               transaction to test the detach/rollback case
#

#
# Setup
--let $generic_assert_text= should not binlog XA transaction

--connection server_1
--let server_1_datadir=`select @@datadir`

--connection server_2
--let server_2_datadir=`select @@datadir`

--connection server_3
--let server_3_datadir=`select @@datadir`

--let assert_file=$MYSQLTEST_VARDIR/tmp/binlog_decoded.out

--connection server_1
CREATE TABLE tm (a INT PRIMARY KEY) engine=myisam;
CREATE TABLE ti (a INT PRIMARY KEY) engine=innodb;
--source include/save_master_gtid.inc

--connection server_3
--source include/sync_with_master_gtid.inc

--connection server_1

if ($use_disconnect)
{
    --source include/count_sessions.inc
    --connect(con1,localhost,root,,)
}

XA START 'x';
--let $_stmt_items= $trx_statements
--let $_ctr= 1
while($_stmt_items)
{
  --let $_cur_stmt= `SELECT SUBSTRING_INDEX('$_stmt_items', ',', 1)`
  --let $_stmt_items= `SELECT LTRIM(SUBSTRING('$_stmt_items', LENGTH('$_cur_stmt') + 2))`

    if (`SELECT strcmp("$_cur_stmt","T") = 0`)
    {
        --let $target_table= ti
    }

    if (`SELECT strcmp("$_cur_stmt","N") = 0`)
    {
        --let $target_table= tm
    }

    --error ER_DUP_ENTRY
    --eval INSERT INTO $target_table VALUES ($_ctr),($_ctr);
    inc $_ctr;

}
XA END 'x';
XA PREPARE 'x';

if ($use_disconnect)
{
    --disconnect con1
    --connection server_1
    --source include/wait_until_count_sessions.inc
    XA RECOVER;

    --error ER_XA_RBROLLBACK
    --eval XA $xa_completion_action 'x';
}
if (!$use_disconnect)
{
    --eval XA $xa_completion_action 'x';
}

--source include/save_master_gtid.inc

--let binlog_filename= query_get_value(SHOW MASTER STATUS, File, 1)
FLUSH LOGS;

--echo # MYSQL_BINLOG server_1_datadir/binlog_filename --result-file=assert_file
--exec $MYSQL_BINLOG $server_1_datadir/$binlog_filename --result-file=$assert_file

--let assert_text= server_1 $generic_assert_text
--let assert_count= 0
--let assert_select= XA START|XA END|XA PREPARE|XA COMMIT|XA ROLLBACK
--source include/assert_grep.inc

--connection server_2
--source include/sync_with_master_gtid.inc
--let binlog_filename= query_get_value(SHOW MASTER STATUS, File, 1)
FLUSH LOGS;

--echo # MYSQL_BINLOG server_2_datadir/binlog_filename --result-file=assert_file
--exec $MYSQL_BINLOG $server_2_datadir/$binlog_filename --result-file=$assert_file

--let assert_text= server_2 $generic_assert_text
--source include/assert_grep.inc

--connection server_3
--source include/sync_with_master_gtid.inc
--let binlog_filename= query_get_value(SHOW MASTER STATUS, File, 1)
FLUSH LOGS;

--echo # MYSQL_BINLOG server_3_datadir/binlog_filename --result-file=assert_file
--exec $MYSQL_BINLOG $server_3_datadir/$binlog_filename --result-file=$assert_file

--let assert_text= server_3 $generic_assert_text
--source include/assert_grep.inc

#
# Cleanup
--connection server_1
DROP TABLE ti,tm;
--source include/save_master_gtid.inc

--connection server_3
--source include/sync_with_master_gtid.inc