Commit 821f7599 authored by Sachin's avatar Sachin

MDEV-22985 Assertion `!(thd->rgi_slave &&...

MDEV-22985 Assertion `!(thd->rgi_slave && thd->rgi_slave->did_mark_start_commit)' failed in ha_rollback_trans

Partial fix
parent 3572a6db
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
#
# 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
......@@ -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);
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment