diff options
author | Sachin <sachinsetia1001@gmail.com> | 2020-06-29 16:35:00 +0530 |
---|---|---|
committer | Sachin <sachinsetia1001@gmail.com> | 2020-06-29 16:35:44 +0530 |
commit | 821f7599a8fe32c93b97b05db056f8c9c5880567 (patch) | |
tree | baed79a86e9928a1b3f13d1a1a4cc37aedab7ef1 | |
parent | 3572a6db24cdeb2a06e1e5cb3e0b367a0a7aceda (diff) | |
download | mariadb-git-10.5-olter-v4.tar.gz |
MDEV-22985 Assertion `!(thd->rgi_slave && thd->rgi_slave->did_mark_start_commit)' failed in ha_rollback_trans10.5-olter-v4
Partial fix
-rw-r--r-- | mysql-test/suite/rpl/r/rpl_start_alter_bugs.result | 44 | ||||
-rw-r--r-- | mysql-test/suite/rpl/t/rpl_start_alter_bugs.test | 37 | ||||
-rw-r--r-- | sql/sql_table.cc | 13 |
3 files changed, 90 insertions, 4 deletions
diff --git a/mysql-test/suite/rpl/r/rpl_start_alter_bugs.result b/mysql-test/suite/rpl/r/rpl_start_alter_bugs.result new file mode 100644 index 00000000000..62869353309 --- /dev/null +++ b/mysql-test/suite/rpl/r/rpl_start_alter_bugs.result @@ -0,0 +1,44 @@ +include/master-slave.inc +[connection master] +set global binlog_split_alter=true; +connection slave; +stop slave; +SET global slave_parallel_threads=2; +set global slave_parallel_mode=optimistic; +start slave; +connection master; +CREATE TABLE t1 (i int primary key) ENGINE = InnoDB; +connection master1; +ALTER TABLE t1 DROP PRIMARY KEY; +ALTER TABLE t1 ADD UNIQUE KEY ui (i); +ALTER TABLE t1 ADD PRIMARY KEY (i); +ERROR 42000: Incorrect index name 'ui' +show binlog events; +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 4 Format_desc 1 256 Server ver: 10.5.0-MariaDB-debug-log, Binlog ver: 4 +master-bin.000001 256 Gtid_list 1 285 [] +master-bin.000001 285 Binlog_checkpoint 1 329 master-bin.000001 +master-bin.000001 329 Gtid 1 371 GTID 0-1-1 +master-bin.000001 371 Query 1 489 use `test`; CREATE TABLE t1 (i int primary key) ENGINE = InnoDB +master-bin.000001 489 Gtid 1 531 GTID 0-1-2 +master-bin.000001 531 Query 1 670 use `test`; /*!100001 ALTER TABLE t1 DROP PRIMARY KEY EXECUTE = UNTIL COMMIT 10 */ +master-bin.000001 670 Gtid 1 712 GTID 0-1-3 +master-bin.000001 712 Query 1 844 use `test`; ALTER TABLE t1 DROP PRIMARY KEY /*!100001 EXECUTE = COMMIT 10 */ +master-bin.000001 844 Gtid 1 886 GTID 0-1-4 +master-bin.000001 886 Query 1 1030 use `test`; /*!100001 ALTER TABLE t1 ADD UNIQUE KEY ui (i) EXECUTE = UNTIL COMMIT 10 */ +master-bin.000001 1030 Gtid 1 1072 GTID 0-1-5 +master-bin.000001 1072 Query 1 1209 use `test`; ALTER TABLE t1 ADD UNIQUE KEY ui (i) /*!100001 EXECUTE = COMMIT 10 */ +master-bin.000001 1209 Gtid 1 1251 GTID 0-1-6 +master-bin.000001 1251 Query 1 1393 use `test`; /*!100001 ALTER TABLE t1 ADD PRIMARY KEY (i) EXECUTE = UNTIL COMMIT 10 */ +master-bin.000001 1393 Gtid 1 1435 GTID 0-1-7 +master-bin.000001 1435 Query 1 1573 use `test`; /*!100001 ALTER TABLE t1 ADD PRIMARY KEY (i) EXECUTE = ROLLBACK 10 */ +connection slave; +connection master; +drop table t1; +set global binlog_split_alter=false; +connection slave; +include/stop_slave.inc +SET global slave_parallel_threads=0; +set global slave_parallel_mode=conservative; +include/start_slave.inc +include/rpl_end.inc diff --git a/mysql-test/suite/rpl/t/rpl_start_alter_bugs.test b/mysql-test/suite/rpl/t/rpl_start_alter_bugs.test new file mode 100644 index 00000000000..67c1d9a7140 --- /dev/null +++ b/mysql-test/suite/rpl/t/rpl_start_alter_bugs.test @@ -0,0 +1,37 @@ +# +# MDEV-22985 Assertion `!(thd->rgi_slave && thd->rgi_slave->did_mark_start_commit)' failed in ha_rollback_trans# +# +# + +--source include/have_log_bin.inc +--source include/have_innodb.inc +--source include/master-slave.inc +#set global binlog_split_alter=true; +--connection slave +stop slave; +SET global slave_parallel_threads=2; +set global slave_parallel_mode=optimistic; +start slave; +--connection master + +CREATE TABLE t1 (i int primary key) ENGINE = InnoDB; +--connection master1 +ALTER TABLE t1 DROP PRIMARY KEY; +ALTER TABLE t1 ADD UNIQUE KEY ui (i); +--error 1280 ###? query 'ALTER TABLE t1 ADD PRIMARY KEY ( i )' failed: 1280: Incorrect index name 'ui' +ALTER TABLE t1 ADD PRIMARY KEY (i); +show binlog events; + +--sync_slave_with_master + +--connection master +drop table t1; +set global binlog_split_alter=false; + +--connection slave +--source include/stop_slave.inc +SET global slave_parallel_threads=0; +set global slave_parallel_mode=conservative; +--source include/start_slave.inc + +--source include/rpl_end.inc diff --git a/sql/sql_table.cc b/sql/sql_table.cc index 936c97b8ac5..84242d7138f 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -7579,9 +7579,9 @@ static int mysql_inplace_alter_table(THD *thd, bool reopen_tables= false; bool res; handlerton *hton; - Master_info *mi= NULL; - if (thd->slave_thread) - mi= thd->rgi_slave->rli->mi; +// Master_info *mi= NULL; + //if (thd->slave_thread) + //mi= thd->rgi_slave->rli->mi; int return_result= 0; DBUG_ENTER("mysql_inplace_alter_table"); @@ -7747,7 +7747,8 @@ static int mysql_inplace_alter_table(THD *thd, thd->abort_on_warning= false; if (thd->lex->alter_info.alter_identifier && !thd->direct_commit_alter) { - if ((return_result= master_result(thd, mi, info, res))) + wait_for_master(thd, info); + if (info->state == start_alter_state::ROLLBACK_ALTER) goto rollback; } if (res) @@ -10303,6 +10304,10 @@ do_continue:; if(write_bin_log(thd, false, send_query, strlen(send_query), true, true)) DBUG_RETURN(true); } + if (start_alter_id) + { + master_result(thd, mi, info, res); + } cleanup_table_after_inplace_alter(&altered_table); DBUG_RETURN(true); } |