File: gr_clone_integration_error_fallback.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 (141 lines) | stat: -rw-r--r-- 5,832 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
###############################################################################
# This test evaluates that when donor and joiner have a different server
# character set, recovery through clone will fail and will fall back to
# incremental recovery.
#
# 1. Install clone and keyring plugins on server1.
# 2. Bootstrap server1 and add some data
# 3. Restart server 2 with a monitoring process (mysqld_safe) if needed
# 4. Install the clone plugin on server2.
# 5. Set server character set to latin1 (non-default)
# 6. On a empty server2 start group replication
#    Clone will fail since the donor server character set utf8mb4 (default) is
#    different from joiner character set. Recovery will fallback to incremental.
# 7. Cleanup
###############################################################################
--source include/have_mysqld_monitoring_process.inc
--source include/have_clone_plugin.inc
--source include/have_group_replication_plugin.inc
--let $rpl_skip_group_replication_start= 1
--source include/group_replication.inc

--let plugins = CLONE_PLUGIN,GROUP_REPLICATION,KEYRING_PLUGIN
--source include/check_plugin_dir.inc

--echo
--echo ############################################################
--echo # 1. Install clone and keyring plugins on server1.

--let $rpl_connection_name= server1
--source include/rpl_connection.inc

--replace_result $CLONE_PLUGIN CLONE_PLUGIN
--eval INSTALL PLUGIN clone SONAME '$CLONE_PLUGIN'

--replace_result $KEYRING_PLUGIN KEYRING_PLUGIN
--eval INSTALL PLUGIN keyring_file SONAME '$KEYRING_PLUGIN'

--echo
--echo ############################################################
--echo # 2. Bootstrap server1 and add some data

--source include/start_and_bootstrap_group_replication.inc

CREATE TABLE t1 (c1 INT NOT NULL PRIMARY KEY) ENGINE=InnoDB;
INSERT INTO t1 VALUES (1);
INSERT INTO t1 VALUES (2);

--echo
--echo #######################################################################
--echo # 3. Restart server 2 with a monitoring process (mysqld_safe) if needed

--let $rpl_connection_name= server2
--source include/rpl_connection.inc

--let $_group_replication_local_address= `SELECT @@GLOBAL.group_replication_local_address`
--let $_group_replication_group_seeds= `SELECT @@GLOBAL.group_replication_group_seeds`
--let $_group_replication_comm_stack= `SELECT @@GLOBAL.group_replication_communication_stack`

--let $plugin_list= $GROUP_REPLICATION
--source include/spawn_monitoring_process.inc

--echo
--echo ############################################################
--echo # 4. Install the clone plugin on server2.

--replace_result $CLONE_PLUGIN CLONE_PLUGIN
--eval INSTALL PLUGIN clone SONAME '$CLONE_PLUGIN'

--echo
--echo ############################################################
--echo # 5. Set server character set to latin1 (non-default)

SET @@global.character_set_server = latin5;

--echo
--echo ############################################################
--echo # 6. On a empty server2 start group replication
--echo #    Clone will fail since the donor server character set utf8mb4 (default) is
--echo #    different from joiner character set. Recovery will fallback to incremental.

SET @group_replication_clone_threshold_saved = @@GLOBAL.group_replication_clone_threshold;
SET GLOBAL group_replication_clone_threshold= 1;

--disable_query_log
--eval SET GLOBAL group_replication_local_address= "$_group_replication_local_address"
--eval SET GLOBAL group_replication_group_seeds= "$_group_replication_group_seeds"
--eval SET GLOBAL group_replication_communication_stack= "$_group_replication_comm_stack"
--enable_query_log

--source include/start_group_replication.inc

--let $diff_tables=server1:test.t1 ,server2:test.t1
--source include/diff_tables.inc

--let $assert_text= Clone should have failed
--let $assert_cond= [SELECT state="Failed" FROM performance_schema.clone_status] = 1;
--source include/assert.inc

--let $assert_file= $MYSQLTEST_VARDIR/log/mysqld.2.err
--let $assert_only_after = CURRENT_TEST: gr_clone_integration_error_fallback
--let $assert_text = Clone failed
--let $assert_select = There was an issue when cloning from another server: Error number: 3868 Error message: Clone Configuration character_set_server: Donor value: utf8mb4 is different from Recipient value: latin5.'
--let $assert_count = 1
--source include/assert_grep.inc

--echo
--echo ############################################################
--echo # 7. Cleanup

SET GLOBAL group_replication_clone_threshold= @group_replication_clone_threshold_saved;

DROP TABLE t1;
--source include/rpl_sync.inc

--let $rpl_connection_name= server2
--source include/rpl_connection.inc

--source include/clean_monitoring_process.inc

set session sql_log_bin=0;
call mtr.add_suppression("This member will start distributed recovery using clone. It is due to the number of missing transactions being higher than the configured threshold of 1.");
call mtr.add_suppression("Internal query: CLONE INSTANCE FROM \'root\'@\'127.0.0.1\':[0-9]+ IDENTIFIED BY \'\\*\\*\\*\\*\\*\' REQUIRE NO SSL; result in error. Error number: 3868");
call mtr.add_suppression("There was an issue when cloning from another server: Error number: 3868 Error message: Clone Configuration character_set_server: Donor value: utf8mb4 is different from Recipient value: latin5.");
call mtr.add_suppression("Due to some issue on the previous step distributed recovery is now executing: Incremental Recovery.");
set session sql_log_bin=1;

--let $rpl_connection_name= server1
--source include/rpl_connection.inc

UNINSTALL PLUGIN clone;
UNINSTALL PLUGIN keyring_file;

--remove_file $MYSQL_TMP_DIR/gr_clone_integration_error_fallback

--let $rpl_connection_name= server2
--source include/rpl_connection.inc

UNINSTALL PLUGIN clone;
SET @@global.character_set_server = default;

--source include/group_replication_end.inc