summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSachin <sachinsetia1001@gmail.com>2020-06-29 16:35:00 +0530
committerSachin <sachinsetia1001@gmail.com>2020-06-29 16:35:44 +0530
commit821f7599a8fe32c93b97b05db056f8c9c5880567 (patch)
treebaed79a86e9928a1b3f13d1a1a4cc37aedab7ef1
parent3572a6db24cdeb2a06e1e5cb3e0b367a0a7aceda (diff)
downloadmariadb-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.result44
-rw-r--r--mysql-test/suite/rpl/t/rpl_start_alter_bugs.test37
-rw-r--r--sql/sql_table.cc13
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);
}