Commit a81a138a authored by Marko Mäkelä's avatar Marko Mäkelä

Merge 10.5 into 10.6

parents f9ae5530 a3dd7ea0
...@@ -673,10 +673,10 @@ extern void my_mutex_end(void); ...@@ -673,10 +673,10 @@ extern void my_mutex_end(void);
by GCC 12.3.0, GCC 13.2.0, or clang 16.0.6 by GCC 12.3.0, GCC 13.2.0, or clang 16.0.6
would fail ./mtr main.1st when the stack size is 5 MiB. would fail ./mtr main.1st when the stack size is 5 MiB.
The minimum is more than 6 MiB for CMAKE_BUILD_TYPE=RelWithDebInfo and The minimum is more than 6 MiB for CMAKE_BUILD_TYPE=RelWithDebInfo and
more than 8 MiB for CMAKE_BUILD_TYPE=Debug. more than 10 MiB for CMAKE_BUILD_TYPE=Debug.
Let us add some safety margin. Let us add some safety margin.
*/ */
# define DEFAULT_THREAD_STACK (10L<<20) # define DEFAULT_THREAD_STACK (11L<<20)
# else # else
# define DEFAULT_THREAD_STACK (292*1024L) /* 299008 */ # define DEFAULT_THREAD_STACK (292*1024L) /* 299008 */
# endif # endif
......
# In embedded server we don't really have a control over stack usage # In embedded server we don't really have a control over stack usage
-- source include/not_embedded.inc -- source include/not_embedded.inc
-- source include/not_asan.inc
# #
# Bug#21476: Lost Database Connection During Query # Bug#21476: Lost Database Connection During Query
......
create function bug10100f(prm int) returns int
begin
if prm > 1 then
return prm * bug10100f(prm - 1);
end if;
return 1;
end|
set statement sql_mode = '' for
create procedure bug10100p(prm int, inout res int)
begin
set res = res * prm;
if prm > 1 then
call bug10100p(prm - 1, res);
end if;
end|
set statement sql_mode = '' for
create procedure bug10100t(prm int)
begin
declare res int;
set res = 1;
call bug10100p(prm, res);
select res;
end|
create table t3 (a int)|
insert into t3 values (0)|
create view v1 as select a from t3|
create procedure bug10100pt(level int, lim int)
begin
if level < lim then
update t3 set a=level;
FLUSH TABLES;
call bug10100pt(level+1, lim);
else
select * from t3;
end if;
end|
create procedure bug10100pv(level int, lim int)
begin
if level < lim then
update v1 set a=level;
FLUSH TABLES;
call bug10100pv(level+1, lim);
else
select * from v1;
end if;
end|
prepare stmt2 from "select * from t3;";
create procedure bug10100pd(level int, lim int)
begin
if level < lim then
select level;
prepare stmt1 from "update t3 set a=a+2";
execute stmt1;
FLUSH TABLES;
execute stmt1;
FLUSH TABLES;
execute stmt1;
FLUSH TABLES;
deallocate prepare stmt1;
execute stmt2;
select * from t3;
call bug10100pd(level+1, lim);
else
execute stmt2;
end if;
end|
create procedure bug10100pc(level int, lim int)
begin
declare lv int;
declare c cursor for select a from t3;
open c;
if level < lim then
select level;
fetch c into lv;
select lv;
update t3 set a=level+lv;
FLUSH TABLES;
call bug10100pc(level+1, lim);
else
select * from t3;
end if;
close c;
end|
set @@max_sp_recursion_depth=255|
set @var=1|
call bug10100p(255, @var)|
call bug10100pt(1,255)|
call bug10100pv(1,255)|
call bug10100pd(1,255)|
call bug10100pc(1,255)|
set @@max_sp_recursion_depth=0|
deallocate prepare stmt2|
drop function bug10100f|
drop procedure bug10100p|
drop procedure bug10100t|
drop procedure bug10100pt|
drop procedure bug10100pv|
drop procedure bug10100pd|
drop procedure bug10100pc|
drop view v1|
drop table t3|
#
# For tests that need a lot of stack - they likely won't work under ASAN
#
source include/not_asan.inc;
source include/not_embedded.inc;
#
# Bug#10100 function (and stored procedure?) recursivity problem
#
# routines with simple recursion
delimiter |;
create function bug10100f(prm int) returns int
begin
if prm > 1 then
return prm * bug10100f(prm - 1);
end if;
return 1;
end|
set statement sql_mode = '' for
create procedure bug10100p(prm int, inout res int)
begin
set res = res * prm;
if prm > 1 then
call bug10100p(prm - 1, res);
end if;
end|
set statement sql_mode = '' for
create procedure bug10100t(prm int)
begin
declare res int;
set res = 1;
call bug10100p(prm, res);
select res;
end|
# a procedure which use tables and recursion
create table t3 (a int)|
insert into t3 values (0)|
create view v1 as select a from t3|
create procedure bug10100pt(level int, lim int)
begin
if level < lim then
update t3 set a=level;
FLUSH TABLES;
call bug10100pt(level+1, lim);
else
select * from t3;
end if;
end|
# view & recursion
create procedure bug10100pv(level int, lim int)
begin
if level < lim then
update v1 set a=level;
FLUSH TABLES;
call bug10100pv(level+1, lim);
else
select * from v1;
end if;
end|
# dynamic sql & recursion
prepare stmt2 from "select * from t3;";
create procedure bug10100pd(level int, lim int)
begin
if level < lim then
select level;
prepare stmt1 from "update t3 set a=a+2";
execute stmt1;
FLUSH TABLES;
execute stmt1;
FLUSH TABLES;
execute stmt1;
FLUSH TABLES;
deallocate prepare stmt1;
execute stmt2;
select * from t3;
call bug10100pd(level+1, lim);
else
execute stmt2;
end if;
end|
# cursor & recursion
create procedure bug10100pc(level int, lim int)
begin
declare lv int;
declare c cursor for select a from t3;
open c;
if level < lim then
select level;
fetch c into lv;
select lv;
update t3 set a=level+lv;
FLUSH TABLES;
call bug10100pc(level+1, lim);
else
select * from t3;
end if;
close c;
end|
# end of the stack checking
set @@max_sp_recursion_depth=255|
set @var=1|
# disable log because error about stack overrun contains numbers which
# depend on a system
-- disable_ps_protocol
-- disable_result_log
-- error ER_STACK_OVERRUN_NEED_MORE
call bug10100p(255, @var)|
-- error ER_STACK_OVERRUN_NEED_MORE
call bug10100pt(1,255)|
-- error ER_STACK_OVERRUN_NEED_MORE
call bug10100pv(1,255)|
-- error ER_STACK_OVERRUN_NEED_MORE
call bug10100pd(1,255)|
-- error ER_STACK_OVERRUN_NEED_MORE
call bug10100pc(1,255)|
-- enable_result_log
-- enable_ps_protocol
set @@max_sp_recursion_depth=0|
deallocate prepare stmt2|
drop function bug10100f|
drop procedure bug10100p|
drop procedure bug10100t|
drop procedure bug10100pt|
drop procedure bug10100pv|
drop procedure bug10100pd|
drop procedure bug10100pc|
drop view v1|
drop table t3|
delimiter ;|
set @old_concurrent_insert= @@global.concurrent_insert; set @old_concurrent_insert= @@global.concurrent_insert;
set @@global.concurrent_insert= 0; set @@global.concurrent_insert= 0;
drop table if exists t1,t3;
drop procedure if exists bug4902|
create procedure bug4902() create procedure bug4902()
begin begin
show grants for 'root'@'localhost'; show grants for 'root'@'localhost';
...@@ -15,7 +13,6 @@ Grants for root@localhost ...@@ -15,7 +13,6 @@ Grants for root@localhost
GRANT ALL PRIVILEGES ON *.* TO `root`@`localhost` WITH GRANT OPTION GRANT ALL PRIVILEGES ON *.* TO `root`@`localhost` WITH GRANT OPTION
GRANT PROXY ON ''@'%' TO 'root'@'localhost' WITH GRANT OPTION GRANT PROXY ON ''@'%' TO 'root'@'localhost' WITH GRANT OPTION
drop procedure bug4902| drop procedure bug4902|
drop procedure if exists bug4902_2|
create procedure bug4902_2() create procedure bug4902_2()
begin begin
show processlist; show processlist;
...@@ -23,13 +20,10 @@ end| ...@@ -23,13 +20,10 @@ end|
call bug4902_2()| call bug4902_2()|
show warnings| show warnings|
Level Code Message Level Code Message
Note 1305 PROCEDURE test.bug4902_2 does not exist
call bug4902_2()| call bug4902_2()|
show warnings| show warnings|
Level Code Message Level Code Message
Note 1305 PROCEDURE test.bug4902_2 does not exist
drop procedure bug4902_2| drop procedure bug4902_2|
drop procedure if exists bug6807|
create procedure bug6807() create procedure bug6807()
begin begin
declare a int; declare a int;
...@@ -42,116 +36,6 @@ ERROR 70100: Query execution was interrupted ...@@ -42,116 +36,6 @@ ERROR 70100: Query execution was interrupted
call bug6807()| call bug6807()|
ERROR 70100: Query execution was interrupted ERROR 70100: Query execution was interrupted
drop procedure bug6807| drop procedure bug6807|
drop function if exists bug10100f|
drop procedure if exists bug10100p|
drop procedure if exists bug10100t|
drop procedure if exists bug10100pt|
drop procedure if exists bug10100pv|
drop procedure if exists bug10100pd|
drop procedure if exists bug10100pc|
create function bug10100f(prm int) returns int
begin
if prm > 1 then
return prm * bug10100f(prm - 1);
end if;
return 1;
end|
set statement sql_mode = '' for
create procedure bug10100p(prm int, inout res int)
begin
set res = res * prm;
if prm > 1 then
call bug10100p(prm - 1, res);
end if;
end|
set statement sql_mode = '' for
create procedure bug10100t(prm int)
begin
declare res int;
set res = 1;
call bug10100p(prm, res);
select res;
end|
create table t3 (a int)|
insert into t3 values (0)|
create view v1 as select a from t3|
create procedure bug10100pt(level int, lim int)
begin
if level < lim then
update t3 set a=level;
FLUSH TABLES;
call bug10100pt(level+1, lim);
else
select * from t3;
end if;
end|
create procedure bug10100pv(level int, lim int)
begin
if level < lim then
update v1 set a=level;
FLUSH TABLES;
call bug10100pv(level+1, lim);
else
select * from v1;
end if;
end|
prepare stmt2 from "select * from t3;";
create procedure bug10100pd(level int, lim int)
begin
if level < lim then
select level;
prepare stmt1 from "update t3 set a=a+2";
execute stmt1;
FLUSH TABLES;
execute stmt1;
FLUSH TABLES;
execute stmt1;
FLUSH TABLES;
deallocate prepare stmt1;
execute stmt2;
select * from t3;
call bug10100pd(level+1, lim);
else
execute stmt2;
end if;
end|
create procedure bug10100pc(level int, lim int)
begin
declare lv int;
declare c cursor for select a from t3;
open c;
if level < lim then
select level;
fetch c into lv;
select lv;
update t3 set a=level+lv;
FLUSH TABLES;
call bug10100pc(level+1, lim);
else
select * from t3;
end if;
close c;
end|
set @@max_sp_recursion_depth=255|
set @var=1|
call bug10100p(255, @var)|
call bug10100pt(1,255)|
call bug10100pv(1,255)|
call bug10100pd(1,255)|
call bug10100pc(1,255)|
set @@max_sp_recursion_depth=0|
deallocate prepare stmt2|
drop function bug10100f|
drop procedure bug10100p|
drop procedure bug10100t|
drop procedure bug10100pt|
drop procedure bug10100pv|
drop procedure bug10100pd|
drop procedure bug10100pc|
drop view v1|
drop table t3|
drop procedure if exists bug15298_1;
drop procedure if exists bug15298_2;
create user 'mysqltest_1'@'localhost'; create user 'mysqltest_1'@'localhost';
grant all privileges on test.* to 'mysqltest_1'@'localhost'; grant all privileges on test.* to 'mysqltest_1'@'localhost';
create procedure 15298_1 () sql security definer show grants for current_user; create procedure 15298_1 () sql security definer show grants for current_user;
...@@ -170,8 +54,6 @@ disconnect con1; ...@@ -170,8 +54,6 @@ disconnect con1;
drop user mysqltest_1@localhost; drop user mysqltest_1@localhost;
drop procedure 15298_1; drop procedure 15298_1;
drop procedure 15298_2; drop procedure 15298_2;
drop table if exists t1;
drop procedure if exists p1;
create table t1 (value varchar(15)); create table t1 (value varchar(15));
create procedure p1() update t1 set value='updated' where value='old'; create procedure p1() update t1 set value='updated' where value='old';
call p1(); call p1();
...@@ -283,7 +165,6 @@ disconnect con2; ...@@ -283,7 +165,6 @@ disconnect con2;
# functions in databases which names contained dot. # functions in databases which names contained dot.
# #
connection default; connection default;
DROP DATABASE IF EXISTS `my.db`;
create database `my.db`; create database `my.db`;
use `my.db`; use `my.db`;
CREATE FUNCTION f1(a int) RETURNS INT RETURN a; CREATE FUNCTION f1(a int) RETURNS INT RETURN a;
......
...@@ -7,19 +7,12 @@ set @@global.concurrent_insert= 0; ...@@ -7,19 +7,12 @@ set @@global.concurrent_insert= 0;
# Save the initial number of concurrent sessions # Save the initial number of concurrent sessions
--source include/count_sessions.inc --source include/count_sessions.inc
--disable_warnings
drop table if exists t1,t3;
--enable_warnings
delimiter |; delimiter |;
# #
# Bug#4902 Stored procedure with SHOW WARNINGS leads to packet error # Bug#4902 Stored procedure with SHOW WARNINGS leads to packet error
# #
# Added tests for show grants command # Added tests for show grants command
--disable_warnings
drop procedure if exists bug4902|
--enable_warnings
create procedure bug4902() create procedure bug4902()
begin begin
show grants for 'root'@'localhost'; show grants for 'root'@'localhost';
...@@ -38,9 +31,6 @@ call bug4902()| ...@@ -38,9 +31,6 @@ call bug4902()|
drop procedure bug4902| drop procedure bug4902|
# We need separate SP for SHOW PROCESSLIST since we want use replace_column # We need separate SP for SHOW PROCESSLIST since we want use replace_column
--disable_warnings
drop procedure if exists bug4902_2|
--enable_warnings
create procedure bug4902_2() create procedure bug4902_2()
begin begin
show processlist; show processlist;
...@@ -58,9 +48,6 @@ drop procedure bug4902_2| ...@@ -58,9 +48,6 @@ drop procedure bug4902_2|
# #
# Bug#6807 Stored procedure crash if CREATE PROCEDURE ... KILL QUERY # Bug#6807 Stored procedure crash if CREATE PROCEDURE ... KILL QUERY
# #
--disable_warnings
drop procedure if exists bug6807|
--enable_warnings
create procedure bug6807() create procedure bug6807()
begin begin
declare a int; declare a int;
...@@ -77,152 +64,11 @@ call bug6807()| ...@@ -77,152 +64,11 @@ call bug6807()|
drop procedure bug6807| drop procedure bug6807|
#
# Bug#10100 function (and stored procedure?) recursivity problem
#
--disable_warnings
drop function if exists bug10100f|
drop procedure if exists bug10100p|
drop procedure if exists bug10100t|
drop procedure if exists bug10100pt|
drop procedure if exists bug10100pv|
drop procedure if exists bug10100pd|
drop procedure if exists bug10100pc|
--enable_warnings
# routines with simple recursion
create function bug10100f(prm int) returns int
begin
if prm > 1 then
return prm * bug10100f(prm - 1);
end if;
return 1;
end|
set statement sql_mode = '' for
create procedure bug10100p(prm int, inout res int)
begin
set res = res * prm;
if prm > 1 then
call bug10100p(prm - 1, res);
end if;
end|
set statement sql_mode = '' for
create procedure bug10100t(prm int)
begin
declare res int;
set res = 1;
call bug10100p(prm, res);
select res;
end|
# a procedure which use tables and recursion
create table t3 (a int)|
insert into t3 values (0)|
create view v1 as select a from t3|
create procedure bug10100pt(level int, lim int)
begin
if level < lim then
update t3 set a=level;
FLUSH TABLES;
call bug10100pt(level+1, lim);
else
select * from t3;
end if;
end|
# view & recursion
create procedure bug10100pv(level int, lim int)
begin
if level < lim then
update v1 set a=level;
FLUSH TABLES;
call bug10100pv(level+1, lim);
else
select * from v1;
end if;
end|
# dynamic sql & recursion
prepare stmt2 from "select * from t3;";
create procedure bug10100pd(level int, lim int)
begin
if level < lim then
select level;
prepare stmt1 from "update t3 set a=a+2";
execute stmt1;
FLUSH TABLES;
execute stmt1;
FLUSH TABLES;
execute stmt1;
FLUSH TABLES;
deallocate prepare stmt1;
execute stmt2;
select * from t3;
call bug10100pd(level+1, lim);
else
execute stmt2;
end if;
end|
# cursor & recursion
create procedure bug10100pc(level int, lim int)
begin
declare lv int;
declare c cursor for select a from t3;
open c;
if level < lim then
select level;
fetch c into lv;
select lv;
update t3 set a=level+lv;
FLUSH TABLES;
call bug10100pc(level+1, lim);
else
select * from t3;
end if;
close c;
end|
# end of the stack checking
set @@max_sp_recursion_depth=255|
set @var=1|
# disable log because error about stack overrun contains numbers which
# depend on a system
-- disable_ps_protocol
-- disable_result_log
-- error ER_STACK_OVERRUN_NEED_MORE
call bug10100p(255, @var)|
-- error ER_STACK_OVERRUN_NEED_MORE
call bug10100pt(1,255)|
-- error ER_STACK_OVERRUN_NEED_MORE
call bug10100pv(1,255)|
-- error ER_STACK_OVERRUN_NEED_MORE
call bug10100pd(1,255)|
-- error ER_STACK_OVERRUN_NEED_MORE
call bug10100pc(1,255)|
-- enable_result_log
-- enable_ps_protocol
set @@max_sp_recursion_depth=0|
deallocate prepare stmt2|
drop function bug10100f|
drop procedure bug10100p|
drop procedure bug10100t|
drop procedure bug10100pt|
drop procedure bug10100pv|
drop procedure bug10100pd|
drop procedure bug10100pc|
drop view v1|
drop table t3|
delimiter ;| delimiter ;|
# #
# Bug#15298 SHOW GRANTS FOR CURRENT_USER: Incorrect output in DEFINER context # Bug#15298 SHOW GRANTS FOR CURRENT_USER: Incorrect output in DEFINER context
# #
--disable_warnings
drop procedure if exists bug15298_1;
drop procedure if exists bug15298_2;
--enable_warnings
create user 'mysqltest_1'@'localhost'; create user 'mysqltest_1'@'localhost';
grant all privileges on test.* to 'mysqltest_1'@'localhost'; grant all privileges on test.* to 'mysqltest_1'@'localhost';
create procedure 15298_1 () sql security definer show grants for current_user; create procedure 15298_1 () sql security definer show grants for current_user;
...@@ -242,11 +88,6 @@ drop procedure 15298_2; ...@@ -242,11 +88,6 @@ drop procedure 15298_2;
# Bug#29936 Stored Procedure DML ignores low_priority_updates setting # Bug#29936 Stored Procedure DML ignores low_priority_updates setting
# #
--disable_warnings
drop table if exists t1;
drop procedure if exists p1;
--enable_warnings
create table t1 (value varchar(15)); create table t1 (value varchar(15));
create procedure p1() update t1 set value='updated' where value='old'; create procedure p1() update t1 set value='updated' where value='old';
...@@ -411,10 +252,6 @@ DROP FUNCTION f1; ...@@ -411,10 +252,6 @@ DROP FUNCTION f1;
connection default; connection default;
--disable_warnings
DROP DATABASE IF EXISTS `my.db`;
--enable_warnings
create database `my.db`; create database `my.db`;
use `my.db`; use `my.db`;
......
...@@ -1368,7 +1368,7 @@ t1 CREATE TABLE `t1` ( ...@@ -1368,7 +1368,7 @@ t1 CREATE TABLE `t1` (
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
drop table t1; drop table t1;
# #
# End of 10.10 tests # End of 10.5 tests
# #
# #
# MDEV-32203 Raise notes when an index cannot be used on data type mismatch # MDEV-32203 Raise notes when an index cannot be used on data type mismatch
......
...@@ -921,7 +921,7 @@ show create table t1; ...@@ -921,7 +921,7 @@ show create table t1;
drop table t1; drop table t1;
--echo # --echo #
--echo # End of 10.10 tests --echo # End of 10.5 tests
--echo # --echo #
--echo # --echo #
......
...@@ -28,3 +28,4 @@ mdev-31285 : MDEV-25089 Assertion `error.len > 0' failed in galera::ReplicatorSM ...@@ -28,3 +28,4 @@ mdev-31285 : MDEV-25089 Assertion `error.len > 0' failed in galera::ReplicatorSM
galera_var_ignore_apply_errors : MENT-1997 galera_var_ignore_apply_errors test freezes galera_var_ignore_apply_errors : MENT-1997 galera_var_ignore_apply_errors test freezes
MW-402 : temporarily disabled at the request of Codership MW-402 : temporarily disabled at the request of Codership
MDEV-22232 : temporarily disabled at the request of Codership MDEV-22232 : temporarily disabled at the request of Codership
galera_desync_overlapped : MDEV-21538 galera_desync_overlapped MTR failed: Result content mismatch
connection node_2;
connection node_1;
connection node_1;
CREATE TABLE t1 (f1 int primary key, f2 int);
INSERT INTO t1 VALUES (1,0);
BEGIN;
INSERT INTO t1 VALUES (2,4),(1,1);
ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
COMMIT;
Writesets replicated (expect 0)
0
connection node_1;
SELECT * FROM t1;
f1 f2
1 0
connection node_2;
SELECT * FROM t1;
f1 f2
1 0
DROP TABLE t1;
connection node_1;
CREATE TABLE t1 (f1 INTEGER PRIMARY KEY, f2 INTEGER);
INSERT INTO t1 VALUES (1,0);
INSERT INTO t1 VALUES (2,4), (1,1);
ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
Writesets replicated (expect 0)
0
connection node_1;
SELECT * FROM t1;
f1 f2
1 0
connection node_2;
SELECT * FROM t1;
f1 f2
1 0
DROP TABLE t1;
...@@ -28,7 +28,7 @@ SET DEBUG_SYNC = 'create_table_select_before_create SIGNAL may_alter WAIT_FOR bf ...@@ -28,7 +28,7 @@ SET DEBUG_SYNC = 'create_table_select_before_create SIGNAL may_alter WAIT_FOR bf
--connection node_1 --connection node_1
SET DEBUG_SYNC = 'now WAIT_FOR may_alter'; SET DEBUG_SYNC = 'now WAIT_FOR may_alter';
--disable_result_log --disable_result_log
--error ER_ERROR_ON_RENAME --error ER_CANT_DROP_FIELD_OR_KEY
ALTER TABLE t1 DROP FOREIGN KEY b, ALGORITHM=COPY; ALTER TABLE t1 DROP FOREIGN KEY b, ALGORITHM=COPY;
--enable_result_log --enable_result_log
......
[binlogon]
log-bin
log-slave-updates=ON
[binlogoff]
#
# MDEV-31272: Statement rollback causes empty writeset replication
#
--source include/galera_cluster.inc
#
# Case 1: Multi statement transaction
#
--connection node_1
CREATE TABLE t1 (f1 int primary key, f2 int);
INSERT INTO t1 VALUES (1,0);
--let $replicated_old = `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_replicated'`
BEGIN;
--error ER_DUP_ENTRY
INSERT INTO t1 VALUES (2,4),(1,1);
COMMIT;
--let $replicated_new = `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_replicated'`
--disable_query_log
--eval SELECT $replicated_new - $replicated_old AS 'Writesets replicated (expect 0)';
--enable_query_log
--connection node_1
SELECT * FROM t1;
--connection node_2
SELECT * FROM t1;
DROP TABLE t1;
#
# Case 2: autocommit statement
#
--connection node_1
CREATE TABLE t1 (f1 INTEGER PRIMARY KEY, f2 INTEGER);
INSERT INTO t1 VALUES (1,0);
--let $replicated_old = `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_replicated'`
--error ER_DUP_ENTRY
INSERT INTO t1 VALUES (2,4), (1,1);
--let $replicated_new = `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_replicated'`
--disable_query_log
--eval SELECT $replicated_new - $replicated_old AS 'Writesets replicated (expect 0)';
--enable_query_log
--connection node_1
SELECT * FROM t1;
--connection node_2
SELECT * FROM t1;
DROP TABLE t1;
...@@ -12,7 +12,6 @@ ...@@ -12,7 +12,6 @@
galera_2_cluster : MDEV-32631 galera_2_cluster: before_rollback(): Assertion `0' failed galera_2_cluster : MDEV-32631 galera_2_cluster: before_rollback(): Assertion `0' failed
galera_gtid_2_cluster : MDEV-32633 galera_gtid_2_cluster: Assertion `thd->wsrep_next_trx_id() != (0x7fffffffffffffffLL * 2ULL + 1)' galera_gtid_2_cluster : MDEV-32633 galera_gtid_2_cluster: Assertion `thd->wsrep_next_trx_id() != (0x7fffffffffffffffLL * 2ULL + 1)'
galera_vote_rejoin_mysqldump : MDEV-24481: galera_3nodes.galera_vote_rejoin_mysqldump MTR failed: mysql_shutdown failed
galera_ssl_reload : MDEV-32778 galera_ssl_reload failed with warning message galera_ssl_reload : MDEV-32778 galera_ssl_reload failed with warning message
galera_ipv6_mariabackup : temporarily disabled at the request of Codership galera_ipv6_mariabackup : temporarily disabled at the request of Codership
galera_pc_bootstrap : temporarily disabled at the request of Codership galera_pc_bootstrap : temporarily disabled at the request of Codership
......
...@@ -39,6 +39,9 @@ SELECT VARIABLE_VALUE AS expect_Disconnected FROM INFORMATION_SCHEMA.GLOBAL_STAT ...@@ -39,6 +39,9 @@ SELECT VARIABLE_VALUE AS expect_Disconnected FROM INFORMATION_SCHEMA.GLOBAL_STAT
expect_Disconnected expect_Disconnected
Disconnected Disconnected
SET SESSION wsrep_on=ON; SET SESSION wsrep_on=ON;
SELECT VARIABLE_VALUE AS expect_3 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
expect_3
3
SELECT VARIABLE_VALUE AS expect_Primary FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status'; SELECT VARIABLE_VALUE AS expect_Primary FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status';
expect_Primary expect_Primary
Primary Primary
...@@ -49,17 +52,11 @@ t1 CREATE TABLE `t1` ( ...@@ -49,17 +52,11 @@ t1 CREATE TABLE `t1` (
`f1` int(11) DEFAULT NULL `f1` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci ) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
connection node_2; connection node_2;
SET SESSION wsrep_on=OFF;
SET SESSION wsrep_on=ON;
# restart
SHOW CREATE TABLE t1; SHOW CREATE TABLE t1;
Table Create Table Table Create Table
t1 CREATE TABLE `t1` ( t1 CREATE TABLE `t1` (
`f1` int(11) DEFAULT NULL `f1` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci ) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
SELECT COUNT(*) AS expect_0 FROM t1;
expect_0
0
CALL mtr.add_suppression("is inconsistent with group"); CALL mtr.add_suppression("is inconsistent with group");
connection node_3; connection node_3;
SHOW CREATE TABLE t1; SHOW CREATE TABLE t1;
...@@ -71,13 +68,16 @@ DROP TABLE t1; ...@@ -71,13 +68,16 @@ DROP TABLE t1;
CALL mtr.add_suppression("Slave SQL: Error 'Can't DROP 'PRIMARY'; check that column/key exists'"); CALL mtr.add_suppression("Slave SQL: Error 'Can't DROP 'PRIMARY'; check that column/key exists'");
connection node_1; connection node_1;
connection node_1; connection node_1;
CALL mtr.add_suppression("Slave SQL: Error 'The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement' on query"); CALL mtr.add_suppression("Slave SQL: Error 'The MariaDB server is running with the --skip-grant-tables option so it cannot execute this statement' on query");
DROP USER sst; DROP USER sst;
connection node_2; connection node_2;
CALL mtr.add_suppression("Slave SQL: Error 'The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement' on query"); CALL mtr.add_suppression("Slave SQL: Error 'The MariaDB server is running with the --skip-grant-tables option so it cannot execute this statement' on query");
CALL mtr.add_suppression("InnoDB: Error: Table \"mysql\"\\.\"innodb_index_stats\" not found"); CALL mtr.add_suppression("InnoDB: Error: Table \"mysql\"\\.\"innodb_index_stats\" not found");
CALL mtr.add_suppression("Can't open and lock time zone table"); CALL mtr.add_suppression("Can't open and lock time zone table");
CALL mtr.add_suppression("Can't open and lock privilege tables"); CALL mtr.add_suppression("Can't open and lock privilege tables");
CALL mtr.add_suppression("Info table is not ready to be used"); CALL mtr.add_suppression("Info table is not ready to be used");
CALL mtr.add_suppression("Native table .* has the wrong structure"); CALL mtr.add_suppression("Native table .* has the wrong structure");
CALL mtr.add_suppression("Table \'mysql.gtid_slave_pos\' doesn\'t exist"); CALL mtr.add_suppression("Table \'mysql.gtid_slave_pos\' doesn\'t exist");
connection node_2;
# restart
connection node_1;
...@@ -59,6 +59,7 @@ SET SESSION wsrep_on=ON; ...@@ -59,6 +59,7 @@ SET SESSION wsrep_on=ON;
--let $wait_condition = SELECT VARIABLE_VALUE = 3 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'; --let $wait_condition = SELECT VARIABLE_VALUE = 3 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
--source include/wait_condition.inc --source include/wait_condition.inc
SELECT VARIABLE_VALUE AS expect_3 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
SELECT VARIABLE_VALUE AS expect_Primary FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status'; SELECT VARIABLE_VALUE AS expect_Primary FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status';
# Confirm that the table is now identical throughout # Confirm that the table is now identical throughout
...@@ -67,18 +68,7 @@ SELECT VARIABLE_VALUE AS expect_Primary FROM INFORMATION_SCHEMA.GLOBAL_STATUS WH ...@@ -67,18 +68,7 @@ SELECT VARIABLE_VALUE AS expect_Primary FROM INFORMATION_SCHEMA.GLOBAL_STATUS WH
SHOW CREATE TABLE t1; SHOW CREATE TABLE t1;
--connection node_2 --connection node_2
SET SESSION wsrep_on=OFF;
--let $wait_condition = SELECT VARIABLE_VALUE = 'Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status';
--source include/wait_condition.inc
--source include/galera_wait_ready.inc
SET SESSION wsrep_on=ON;
# restart node so we don't fail on WSREP_START_POSITION internal check
--source include/restart_mysqld.inc
--source include/wait_until_connected_again.inc
SHOW CREATE TABLE t1; SHOW CREATE TABLE t1;
SELECT COUNT(*) AS expect_0 FROM t1;
CALL mtr.add_suppression("is inconsistent with group"); CALL mtr.add_suppression("is inconsistent with group");
--connection node_3 --connection node_3
...@@ -89,5 +79,14 @@ CALL mtr.add_suppression("Slave SQL: Error 'Can't DROP 'PRIMARY'; check that col ...@@ -89,5 +79,14 @@ CALL mtr.add_suppression("Slave SQL: Error 'Can't DROP 'PRIMARY'; check that col
--connection node_1 --connection node_1
--source suite/galera/include/galera_sst_restore.inc --source suite/galera/include/galera_sst_restore.inc
--connection node_2
# restart node so we don't fail on WSREP_START_POSITION internal check
--source include/restart_mysqld.inc
--source include/wait_until_connected_again.inc
--connection node_1
--let $wait_condition = SELECT VARIABLE_VALUE = 3 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
--source include/wait_condition.inc
# Restore original auto_increment_offset values. # Restore original auto_increment_offset values.
--source ../galera/include/auto_increment_offset_restore.inc --source ../galera/include/auto_increment_offset_restore.inc
...@@ -11,7 +11,3 @@ ...@@ -11,7 +11,3 @@
############################################################################## ##############################################################################
mdev_6832: wsrep_provider is read-only for security reasons
MDEV-23092: wsrep_provider is read-only for security reasons
wsrep_variables_no_provider: wsrep_provider is read-only for security reasons
MDEV-22443: it is no longer allowed enable wsrep_on if wsrep_provider is 'none'
SET SESSION wsrep_sync_wait=15;
SET SESSION wsrep_on=1;
START TRANSACTION READ WRITE;
SET COLLATION_CONNECTION='utf16le_bin';
SET GLOBAL wsrep_provider='/invalid/path/libgalera_smm.so';
ERROR 42000: Variable 'wsrep_provider' can't be set to the value of '/'
SET GLOBAL wsrep_cluster_address='OFF';
SET GLOBAL wsrep_slave_threads=10;
SELECT 1;
1
1
SET GLOBAL wsrep_cluster_address='gcomm://';
SET GLOBAL wsrep_slave_threads=DEFAULT;
CALL mtr.add_suppression("wsrep_load()");
CALL mtr.add_suppression("Failed to create a new provider");
CALL mtr.add_suppression("Failed to load provider");
#
# MDEV-6832: ER_LOCK_WAIT_TIMEOUT on SHOW STATUS
#
SHOW STATUS LIKE 'wsrep_ready';
Variable_name Value
wsrep_ready ON
SHOW STATUS LIKE 'wsrep_ready';
Variable_name Value
wsrep_ready OFF
SET @@global.wsrep_cluster_address='gcomm://';
# End of test.
SELECT @@wsrep_on;
@@wsrep_on
1
SET @wsrep_slave_threads_global_saved = @@global.wsrep_slave_threads;
SET @wsrep_debug_saved = @@global.wsrep_debug;
SET @wsrep_provider_options_saved= @@global.wsrep_provider_options;
SET @wsrep_cluster_address_saved= @@global.wsrep_cluster_address;
SET GLOBAL wsrep_provider=none;
SET SESSION wsrep_trx_fragment_size=DEFAULT;
ERROR HY000: Incorrect arguments to SET
SELECT @@session.wsrep_trx_fragment_size;
@@session.wsrep_trx_fragment_size
0
SET GLOBAL wsrep_start_position='12345678-1234-1234-1234-123456789012:100';
ERROR 42000: Variable 'wsrep_start_position' can't be set to the value of '12345678-1234-1234-1234-123456789012:100'
SHOW WARNINGS;
Level Code Message
Warning 1231 Cannot set 'wsrep_start_position' because wsrep is switched off or provider is not loaded
Error 1231 Variable 'wsrep_start_position' can't be set to the value of '12345678-1234-1234-1234-123456789012:100'
SELECT @@global.wsrep_start_position;
@@global.wsrep_start_position
00000000-0000-0000-0000-000000000000:-1
SET GLOBAL wsrep_debug=1;
Warnings:
Warning 1231 Setting 'wsrep_debug' has no effect because wsrep is switched off
SELECT @@global.wsrep_debug;
@@global.wsrep_debug
NONE
SET GLOBAL wsrep_slave_threads=5;
SELECT @@global.wsrep_slave_threads;
@@global.wsrep_slave_threads
5
SET GLOBAL wsrep_desync=1;
ERROR HY000: WSREP (galera) not started
SELECT @@global.wsrep_desync;
@@global.wsrep_desync
0
SET SESSION wsrep_trx_fragment_unit='rows';
ERROR HY000: Incorrect arguments to SET
SELECT @@session.wsrep_trx_fragment_unit;
@@session.wsrep_trx_fragment_unit
rows
SET @@global.wsrep_slave_threads = @wsrep_slave_threads_global_saved;
SET @@global.wsrep_debug = @wsrep_debug_saved;
!include ../my.cnf
[mysqld.1]
wsrep-on=OFF
binlog-format=ROW
wsrep-provider=none
wsrep-cluster-address='gcomm://'
innodb_autoinc_lock_mode=2
#
# MDEV-22443: terminate called after throwing an instance of
# 'wsrep::runtime_error' in std::terminate on START TRANSACTION
#
--source include/have_innodb.inc
--source include/have_wsrep.inc
--source include/have_binlog_format_row.inc
SET SESSION wsrep_sync_wait=15;
SET SESSION wsrep_on=1;
START TRANSACTION READ WRITE;
!include ../my.cnf
[mysqld.1]
wsrep-on=OFF
binlog-format=ROW
wsrep-provider=none
wsrep-cluster-address='gcomm://'
innodb_autoinc_lock_mode=2
#
# MDEV-23092: SIGABRT in wsrep::server_state::provider when setting
# invalid wsrep_provider (on optimized builds)
#
--source include/have_innodb.inc
--source include/have_wsrep.inc
--source include/have_binlog_format_row.inc
SET COLLATION_CONNECTION='utf16le_bin';
--error 1231
SET GLOBAL wsrep_provider='/invalid/path/libgalera_smm.so';
SET GLOBAL wsrep_cluster_address='OFF';
SET GLOBAL wsrep_slave_threads=10;
SELECT 1;
SET GLOBAL wsrep_cluster_address='gcomm://';
SET GLOBAL wsrep_slave_threads=DEFAULT;
CALL mtr.add_suppression("wsrep_load()");
CALL mtr.add_suppression("Failed to create a new provider");
CALL mtr.add_suppression("Failed to load provider");
!include ../my.cnf
[mysqld.1]
wsrep-on=ON
wsrep-provider=@ENV.WSREP_PROVIDER
wsrep-cluster-address=gcomm://
--source include/have_innodb.inc
--source include/have_wsrep_provider.inc
--source include/have_binlog_format_row.inc
--echo #
--echo # MDEV-6832: ER_LOCK_WAIT_TIMEOUT on SHOW STATUS
--echo #
SHOW STATUS LIKE 'wsrep_ready';
--disable_query_log
eval SET @@global.wsrep_provider='$WSREP_PROVIDER';
--enable_query_log
SHOW STATUS LIKE 'wsrep_ready';
SET @@global.wsrep_cluster_address='gcomm://';
--let $wait_condition = SELECT VARIABLE_VALUE = 'ON' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_ready';
--source include/wait_condition.inc
--echo # End of test.
# Use default setting for mysqld processes
!include include/default_mysqld.cnf
[mysqld.1]
wsrep-on=ON
binlog-format=ROW
wsrep-provider=@ENV.WSREP_PROVIDER
wsrep-cluster-address='gcomm://'
#galera_port=@OPT.port
#ist_port=@OPT.port
#sst_port=@OPT.port
--source include/have_wsrep.inc
--source include/have_innodb.inc
SELECT @@wsrep_on;
SET @wsrep_slave_threads_global_saved = @@global.wsrep_slave_threads;
SET @wsrep_debug_saved = @@global.wsrep_debug;
SET @wsrep_provider_options_saved= @@global.wsrep_provider_options;
SET @wsrep_cluster_address_saved= @@global.wsrep_cluster_address;
SET GLOBAL wsrep_provider=none;
--error ER_WRONG_ARGUMENTS
SET SESSION wsrep_trx_fragment_size=DEFAULT;
SELECT @@session.wsrep_trx_fragment_size;
--error ER_WRONG_VALUE_FOR_VAR
SET GLOBAL wsrep_start_position='12345678-1234-1234-1234-123456789012:100';
SHOW WARNINGS;
SELECT @@global.wsrep_start_position;
SET GLOBAL wsrep_debug=1;
SELECT @@global.wsrep_debug;
SET GLOBAL wsrep_slave_threads=5;
SELECT @@global.wsrep_slave_threads;
--error ER_WRONG_ARGUMENTS
SET GLOBAL wsrep_desync=1;
SELECT @@global.wsrep_desync;
--error ER_WRONG_ARGUMENTS
SET SESSION wsrep_trx_fragment_unit='rows';
SELECT @@session.wsrep_trx_fragment_unit;
--disable_query_log
eval SET GLOBAL wsrep_provider= '$WSREP_PROVIDER';
SET GLOBAL wsrep_cluster_address= @wsrep_cluster_address_saved;
SET GLOBAL wsrep_provider_options= @wsrep_provider_options_saved;
--source include/galera_wait_ready.inc
SET @@global.wsrep_slave_threads = @wsrep_slave_threads_global_saved;
SET @@global.wsrep_debug = @wsrep_debug_saved;
--enable_query_log
...@@ -11964,6 +11964,15 @@ IO_CACHE *wsrep_get_cache(THD * thd, bool is_transactional) ...@@ -11964,6 +11964,15 @@ IO_CACHE *wsrep_get_cache(THD * thd, bool is_transactional)
return NULL; return NULL;
} }
bool wsrep_is_binlog_cache_empty(THD *thd)
{
binlog_cache_mngr *cache_mngr=
(binlog_cache_mngr *) thd_get_ha_data(thd, binlog_hton);
if (cache_mngr)
return cache_mngr->trx_cache.empty() && cache_mngr->stmt_cache.empty();
return true;
}
void wsrep_thd_binlog_trx_reset(THD * thd) void wsrep_thd_binlog_trx_reset(THD * thd)
{ {
DBUG_ENTER("wsrep_thd_binlog_trx_reset"); DBUG_ENTER("wsrep_thd_binlog_trx_reset");
......
...@@ -1254,6 +1254,7 @@ static inline TC_LOG *get_tc_log_implementation() ...@@ -1254,6 +1254,7 @@ static inline TC_LOG *get_tc_log_implementation()
#ifdef WITH_WSREP #ifdef WITH_WSREP
IO_CACHE* wsrep_get_cache(THD *, bool); IO_CACHE* wsrep_get_cache(THD *, bool);
bool wsrep_is_binlog_cache_empty(THD *);
void wsrep_thd_binlog_trx_reset(THD * thd); void wsrep_thd_binlog_trx_reset(THD * thd);
void wsrep_thd_binlog_stmt_rollback(THD * thd); void wsrep_thd_binlog_stmt_rollback(THD * thd);
#endif /* WITH_WSREP */ #endif /* WITH_WSREP */
......
...@@ -91,7 +91,13 @@ static inline bool wsrep_is_real(THD* thd, bool all) ...@@ -91,7 +91,13 @@ static inline bool wsrep_is_real(THD* thd, bool all)
*/ */
static inline bool wsrep_has_changes(THD* thd) static inline bool wsrep_has_changes(THD* thd)
{ {
return (thd->wsrep_trx().is_empty() == false); // Transaction has changes to replicate if it
// has appended one or more certification keys,
// and has actual changes to replicate in binlog
// cache. Except for streaming replication,
// where commit message may have no payload.
return !thd->wsrep_trx().is_empty() &&
(!wsrep_is_binlog_cache_empty(thd) || thd->wsrep_trx().is_streaming());
} }
/* /*
......
#
# MDEV-32907
#
for master_1
for child2
for child3
CREATE SERVER srv FOREIGN DATA WRAPPER mysql
OPTIONS (SOCKET "$MASTER_1_MYSOCK", DATABASE 'test',user 'root');
create table t2 (c varchar(16));
create table t1 (c varchar(16)) ENGINE=Spider
COMMENT='WRAPPER "mysql", srv "srv",TABLE "t2"';
insert into t1 values ('TestSpiderRegex');
select c from t1 where c regexp '(Test|Spider|Regex)';
c
TestSpiderRegex
drop table t1, t2;
drop server srv;
for master_1
for child2
for child3
#
# end of test mdev_32907
#
--echo #
--echo # MDEV-32907
--echo #
--disable_query_log
--disable_result_log
--source ../../t/test_init.inc
--enable_result_log
--enable_query_log
evalp CREATE SERVER srv FOREIGN DATA WRAPPER mysql
OPTIONS (SOCKET "$MASTER_1_MYSOCK", DATABASE 'test',user 'root');
create table t2 (c varchar(16));
create table t1 (c varchar(16)) ENGINE=Spider
COMMENT='WRAPPER "mysql", srv "srv",TABLE "t2"';
insert into t1 values ('TestSpiderRegex');
select c from t1 where c regexp '(Test|Spider|Regex)';
drop table t1, t2;
drop server srv;
--disable_query_log
--disable_result_log
--source ../../t/test_deinit.inc
--enable_result_log
--enable_query_log
--echo #
--echo # end of test mdev_32907
--echo #
...@@ -6047,12 +6047,17 @@ int spider_db_mbase_util::print_item_func( ...@@ -6047,12 +6047,17 @@ int spider_db_mbase_util::print_item_func(
item_count -= 2; item_count -= 2;
break; break;
} }
} else if (func_name_length == 6 && } else if (func_name_length == 6)
!strncasecmp("istrue", func_name, func_name_length) {
) { if (!strncasecmp("istrue", func_name, func_name_length))
last_str = SPIDER_SQL_IS_TRUE_STR; {
last_str_length = SPIDER_SQL_IS_TRUE_LEN; last_str= SPIDER_SQL_IS_TRUE_STR;
break; last_str_length= SPIDER_SQL_IS_TRUE_LEN;
break;
}
else if (!strncasecmp("regexp", func_name, func_name_length))
/* Keep the infix expression */
break;
} else if (func_name_length == 7) } else if (func_name_length == 7)
{ {
if (!strncasecmp("isfalse", func_name, func_name_length)) if (!strncasecmp("isfalse", func_name, func_name_length))
......
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