Skip to content

Commit c9b9eb3

Browse files
author
Jan Lindström
committed
MDEV-18497 : CTAS async replication from mariadb master crashes galera nodes (#1410)
In MariaDB 10.2 master could have been configured so that there is extra annotate events. When we peak next event type for CTAS we need to skip annotate events.
1 parent f7d35ff commit c9b9eb3

File tree

2 files changed

+29
-9
lines changed

2 files changed

+29
-9
lines changed
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,28 @@
1+
connect node_2a, 127.0.0.1, root, , test, $NODE_MYPORT_2;
2+
connect node_3, 127.0.0.1, root, , test, $NODE_MYPORT_3;
3+
connection node_2;
14
START SLAVE;
5+
connection node_1;
26
SHOW VARIABLES LIKE 'binlog_format';
37
Variable_name Value
48
binlog_format ROW
9+
connection node_1;
510
CREATE TABLE source (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB;
611
CREATE TABLE target AS SELECT * FROM source;
12+
connection node_2;
13+
connection node_3;
14+
connection node_1;
715
DROP TABLE target;
816
INSERT INTO source VALUES(1);
917
CREATE TABLE target AS SELECT * FROM source;
18+
connection node_2;
19+
connection node_3;
20+
connection node_1;
1021
DROP TABLE source;
1122
DROP TABLE target;
23+
connection node_3;
24+
connection node_2;
1225
STOP SLAVE;
1326
RESET SLAVE ALL;
27+
connection node_1;
1428
RESET MASTER;

sql/slave.cc

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7397,24 +7397,30 @@ event(errno: %d cur_log->error: %d)",
73977397
#ifdef WITH_WSREP
73987398
enum Log_event_type wsrep_peak_event(rpl_group_info *rgi, ulonglong* event_size)
73997399
{
7400+
enum Log_event_type ev_type;
7401+
74007402
mysql_mutex_lock(&rgi->rli->data_lock);
74017403

74027404
unsigned long long event_pos= rgi->event_relay_log_pos;
7405+
unsigned long long orig_future_pos= rgi->future_event_relay_log_pos;
74037406
unsigned long long future_pos= rgi->future_event_relay_log_pos;
74047407

7405-
/* scan the log to read next event */
7406-
my_b_seek(rgi->rli->cur_log, future_pos);
7407-
rgi->rli->event_relay_log_pos= future_pos;
7408-
rgi->event_relay_log_pos= future_pos;
7409-
7410-
Log_event* ev = next_event(rgi, event_size);
7411-
enum Log_event_type ev_type= (ev) ? ev->get_type_code() : UNKNOWN_EVENT;
7412-
delete ev;
7408+
/* scan the log to read next event and we skip
7409+
annotate events. */
7410+
do {
7411+
my_b_seek(rgi->rli->cur_log, future_pos);
7412+
rgi->rli->event_relay_log_pos= future_pos;
7413+
rgi->event_relay_log_pos= future_pos;
7414+
Log_event* ev= next_event(rgi, event_size);
7415+
ev_type= (ev) ? ev->get_type_code() : UNKNOWN_EVENT;
7416+
delete ev;
7417+
future_pos+= *event_size;
7418+
} while (ev_type == ANNOTATE_ROWS_EVENT);
74137419

74147420
/* scan the log back and re-set the positions to original values */
74157421
rgi->rli->event_relay_log_pos= event_pos;
74167422
rgi->event_relay_log_pos= event_pos;
7417-
my_b_seek(rgi->rli->cur_log, future_pos);
7423+
my_b_seek(rgi->rli->cur_log, orig_future_pos);
74187424

74197425
mysql_mutex_unlock(&rgi->rli->data_lock);
74207426

0 commit comments

Comments
 (0)