mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 12:02:42 +01:00
Merge branch '10.0-galera' into 10.1
This commit is contained in:
commit
a5b0a32ac3
16 changed files with 566 additions and 54 deletions
|
@ -11,6 +11,10 @@
|
||||||
# Don't write these queries to binlog
|
# Don't write these queries to binlog
|
||||||
set SQL_LOG_BIN=0;
|
set SQL_LOG_BIN=0;
|
||||||
|
|
||||||
|
# Do not replicate updates to other galera nodes
|
||||||
|
--error 0,1193
|
||||||
|
set WSREP_ON=0;
|
||||||
|
|
||||||
# Turn off any debug crashes, allow the variable to be
|
# Turn off any debug crashes, allow the variable to be
|
||||||
# non existent in release builds
|
# non existent in release builds
|
||||||
--error 0,1193
|
--error 0,1193
|
||||||
|
|
|
@ -20,4 +20,121 @@ pk i
|
||||||
SELECT * FROM t1;
|
SELECT * FROM t1;
|
||||||
pk i
|
pk i
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
#
|
||||||
|
# MDEV#7501 : alter table exchange partition is not replicated in
|
||||||
|
# galera cluster
|
||||||
|
#
|
||||||
|
|
||||||
|
# On node_1
|
||||||
|
CREATE TABLE test.t1 (
|
||||||
|
i INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||||
|
PRIMARY KEY (i)
|
||||||
|
) ENGINE=INNODB
|
||||||
|
PARTITION BY RANGE (i)
|
||||||
|
(PARTITION p1 VALUES LESS THAN (10) ENGINE = INNODB,
|
||||||
|
PARTITION p2 VALUES LESS THAN (20) ENGINE = INNODB,
|
||||||
|
PARTITION pMax VALUES LESS THAN MAXVALUE ENGINE = INNODB);
|
||||||
|
INSERT INTO test.t1 (i) VALUE (9),(19);
|
||||||
|
CREATE TABLE test.p1 LIKE test.t1;
|
||||||
|
ALTER TABLE test.p1 REMOVE PARTITIONING;
|
||||||
|
ALTER TABLE test.t1 EXCHANGE PARTITION p1 WITH TABLE test.p1;
|
||||||
|
SELECT * FROM test.t1;
|
||||||
|
i
|
||||||
|
19
|
||||||
|
SELECT * FROM test.p1;
|
||||||
|
i
|
||||||
|
9
|
||||||
|
|
||||||
|
# On node_2
|
||||||
|
SHOW CREATE TABLE t1;
|
||||||
|
Table Create Table
|
||||||
|
t1 CREATE TABLE `t1` (
|
||||||
|
`i` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
||||||
|
PRIMARY KEY (`i`)
|
||||||
|
) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=latin1
|
||||||
|
/*!50100 PARTITION BY RANGE (i)
|
||||||
|
(PARTITION p1 VALUES LESS THAN (10) ENGINE = InnoDB,
|
||||||
|
PARTITION p2 VALUES LESS THAN (20) ENGINE = InnoDB,
|
||||||
|
PARTITION pMax VALUES LESS THAN MAXVALUE ENGINE = InnoDB) */
|
||||||
|
SHOW CREATE TABLE p1;
|
||||||
|
Table Create Table
|
||||||
|
p1 CREATE TABLE `p1` (
|
||||||
|
`i` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
||||||
|
PRIMARY KEY (`i`)
|
||||||
|
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=latin1
|
||||||
|
SELECT * FROM test.t1;
|
||||||
|
i
|
||||||
|
19
|
||||||
|
SELECT * FROM test.p1;
|
||||||
|
i
|
||||||
|
9
|
||||||
|
|
||||||
|
# On node_1
|
||||||
|
ALTER TABLE t1 TRUNCATE PARTITION p2;
|
||||||
|
SELECT * FROM test.t1;
|
||||||
|
i
|
||||||
|
|
||||||
|
# On node_2
|
||||||
|
SELECT * FROM test.t1;
|
||||||
|
i
|
||||||
|
|
||||||
|
# On node_1
|
||||||
|
ALTER TABLE t1 DROP PARTITION p2;
|
||||||
|
SHOW CREATE TABLE t1;
|
||||||
|
Table Create Table
|
||||||
|
t1 CREATE TABLE `t1` (
|
||||||
|
`i` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
||||||
|
PRIMARY KEY (`i`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||||
|
/*!50100 PARTITION BY RANGE (i)
|
||||||
|
(PARTITION p1 VALUES LESS THAN (10) ENGINE = InnoDB,
|
||||||
|
PARTITION pMax VALUES LESS THAN MAXVALUE ENGINE = InnoDB) */
|
||||||
|
|
||||||
|
# On node_2
|
||||||
|
SHOW CREATE TABLE t1;
|
||||||
|
Table Create Table
|
||||||
|
t1 CREATE TABLE `t1` (
|
||||||
|
`i` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
||||||
|
PRIMARY KEY (`i`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||||
|
/*!50100 PARTITION BY RANGE (i)
|
||||||
|
(PARTITION p1 VALUES LESS THAN (10) ENGINE = InnoDB,
|
||||||
|
PARTITION pMax VALUES LESS THAN MAXVALUE ENGINE = InnoDB) */
|
||||||
|
DROP TABLE t1, p1;
|
||||||
|
#
|
||||||
|
# MDEV-5146: Bulk loads into partitioned table not working
|
||||||
|
#
|
||||||
|
# Case 1: wsrep_load_data_splitting = ON & LOAD DATA with 20002
|
||||||
|
# entries.
|
||||||
|
SET GLOBAL wsrep_load_data_splitting = ON;
|
||||||
|
CREATE TABLE t1 (pk INT PRIMARY KEY)
|
||||||
|
ENGINE=INNODB PARTITION BY HASH(pk) PARTITIONS 2;
|
||||||
|
SELECT COUNT(*) = 20002 FROM t1;
|
||||||
|
COUNT(*) = 20002
|
||||||
|
1
|
||||||
|
wsrep_last_committed_diff
|
||||||
|
1
|
||||||
|
DROP TABLE t1;
|
||||||
|
# Case 2: wsrep_load_data_splitting = ON & LOAD DATA with 101 entries.
|
||||||
|
SET GLOBAL wsrep_load_data_splitting = ON;
|
||||||
|
CREATE TABLE t1 (pk INT PRIMARY KEY)
|
||||||
|
ENGINE=INNODB PARTITION BY HASH(pk) PARTITIONS 2;
|
||||||
|
SELECT COUNT(*) = 101 FROM t1;
|
||||||
|
COUNT(*) = 101
|
||||||
|
1
|
||||||
|
wsrep_last_committed_diff
|
||||||
|
1
|
||||||
|
DROP TABLE t1;
|
||||||
|
# Case 3: wsrep_load_data_splitting = OFF & LOAD DATA with 20002
|
||||||
|
# entries.
|
||||||
|
SET GLOBAL wsrep_load_data_splitting = OFF;
|
||||||
|
CREATE TABLE t1 (pk INT PRIMARY KEY)
|
||||||
|
ENGINE=INNODB PARTITION BY HASH(pk) PARTITIONS 2;
|
||||||
|
SELECT COUNT(*) = 20002 FROM t1;
|
||||||
|
COUNT(*) = 20002
|
||||||
|
1
|
||||||
|
wsrep_last_committed_diff
|
||||||
|
1
|
||||||
|
DROP TABLE t1;
|
||||||
|
SET GLOBAL wsrep_load_data_splitting = 1;;
|
||||||
# End of test
|
# End of test
|
||||||
|
|
38
mysql-test/suite/galera/r/rename.result
Normal file
38
mysql-test/suite/galera/r/rename.result
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
#
|
||||||
|
# MDEV-8598 : Failed MySQL DDL commands and Galera replication
|
||||||
|
#
|
||||||
|
# On node 1
|
||||||
|
USE test;
|
||||||
|
DROP TABLE IF EXISTS t1, t2;
|
||||||
|
CREATE TABLE t1(i INT) ENGINE=INNODB;
|
||||||
|
INSERT INTO t1 VALUE(1);
|
||||||
|
SELECT * FROM t1;
|
||||||
|
i
|
||||||
|
1
|
||||||
|
# Create a new user 'foo' with limited privileges
|
||||||
|
GRANT SELECT on test.* TO foo@localhost;
|
||||||
|
# Open connection to the 1st node using 'test_user1' user.
|
||||||
|
SELECT * FROM t1;
|
||||||
|
i
|
||||||
|
1
|
||||||
|
# Following RENAME should not replicate to other node.
|
||||||
|
RENAME TABLE t1 TO t2;
|
||||||
|
ERROR 42000: DROP, ALTER command denied to user 'foo'@'localhost' for table 't1'
|
||||||
|
# On node 2
|
||||||
|
USE test;
|
||||||
|
SELECT * FROM t1;
|
||||||
|
i
|
||||||
|
1
|
||||||
|
# On node_1
|
||||||
|
RENAME TABLE t1 TO t2;
|
||||||
|
SHOW TABLES;
|
||||||
|
Tables_in_test
|
||||||
|
t2
|
||||||
|
# On node 2
|
||||||
|
USE test;
|
||||||
|
SELECT * FROM t2;
|
||||||
|
i
|
||||||
|
1
|
||||||
|
DROP USER foo@localhost;
|
||||||
|
DROP TABLE t2;
|
||||||
|
# End of tests
|
|
@ -4,4 +4,49 @@
|
||||||
USE test;
|
USE test;
|
||||||
CREATE DEFINER=CURRENT_USER VIEW v1 AS SELECT 1;
|
CREATE DEFINER=CURRENT_USER VIEW v1 AS SELECT 1;
|
||||||
DROP VIEW v1;
|
DROP VIEW v1;
|
||||||
|
#
|
||||||
|
# MDEV-8464 : ALTER VIEW not replicated in some cases
|
||||||
|
#
|
||||||
|
# On node_1
|
||||||
|
USE test;
|
||||||
|
CREATE TABLE t1(i INT) ENGINE=INNODB;
|
||||||
|
CREATE DEFINER=CURRENT_USER VIEW v1 AS SELECT * FROM t1;
|
||||||
|
CREATE ALGORITHM=MERGE VIEW v2 AS SELECT * FROM t1;
|
||||||
|
CREATE ALGORITHM=TEMPTABLE VIEW v3 AS SELECT * FROM t1;
|
||||||
|
CREATE ALGORITHM=UNDEFINED DEFINER=CURRENT_USER VIEW v4 AS SELECT * FROM t1;
|
||||||
|
# On node_2
|
||||||
|
USE test;
|
||||||
|
SHOW CREATE VIEW v1;
|
||||||
|
View Create View character_set_client collation_connection
|
||||||
|
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`i` AS `i` from `t1` latin1 latin1_swedish_ci
|
||||||
|
SHOW CREATE VIEW v2;
|
||||||
|
View Create View character_set_client collation_connection
|
||||||
|
v2 CREATE ALGORITHM=MERGE DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v2` AS select `t1`.`i` AS `i` from `t1` latin1 latin1_swedish_ci
|
||||||
|
SHOW CREATE VIEW v3;
|
||||||
|
View Create View character_set_client collation_connection
|
||||||
|
v3 CREATE ALGORITHM=TEMPTABLE DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v3` AS select `t1`.`i` AS `i` from `t1` latin1 latin1_swedish_ci
|
||||||
|
SHOW CREATE VIEW v4;
|
||||||
|
View Create View character_set_client collation_connection
|
||||||
|
v4 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v4` AS select `t1`.`i` AS `i` from `t1` latin1 latin1_swedish_ci
|
||||||
|
# On node_1
|
||||||
|
ALTER ALGORITHM=MERGE VIEW v1 AS SELECT * FROM t1;
|
||||||
|
ALTER ALGORITHM=UNDEFINED VIEW v2 AS SELECT * FROM t1;
|
||||||
|
ALTER DEFINER=CURRENT_USER VIEW v3 AS SELECT * FROM t1;
|
||||||
|
ALTER ALGORITHM=TEMPTABLE DEFINER=CURRENT_USER VIEW v4 AS SELECT * FROM t1;
|
||||||
|
# On node_2
|
||||||
|
SHOW CREATE VIEW v1;
|
||||||
|
View Create View character_set_client collation_connection
|
||||||
|
v1 CREATE ALGORITHM=MERGE DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`i` AS `i` from `t1` latin1 latin1_swedish_ci
|
||||||
|
SHOW CREATE VIEW v2;
|
||||||
|
View Create View character_set_client collation_connection
|
||||||
|
v2 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v2` AS select `t1`.`i` AS `i` from `t1` latin1 latin1_swedish_ci
|
||||||
|
SHOW CREATE VIEW v3;
|
||||||
|
View Create View character_set_client collation_connection
|
||||||
|
v3 CREATE ALGORITHM=TEMPTABLE DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v3` AS select `t1`.`i` AS `i` from `t1` latin1 latin1_swedish_ci
|
||||||
|
SHOW CREATE VIEW v4;
|
||||||
|
View Create View character_set_client collation_connection
|
||||||
|
v4 CREATE ALGORITHM=TEMPTABLE DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v4` AS select `t1`.`i` AS `i` from `t1` latin1 latin1_swedish_ci
|
||||||
|
# Cleanup
|
||||||
|
DROP VIEW v1, v2, v3, v4;
|
||||||
|
DROP TABLE t1;
|
||||||
# End of tests
|
# End of tests
|
||||||
|
|
|
@ -33,7 +33,7 @@ push @::global_suppressions,
|
||||||
qr(WSREP: last inactive check more than .* skipping check),
|
qr(WSREP: last inactive check more than .* skipping check),
|
||||||
qr(WSREP: SQL statement was ineffective),
|
qr(WSREP: SQL statement was ineffective),
|
||||||
qr(WSREP: Releasing seqno [0-9]* before [0-9]* was assigned.),
|
qr(WSREP: Releasing seqno [0-9]* before [0-9]* was assigned.),
|
||||||
qr|WSREP: access file\(gvwstate.dat\) failed\(No such file or directory\)|,
|
qr|WSREP: access file\(.*gvwstate.dat\) failed\(No such file or directory\)|,
|
||||||
qr(WSREP: Quorum: No node with complete state),
|
qr(WSREP: Quorum: No node with complete state),
|
||||||
qr(WSREP: Initial position was provided by configuration or SST, avoiding override),
|
qr(WSREP: Initial position was provided by configuration or SST, avoiding override),
|
||||||
qr|WSREP: discarding established \(time wait\) .*|,
|
qr|WSREP: discarding established \(time wait\) .*|,
|
||||||
|
|
|
@ -30,7 +30,7 @@ CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB;
|
||||||
exit(0);
|
exit(0);
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
--error ER_UNKNOWN_COM_ERROR,ER_LOCK_WAIT_TIMEOUT
|
--error ER_UNKNOWN_COM_ERROR,ER_LOCK_WAIT_TIMEOUT,ER_LOCK_DEADLOCK
|
||||||
INSERT INTO t1 VALUES (1);
|
INSERT INTO t1 VALUES (1);
|
||||||
|
|
||||||
--echo Resuming node_2 ...
|
--echo Resuming node_2 ...
|
||||||
|
|
|
@ -27,5 +27,181 @@ SELECT * FROM t1;
|
||||||
# Cleanup
|
# Cleanup
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV#7501 : alter table exchange partition is not replicated in
|
||||||
|
--echo # galera cluster
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
--echo
|
||||||
|
--echo # On node_1
|
||||||
|
--connection node_1
|
||||||
|
|
||||||
|
CREATE TABLE test.t1 (
|
||||||
|
i INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||||
|
PRIMARY KEY (i)
|
||||||
|
) ENGINE=INNODB
|
||||||
|
PARTITION BY RANGE (i)
|
||||||
|
(PARTITION p1 VALUES LESS THAN (10) ENGINE = INNODB,
|
||||||
|
PARTITION p2 VALUES LESS THAN (20) ENGINE = INNODB,
|
||||||
|
PARTITION pMax VALUES LESS THAN MAXVALUE ENGINE = INNODB);
|
||||||
|
|
||||||
|
INSERT INTO test.t1 (i) VALUE (9),(19);
|
||||||
|
CREATE TABLE test.p1 LIKE test.t1;
|
||||||
|
ALTER TABLE test.p1 REMOVE PARTITIONING;
|
||||||
|
|
||||||
|
ALTER TABLE test.t1 EXCHANGE PARTITION p1 WITH TABLE test.p1;
|
||||||
|
SELECT * FROM test.t1;
|
||||||
|
SELECT * FROM test.p1;
|
||||||
|
|
||||||
|
--echo
|
||||||
|
--echo # On node_2
|
||||||
|
--connection node_2
|
||||||
|
|
||||||
|
SHOW CREATE TABLE t1;
|
||||||
|
SHOW CREATE TABLE p1;
|
||||||
|
|
||||||
|
SELECT * FROM test.t1;
|
||||||
|
SELECT * FROM test.p1;
|
||||||
|
|
||||||
|
--echo
|
||||||
|
--echo # On node_1
|
||||||
|
--connection node_1
|
||||||
|
ALTER TABLE t1 TRUNCATE PARTITION p2;
|
||||||
|
SELECT * FROM test.t1;
|
||||||
|
|
||||||
|
--echo
|
||||||
|
--echo # On node_2
|
||||||
|
--connection node_2
|
||||||
|
SELECT * FROM test.t1;
|
||||||
|
|
||||||
|
--echo
|
||||||
|
--echo # On node_1
|
||||||
|
--connection node_1
|
||||||
|
ALTER TABLE t1 DROP PARTITION p2;
|
||||||
|
SHOW CREATE TABLE t1;
|
||||||
|
|
||||||
|
--echo
|
||||||
|
--echo # On node_2
|
||||||
|
--connection node_2
|
||||||
|
SHOW CREATE TABLE t1;
|
||||||
|
|
||||||
|
|
||||||
|
# Cleanup
|
||||||
|
DROP TABLE t1, p1;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-5146: Bulk loads into partitioned table not working
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
# Create 2 files with 20002 & 101 entries in each.
|
||||||
|
--perl
|
||||||
|
open(FILE, ">", "$ENV{'MYSQLTEST_VARDIR'}/tmp/mdev-5146-1.dat") or die;
|
||||||
|
foreach my $i (1..20002) {
|
||||||
|
print FILE "$i\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
open(FILE, ">", "$ENV{'MYSQLTEST_VARDIR'}/tmp/mdev-5146-2.dat") or die;
|
||||||
|
foreach my $i (1..101) {
|
||||||
|
print FILE "$i\n";
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
|
||||||
|
--connection node_1
|
||||||
|
|
||||||
|
--let $wsrep_load_data_splitting_orig = `SELECT @@wsrep_load_data_splitting`
|
||||||
|
|
||||||
|
--echo # Case 1: wsrep_load_data_splitting = ON & LOAD DATA with 20002
|
||||||
|
--echo # entries.
|
||||||
|
|
||||||
|
SET GLOBAL wsrep_load_data_splitting = ON;
|
||||||
|
|
||||||
|
CREATE TABLE t1 (pk INT PRIMARY KEY)
|
||||||
|
ENGINE=INNODB PARTITION BY HASH(pk) PARTITIONS 2;
|
||||||
|
|
||||||
|
# Record wsrep_last_committed as it was before LOAD DATA
|
||||||
|
--let $wsrep_last_committed_before = `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.SESSION_STATUS WHERE VARIABLE_NAME = 'wsrep_last_committed'`
|
||||||
|
|
||||||
|
--disable_query_log
|
||||||
|
--eval LOAD DATA INFILE '$MYSQLTEST_VARDIR/tmp/mdev-5146-1.dat' INTO TABLE t1;
|
||||||
|
--enable_query_log
|
||||||
|
|
||||||
|
--let $wsrep_last_committed_after = `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.SESSION_STATUS WHERE VARIABLE_NAME = 'wsrep_last_committed'`
|
||||||
|
|
||||||
|
--connection node_2
|
||||||
|
SELECT COUNT(*) = 20002 FROM t1;
|
||||||
|
|
||||||
|
# LOAD-ing 20002 rows causes 3 commits to be registered
|
||||||
|
--disable_query_log
|
||||||
|
--eval SELECT $wsrep_last_committed_after = $wsrep_last_committed_before + 3 AS wsrep_last_committed_diff;
|
||||||
|
--enable_query_log
|
||||||
|
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
--echo # Case 2: wsrep_load_data_splitting = ON & LOAD DATA with 101 entries.
|
||||||
|
|
||||||
|
--connection node_1
|
||||||
|
|
||||||
|
SET GLOBAL wsrep_load_data_splitting = ON;
|
||||||
|
|
||||||
|
CREATE TABLE t1 (pk INT PRIMARY KEY)
|
||||||
|
ENGINE=INNODB PARTITION BY HASH(pk) PARTITIONS 2;
|
||||||
|
|
||||||
|
# Record wsrep_last_committed as it was before LOAD DATA
|
||||||
|
--let $wsrep_last_committed_before = `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.SESSION_STATUS WHERE VARIABLE_NAME = 'wsrep_last_committed'`
|
||||||
|
|
||||||
|
--disable_query_log
|
||||||
|
--eval LOAD DATA INFILE '$MYSQLTEST_VARDIR/tmp/mdev-5146-2.dat' INTO TABLE t1;
|
||||||
|
--enable_query_log
|
||||||
|
|
||||||
|
--let $wsrep_last_committed_after = `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.SESSION_STATUS WHERE VARIABLE_NAME = 'wsrep_last_committed'`
|
||||||
|
|
||||||
|
--connection node_2
|
||||||
|
SELECT COUNT(*) = 101 FROM t1;
|
||||||
|
|
||||||
|
# LOAD-ing 101 rows causes 1 commit to be registered
|
||||||
|
--disable_query_log
|
||||||
|
--eval SELECT $wsrep_last_committed_after = $wsrep_last_committed_before + 1 AS wsrep_last_committed_diff;
|
||||||
|
--enable_query_log
|
||||||
|
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
--echo # Case 3: wsrep_load_data_splitting = OFF & LOAD DATA with 20002
|
||||||
|
--echo # entries.
|
||||||
|
|
||||||
|
--connection node_1
|
||||||
|
|
||||||
|
SET GLOBAL wsrep_load_data_splitting = OFF;
|
||||||
|
|
||||||
|
CREATE TABLE t1 (pk INT PRIMARY KEY)
|
||||||
|
ENGINE=INNODB PARTITION BY HASH(pk) PARTITIONS 2;
|
||||||
|
|
||||||
|
# Record wsrep_last_committed as it was before LOAD DATA
|
||||||
|
--let $wsrep_last_committed_before = `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.SESSION_STATUS WHERE VARIABLE_NAME = 'wsrep_last_committed'`
|
||||||
|
|
||||||
|
--disable_query_log
|
||||||
|
--eval LOAD DATA INFILE '$MYSQLTEST_VARDIR/tmp/mdev-5146-1.dat' INTO TABLE t1;
|
||||||
|
--enable_query_log
|
||||||
|
|
||||||
|
--let $wsrep_last_committed_after = `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.SESSION_STATUS WHERE VARIABLE_NAME = 'wsrep_last_committed'`
|
||||||
|
|
||||||
|
--connection node_2
|
||||||
|
SELECT COUNT(*) = 20002 FROM t1;
|
||||||
|
|
||||||
|
# LOAD-ing 20002 rows causes 1 commit to be registered
|
||||||
|
--disable_query_log
|
||||||
|
--eval SELECT $wsrep_last_committed_after = $wsrep_last_committed_before + 1 AS wsrep_last_committed_diff;
|
||||||
|
--enable_query_log
|
||||||
|
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
--connection node_1
|
||||||
|
# Restore the original value
|
||||||
|
--eval SET GLOBAL wsrep_load_data_splitting = $wsrep_load_data_splitting_orig;
|
||||||
|
|
||||||
|
# Cleanup
|
||||||
|
remove_file '$MYSQLTEST_VARDIR/tmp/mdev-5146-1.dat';
|
||||||
|
remove_file '$MYSQLTEST_VARDIR/tmp/mdev-5146-2.dat';
|
||||||
|
|
||||||
--source include/galera_end.inc
|
--source include/galera_end.inc
|
||||||
--echo # End of test
|
--echo # End of test
|
||||||
|
|
52
mysql-test/suite/galera/t/rename.test
Normal file
52
mysql-test/suite/galera/t/rename.test
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
--source include/galera_cluster.inc
|
||||||
|
--source include/have_innodb.inc
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-8598 : Failed MySQL DDL commands and Galera replication
|
||||||
|
--echo #
|
||||||
|
--echo # On node 1
|
||||||
|
--connection node_1
|
||||||
|
USE test;
|
||||||
|
--disable_warnings
|
||||||
|
DROP TABLE IF EXISTS t1, t2;
|
||||||
|
--enable_warnings
|
||||||
|
|
||||||
|
CREATE TABLE t1(i INT) ENGINE=INNODB;
|
||||||
|
INSERT INTO t1 VALUE(1);
|
||||||
|
SELECT * FROM t1;
|
||||||
|
|
||||||
|
--echo # Create a new user 'foo' with limited privileges
|
||||||
|
GRANT SELECT on test.* TO foo@localhost;
|
||||||
|
|
||||||
|
--echo # Open connection to the 1st node using 'test_user1' user.
|
||||||
|
--let $port_1= \$NODE_MYPORT_1
|
||||||
|
--connect(foo_node_1,localhost,foo,,test,$port_1,)
|
||||||
|
|
||||||
|
--connection foo_node_1
|
||||||
|
SELECT * FROM t1;
|
||||||
|
--echo # Following RENAME should not replicate to other node.
|
||||||
|
--error ER_TABLEACCESS_DENIED_ERROR
|
||||||
|
RENAME TABLE t1 TO t2;
|
||||||
|
|
||||||
|
--echo # On node 2
|
||||||
|
--connection node_2
|
||||||
|
USE test;
|
||||||
|
SELECT * FROM t1;
|
||||||
|
|
||||||
|
--echo # On node_1
|
||||||
|
--connection node_1
|
||||||
|
RENAME TABLE t1 TO t2;
|
||||||
|
SHOW TABLES;
|
||||||
|
|
||||||
|
--echo # On node 2
|
||||||
|
--connection node_2
|
||||||
|
USE test;
|
||||||
|
SELECT * FROM t2;
|
||||||
|
|
||||||
|
# Cleanup
|
||||||
|
--connection node_1
|
||||||
|
DROP USER foo@localhost;
|
||||||
|
DROP TABLE t2;
|
||||||
|
|
||||||
|
--echo # End of tests
|
||||||
|
|
|
@ -8,4 +8,43 @@ USE test;
|
||||||
CREATE DEFINER=CURRENT_USER VIEW v1 AS SELECT 1;
|
CREATE DEFINER=CURRENT_USER VIEW v1 AS SELECT 1;
|
||||||
DROP VIEW v1;
|
DROP VIEW v1;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-8464 : ALTER VIEW not replicated in some cases
|
||||||
|
--echo #
|
||||||
|
--echo # On node_1
|
||||||
|
--connection node_1
|
||||||
|
USE test;
|
||||||
|
CREATE TABLE t1(i INT) ENGINE=INNODB;
|
||||||
|
CREATE DEFINER=CURRENT_USER VIEW v1 AS SELECT * FROM t1;
|
||||||
|
CREATE ALGORITHM=MERGE VIEW v2 AS SELECT * FROM t1;
|
||||||
|
CREATE ALGORITHM=TEMPTABLE VIEW v3 AS SELECT * FROM t1;
|
||||||
|
CREATE ALGORITHM=UNDEFINED DEFINER=CURRENT_USER VIEW v4 AS SELECT * FROM t1;
|
||||||
|
|
||||||
|
--echo # On node_2
|
||||||
|
--connection node_2
|
||||||
|
USE test;
|
||||||
|
SHOW CREATE VIEW v1;
|
||||||
|
SHOW CREATE VIEW v2;
|
||||||
|
SHOW CREATE VIEW v3;
|
||||||
|
SHOW CREATE VIEW v4;
|
||||||
|
|
||||||
|
--echo # On node_1
|
||||||
|
--connection node_1
|
||||||
|
ALTER ALGORITHM=MERGE VIEW v1 AS SELECT * FROM t1;
|
||||||
|
ALTER ALGORITHM=UNDEFINED VIEW v2 AS SELECT * FROM t1;
|
||||||
|
ALTER DEFINER=CURRENT_USER VIEW v3 AS SELECT * FROM t1;
|
||||||
|
ALTER ALGORITHM=TEMPTABLE DEFINER=CURRENT_USER VIEW v4 AS SELECT * FROM t1;
|
||||||
|
|
||||||
|
--echo # On node_2
|
||||||
|
--connection node_2
|
||||||
|
SHOW CREATE VIEW v1;
|
||||||
|
SHOW CREATE VIEW v2;
|
||||||
|
SHOW CREATE VIEW v3;
|
||||||
|
SHOW CREATE VIEW v4;
|
||||||
|
|
||||||
|
--echo # Cleanup
|
||||||
|
DROP VIEW v1, v2, v3, v4;
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
--echo # End of tests
|
--echo # End of tests
|
||||||
|
|
||||||
|
|
|
@ -25,9 +25,9 @@ return "No my_print_defaults" unless $epath;
|
||||||
push @::global_suppressions,
|
push @::global_suppressions,
|
||||||
(
|
(
|
||||||
qr(WSREP: Could not open saved state file for reading: ),
|
qr(WSREP: Could not open saved state file for reading: ),
|
||||||
qr(WSREP: option --wsrep-casual-reads is deprecated),
|
qr(WSREP: option --wsrep-causal-reads is deprecated),
|
||||||
qr(WSREP: --wsrep-casual-reads=ON takes precedence over --wsrep-sync-wait=0),
|
qr(WSREP: --wsrep-causal-reads=ON takes precedence over --wsrep-sync-wait=0),
|
||||||
qr|WSREP: access file\(gvwstate.dat\) failed\(No such file or directory\)|,
|
qr|WSREP: access file\(.*gvwstate.dat\) failed\(No such file or directory\)|,
|
||||||
);
|
);
|
||||||
|
|
||||||
$ENV{PATH}="$epath:$ENV{PATH}";
|
$ENV{PATH}="$epath:$ENV{PATH}";
|
||||||
|
|
|
@ -51,7 +51,7 @@
|
||||||
#include "sql_connect.h" // decrease_user_connections,
|
#include "sql_connect.h" // decrease_user_connections,
|
||||||
// check_mqh,
|
// check_mqh,
|
||||||
// reset_mqh
|
// reset_mqh
|
||||||
#include "sql_rename.h" // mysql_rename_table
|
#include "sql_rename.h" // mysql_rename_tables
|
||||||
#include "sql_tablespace.h" // mysql_alter_tablespace
|
#include "sql_tablespace.h" // mysql_alter_tablespace
|
||||||
#include "hostname.h" // hostname_cache_refresh
|
#include "hostname.h" // hostname_cache_refresh
|
||||||
#include "sql_acl.h" // *_ACL, check_grant, is_acl_user,
|
#include "sql_acl.h" // *_ACL, check_grant, is_acl_user,
|
||||||
|
@ -133,7 +133,7 @@ static void sql_kill(THD *thd, longlong id, killed_state state, killed_type type
|
||||||
static void sql_kill_user(THD *thd, LEX_USER *user, killed_state state);
|
static void sql_kill_user(THD *thd, LEX_USER *user, killed_state state);
|
||||||
static bool lock_tables_precheck(THD *thd, TABLE_LIST *tables);
|
static bool lock_tables_precheck(THD *thd, TABLE_LIST *tables);
|
||||||
static bool execute_show_status(THD *, TABLE_LIST *);
|
static bool execute_show_status(THD *, TABLE_LIST *);
|
||||||
static bool execute_rename_table(THD *, TABLE_LIST *, TABLE_LIST *);
|
static bool check_rename_table(THD *, TABLE_LIST *, TABLE_LIST *);
|
||||||
|
|
||||||
const char *any_db="*any*"; // Special symbol for check_access
|
const char *any_db="*any*"; // Special symbol for check_access
|
||||||
|
|
||||||
|
@ -3589,8 +3589,12 @@ end_with_restore_list:
|
||||||
#endif /* HAVE_REPLICATION */
|
#endif /* HAVE_REPLICATION */
|
||||||
case SQLCOM_RENAME_TABLE:
|
case SQLCOM_RENAME_TABLE:
|
||||||
{
|
{
|
||||||
|
if (check_rename_table(thd, first_table, all_tables))
|
||||||
|
goto error;
|
||||||
|
|
||||||
WSREP_TO_ISOLATION_BEGIN(0, 0, first_table)
|
WSREP_TO_ISOLATION_BEGIN(0, 0, first_table)
|
||||||
if (execute_rename_table(thd, first_table, all_tables))
|
|
||||||
|
if (mysql_rename_tables(thd, first_table, 0))
|
||||||
goto error;
|
goto error;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -5880,8 +5884,8 @@ static bool execute_show_status(THD *thd, TABLE_LIST *all_tables)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static bool execute_rename_table(THD *thd, TABLE_LIST *first_table,
|
static bool check_rename_table(THD *thd, TABLE_LIST *first_table,
|
||||||
TABLE_LIST *all_tables)
|
TABLE_LIST *all_tables)
|
||||||
{
|
{
|
||||||
DBUG_ASSERT(first_table == all_tables && first_table != 0);
|
DBUG_ASSERT(first_table == all_tables && first_table != 0);
|
||||||
TABLE_LIST *table;
|
TABLE_LIST *table;
|
||||||
|
@ -5911,7 +5915,7 @@ static bool execute_rename_table(THD *thd, TABLE_LIST *first_table,
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return mysql_rename_tables(thd, first_table, 0);
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -531,6 +531,24 @@ bool Sql_cmd_alter_table_exchange_partition::
|
||||||
&alter_prelocking_strategy))
|
&alter_prelocking_strategy))
|
||||||
DBUG_RETURN(true);
|
DBUG_RETURN(true);
|
||||||
|
|
||||||
|
#ifdef WITH_WSREP
|
||||||
|
if (WSREP_ON)
|
||||||
|
{
|
||||||
|
/* Forward declaration */
|
||||||
|
TABLE *find_temporary_table(THD *thd, const TABLE_LIST *tl);
|
||||||
|
|
||||||
|
if ((!thd->is_current_stmt_binlog_format_row() ||
|
||||||
|
/* TODO: Do we really need to check for temp tables in this case? */
|
||||||
|
!find_temporary_table(thd, table_list)) &&
|
||||||
|
wsrep_to_isolation_begin(thd, table_list->db, table_list->table_name,
|
||||||
|
NULL))
|
||||||
|
{
|
||||||
|
WSREP_WARN("ALTER TABLE EXCHANGE PARTITION isolation failure");
|
||||||
|
DBUG_RETURN(TRUE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif /* WITH_WSREP */
|
||||||
|
|
||||||
part_table= table_list->table;
|
part_table= table_list->table;
|
||||||
swap_table= swap_table_list->table;
|
swap_table= swap_table_list->table;
|
||||||
|
|
||||||
|
@ -767,6 +785,7 @@ bool Sql_cmd_alter_table_truncate_partition::execute(THD *thd)
|
||||||
#ifdef WITH_WSREP
|
#ifdef WITH_WSREP
|
||||||
if (WSREP_ON)
|
if (WSREP_ON)
|
||||||
{
|
{
|
||||||
|
/* Forward declaration */
|
||||||
TABLE *find_temporary_table(THD *thd, const TABLE_LIST *tl);
|
TABLE *find_temporary_table(THD *thd, const TABLE_LIST *tl);
|
||||||
|
|
||||||
if ((!thd->is_current_stmt_binlog_format_row() ||
|
if ((!thd->is_current_stmt_binlog_format_row() ||
|
||||||
|
@ -775,7 +794,7 @@ bool Sql_cmd_alter_table_truncate_partition::execute(THD *thd)
|
||||||
thd, first_table->db, first_table->table_name, NULL)
|
thd, first_table->db, first_table->table_name, NULL)
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
WSREP_WARN("ALTER TABLE isolation failure");
|
WSREP_WARN("ALTER TABLE TRUNCATE PARTITION isolation failure");
|
||||||
DBUG_RETURN(TRUE);
|
DBUG_RETURN(TRUE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2196,8 +2196,11 @@ static void store_key_options(THD *thd, String *packet, TABLE *table,
|
||||||
void
|
void
|
||||||
view_store_options(THD *thd, TABLE_LIST *table, String *buff)
|
view_store_options(THD *thd, TABLE_LIST *table, String *buff)
|
||||||
{
|
{
|
||||||
buff->append(STRING_WITH_LEN("ALGORITHM="));
|
if (table->algorithm != VIEW_ALGORITHM_INHERIT)
|
||||||
buff->append(view_algorithm(table));
|
{
|
||||||
|
buff->append(STRING_WITH_LEN("ALGORITHM="));
|
||||||
|
buff->append(view_algorithm(table));
|
||||||
|
}
|
||||||
buff->append(' ');
|
buff->append(' ');
|
||||||
append_definer(thd, buff, &table->definer.user, &table->definer.host);
|
append_definer(thd, buff, &table->definer.user, &table->definer.host);
|
||||||
if (table->view_suid)
|
if (table->view_suid)
|
||||||
|
|
|
@ -1298,7 +1298,13 @@ create_view_query(THD *thd, uchar** buf, size_t* buf_len)
|
||||||
buff.append(command[thd->lex->create_view_mode].str,
|
buff.append(command[thd->lex->create_view_mode].str,
|
||||||
command[thd->lex->create_view_mode].length);
|
command[thd->lex->create_view_mode].length);
|
||||||
|
|
||||||
if (!lex->definer)
|
LEX_USER *definer;
|
||||||
|
|
||||||
|
if (lex->definer)
|
||||||
|
{
|
||||||
|
definer= get_current_user(thd, lex->definer);
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
DEFINER-clause is missing; we have to create default definer in
|
DEFINER-clause is missing; we have to create default definer in
|
||||||
|
@ -1306,16 +1312,19 @@ create_view_query(THD *thd, uchar** buf, size_t* buf_len)
|
||||||
If this is an ALTER VIEW then the current user should be set as
|
If this is an ALTER VIEW then the current user should be set as
|
||||||
the definer.
|
the definer.
|
||||||
*/
|
*/
|
||||||
|
definer= create_default_definer(thd, false);
|
||||||
|
}
|
||||||
|
|
||||||
if (!(lex->definer= create_default_definer(thd, false)))
|
if (definer)
|
||||||
{
|
{
|
||||||
WSREP_WARN("view default definer issue");
|
views->definer.user = definer->user;
|
||||||
}
|
views->definer.host = definer->host;
|
||||||
|
} else {
|
||||||
|
WSREP_ERROR("Failed to get DEFINER for VIEW.");
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
views->algorithm = lex->create_view_algorithm;
|
views->algorithm = lex->create_view_algorithm;
|
||||||
views->definer.user = lex->definer->user;
|
|
||||||
views->definer.host = lex->definer->host;
|
|
||||||
views->view_suid = lex->create_view_suid;
|
views->view_suid = lex->create_view_suid;
|
||||||
views->with_check = lex->create_view_check;
|
views->with_check = lex->create_view_check;
|
||||||
|
|
||||||
|
@ -1367,6 +1376,7 @@ static int wsrep_TOI_begin(THD *thd, char *db_, char *table_,
|
||||||
uchar* buf(0);
|
uchar* buf(0);
|
||||||
size_t buf_len(0);
|
size_t buf_len(0);
|
||||||
int buf_err;
|
int buf_err;
|
||||||
|
int rc= 0;
|
||||||
|
|
||||||
WSREP_DEBUG("TO BEGIN: %lld, %d : %s", (long long)wsrep_thd_trx_seqno(thd),
|
WSREP_DEBUG("TO BEGIN: %lld, %d : %s", (long long)wsrep_thd_trx_seqno(thd),
|
||||||
thd->wsrep_exec_mode, thd->query() );
|
thd->wsrep_exec_mode, thd->query() );
|
||||||
|
@ -1406,7 +1416,6 @@ static int wsrep_TOI_begin(THD *thd, char *db_, char *table_,
|
||||||
{
|
{
|
||||||
thd->wsrep_exec_mode= TOTAL_ORDER;
|
thd->wsrep_exec_mode= TOTAL_ORDER;
|
||||||
wsrep_to_isolation++;
|
wsrep_to_isolation++;
|
||||||
if (buf) my_free(buf);
|
|
||||||
wsrep_keys_free(&key_arr);
|
wsrep_keys_free(&key_arr);
|
||||||
WSREP_DEBUG("TO BEGIN: %lld, %d",(long long)wsrep_thd_trx_seqno(thd),
|
WSREP_DEBUG("TO BEGIN: %lld, %d",(long long)wsrep_thd_trx_seqno(thd),
|
||||||
thd->wsrep_exec_mode);
|
thd->wsrep_exec_mode);
|
||||||
|
@ -1418,18 +1427,18 @@ static int wsrep_TOI_begin(THD *thd, char *db_, char *table_,
|
||||||
ret, (thd->query()) ? thd->query() : "void");
|
ret, (thd->query()) ? thd->query() : "void");
|
||||||
my_error(ER_LOCK_DEADLOCK, MYF(0), "WSREP replication failed. Check "
|
my_error(ER_LOCK_DEADLOCK, MYF(0), "WSREP replication failed. Check "
|
||||||
"your wsrep connection state and retry the query.");
|
"your wsrep connection state and retry the query.");
|
||||||
if (buf) my_free(buf);
|
|
||||||
wsrep_keys_free(&key_arr);
|
wsrep_keys_free(&key_arr);
|
||||||
return -1;
|
rc= -1;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
/* non replicated DDL, affecting temporary tables only */
|
/* non replicated DDL, affecting temporary tables only */
|
||||||
WSREP_DEBUG("TO isolation skipped for: %d, sql: %s."
|
WSREP_DEBUG("TO isolation skipped for: %d, sql: %s."
|
||||||
"Only temporary tables affected.",
|
"Only temporary tables affected.",
|
||||||
ret, (thd->query()) ? thd->query() : "void");
|
ret, (thd->query()) ? thd->query() : "void");
|
||||||
return 1;
|
rc= 1;
|
||||||
}
|
}
|
||||||
return 0;
|
if (buf) my_free(buf);
|
||||||
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void wsrep_TOI_end(THD *thd) {
|
static void wsrep_TOI_end(THD *thd) {
|
||||||
|
|
|
@ -7756,10 +7756,11 @@ no_commit:
|
||||||
;
|
;
|
||||||
} else if (src_table == prebuilt->table) {
|
} else if (src_table == prebuilt->table) {
|
||||||
#ifdef WITH_WSREP
|
#ifdef WITH_WSREP
|
||||||
if (wsrep_on(user_thd) && wsrep_load_data_splitting &&
|
if (wsrep_on(user_thd) &&
|
||||||
|
wsrep_load_data_splitting &&
|
||||||
sql_command == SQLCOM_LOAD &&
|
sql_command == SQLCOM_LOAD &&
|
||||||
!thd_test_options(
|
!thd_test_options(user_thd,
|
||||||
user_thd, OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN))
|
OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN))
|
||||||
{
|
{
|
||||||
switch (wsrep_run_wsrep_commit(user_thd, 1))
|
switch (wsrep_run_wsrep_commit(user_thd, 1))
|
||||||
{
|
{
|
||||||
|
@ -7787,10 +7788,11 @@ no_commit:
|
||||||
prebuilt->sql_stat_start = TRUE;
|
prebuilt->sql_stat_start = TRUE;
|
||||||
} else {
|
} else {
|
||||||
#ifdef WITH_WSREP
|
#ifdef WITH_WSREP
|
||||||
if (wsrep_on(user_thd) && wsrep_load_data_splitting &&
|
if (wsrep_on(user_thd) &&
|
||||||
|
wsrep_load_data_splitting &&
|
||||||
sql_command == SQLCOM_LOAD &&
|
sql_command == SQLCOM_LOAD &&
|
||||||
!thd_test_options(
|
!thd_test_options(user_thd,
|
||||||
user_thd, OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN))
|
OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN))
|
||||||
{
|
{
|
||||||
switch (wsrep_run_wsrep_commit(user_thd, 1))
|
switch (wsrep_run_wsrep_commit(user_thd, 1))
|
||||||
{
|
{
|
||||||
|
@ -8012,14 +8014,15 @@ report_error:
|
||||||
user_thd);
|
user_thd);
|
||||||
|
|
||||||
#ifdef WITH_WSREP
|
#ifdef WITH_WSREP
|
||||||
if (!error_result && wsrep_thd_exec_mode(user_thd) == LOCAL_STATE &&
|
if (!error_result &&
|
||||||
wsrep_on(user_thd) && !wsrep_consistency_check(user_thd) &&
|
wsrep_thd_exec_mode(user_thd) == LOCAL_STATE &&
|
||||||
(sql_command != SQLCOM_LOAD ||
|
wsrep_on(user_thd) &&
|
||||||
thd_binlog_format(user_thd) == BINLOG_FORMAT_ROW)) {
|
!wsrep_consistency_check(user_thd))
|
||||||
|
{
|
||||||
if (wsrep_append_keys(user_thd, false, record, NULL)) {
|
if (wsrep_append_keys(user_thd, false, record, NULL))
|
||||||
DBUG_PRINT("wsrep", ("row key failed"));
|
{
|
||||||
error_result = HA_ERR_INTERNAL_ERROR;
|
DBUG_PRINT("wsrep", ("row key failed"));
|
||||||
|
error_result = HA_ERR_INTERNAL_ERROR;
|
||||||
goto wsrep_error;
|
goto wsrep_error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -8211,10 +8211,11 @@ no_commit:
|
||||||
;
|
;
|
||||||
} else if (src_table == prebuilt->table) {
|
} else if (src_table == prebuilt->table) {
|
||||||
#ifdef WITH_WSREP
|
#ifdef WITH_WSREP
|
||||||
if (wsrep_on(user_thd) && wsrep_load_data_splitting &&
|
if (wsrep_on(user_thd) &&
|
||||||
|
wsrep_load_data_splitting &&
|
||||||
sql_command == SQLCOM_LOAD &&
|
sql_command == SQLCOM_LOAD &&
|
||||||
!thd_test_options(
|
!thd_test_options(user_thd,
|
||||||
user_thd, OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN))
|
OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN))
|
||||||
{
|
{
|
||||||
switch (wsrep_run_wsrep_commit(user_thd, 1))
|
switch (wsrep_run_wsrep_commit(user_thd, 1))
|
||||||
{
|
{
|
||||||
|
@ -8242,10 +8243,11 @@ no_commit:
|
||||||
prebuilt->sql_stat_start = TRUE;
|
prebuilt->sql_stat_start = TRUE;
|
||||||
} else {
|
} else {
|
||||||
#ifdef WITH_WSREP
|
#ifdef WITH_WSREP
|
||||||
if (wsrep_on(user_thd) && wsrep_load_data_splitting &&
|
if (wsrep_on(user_thd) &&
|
||||||
|
wsrep_load_data_splitting &&
|
||||||
sql_command == SQLCOM_LOAD &&
|
sql_command == SQLCOM_LOAD &&
|
||||||
!thd_test_options(
|
!thd_test_options(user_thd,
|
||||||
user_thd, OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN))
|
OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN))
|
||||||
{
|
{
|
||||||
switch (wsrep_run_wsrep_commit(user_thd, 1))
|
switch (wsrep_run_wsrep_commit(user_thd, 1))
|
||||||
{
|
{
|
||||||
|
@ -8476,14 +8478,15 @@ report_error:
|
||||||
user_thd);
|
user_thd);
|
||||||
|
|
||||||
#ifdef WITH_WSREP
|
#ifdef WITH_WSREP
|
||||||
if (!error_result && wsrep_thd_exec_mode(user_thd) == LOCAL_STATE &&
|
if (!error_result &&
|
||||||
wsrep_on(user_thd) && !wsrep_consistency_check(user_thd) &&
|
wsrep_thd_exec_mode(user_thd) == LOCAL_STATE &&
|
||||||
(sql_command != SQLCOM_LOAD ||
|
wsrep_on(user_thd) &&
|
||||||
thd_binlog_format(user_thd) == BINLOG_FORMAT_ROW)) {
|
!wsrep_consistency_check(user_thd))
|
||||||
|
{
|
||||||
if (wsrep_append_keys(user_thd, false, record, NULL)) {
|
if (wsrep_append_keys(user_thd, false, record, NULL))
|
||||||
DBUG_PRINT("wsrep", ("row key failed"));
|
{
|
||||||
error_result = HA_ERR_INTERNAL_ERROR;
|
DBUG_PRINT("wsrep", ("row key failed"));
|
||||||
|
error_result = HA_ERR_INTERNAL_ERROR;
|
||||||
goto wsrep_error;
|
goto wsrep_error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue