mirror of
https://github.com/MariaDB/server.git
synced 2025-04-17 20:55:45 +02:00
Merge branch '10.6' into '10.11'
This commit is contained in:
commit
d058be62b8
51 changed files with 680 additions and 137 deletions
client
mysql-test
main
suite
scripts
sql
|
@ -1817,7 +1817,8 @@ static struct my_option my_long_options[] =
|
|||
"if the output is suspended. Doesn't use history file.",
|
||||
&quick, &quick, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||
{"quick-max-column-width", 0,
|
||||
"Maximal field length limit in case of --qick", &quick_max_column_width,
|
||||
"Maximum number of characters displayed in a column header"
|
||||
" when using --quick", &quick_max_column_width,
|
||||
&quick_max_column_width, 0, GET_ULONG, REQUIRED_ARG, LONG_MAX, 0, ULONG_MAX,
|
||||
0, 1, 0},
|
||||
{"raw", 'r', "Write fields without conversion. Used with --batch.",
|
||||
|
|
|
@ -58,5 +58,5 @@ insert into t1 values ("01234", "0123456789", "01234567890123456789", "1");
|
|||
+-----------+------------+----------------------+------+
|
||||
drop table t1;
|
||||
#
|
||||
# End of 10.7 tests
|
||||
# End of 10.5 tests
|
||||
#
|
||||
|
|
|
@ -42,5 +42,5 @@ insert into t1 values ("01234", "0123456789", "01234567890123456789", "1");
|
|||
drop table t1;
|
||||
|
||||
--echo #
|
||||
--echo # End of 10.7 tests
|
||||
--echo # End of 10.5 tests
|
||||
--echo #
|
||||
|
|
|
@ -5815,4 +5815,14 @@ HAVING (SELECT MAX(b) FROM t1) = a AND a > b;
|
|||
a b
|
||||
2 1
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# MDEV-25084: Moving equality with constant right side
|
||||
# from HAVING to WHERE
|
||||
# (fixed by the patch for MDEV-26402)
|
||||
#
|
||||
CREATE TABLE t1 (a CHAR(3)) CHARSET=sjis;
|
||||
INSERT INTO t1 VALUES ('foo'),('bar');
|
||||
SELECT LOAD_FILE('') AS f, a FROM t1 GROUP BY f, a HAVING f = a;
|
||||
f a
|
||||
DROP TABLE t1;
|
||||
End of 10.5 tests
|
||||
|
|
|
@ -1588,4 +1588,16 @@ eval $q;
|
|||
|
||||
DROP TABLE t1;
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-25084: Moving equality with constant right side
|
||||
--echo # from HAVING to WHERE
|
||||
--echo # (fixed by the patch for MDEV-26402)
|
||||
--echo #
|
||||
|
||||
CREATE TABLE t1 (a CHAR(3)) CHARSET=sjis;
|
||||
INSERT INTO t1 VALUES ('foo'),('bar');
|
||||
SELECT LOAD_FILE('') AS f, a FROM t1 GROUP BY f, a HAVING f = a;
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo End of 10.5 tests
|
||||
|
|
|
@ -12,10 +12,6 @@
|
|||
|
||||
galera_as_slave_ctas : MDEV-28378 timeout
|
||||
galera_pc_recovery : MDEV-25199 cluster fails to start up
|
||||
galera_bf_kill_debug : timeout after 900 seconds
|
||||
galera_ssl_upgrade : [Warning] Failed to load slave replication state from table mysql.gtid_slave_pos: 130: Incorrect file format 'gtid_slave_pos'
|
||||
galera_parallel_simple : timeout related to wsrep_sync_wait
|
||||
galera_insert_bulk : MDEV-30536 no expected deadlock in galera_insert_bulk test
|
||||
galera_sequences : MDEV-32561 WSREP FSM failure: no such a transition REPLICATING -> COMMITTED
|
||||
galera_concurrent_ctas : MDEV-32779 galera_concurrent_ctas: assertion in the galera::ReplicatorSMM::finish_cert()
|
||||
galera_as_slave_replay : MDEV-32780 galera_as_slave_replay: assertion in the wsrep::transaction::before_rollback()
|
||||
|
|
|
@ -10,8 +10,8 @@ if (!$wsrep_recover_additional)
|
|||
|
||||
--perl
|
||||
use strict;
|
||||
my $wsrep_start_position_str = "grep 'WSREP: Recovered position:' $ENV{MYSQL_TMP_DIR}/galera_wsrep_recover.log | sed 's/.*WSREP\:\ Recovered\ position://' | sed 's/^[ \t]*//'";
|
||||
my $wsrep_start_position = `grep 'WSREP: Recovered position:' $ENV{MYSQL_TMP_DIR}/galera_wsrep_recover.log | sed 's/.*WSREP\:\ Recovered\ position://' | sed 's/^[ \t]*//'`;
|
||||
my $wsrep_start_position_str = "grep -a 'WSREP: Recovered position:' $ENV{MYSQL_TMP_DIR}/galera_wsrep_recover.log | sed 's/.*WSREP\:\ Recovered\ position://' | sed 's/^[ \t]*//'";
|
||||
my $wsrep_start_position = `grep -a 'WSREP: Recovered position:' $ENV{MYSQL_TMP_DIR}/galera_wsrep_recover.log | sed 's/.*WSREP\:\ Recovered\ position://' | sed 's/^[ \t]*//'`;
|
||||
chomp($wsrep_start_position);
|
||||
|
||||
die if $wsrep_start_position eq '';
|
||||
|
|
|
@ -39,7 +39,7 @@ id val
|
|||
7 d
|
||||
9 d
|
||||
11 d
|
||||
set global wsrep_mode=REPLICATE_MYISAM;
|
||||
set global wsrep_mode='REPLICATE_MYISAM,REPLICATE_ARIA';
|
||||
create table t4(id serial, val varchar(100)) engine=myisam;
|
||||
insert into t4 values(null, 'a');
|
||||
insert into t4 values(null, 'b');
|
||||
|
@ -95,6 +95,7 @@ id val
|
|||
4 d
|
||||
5 d
|
||||
6 d
|
||||
set global wsrep_mode=default;
|
||||
connection node_1;
|
||||
drop table t1,t2,t3,t4,t5;
|
||||
set global wsrep_mode=default;
|
||||
|
|
|
@ -22,16 +22,19 @@ update t1 set b= 1 where a=1;
|
|||
connection node_2b;
|
||||
SET SESSION DEBUG_SYNC = "now WAIT_FOR sync.before_wsrep_thd_abort_reached";
|
||||
connection node_2;
|
||||
SET DEBUG_SYNC= 'before_awake_no_mutex SIGNAL awake_reached WAIT_FOR continue_kill';
|
||||
SET DEBUG_SYNC= 'wsrep_kill_before_awake_no_mutex SIGNAL awake_reached WAIT_FOR continue_kill';
|
||||
connection node_2b;
|
||||
SET DEBUG_SYNC='now WAIT_FOR awake_reached';
|
||||
SET GLOBAL debug_dbug = "";
|
||||
SET DEBUG_SYNC = "now SIGNAL signal.before_wsrep_thd_abort";
|
||||
connection node_1;
|
||||
COMMIT;
|
||||
connection node_2b;
|
||||
SET DEBUG_SYNC = "now SIGNAL continue_kill";
|
||||
connection node_2;
|
||||
connection node_2a;
|
||||
select * from t1;
|
||||
connection node_2;
|
||||
connection node_2b;
|
||||
SET DEBUG_SYNC = "RESET";
|
||||
drop table t1;
|
||||
disconnect node_2a;
|
||||
|
|
|
@ -2,6 +2,8 @@ connection node_2;
|
|||
connection node_1;
|
||||
connection node_1;
|
||||
CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB;
|
||||
SET GLOBAL DEBUG_DBUG = 'd,sync.wsrep_apply_cb';
|
||||
connection node_1;
|
||||
SET foreign_key_checks = 0;
|
||||
SET unique_checks = 0;
|
||||
START TRANSACTION;
|
||||
|
@ -10,11 +12,20 @@ SET foreign_key_checks = 1;
|
|||
SET unique_checks = 1;
|
||||
INSERT INTO t1 VALUES (1001);
|
||||
connection node_1;
|
||||
SET DEBUG_SYNC = 'wsrep_before_certification WAIT_FOR sync.wsrep_apply_cb_reached';
|
||||
SET DEBUG_SYNC = 'wsrep_after_certification SIGNAL signal.wsrep_apply_cb';
|
||||
COMMIT;
|
||||
ERROR 40001: Deadlock found when trying to get lock; try restarting transaction
|
||||
DROP TABLE t1;
|
||||
SET GLOBAL DEBUG_DBUG = '';
|
||||
SET DEBUG_SYNC = 'RESET';
|
||||
connection node_1;
|
||||
CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB;
|
||||
connection node_2;
|
||||
SET GLOBAL DEBUG_DBUG = 'd,sync.wsrep_apply_cb';
|
||||
connection node_1;
|
||||
SET foreign_key_checks = 0;
|
||||
SET unique_checks = 0;
|
||||
START TRANSACTION;
|
||||
connection node_2;
|
||||
SET foreign_key_checks = 1;
|
||||
|
@ -23,8 +34,14 @@ START TRANSACTION;
|
|||
INSERT INTO t1 VALUES (1001);
|
||||
connection node_1;
|
||||
COMMIT;
|
||||
2
|
||||
3
|
||||
connection node_2;
|
||||
SET DEBUG_SYNC = 'wsrep_before_certification WAIT_FOR sync.wsrep_apply_cb_reached';
|
||||
SET DEBUG_SYNC = 'wsrep_after_certification SIGNAL signal.wsrep_apply_cb';
|
||||
COMMIT;
|
||||
ERROR 40001: Deadlock found when trying to get lock; try restarting transaction
|
||||
DROP TABLE t1;
|
||||
SET GLOBAL DEBUG_DBUG = '';
|
||||
SET DEBUG_SYNC = 'RESET';
|
||||
disconnect node_2;
|
||||
disconnect node_1;
|
||||
|
|
70
mysql-test/suite/galera/r/galera_vote_ddl.result
Normal file
70
mysql-test/suite/galera/r/galera_vote_ddl.result
Normal file
|
@ -0,0 +1,70 @@
|
|||
connection node_2;
|
||||
connection node_1;
|
||||
connection node_1;
|
||||
SET @@global.wsrep_ignore_apply_errors = 7;
|
||||
connection node_2;
|
||||
SET @@global.wsrep_ignore_apply_errors = 7;
|
||||
connection node_1;
|
||||
CREATE TABLE t1 (pk INT AUTO_INCREMENT PRIMARY KEY);
|
||||
connection node_1;
|
||||
DROP TABLE nonexistent;
|
||||
ERROR 42S02: Unknown table 'test.nonexistent'
|
||||
INSERT INTO t1 VALUES (DEFAULT);
|
||||
connection node_2;
|
||||
connection node_1;
|
||||
TRUNCATE TABLE nonexistent;
|
||||
ERROR 42S02: Table 'test.nonexistent' doesn't exist
|
||||
INSERT INTO t1 VALUES (DEFAULT);
|
||||
connection node_2;
|
||||
connection node_1;
|
||||
CREATE TABLE nonexistent.t1 (s INT);
|
||||
ERROR 42000: Unknown database 'nonexistent'
|
||||
INSERT INTO t1 VALUES (DEFAULT);
|
||||
connection node_2;
|
||||
connection node_1;
|
||||
CREATE TABLE t1 (s INT);
|
||||
ERROR 42S01: Table 't1' already exists
|
||||
INSERT INTO t1 VALUES (DEFAULT);
|
||||
connection node_2;
|
||||
connection node_1;
|
||||
ALTER TABLE nonexistent ADD COLUMN (c INT);
|
||||
ERROR 42S02: Table 'test.nonexistent' doesn't exist
|
||||
INSERT INTO t1 VALUES (DEFAULT);
|
||||
connection node_2;
|
||||
DROP TABLE t1;
|
||||
connection node_1;
|
||||
SET @@global.wsrep_ignore_apply_errors = 0;
|
||||
connection node_2;
|
||||
SET @@global.wsrep_ignore_apply_errors = 0;
|
||||
connection node_1;
|
||||
CREATE TABLE t1 (pk INT AUTO_INCREMENT PRIMARY KEY);
|
||||
connection node_1;
|
||||
DROP TABLE nonexistent;
|
||||
ERROR 42S02: Unknown table 'test.nonexistent'
|
||||
INSERT INTO t1 VALUES (DEFAULT);
|
||||
connection node_2;
|
||||
connection node_1;
|
||||
TRUNCATE TABLE nonexistent;
|
||||
ERROR 42S02: Table 'test.nonexistent' doesn't exist
|
||||
INSERT INTO t1 VALUES (DEFAULT);
|
||||
connection node_2;
|
||||
connection node_1;
|
||||
CREATE TABLE nonexistent.t1 (s INT);
|
||||
ERROR 42000: Unknown database 'nonexistent'
|
||||
INSERT INTO t1 VALUES (DEFAULT);
|
||||
connection node_2;
|
||||
connection node_1;
|
||||
CREATE TABLE t1 (s INT);
|
||||
ERROR 42S01: Table 't1' already exists
|
||||
INSERT INTO t1 VALUES (DEFAULT);
|
||||
connection node_2;
|
||||
connection node_1;
|
||||
ALTER TABLE nonexistent ADD COLUMN (c INT);
|
||||
ERROR 42S02: Table 'test.nonexistent' doesn't exist
|
||||
INSERT INTO t1 VALUES (DEFAULT);
|
||||
connection node_2;
|
||||
DROP TABLE t1;
|
||||
connection node_1;
|
||||
SET @@global.wsrep_ignore_apply_errors = 7;
|
||||
connection node_2;
|
||||
SET @@global.wsrep_ignore_apply_errors = 7;
|
|
@ -0,0 +1,27 @@
|
|||
connection node_2;
|
||||
connection node_1;
|
||||
connection node_1;
|
||||
connection node_2;
|
||||
connection node_1;
|
||||
call mtr.add_suppression("WSREP: async IST sender failed to serve.*");
|
||||
SET @wsrep_provider_options_orig = @@GLOBAL.wsrep_provider_options;
|
||||
connection node_2;
|
||||
SET @wsrep_cluster_address_orig = @@GLOBAL.wsrep_cluster_address;
|
||||
SET GLOBAL WSREP_ON=0;
|
||||
SELECT COUNT(*) AS EXPECT_0 FROM mysql.wsrep_streaming_log;
|
||||
EXPECT_0
|
||||
0
|
||||
SELECT COUNT(*) AS EXPECT_1 FROM mysql.wsrep_cluster;
|
||||
EXPECT_1
|
||||
1
|
||||
SELECT COUNT(*) AS EXPECT_2 FROM mysql.wsrep_cluster_members;
|
||||
EXPECT_2
|
||||
2
|
||||
connection node_1;
|
||||
SET GLOBAL wsrep_provider_options ='pc.ignore_sb=true';
|
||||
connection node_2;
|
||||
Killing server ...
|
||||
connection node_1;
|
||||
connection node_2;
|
||||
connection node_1;
|
||||
SET GLOBAL wsrep_provider_options ='pc.ignore_sb=false';
|
|
@ -17,12 +17,14 @@ SELECT * FROM s;
|
|||
next_not_cached_value minimum_value maximum_value start_value increment cache_size cycle_option cycle_count
|
||||
1 1 9223372036854775806 1 1 1000 0 0
|
||||
connection node_2;
|
||||
SET GLOBAL WSREP_MODE='REPLICATE_ARIA,REPLICATE_MYISAM';
|
||||
SELECT * FROM t1;
|
||||
a
|
||||
SELECT * FROM s;
|
||||
next_not_cached_value minimum_value maximum_value start_value increment cache_size cycle_option cycle_count
|
||||
1 1 9223372036854775806 1 1 1000 0 0
|
||||
connection node_1;
|
||||
SET GLOBAL WSREP_MODE='REPLICATE_ARIA,REPLICATE_MYISAM';
|
||||
DROP TABLE t1;
|
||||
DROP SEQUENCE s;
|
||||
# Case 2 REPLACE INTO ... SELECT with error
|
||||
|
@ -240,3 +242,5 @@ pk
|
|||
DROP TABLE t1;
|
||||
DROP VIEW view_t1;
|
||||
SET GLOBAL wsrep_mode=DEFAULT;
|
||||
connection node_2;
|
||||
SET GLOBAL wsrep_mode=DEFAULT;
|
||||
|
|
|
@ -22,7 +22,7 @@ insert into t3 select null, 'c';
|
|||
insert into t3 select null, 'd' from t3;
|
||||
select * from t3;
|
||||
|
||||
set global wsrep_mode=REPLICATE_MYISAM;
|
||||
set global wsrep_mode='REPLICATE_MYISAM,REPLICATE_ARIA';
|
||||
|
||||
create table t4(id serial, val varchar(100)) engine=myisam;
|
||||
insert into t4 values(null, 'a');
|
||||
|
@ -45,9 +45,8 @@ select * from t2;
|
|||
select * from t3;
|
||||
select * from t4;
|
||||
select * from t5;
|
||||
|
||||
set global wsrep_mode=default;
|
||||
|
||||
--connection node_1
|
||||
drop table t1,t2,t3,t4,t5;
|
||||
set global wsrep_mode=default;
|
||||
|
||||
|
|
|
@ -66,7 +66,7 @@ SET SESSION DEBUG_SYNC = "now WAIT_FOR sync.before_wsrep_thd_abort_reached";
|
|||
#
|
||||
# pause KILL execution before awake
|
||||
#
|
||||
SET DEBUG_SYNC= 'before_awake_no_mutex SIGNAL awake_reached WAIT_FOR continue_kill';
|
||||
SET DEBUG_SYNC= 'wsrep_kill_before_awake_no_mutex SIGNAL awake_reached WAIT_FOR continue_kill';
|
||||
--disable_query_log
|
||||
--send_eval KILL $k_thread
|
||||
--enable_query_log
|
||||
|
@ -78,6 +78,11 @@ SET DEBUG_SYNC='now WAIT_FOR awake_reached';
|
|||
# release applier and KILL operator
|
||||
SET GLOBAL debug_dbug = "";
|
||||
SET DEBUG_SYNC = "now SIGNAL signal.before_wsrep_thd_abort";
|
||||
|
||||
--connection node_1
|
||||
COMMIT;
|
||||
|
||||
--connection node_2b
|
||||
SET DEBUG_SYNC = "now SIGNAL continue_kill";
|
||||
|
||||
--connection node_2
|
||||
|
@ -87,7 +92,7 @@ SET DEBUG_SYNC = "now SIGNAL continue_kill";
|
|||
--error 0,1213,2013,2026
|
||||
select * from t1;
|
||||
|
||||
--connection node_2
|
||||
--connection node_2b
|
||||
SET DEBUG_SYNC = "RESET";
|
||||
|
||||
drop table t1;
|
||||
|
|
|
@ -5,6 +5,8 @@
|
|||
|
||||
--source include/galera_cluster.inc
|
||||
--source include/have_innodb.inc
|
||||
--source include/have_debug_sync.inc
|
||||
--source include/have_debug.inc
|
||||
|
||||
#
|
||||
# Make bulk insert BF-abort, but regular insert succeed.
|
||||
|
@ -13,6 +15,10 @@
|
|||
--connection node_1
|
||||
CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB;
|
||||
|
||||
# Delay applying of the single insert from the other node.
|
||||
SET GLOBAL DEBUG_DBUG = 'd,sync.wsrep_apply_cb';
|
||||
|
||||
--connection node_1
|
||||
# Disable foreign and unique key checks to allow bulk insert.
|
||||
SET foreign_key_checks = 0;
|
||||
SET unique_checks = 0;
|
||||
|
@ -30,7 +36,7 @@ while ($count < 1000)
|
|||
|
||||
--connection node_2
|
||||
|
||||
# Disable bulk insert.
|
||||
# Disable bulk insert on this node.
|
||||
SET foreign_key_checks = 1;
|
||||
SET unique_checks = 1;
|
||||
|
||||
|
@ -38,10 +44,20 @@ SET unique_checks = 1;
|
|||
INSERT INTO t1 VALUES (1001);
|
||||
|
||||
--connection node_1
|
||||
|
||||
# We need to trigger Galera-level certification conflict. For this:
|
||||
# - start applying single insert from the other node before bulk insert certifies
|
||||
# - certifying bulk insert will lead to the conflict
|
||||
# - keep applying single insert
|
||||
SET DEBUG_SYNC = 'wsrep_before_certification WAIT_FOR sync.wsrep_apply_cb_reached';
|
||||
SET DEBUG_SYNC = 'wsrep_after_certification SIGNAL signal.wsrep_apply_cb';
|
||||
|
||||
--error ER_LOCK_DEADLOCK
|
||||
COMMIT;
|
||||
|
||||
DROP TABLE t1;
|
||||
SET GLOBAL DEBUG_DBUG = '';
|
||||
SET DEBUG_SYNC = 'RESET';
|
||||
|
||||
#
|
||||
# Make bulk insert succeed, but regular insert BF-abort.
|
||||
|
@ -50,8 +66,17 @@ DROP TABLE t1;
|
|||
--connection node_1
|
||||
CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB;
|
||||
|
||||
--connection node_2
|
||||
# Delay applying of the bulk insert from the other node.
|
||||
SET GLOBAL DEBUG_DBUG = 'd,sync.wsrep_apply_cb';
|
||||
|
||||
--connection node_1
|
||||
--let $before_bulk_keys = `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_repl_keys'`
|
||||
|
||||
# Disable foreign and unique key checks to allow bulk insert.
|
||||
SET foreign_key_checks = 0;
|
||||
SET unique_checks = 0;
|
||||
|
||||
START TRANSACTION;
|
||||
|
||||
--let $count=0
|
||||
|
@ -64,8 +89,7 @@ while ($count < 1000)
|
|||
--enable_query_log
|
||||
|
||||
--connection node_2
|
||||
|
||||
# Disable bulk insert.
|
||||
# Disable bulk insert on this node.
|
||||
SET foreign_key_checks = 1;
|
||||
SET unique_checks = 1;
|
||||
|
||||
|
@ -77,12 +101,23 @@ INSERT INTO t1 VALUES (1001);
|
|||
--connection node_1
|
||||
COMMIT;
|
||||
|
||||
# Expect two keys to be added for bulk insert: DB-level shared key and table-level exclusive key.
|
||||
# Expect three keys to be added for bulk insert: "zero-level" key, DB-level shared key and table-level exclusive key.
|
||||
--let $bulk_keys_count = `SELECT VARIABLE_VALUE - $before_bulk_keys FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_repl_keys'`
|
||||
--echo $bulk_keys_count
|
||||
|
||||
--connection node_2
|
||||
|
||||
# We need to trigger Galera-level certification conflict. For this:
|
||||
# - start applying bulk insert from the other node before local insert certifies
|
||||
# - certifying local insert will lead to the conflict
|
||||
# - keep applying bulk insert
|
||||
SET DEBUG_SYNC = 'wsrep_before_certification WAIT_FOR sync.wsrep_apply_cb_reached';
|
||||
SET DEBUG_SYNC = 'wsrep_after_certification SIGNAL signal.wsrep_apply_cb';
|
||||
|
||||
--error ER_LOCK_DEADLOCK
|
||||
COMMIT;
|
||||
|
||||
DROP TABLE t1;
|
||||
SET GLOBAL DEBUG_DBUG = '';
|
||||
SET DEBUG_SYNC = 'RESET';
|
||||
--source include/galera_end.inc
|
||||
|
|
|
@ -38,10 +38,10 @@ SELECT COUNT(*) = 1 FROM t1;
|
|||
|
||||
--perl
|
||||
use strict;
|
||||
my $wsrep_start_position1 = `grep 'WSREP: Recovered position:' $ENV{MYSQL_TMP_DIR}/galera_wsrep_recover.1.log | sed 's/.*WSREP\:\ Recovered\ position://' | sed 's/^[ \t]*//'`;
|
||||
my $wsrep_start_position1 = `grep -a 'WSREP: Recovered position:' $ENV{MYSQL_TMP_DIR}/galera_wsrep_recover.1.log | sed 's/.*WSREP\:\ Recovered\ position://' | sed 's/^[ \t]*//'`;
|
||||
chomp($wsrep_start_position1);
|
||||
|
||||
my $wsrep_start_position2 = `grep 'WSREP: Recovered position:' $ENV{MYSQL_TMP_DIR}/galera_wsrep_recover.2.log | sed 's/.*WSREP\:\ Recovered\ position://' | sed 's/^[ \t]*//'`;
|
||||
my $wsrep_start_position2 = `grep -a 'WSREP: Recovered position:' $ENV{MYSQL_TMP_DIR}/galera_wsrep_recover.2.log | sed 's/.*WSREP\:\ Recovered\ position://' | sed 's/^[ \t]*//'`;
|
||||
chomp($wsrep_start_position2);
|
||||
|
||||
die if $wsrep_start_position1 eq '' || $wsrep_start_position2 eq '';
|
||||
|
|
|
@ -1,5 +1,9 @@
|
|||
!include ../galera_2nodes.cnf
|
||||
|
||||
[mysqld]
|
||||
loose-galera-ssl-upgrade=1
|
||||
wsrep-debug=1
|
||||
|
||||
[mysqld.1]
|
||||
wsrep_provider_options='base_port=@mysqld.1.#galera_port;socket.ssl=yes;socket.ssl_cert=@ENV.MYSQL_TEST_DIR/std_data/galera-cert.pem;socket.ssl_key=@ENV.MYSQL_TEST_DIR/std_data/galera-key.pem'
|
||||
|
||||
|
|
|
@ -7,6 +7,8 @@
|
|||
--source include/galera_cluster.inc
|
||||
--source include/have_innodb.inc
|
||||
--source include/have_ssl_communication.inc
|
||||
--source include/have_openssl.inc
|
||||
--source include/force_restart.inc
|
||||
|
||||
# Save original auto_increment_offset values.
|
||||
--let $node_1=node_1
|
||||
|
|
54
mysql-test/suite/galera/t/galera_vote_ddl.inc
Normal file
54
mysql-test/suite/galera/t/galera_vote_ddl.inc
Normal file
|
@ -0,0 +1,54 @@
|
|||
--connection node_1
|
||||
CREATE TABLE t1 (pk INT AUTO_INCREMENT PRIMARY KEY);
|
||||
|
||||
--connection node_1
|
||||
--error 1051
|
||||
DROP TABLE nonexistent;
|
||||
|
||||
# Verify cluster is intact
|
||||
INSERT INTO t1 VALUES (DEFAULT);
|
||||
--connection node_2
|
||||
--let $wait_condition = SELECT COUNT(*) = 1 FROM t1;
|
||||
--source include/wait_condition.inc
|
||||
|
||||
--connection node_1
|
||||
--error 1146
|
||||
TRUNCATE TABLE nonexistent;
|
||||
|
||||
# Verify cluster is intact
|
||||
INSERT INTO t1 VALUES (DEFAULT);
|
||||
--connection node_2
|
||||
--let $wait_condition = SELECT COUNT(*) = 2 FROM t1;
|
||||
--source include/wait_condition.inc
|
||||
|
||||
--connection node_1
|
||||
--error 1049
|
||||
CREATE TABLE nonexistent.t1 (s INT);
|
||||
|
||||
# Verify cluster is intact
|
||||
INSERT INTO t1 VALUES (DEFAULT);
|
||||
--connection node_2
|
||||
--let $wait_condition = SELECT COUNT(*) = 3 FROM t1;
|
||||
--source include/wait_condition.inc
|
||||
|
||||
--connection node_1
|
||||
--error 1050
|
||||
CREATE TABLE t1 (s INT);
|
||||
|
||||
# Verify cluster is intact
|
||||
INSERT INTO t1 VALUES (DEFAULT);
|
||||
--connection node_2
|
||||
--let $wait_condition = SELECT COUNT(*) = 4 FROM t1;
|
||||
--source include/wait_condition.inc
|
||||
|
||||
--connection node_1
|
||||
--error 1146
|
||||
ALTER TABLE nonexistent ADD COLUMN (c INT);
|
||||
|
||||
# Verify cluster is intact
|
||||
INSERT INTO t1 VALUES (DEFAULT);
|
||||
--connection node_2
|
||||
--let $wait_condition = SELECT COUNT(*) = 5 FROM t1;
|
||||
--source include/wait_condition.inc
|
||||
|
||||
DROP TABLE t1;
|
34
mysql-test/suite/galera/t/galera_vote_ddl.test
Normal file
34
mysql-test/suite/galera/t/galera_vote_ddl.test
Normal file
|
@ -0,0 +1,34 @@
|
|||
#
|
||||
# Test voting on identical DDL errors (error messages should match)
|
||||
#
|
||||
|
||||
--source include/galera_cluster.inc
|
||||
--source include/have_binlog_format_row.inc
|
||||
|
||||
#
|
||||
# 1. Ignore all DDL errors (avoids voting)
|
||||
#
|
||||
--connection node_1
|
||||
--let $wsrep_ignore_apply_errors_saved1 = `SELECT @@global.wsrep_ignore_apply_errors`
|
||||
SET @@global.wsrep_ignore_apply_errors = 7;
|
||||
--connection node_2
|
||||
--let $wsrep_ignore_apply_errors_saved2 = `SELECT @@global.wsrep_ignore_apply_errors`
|
||||
SET @@global.wsrep_ignore_apply_errors = 7;
|
||||
|
||||
--source galera_vote_ddl.inc
|
||||
|
||||
#
|
||||
# 2. Don't ignore any errors (forces voting)
|
||||
#
|
||||
--connection node_1
|
||||
SET @@global.wsrep_ignore_apply_errors = 0;
|
||||
--connection node_2
|
||||
SET @@global.wsrep_ignore_apply_errors = 0;
|
||||
|
||||
--source galera_vote_ddl.inc
|
||||
|
||||
--connection node_1
|
||||
--eval SET @@global.wsrep_ignore_apply_errors = $wsrep_ignore_apply_errors_saved1
|
||||
|
||||
--connection node_2
|
||||
--eval SET @@global.wsrep_ignore_apply_errors = $wsrep_ignore_apply_errors_saved2
|
39
mysql-test/suite/galera/t/galera_wsrep_schema_detached.test
Normal file
39
mysql-test/suite/galera/t/galera_wsrep_schema_detached.test
Normal file
|
@ -0,0 +1,39 @@
|
|||
--source include/galera_cluster.inc
|
||||
|
||||
# Save original auto_increment_offset values.
|
||||
--let $node_1=node_1
|
||||
--let $node_2=node_2
|
||||
--source include/auto_increment_offset_save.inc
|
||||
|
||||
--connection node_1
|
||||
call mtr.add_suppression("WSREP: async IST sender failed to serve.*");
|
||||
SET @wsrep_provider_options_orig = @@GLOBAL.wsrep_provider_options;
|
||||
|
||||
--connection node_2
|
||||
SET @wsrep_cluster_address_orig = @@GLOBAL.wsrep_cluster_address;
|
||||
SET GLOBAL WSREP_ON=0;
|
||||
SELECT COUNT(*) AS EXPECT_0 FROM mysql.wsrep_streaming_log;
|
||||
SELECT COUNT(*) AS EXPECT_1 FROM mysql.wsrep_cluster;
|
||||
SELECT COUNT(*) AS EXPECT_2 FROM mysql.wsrep_cluster_members;
|
||||
|
||||
--connection node_1
|
||||
SET GLOBAL wsrep_provider_options ='pc.ignore_sb=true';
|
||||
|
||||
--connection node_2
|
||||
--source include/kill_galera.inc
|
||||
|
||||
--connection node_1
|
||||
--let $wait_condition = SELECT VARIABLE_VALUE = 1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'
|
||||
--source include/wait_condition.inc
|
||||
|
||||
--connection node_2
|
||||
--source include/start_mysqld.inc
|
||||
|
||||
--connection node_1
|
||||
--let $wait_condition = SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'
|
||||
--source include/wait_condition.inc
|
||||
|
||||
SET GLOBAL wsrep_provider_options ='pc.ignore_sb=false';
|
||||
|
||||
# Cleanup
|
||||
--source include/auto_increment_offset_restore.inc
|
|
@ -16,6 +16,7 @@ SELECT * FROM t1;
|
|||
SELECT * FROM s;
|
||||
|
||||
--connection node_2
|
||||
SET GLOBAL WSREP_MODE='REPLICATE_ARIA,REPLICATE_MYISAM';
|
||||
--let $wait_condition = SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't1'
|
||||
--source include/wait_condition.inc
|
||||
--let $wait_condition = SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 's'
|
||||
|
@ -27,6 +28,7 @@ SELECT * FROM t1;
|
|||
SELECT * FROM s;
|
||||
|
||||
--connection node_1
|
||||
SET GLOBAL WSREP_MODE='REPLICATE_ARIA,REPLICATE_MYISAM';
|
||||
DROP TABLE t1;
|
||||
DROP SEQUENCE s;
|
||||
|
||||
|
@ -183,3 +185,6 @@ SELECT * FROM t1;
|
|||
DROP TABLE t1;
|
||||
DROP VIEW view_t1;
|
||||
SET GLOBAL wsrep_mode=DEFAULT;
|
||||
|
||||
--connection node_2
|
||||
SET GLOBAL wsrep_mode=DEFAULT;
|
||||
|
|
|
@ -11,11 +11,6 @@
|
|||
##############################################################################
|
||||
|
||||
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_ssl_reload : MDEV-32778 galera_ssl_reload failed with warning message
|
||||
galera_pc_bootstrap : temporarily disabled at the request of Codership
|
||||
galera_ipv6_mariabackup_section : temporarily disabled at the request of Codership
|
||||
# Opensuse/suse/rocky9/rocky84/rhel9/rhel8-ppc64le .. - all same IPv6 isn't configured right or skipping or galera
|
||||
galera_ipv6_rsync : Can't connect to server on '::1' (115)
|
||||
galera_ipv6_rsync_section : Can't connect to server on '::1' (115)
|
||||
GCF-354 : MDEV-25614 Galera test failure on GCF-354
|
||||
galera_ipv6_rsync : MDEV-34842 Can't connect to server on '::1' (115)
|
||||
galera_ipv6_rsync_section : MDEV-34842 Can't connect to server on '::1' (115)
|
||||
galera_ipv6_mariabackup_section : MDEV-34842 Can't connect to server on '::1' (115)
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
connection node_2;
|
||||
connection node_1;
|
||||
connect node_3, 127.0.0.1, root, , test, $NODE_MYPORT_3;
|
||||
connection node_1;
|
||||
connection node_2;
|
||||
connection node_3;
|
||||
connect node_2b, 127.0.0.1, root, , test, $NODE_MYPORT_2;
|
||||
set wsrep_sync_wait=0;
|
||||
connect node_1b, 127.0.0.1, root, , test, $NODE_MYPORT_1;
|
||||
|
@ -44,9 +47,9 @@ connection node_1b;
|
|||
connection node_1;
|
||||
connection node_3;
|
||||
connection node_1;
|
||||
CALL insert_row('node1', 500);
|
||||
CALL insert_row('node1', 100);
|
||||
connection node_3;
|
||||
CALL insert_row('node3', 500);
|
||||
CALL insert_row('node3', 100);
|
||||
CREATE TABLE t2(i int primary key) engine=innodb;
|
||||
connection node_2;
|
||||
# Restart node_2
|
||||
|
@ -60,7 +63,7 @@ Variable_name Value
|
|||
wsrep_gtid_domain_id 1111
|
||||
show variables like '%gtid_binlog_pos%';
|
||||
Variable_name Value
|
||||
gtid_binlog_pos 1111-1-2503
|
||||
gtid_binlog_pos 1111-1-1703
|
||||
connection node_2;
|
||||
# GTID in node2
|
||||
show variables like 'wsrep_gtid_domain_id';
|
||||
|
@ -68,7 +71,7 @@ Variable_name Value
|
|||
wsrep_gtid_domain_id 1111
|
||||
show variables like '%gtid_binlog_pos%';
|
||||
Variable_name Value
|
||||
gtid_binlog_pos 1111-1-2503
|
||||
gtid_binlog_pos 1111-1-1703
|
||||
connection node_3;
|
||||
# GTID in node3
|
||||
show variables like 'wsrep_gtid_domain_id';
|
||||
|
@ -76,7 +79,7 @@ Variable_name Value
|
|||
wsrep_gtid_domain_id 1111
|
||||
show variables like '%gtid_binlog_pos%';
|
||||
Variable_name Value
|
||||
gtid_binlog_pos 1111-1-2503
|
||||
gtid_binlog_pos 1111-1-1703
|
||||
# Shutdown node_3
|
||||
connection node_3;
|
||||
SET GLOBAL wsrep_provider_options = 'gmcast.isolate = 1';
|
||||
|
@ -98,7 +101,7 @@ Variable_name Value
|
|||
wsrep_gtid_domain_id 1111
|
||||
show variables like '%gtid_binlog_pos%';
|
||||
Variable_name Value
|
||||
gtid_binlog_pos 1111-1-2554
|
||||
gtid_binlog_pos 1111-1-1754
|
||||
connection node_2;
|
||||
# GTID in node2
|
||||
show variables like 'wsrep_gtid_domain_id';
|
||||
|
@ -106,7 +109,7 @@ Variable_name Value
|
|||
wsrep_gtid_domain_id 1111
|
||||
show variables like '%gtid_binlog_pos%';
|
||||
Variable_name Value
|
||||
gtid_binlog_pos 1111-1-2554
|
||||
gtid_binlog_pos 1111-1-1754
|
||||
connection node_3;
|
||||
# GTID in node3
|
||||
show variables like 'wsrep_gtid_domain_id';
|
||||
|
@ -114,7 +117,7 @@ Variable_name Value
|
|||
wsrep_gtid_domain_id 1111
|
||||
show variables like '%gtid_binlog_pos%';
|
||||
Variable_name Value
|
||||
gtid_binlog_pos 1111-1-2554
|
||||
gtid_binlog_pos 1111-1-1754
|
||||
# One by one shutdown all nodes
|
||||
connection node_3;
|
||||
# shutdown node_3
|
||||
|
@ -132,7 +135,7 @@ Variable_name Value
|
|||
wsrep_gtid_domain_id 1111
|
||||
show variables like '%gtid_binlog_pos%';
|
||||
Variable_name Value
|
||||
gtid_binlog_pos 1111-1-2554
|
||||
gtid_binlog_pos 1111-1-1754
|
||||
ANALYZE TABLE t2;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t2 analyze status Engine-independent statistics collected
|
||||
|
@ -163,7 +166,7 @@ Variable_name Value
|
|||
wsrep_gtid_domain_id 1111
|
||||
show variables like '%gtid_binlog_pos%';
|
||||
Variable_name Value
|
||||
gtid_binlog_pos 1111-1-2756
|
||||
gtid_binlog_pos 1111-1-1956
|
||||
connection node_2;
|
||||
node2 GTID
|
||||
show variables like 'wsrep_gtid_domain_id';
|
||||
|
@ -171,7 +174,7 @@ Variable_name Value
|
|||
wsrep_gtid_domain_id 1111
|
||||
show variables like '%gtid_binlog_pos%';
|
||||
Variable_name Value
|
||||
gtid_binlog_pos 1111-1-2756
|
||||
gtid_binlog_pos 1111-1-1956
|
||||
connection node_3;
|
||||
node3 GTID
|
||||
show variables like 'wsrep_gtid_domain_id';
|
||||
|
@ -179,22 +182,22 @@ Variable_name Value
|
|||
wsrep_gtid_domain_id 1111
|
||||
show variables like '%gtid_binlog_pos%';
|
||||
Variable_name Value
|
||||
gtid_binlog_pos 1111-1-2756
|
||||
gtid_binlog_pos 1111-1-1956
|
||||
connection node_1;
|
||||
table size in node1
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
2750
|
||||
1950
|
||||
connection node_2;
|
||||
table size in node2
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
2750
|
||||
1950
|
||||
connection node_3;
|
||||
table size in node3
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
2750
|
||||
1950
|
||||
connection node_2;
|
||||
call mtr.add_suppression("WSREP: Ignoring server id for non bootstrap node");
|
||||
call mtr.add_suppression("Sending JOIN failed: ");
|
||||
|
|
|
@ -7,8 +7,9 @@ connection node_3;
|
|||
SET SESSION wsrep_on=OFF;
|
||||
DROP SCHEMA test;
|
||||
connection node_1;
|
||||
SET SESSION lc_messages='fr_FR';
|
||||
CREATE SCHEMA test;
|
||||
ERROR HY000: Can't create database 'test'; database exists
|
||||
ERROR HY000: Ne peut créer la base 'test'; elle existe déjà
|
||||
connection node_1;
|
||||
SET SESSION wsrep_sync_wait=0;
|
||||
connection node_2;
|
||||
|
|
|
@ -1,38 +1,31 @@
|
|||
!include ../galera_3nodes.cnf
|
||||
|
||||
[mysqld]
|
||||
loose-galera-gtid-consistency=1
|
||||
wsrep_sst_auth="root:"
|
||||
wsrep_sst_method=mariabackup
|
||||
log_slave_updates=ON
|
||||
log_bin=mariadb-bin-log
|
||||
binlog-format=row
|
||||
wsrep-gtid-mode=ON
|
||||
wsrep-debug=1
|
||||
gtid-strict-mode=1
|
||||
|
||||
[mysqld.1]
|
||||
wsrep-node-name="node1"
|
||||
wsrep_gtid_domain_id=1111
|
||||
gtid_domain_id=2
|
||||
server_id=10999
|
||||
wsrep_sst_auth="root:"
|
||||
wsrep_sst_method=mariabackup
|
||||
log_slave_updates=ON
|
||||
log_bin=mariadb-bin-log
|
||||
binlog-format=row
|
||||
wsrep-gtid-mode=ON
|
||||
wsrep_gtid_domain_id=1111
|
||||
|
||||
[mysqld.2]
|
||||
wsrep-node-name="node2"
|
||||
wsrep_gtid_domain_id=1112
|
||||
gtid_domain_id=3
|
||||
wsrep_sst_auth="root:"
|
||||
wsrep_sst_method=mariabackup
|
||||
log_slave_updates=ON
|
||||
log_bin=mariadb-bin-log
|
||||
binlog-format=row
|
||||
wsrep-gtid-mode=ON
|
||||
wsrep_gtid_domain_id=1112
|
||||
|
||||
[mysqld.3]
|
||||
wsrep-node-name="node3"
|
||||
wsrep_gtid_domain_id=1113
|
||||
gtid_domain_id=4
|
||||
wsrep_sst_auth="root:"
|
||||
wsrep_sst_method=mariabackup
|
||||
log_slave_updates=ON
|
||||
log_bin=mariadb-bin-log
|
||||
binlog-format=row
|
||||
wsrep-gtid-mode=ON
|
||||
wsrep_gtid_domain_id=1113
|
||||
|
||||
[sst]
|
||||
transferfmt=@ENV.MTR_GALERA_TFMT
|
||||
|
|
|
@ -2,7 +2,6 @@
|
|||
--source include/big_test.inc
|
||||
--source include/force_restart.inc
|
||||
|
||||
|
||||
#
|
||||
# Testing gtid consistency in 3 node cluster when nodes drop
|
||||
# and join back to cluster.
|
||||
|
@ -13,6 +12,13 @@
|
|||
# from the bootstrap node (node_1), and use it
|
||||
#
|
||||
--connect node_3, 127.0.0.1, root, , test, $NODE_MYPORT_3
|
||||
|
||||
# Save original auto_increment_offset values.
|
||||
--let $node_1=node_1
|
||||
--let $node_2=node_2
|
||||
--let $node_3=node_3
|
||||
--source ../galera/include/auto_increment_offset_save.inc
|
||||
|
||||
--connect node_2b, 127.0.0.1, root, , test, $NODE_MYPORT_2
|
||||
set wsrep_sync_wait=0;
|
||||
--connect node_1b, 127.0.0.1, root, , test, $NODE_MYPORT_1
|
||||
|
@ -98,10 +104,10 @@ show variables like '%gtid_binlog_pos%';
|
|||
# while node 2 is absent
|
||||
#
|
||||
--connection node_1
|
||||
CALL insert_row('node1', 500);
|
||||
CALL insert_row('node1', 100);
|
||||
|
||||
--connection node_3
|
||||
CALL insert_row('node3', 500);
|
||||
CALL insert_row('node3', 100);
|
||||
|
||||
CREATE TABLE t2(i int primary key) engine=innodb;
|
||||
|
||||
|
@ -225,12 +231,19 @@ show variables like '%gtid_binlog_pos%';
|
|||
# bootstap cluster in order node1 - node2 - node3
|
||||
# send some inserts and DDL after each node started
|
||||
#
|
||||
--sleep 5
|
||||
|
||||
--echo # Bootstrap from node_1
|
||||
--connection node_1
|
||||
--let $restart_parameters = --wsrep_new_cluster
|
||||
--source include/start_mysqld.inc
|
||||
|
||||
--let $wait_condition = SELECT VARIABLE_VALUE = 'ON' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_ready';
|
||||
--source include/wait_condition.inc
|
||||
--let $wait_condition = SELECT VARIABLE_VALUE = 'Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status';
|
||||
--source include/wait_condition.inc
|
||||
--let $wait_condition = SELECT VARIABLE_VALUE = 'Synced' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_state_comment'
|
||||
--source include/wait_condition.inc
|
||||
|
||||
show variables like 'wsrep_gtid_domain_id';
|
||||
show variables like '%gtid_binlog_pos%';
|
||||
|
||||
|
@ -243,6 +256,13 @@ ANALYZE TABLE t2;
|
|||
--let $_expect_file_name= $MYSQLTEST_VARDIR/tmp/mysqld.2.expect
|
||||
--source include/start_mysqld.inc
|
||||
|
||||
--let $wait_condition = SELECT VARIABLE_VALUE = 'ON' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_ready';
|
||||
--source include/wait_condition.inc
|
||||
--let $wait_condition = SELECT VARIABLE_VALUE = 'Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status';
|
||||
--source include/wait_condition.inc
|
||||
--let $wait_condition = SELECT VARIABLE_VALUE = 'Synced' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_state_comment'
|
||||
--source include/wait_condition.inc
|
||||
|
||||
#
|
||||
# connection node_1b may not be functional anymore, after node was
|
||||
# shutdown, open node_1c for controlling node 1 state
|
||||
|
@ -265,6 +285,14 @@ ALTER TABLE t2 ADD COLUMN (k int);
|
|||
--let $_expect_file_name= $MYSQLTEST_VARDIR/tmp/mysqld.3.expect
|
||||
--source include/start_mysqld.inc
|
||||
|
||||
--let $wait_condition = SELECT VARIABLE_VALUE = 'ON' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_ready';
|
||||
--source include/wait_condition.inc
|
||||
--let $wait_condition = SELECT VARIABLE_VALUE = 'Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status';
|
||||
--source include/wait_condition.inc
|
||||
--let $wait_condition = SELECT VARIABLE_VALUE = 'Synced' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_state_comment'
|
||||
--source include/wait_condition.inc
|
||||
|
||||
|
||||
--connection node_1c
|
||||
--echo # wait until all nodes are back in cluster
|
||||
--let $wait_condition = SELECT VARIABLE_VALUE = 3 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
||||
|
@ -335,12 +363,16 @@ DROP TABLE t2;
|
|||
DROP TABLE t3;
|
||||
|
||||
--connection node_3
|
||||
--let $wait_condition = SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't2'
|
||||
--let $wait_condition = SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't3'
|
||||
--source include/wait_condition.inc
|
||||
--connection node_2
|
||||
--let $wait_condition = SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't2'
|
||||
--let $wait_condition = SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't3'
|
||||
--source include/wait_condition.inc
|
||||
|
||||
# Restore original auto_increment_offset values.
|
||||
--let $galera_cluster_size=3
|
||||
--source ../galera/include/auto_increment_offset_restore.inc
|
||||
|
||||
--disconnect node_3
|
||||
--disconnect node_2b
|
||||
--disconnect node_1b
|
||||
|
|
|
@ -24,6 +24,9 @@ DROP SCHEMA test;
|
|||
|
||||
# This should fail on nodes 1 and 2 and succeed on node 3
|
||||
--connection node_1
|
||||
# Make error message on source node different by changing locale
|
||||
# It should still agree with node 2
|
||||
SET SESSION lc_messages='fr_FR';
|
||||
--error ER_DB_CREATE_EXISTS
|
||||
CREATE SCHEMA test;
|
||||
|
||||
|
|
38
mysql-test/suite/wsrep/r/MDEV-33997.result
Normal file
38
mysql-test/suite/wsrep/r/MDEV-33997.result
Normal file
|
@ -0,0 +1,38 @@
|
|||
SET SESSION wsrep_osu_method=RSU;
|
||||
SET autocommit=0;
|
||||
CREATE TABLE t (c INT) ENGINE=INNODB PARTITION BY KEY(c) PARTITIONS 2;
|
||||
INSERT INTO t VALUES (1);
|
||||
INSERT INTO t SELECT 1 ;
|
||||
COMMIT;
|
||||
SELECT * FROM t;
|
||||
c
|
||||
1
|
||||
1
|
||||
DROP TABLE t;
|
||||
SET autocommit=1;
|
||||
SET SESSION wsrep_osu_method=RSU;
|
||||
CREATE TABLE t (c INT) ENGINE=INNODB PARTITION BY KEY(c) PARTITIONS 2;
|
||||
INSERT INTO t SELECT 1 ;
|
||||
SELECT * FROM t;
|
||||
c
|
||||
1
|
||||
DROP TABLE t;
|
||||
SET autocommit=1;
|
||||
SET SESSION wsrep_osu_method=RSU;
|
||||
CREATE TABLE t (c INT) ENGINE=MYISAM PARTITION BY KEY(c) PARTITIONS 2;
|
||||
INSERT INTO t SELECT 1 ;
|
||||
ERROR 42000: This version of MariaDB doesn't yet support 'RSU on this table engine'
|
||||
SELECT * FROM t;
|
||||
c
|
||||
DROP TABLE t;
|
||||
SET SESSION wsrep_osu_method=RSU;
|
||||
SET autocommit=0;
|
||||
CREATE TABLE t (c INT) ENGINE=MYISAM PARTITION BY KEY(c) PARTITIONS 2;
|
||||
INSERT INTO t VALUES (1);
|
||||
INSERT INTO t SELECT 1 ;
|
||||
ERROR 42000: This version of MariaDB doesn't yet support 'RSU on this table engine'
|
||||
COMMIT;
|
||||
SELECT * FROM t;
|
||||
c
|
||||
1
|
||||
DROP TABLE t;
|
9
mysql-test/suite/wsrep/t/MDEV-33997.cnf
Normal file
9
mysql-test/suite/wsrep/t/MDEV-33997.cnf
Normal file
|
@ -0,0 +1,9 @@
|
|||
!include ../my.cnf
|
||||
|
||||
[mysqld.1]
|
||||
wsrep-on=ON
|
||||
binlog-format=ROW
|
||||
innodb-flush-log-at-trx-commit=1
|
||||
wsrep-cluster-address=gcomm://
|
||||
wsrep-provider=@ENV.WSREP_PROVIDER
|
||||
innodb-autoinc-lock-mode=2
|
4
mysql-test/suite/wsrep/t/MDEV-33997.combinations
Normal file
4
mysql-test/suite/wsrep/t/MDEV-33997.combinations
Normal file
|
@ -0,0 +1,4 @@
|
|||
[binlogon]
|
||||
log-bin
|
||||
|
||||
[binlogoff]
|
49
mysql-test/suite/wsrep/t/MDEV-33997.test
Normal file
49
mysql-test/suite/wsrep/t/MDEV-33997.test
Normal file
|
@ -0,0 +1,49 @@
|
|||
--source include/have_wsrep.inc
|
||||
--source include/have_innodb.inc
|
||||
--source include/have_wsrep_provider.inc
|
||||
--source include/have_partition.inc
|
||||
#
|
||||
# MDEV-33997: Assertion `((WSREP_PROVIDER_EXISTS_ && this->variables.wsrep_on) && wsrep_emulate_bin_log) || mysql_bin_log.is_open()' failed in int THD::binlog_write_row(TABLE*, bool, const uchar*)
|
||||
#
|
||||
SET SESSION wsrep_osu_method=RSU;
|
||||
SET autocommit=0;
|
||||
|
||||
CREATE TABLE t (c INT) ENGINE=INNODB PARTITION BY KEY(c) PARTITIONS 2;
|
||||
INSERT INTO t VALUES (1);
|
||||
INSERT INTO t SELECT 1 ;
|
||||
COMMIT;
|
||||
SELECT * FROM t;
|
||||
DROP TABLE t;
|
||||
|
||||
#
|
||||
# MDEV-27296 : Assertion `((thd && (WSREP_PROVIDER_EXISTS_ && thd->variables.wsrep_on)) && wsrep_emulate_bin_log) || mysql_bin_log.is_open()' failed
|
||||
# Second test case
|
||||
#
|
||||
SET autocommit=1;
|
||||
SET SESSION wsrep_osu_method=RSU;
|
||||
CREATE TABLE t (c INT) ENGINE=INNODB PARTITION BY KEY(c) PARTITIONS 2;
|
||||
INSERT INTO t SELECT 1 ;
|
||||
SELECT * FROM t;
|
||||
DROP TABLE t;
|
||||
|
||||
#
|
||||
# We should not allow RSU for MyISAM
|
||||
#
|
||||
SET autocommit=1;
|
||||
SET SESSION wsrep_osu_method=RSU;
|
||||
CREATE TABLE t (c INT) ENGINE=MYISAM PARTITION BY KEY(c) PARTITIONS 2;
|
||||
--error ER_NOT_SUPPORTED_YET
|
||||
INSERT INTO t SELECT 1 ;
|
||||
SELECT * FROM t;
|
||||
DROP TABLE t;
|
||||
|
||||
SET SESSION wsrep_osu_method=RSU;
|
||||
SET autocommit=0;
|
||||
|
||||
CREATE TABLE t (c INT) ENGINE=MYISAM PARTITION BY KEY(c) PARTITIONS 2;
|
||||
INSERT INTO t VALUES (1);
|
||||
--error ER_NOT_SUPPORTED_YET
|
||||
INSERT INTO t SELECT 1 ;
|
||||
COMMIT;
|
||||
SELECT * FROM t;
|
||||
DROP TABLE t;
|
|
@ -18,7 +18,7 @@
|
|||
|
||||
--perl
|
||||
use strict;
|
||||
my $wsrep_start_position = `grep 'WSREP: Recovered position:' $ENV{MYSQL_TMP_DIR}/galera_wsrep_recover.log | sed 's/.*WSREP\:\ Recovered\ position://' | sed 's/^[ \t]*//'`;
|
||||
my $wsrep_start_position = `grep -a 'WSREP: Recovered position:' $ENV{MYSQL_TMP_DIR}/galera_wsrep_recover.log | sed 's/.*WSREP\:\ Recovered\ position://' | sed 's/^[ \t]*//'`;
|
||||
chomp($wsrep_start_position);
|
||||
die if $wsrep_start_position eq '';
|
||||
open(FILE, ">", "$ENV{MYSQL_TMP_DIR}/galera_wsrep_start_position.inc") or die;
|
||||
|
|
|
@ -81,10 +81,10 @@ wsrep_recover_position() {
|
|||
# Parse server's error log for recovered position. The server prints
|
||||
# "..skipping position recovery.." if started without wsrep.
|
||||
|
||||
recovered_pos="$(grep 'WSREP: Recovered position:' $log_file)"
|
||||
recovered_pos="$(grep -a 'WSREP: Recovered position:' $log_file)"
|
||||
|
||||
if [ -z "$recovered_pos" ]; then
|
||||
skipped="$(grep WSREP $log_file | grep 'skipping position recovery')"
|
||||
skipped="$(grep -a WSREP $log_file | grep 'skipping position recovery')"
|
||||
if [ -z "$skipped" ]; then
|
||||
log "WSREP: Failed to recover position: '`cat $log_file`'"
|
||||
exit 1
|
||||
|
|
|
@ -260,9 +260,9 @@ wsrep_recover_position() {
|
|||
exit 1
|
||||
fi
|
||||
|
||||
local rp="$(grep 'WSREP: Recovered position:' $wr_logfile)"
|
||||
local rp="$(grep -a 'WSREP: Recovered position:' $wr_logfile)"
|
||||
if [ -z "$rp" ]; then
|
||||
local skipped="$(grep WSREP $wr_logfile | grep 'skipping position recovery')"
|
||||
local skipped="$(grep -a WSREP $wr_logfile | grep 'skipping position recovery')"
|
||||
if [ -z "$skipped" ]; then
|
||||
log_error "WSREP: Failed to recover position: '`cat $wr_logfile`'"
|
||||
ret=1
|
||||
|
|
|
@ -5964,13 +5964,15 @@ int Rows_log_event::do_apply_event(rpl_group_info *rgi)
|
|||
#ifdef WITH_WSREP
|
||||
if (WSREP(thd))
|
||||
{
|
||||
WSREP_WARN("BF applier failed to open_and_lock_tables: %u, fatal: %d "
|
||||
WSREP_WARN("BF applier thread=%lu failed to open_and_lock_tables for "
|
||||
"%s, fatal: %d "
|
||||
"wsrep = (exec_mode: %d conflict_state: %d seqno: %lld)",
|
||||
thd->get_stmt_da()->sql_errno(),
|
||||
thd->is_fatal_error,
|
||||
thd->wsrep_cs().mode(),
|
||||
thd->wsrep_trx().state(),
|
||||
(long long) wsrep_thd_trx_seqno(thd));
|
||||
thd_get_thread_id(thd),
|
||||
thd->get_stmt_da()->message(),
|
||||
thd->is_fatal_error,
|
||||
thd->wsrep_cs().mode(),
|
||||
thd->wsrep_trx().state(),
|
||||
wsrep_thd_trx_seqno(thd));
|
||||
}
|
||||
#endif /* WITH_WSREP */
|
||||
if (thd->is_error() &&
|
||||
|
|
|
@ -25,6 +25,10 @@
|
|||
#include "my_stacktrace.h"
|
||||
#include <source_revision.h>
|
||||
|
||||
#ifdef WITH_WSREP
|
||||
#include "wsrep_server_state.h"
|
||||
#endif /* WITH_WSREP */
|
||||
|
||||
#ifdef _WIN32
|
||||
#include <crtdbg.h>
|
||||
#include <direct.h>
|
||||
|
@ -222,6 +226,10 @@ extern "C" sig_handler handle_fatal_signal(int sig)
|
|||
"the equation.\n\n");
|
||||
}
|
||||
|
||||
#ifdef WITH_WSREP
|
||||
Wsrep_server_state::handle_fatal_signal();
|
||||
#endif /* WITH_WSREP */
|
||||
|
||||
#ifdef HAVE_STACKTRACE
|
||||
thd= current_thd;
|
||||
|
||||
|
|
|
@ -4704,30 +4704,39 @@ mysql_execute_command(THD *thd, bool is_called_from_prepared_stmt)
|
|||
#ifdef WITH_WSREP
|
||||
if (wsrep && !first_table->view)
|
||||
{
|
||||
bool is_innodb= first_table->table->file->partition_ht()->db_type == DB_TYPE_INNODB;
|
||||
|
||||
// For consistency check inserted table needs to be InnoDB
|
||||
if (!is_innodb && thd->wsrep_consistency_check != NO_CONSISTENCY_CHECK)
|
||||
const legacy_db_type db_type= first_table->table->file->partition_ht()->db_type;
|
||||
// For InnoDB we don't need to worry about anything here:
|
||||
if (db_type != DB_TYPE_INNODB)
|
||||
{
|
||||
push_warning_printf(thd, Sql_condition::WARN_LEVEL_WARN,
|
||||
HA_ERR_UNSUPPORTED,
|
||||
"Galera cluster does support consistency check only"
|
||||
" for InnoDB tables.");
|
||||
thd->wsrep_consistency_check= NO_CONSISTENCY_CHECK;
|
||||
}
|
||||
|
||||
// For !InnoDB we start TOI if it is not yet started and hope for the best
|
||||
if (!is_innodb && !wsrep_toi)
|
||||
{
|
||||
const legacy_db_type db_type= first_table->table->file->partition_ht()->db_type;
|
||||
|
||||
/* Currently we support TOI for MyISAM only. */
|
||||
if (db_type == DB_TYPE_MYISAM &&
|
||||
wsrep_check_mode(WSREP_MODE_REPLICATE_MYISAM))
|
||||
WSREP_TO_ISOLATION_BEGIN(first_table->db.str, first_table->table_name.str, NULL);
|
||||
// For consistency check inserted table needs to be InnoDB
|
||||
if (thd->wsrep_consistency_check != NO_CONSISTENCY_CHECK)
|
||||
{
|
||||
push_warning_printf(thd, Sql_condition::WARN_LEVEL_WARN,
|
||||
HA_ERR_UNSUPPORTED,
|
||||
"Galera cluster does support consistency check only"
|
||||
" for InnoDB tables.");
|
||||
thd->wsrep_consistency_check= NO_CONSISTENCY_CHECK;
|
||||
}
|
||||
/* Only TOI allowed to !InnoDB tables */
|
||||
if (wsrep_OSU_method_get(thd) != WSREP_OSU_TOI)
|
||||
{
|
||||
my_error(ER_NOT_SUPPORTED_YET, MYF(0), "RSU on this table engine");
|
||||
break;
|
||||
}
|
||||
// For !InnoDB we start TOI if it is not yet started and hope for the best
|
||||
if (!wsrep_toi)
|
||||
{
|
||||
/* Currently we support TOI for MyISAM only. */
|
||||
if ((db_type == DB_TYPE_MYISAM && wsrep_check_mode(WSREP_MODE_REPLICATE_MYISAM)) ||
|
||||
(db_type == DB_TYPE_ARIA && wsrep_check_mode(WSREP_MODE_REPLICATE_ARIA)))
|
||||
{
|
||||
WSREP_TO_ISOLATION_BEGIN(first_table->db.str, first_table->table_name.str, NULL);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif /* WITH_WSREP */
|
||||
|
||||
/*
|
||||
Only the INSERT table should be merged. Other will be handled by
|
||||
select.
|
||||
|
|
25
sql/table.cc
25
sql/table.cc
|
@ -281,17 +281,6 @@ const char *fn_frm_ext(const char *name)
|
|||
TABLE_CATEGORY get_table_category(const Lex_ident_db &db,
|
||||
const Lex_ident_table &name)
|
||||
{
|
||||
#ifdef WITH_WSREP
|
||||
if (db.str && db.streq(MYSQL_SCHEMA_NAME))
|
||||
{
|
||||
if (name.streq(Lex_ident_table{STRING_WITH_LEN(WSREP_STREAMING_TABLE)}) ||
|
||||
name.streq(Lex_ident_table{STRING_WITH_LEN(WSREP_CLUSTER_TABLE)}) ||
|
||||
name.streq(Lex_ident_table{STRING_WITH_LEN(WSREP_MEMBERS_TABLE)}))
|
||||
{
|
||||
return TABLE_CATEGORY_INFORMATION;
|
||||
}
|
||||
}
|
||||
#endif /* WITH_WSREP */
|
||||
if (is_infoschema_db(&db))
|
||||
return TABLE_CATEGORY_INFORMATION;
|
||||
|
||||
|
@ -313,6 +302,20 @@ TABLE_CATEGORY get_table_category(const Lex_ident_db &db,
|
|||
return TABLE_CATEGORY_LOG;
|
||||
}
|
||||
|
||||
#ifdef WITH_WSREP
|
||||
if (db.streq(WSREP_LEX_SCHEMA))
|
||||
{
|
||||
if(name.streq(WSREP_LEX_STREAMING))
|
||||
return TABLE_CATEGORY_INFORMATION;
|
||||
if (name.streq(WSREP_LEX_CLUSTER))
|
||||
return TABLE_CATEGORY_INFORMATION;
|
||||
if (name.streq(WSREP_LEX_MEMBERS))
|
||||
return TABLE_CATEGORY_INFORMATION;
|
||||
if (name.streq(WSREP_LEX_ALLOWLIST))
|
||||
return TABLE_CATEGORY_INFORMATION;
|
||||
}
|
||||
#endif /* WITH_WSREP */
|
||||
|
||||
return TABLE_CATEGORY_USER;
|
||||
}
|
||||
|
||||
|
|
|
@ -82,7 +82,9 @@ wsrep_get_apply_format(THD* thd)
|
|||
return thd->wsrep_rgi->rli->relay_log.description_event_for_exec;
|
||||
}
|
||||
|
||||
void wsrep_store_error(const THD* const thd, wsrep::mutable_buffer& dst)
|
||||
void wsrep_store_error(const THD* const thd,
|
||||
wsrep::mutable_buffer& dst,
|
||||
bool const include_msg)
|
||||
{
|
||||
Diagnostics_area::Sql_condition_iterator it=
|
||||
thd->get_stmt_da()->sql_conditions();
|
||||
|
@ -100,8 +102,16 @@ void wsrep_store_error(const THD* const thd, wsrep::mutable_buffer& dst)
|
|||
uint const err_code= cond->get_sql_errno();
|
||||
const char* const err_str= cond->get_message_text();
|
||||
|
||||
slider+= my_snprintf(slider, buf_end - slider, " %s, Error_code: %d;",
|
||||
err_str, err_code);
|
||||
if (include_msg)
|
||||
{
|
||||
slider+= snprintf(slider, buf_end - slider, " %s, Error_code: %d;",
|
||||
err_str, err_code);
|
||||
}
|
||||
else
|
||||
{
|
||||
slider+= snprintf(slider, buf_end - slider, " Error_code: %d;",
|
||||
err_code);
|
||||
}
|
||||
}
|
||||
|
||||
if (slider != dst.data())
|
||||
|
|
|
@ -35,7 +35,21 @@ int wsrep_apply_events(THD* thd,
|
|||
#define WSREP_ERR_FAILED 6 // Operation failed for some internal reason
|
||||
#define WSREP_ERR_ABORTED 7 // Operation was aborted externally
|
||||
|
||||
void wsrep_store_error(const THD* thd, wsrep::mutable_buffer& buf);
|
||||
/* Loops over THD diagnostic area and concatenates all error messages
|
||||
* and error codes to a single continuous buffer to create a unique
|
||||
* but consistent failure signature which provider can use for voting
|
||||
* between the nodes in the cluster.
|
||||
*
|
||||
* @param thd THD context
|
||||
* @param dst buffer to store the signature
|
||||
* @param include_msg whether to use MySQL error message in addition to
|
||||
* MySQL error code. Note that in the case of a TOI
|
||||
* operation the message may be not consistent between
|
||||
* the nodes e.g. due to a different client locale setting
|
||||
* and should be omitted */
|
||||
void wsrep_store_error(const THD* thd,
|
||||
wsrep::mutable_buffer& buf,
|
||||
bool include_msg);
|
||||
|
||||
class Format_description_log_event;
|
||||
void wsrep_set_apply_format(THD*, Format_description_log_event*);
|
||||
|
|
|
@ -123,14 +123,15 @@ static void wsrep_setup_uk_and_fk_checks(THD* thd)
|
|||
static int apply_events(THD* thd,
|
||||
Relay_log_info* rli,
|
||||
const wsrep::const_buffer& data,
|
||||
wsrep::mutable_buffer& err)
|
||||
wsrep::mutable_buffer& err,
|
||||
bool const include_msg)
|
||||
{
|
||||
int const ret= wsrep_apply_events(thd, rli, data.data(), data.size());
|
||||
if (ret || wsrep_thd_has_ignored_error(thd))
|
||||
{
|
||||
if (ret)
|
||||
{
|
||||
wsrep_store_error(thd, err);
|
||||
wsrep_store_error(thd, err, include_msg);
|
||||
}
|
||||
wsrep_dump_rbr_buf_with_header(thd, data.data(), data.size());
|
||||
}
|
||||
|
@ -427,7 +428,7 @@ int Wsrep_high_priority_service::apply_toi(const wsrep::ws_meta& ws_meta,
|
|||
#endif
|
||||
|
||||
thd->set_time();
|
||||
int ret= apply_events(thd, m_rli, data, err);
|
||||
int ret= apply_events(thd, m_rli, data, err, false);
|
||||
wsrep_thd_set_ignored_error(thd, false);
|
||||
trans_commit(thd);
|
||||
|
||||
|
@ -595,7 +596,7 @@ int Wsrep_applier_service::apply_write_set(const wsrep::ws_meta& ws_meta,
|
|||
#endif /* ENABLED_DEBUG_SYNC */
|
||||
|
||||
wsrep_setup_uk_and_fk_checks(thd);
|
||||
int ret= apply_events(thd, m_rli, data, err);
|
||||
int ret= apply_events(thd, m_rli, data, err, true);
|
||||
|
||||
thd->close_temporary_tables();
|
||||
if (!ret && !(ws_meta.flags() & wsrep::provider::flag::commit))
|
||||
|
@ -764,7 +765,7 @@ int Wsrep_replayer_service::apply_write_set(const wsrep::ws_meta& ws_meta,
|
|||
ws_meta,
|
||||
thd->wsrep_sr().fragments());
|
||||
}
|
||||
ret= ret || apply_events(thd, m_rli, data, err);
|
||||
ret= ret || apply_events(thd, m_rli, data, err, true);
|
||||
thd->close_temporary_tables();
|
||||
if (!ret && !(ws_meta.flags() & wsrep::provider::flag::commit))
|
||||
{
|
||||
|
|
|
@ -2895,7 +2895,10 @@ static void wsrep_TOI_end(THD *thd) {
|
|||
|
||||
if (thd->is_error() && !wsrep_must_ignore_error(thd))
|
||||
{
|
||||
wsrep_store_error(thd, err);
|
||||
/* use only error code, for the message can be inconsistent
|
||||
* between the nodes due to differing lc_message settings
|
||||
* in client session and server applier thread */
|
||||
wsrep_store_error(thd, err, false);
|
||||
}
|
||||
|
||||
int const ret= client_state.leave_toi_local(err);
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* Copyright (C) 2015-2022 Codership Oy <info@codership.com>
|
||||
/* Copyright (C) 2015-2023 Codership Oy <info@codership.com>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
|
@ -35,6 +35,18 @@
|
|||
#include <string>
|
||||
#include <sstream>
|
||||
|
||||
#define WSREP_SCHEMA "mysql"
|
||||
#define WSREP_STREAMING_TABLE "wsrep_streaming_log"
|
||||
#define WSREP_CLUSTER_TABLE "wsrep_cluster"
|
||||
#define WSREP_MEMBERS_TABLE "wsrep_cluster_members"
|
||||
#define WSREP_ALLOWLIST_TABLE "wsrep_allowlist"
|
||||
|
||||
LEX_CSTRING WSREP_LEX_SCHEMA= {STRING_WITH_LEN(WSREP_SCHEMA)};
|
||||
LEX_CSTRING WSREP_LEX_STREAMING= {STRING_WITH_LEN(WSREP_STREAMING_TABLE)};
|
||||
LEX_CSTRING WSREP_LEX_CLUSTER= {STRING_WITH_LEN(WSREP_CLUSTER_TABLE)};
|
||||
LEX_CSTRING WSREP_LEX_MEMBERS= {STRING_WITH_LEN(WSREP_MEMBERS_TABLE)};
|
||||
LEX_CSTRING WSREP_LEX_ALLOWLIST= {STRING_WITH_LEN(WSREP_ALLOWLIST_TABLE)};
|
||||
|
||||
const char* wsrep_sr_table_name_full= WSREP_SCHEMA "/" WSREP_STREAMING_TABLE;
|
||||
|
||||
static const std::string wsrep_schema_str= WSREP_SCHEMA;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* Copyright (C) 2015-2019 Codership Oy <info@codership.com>
|
||||
/* Copyright (C) 2015-2023 Codership Oy <info@codership.com>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
|
@ -33,12 +33,6 @@ struct TABLE_LIST;
|
|||
struct st_mysql_lex_string;
|
||||
typedef struct st_mysql_lex_string LEX_STRING;
|
||||
|
||||
#define WSREP_SCHEMA "mysql"
|
||||
#define WSREP_STREAMING_TABLE "wsrep_streaming_log"
|
||||
#define WSREP_CLUSTER_TABLE "wsrep_cluster"
|
||||
#define WSREP_MEMBERS_TABLE "wsrep_cluster_members"
|
||||
#define WSREP_ALLOWLIST_TABLE "wsrep_allowlist"
|
||||
|
||||
/** Name of the table in `wsrep_schema_str` used for storing streaming
|
||||
replication data. In an InnoDB full format, e.g. "database/tablename". */
|
||||
extern const char* wsrep_sr_table_name_full;
|
||||
|
@ -169,4 +163,10 @@ class Wsrep_schema
|
|||
|
||||
extern Wsrep_schema* wsrep_schema;
|
||||
|
||||
extern LEX_CSTRING WSREP_LEX_SCHEMA;
|
||||
extern LEX_CSTRING WSREP_LEX_STREAMING;
|
||||
extern LEX_CSTRING WSREP_LEX_CLUSTER;
|
||||
extern LEX_CSTRING WSREP_LEX_MEMBERS;
|
||||
extern LEX_CSTRING WSREP_LEX_ALLOWLIST;
|
||||
|
||||
#endif /* !WSREP_SCHEMA_H */
|
||||
|
|
|
@ -166,9 +166,16 @@ void Wsrep_server_service::bootstrap()
|
|||
wsrep_set_SE_checkpoint(wsrep::gtid::undefined(), wsrep_gtid_server.undefined());
|
||||
}
|
||||
|
||||
static std::atomic<bool> suppress_logging{false};
|
||||
void wsrep_suppress_error_logging() { suppress_logging= true; }
|
||||
|
||||
void Wsrep_server_service::log_message(enum wsrep::log::level level,
|
||||
const char* message)
|
||||
const char *message)
|
||||
{
|
||||
if (suppress_logging.load(std::memory_order_relaxed))
|
||||
{
|
||||
return;
|
||||
}
|
||||
switch (level)
|
||||
{
|
||||
case wsrep::log::debug:
|
||||
|
|
|
@ -99,4 +99,8 @@ class Wsrep_storage_service;
|
|||
Wsrep_storage_service*
|
||||
wsrep_create_storage_service(THD *orig_thd, const char *ctx);
|
||||
|
||||
/**
|
||||
Suppress all error logging from wsrep/Galera library.
|
||||
*/
|
||||
void wsrep_suppress_error_logging();
|
||||
#endif /* WSREP_SERVER_SERVICE */
|
||||
|
|
|
@ -19,6 +19,8 @@
|
|||
#include "wsrep_allowlist_service.h"
|
||||
#include "wsrep_binlog.h" /* init/deinit group commit */
|
||||
|
||||
#include "my_stacktrace.h" /* my_safe_printf_stderr() */
|
||||
|
||||
mysql_mutex_t LOCK_wsrep_server_state;
|
||||
mysql_cond_t COND_wsrep_server_state;
|
||||
|
||||
|
@ -97,3 +99,23 @@ void Wsrep_server_state::deinit_provider_services()
|
|||
m_provider_services= wsrep::provider::services();
|
||||
}
|
||||
|
||||
void Wsrep_server_state::handle_fatal_signal()
|
||||
{
|
||||
if (m_instance)
|
||||
{
|
||||
/* Galera background threads are still running and the logging may be
|
||||
relatively verbose in case of networking error. Silence all wsrep
|
||||
logging before shutting down networking to avoid garbling signal
|
||||
handler output. */
|
||||
my_safe_printf_stderr("WSREP: Suppressing further logging\n");
|
||||
wsrep_suppress_error_logging();
|
||||
|
||||
/* Shut down all communication with other nodes to fail silently. */
|
||||
my_safe_printf_stderr("WSREP: Shutting down network communications\n");
|
||||
if (m_instance->provider().set_node_isolation(
|
||||
wsrep::provider::node_isolation::isolated)) {
|
||||
my_safe_printf_stderr("WSREP: Galera library does not support node isolation\n");
|
||||
}
|
||||
my_safe_printf_stderr("\n");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -64,6 +64,8 @@ public:
|
|||
return m_provider_services;
|
||||
}
|
||||
|
||||
static void handle_fatal_signal();
|
||||
|
||||
private:
|
||||
Wsrep_server_state(const std::string& name,
|
||||
const std::string& incoming_address,
|
||||
|
|
|
@ -1943,7 +1943,8 @@ wait_signal:
|
|||
else
|
||||
{
|
||||
WSREP_WARN("Received unknown signal: '%s'", out);
|
||||
err = -EINVAL;
|
||||
/* since it is the end of the loop, we must set error code */
|
||||
err=-EINVAL;
|
||||
proc.wait();
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue