mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
MDEV-8166 : Adding index on new table from select crashes Galera cluster
In wsrep, CTAS should be handled like a regular transaction. Added a test case.
This commit is contained in:
@ -24,5 +24,36 @@ SET @@GLOBAL.wsrep_forced_binlog_format=@wsrep_forced_binlog_format_saved;
|
||||
# MDEV-7673: CREATE TABLE SELECT fails on Galera cluster
|
||||
#
|
||||
CREATE TABLE t1 (i INT) ENGINE=INNODB DEFAULT CHARSET=utf8 SELECT 1 as i;
|
||||
SELECT * FROM t1;
|
||||
i
|
||||
1
|
||||
SELECT * FROM t1;
|
||||
i
|
||||
1
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# MDEV-8166 : Adding index on new table from select crashes Galera
|
||||
# cluster
|
||||
#
|
||||
CREATE TABLE t1(i int(11) NOT NULL DEFAULT '0') ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
INSERT INTO t1(i) VALUES (1), (2), (3);
|
||||
CREATE TABLE t2 (i INT) SELECT i FROM t1;
|
||||
ALTER TABLE t2 ADD INDEX idx(i);
|
||||
SELECT * FROM t2;
|
||||
i
|
||||
1
|
||||
2
|
||||
3
|
||||
SELECT * FROM t2;
|
||||
i
|
||||
1
|
||||
2
|
||||
3
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE `t2` (
|
||||
`i` int(11) DEFAULT NULL,
|
||||
KEY `idx` (`i`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||
DROP TABLE t1, t2;
|
||||
# End of tests
|
||||
|
@ -25,10 +25,34 @@ SET @@GLOBAL.wsrep_forced_binlog_format=@wsrep_forced_binlog_format_saved;
|
||||
--echo #
|
||||
--echo # MDEV-7673: CREATE TABLE SELECT fails on Galera cluster
|
||||
--echo #
|
||||
--connection node_1
|
||||
CREATE TABLE t1 (i INT) ENGINE=INNODB DEFAULT CHARSET=utf8 SELECT 1 as i;
|
||||
SELECT * FROM t1;
|
||||
|
||||
--connection node_2
|
||||
SELECT * FROM t1;
|
||||
# Cleanup
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-8166 : Adding index on new table from select crashes Galera
|
||||
--echo # cluster
|
||||
--echo #
|
||||
--connection node_1
|
||||
CREATE TABLE t1(i int(11) NOT NULL DEFAULT '0') ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
INSERT INTO t1(i) VALUES (1), (2), (3);
|
||||
|
||||
CREATE TABLE t2 (i INT) SELECT i FROM t1;
|
||||
ALTER TABLE t2 ADD INDEX idx(i);
|
||||
|
||||
SELECT * FROM t2;
|
||||
|
||||
--connection node_2
|
||||
SELECT * FROM t2;
|
||||
SHOW CREATE TABLE t2;
|
||||
|
||||
# Cleanup
|
||||
DROP TABLE t1, t2;
|
||||
|
||||
--echo # End of tests
|
||||
|
||||
|
@ -2917,17 +2917,10 @@ case SQLCOM_PREPARE:
|
||||
if (create_info.options & HA_LEX_CREATE_TMP_TABLE)
|
||||
thd->variables.option_bits|= OPTION_KEEP_LOG;
|
||||
|
||||
#ifdef WITH_WSREP
|
||||
if (WSREP(thd) &&
|
||||
(!thd->is_current_stmt_binlog_format_row() ||
|
||||
!(create_info.options & HA_LEX_CREATE_TMP_TABLE)))
|
||||
WSREP_TO_ISOLATION_BEGIN(create_table->db, create_table->table_name,
|
||||
NULL)
|
||||
#endif
|
||||
|
||||
/*
|
||||
select_create is currently not re-execution friendly and
|
||||
needs to be created for every execution of a PS/SP.
|
||||
Note: In wsrep-patch, CTAS is handled like a regular transaction.
|
||||
*/
|
||||
if ((result= new select_create(create_table,
|
||||
&create_info,
|
||||
|
Reference in New Issue
Block a user