galera mtr tests: synchronization between branches and editions

This commit is contained in:
Julius Goryavsky 2025-04-02 03:51:44 +02:00
parent 5003dac220
commit b983a911e9
34 changed files with 83 additions and 81 deletions

View File

@ -95,7 +95,6 @@ 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;

View File

@ -26,3 +26,4 @@ COUNT(*) = 1
1
DROP TABLE t1;
connection node_1;
SET GLOBAL wsrep_mode = DEFAULT;

View File

@ -51,7 +51,7 @@ FOUND 1 /Desyncing and pausing the provider/ in mysqld.2.err
FOUND 1 /Resuming and resyncing the provider/ in mysqld.2.err
# Should return FOUND 1 because only last backup does not desync
FOUND 1 /Server not desynched from group because WSREP_MODE_BF_MARIABACKUP used./ in mysqld.2.err
SET GLOBAL wsrep_mode = "";
SET GLOBAL wsrep_mode = DEFAULT;
connection node_1;
DROP TABLE t;
disconnect node_2;

View File

@ -22,7 +22,7 @@ INSERT INTO t1 VALUES (2, "bbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
connection node_1a;
SET GLOBAL wsrep_provider_options = 'signal=gcs_core_after_frag_send';
connection node_1;
ERROR HY000: Got error 6 "No such device or address" during COMMIT
ERROR HY000: Error while appending streaming replication fragment(provider status: Not connected to Primary Component)
INSERT INTO t1 VALUES (3, "cccccaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
SELECT * FROM t1;
f1 f2

View File

@ -1,6 +1,6 @@
connection node_2;
connection node_1;
call mtr.add_suppression("WSREP: wsrep_mode = STRICT_REPLICATION enabled. Storage engine partition for table.*");
call mtr.add_suppression("WSREP: wsrep_mode = STRICT_REPLICATION enabled\\. Storage engine partition for table");
# wsrep-mode= DEFAULT
SET GLOBAL wsrep_mode = "";
SELECT @@wsrep_mode;

View File

@ -1,6 +1,6 @@
connection node_2;
connection node_1;
call mtr.add_suppression("WSREP: wsrep_mode = STRICT_REPLICATION enabled. Storage engine .*");
call mtr.add_suppression("WSREP: wsrep_mode = STRICT_REPLICATION enabled\\. Storage engine ");
CREATE TABLE t1(a int NOT NULL PRIMARY KEY, b varchar(50)) ENGINE=INNODB;
CREATE TABLE t2(a int NOT NULL PRIMARY KEY, b varchar(50)) ENGINE=MYISAM;
CREATE TABLE t3(a int NOT NULL PRIMARY KEY, b varchar(50)) ENGINE=ARIA;

View File

@ -1,6 +1,6 @@
connection node_2;
connection node_1;
call mtr.add_suppression("WSREP: wsrep_mode = REQUIRED_PRIMARY_KEY enabled. Table .*");
call mtr.add_suppression("WSREP: wsrep_mode = REQUIRED_PRIMARY_KEY enabled\\. Table ");
CREATE TABLE t1(a int, b varchar(50)) ENGINE=INNODB;
CREATE TABLE t2(a int, b varchar(50)) ENGINE=MYISAM;
CREATE TABLE t3(a int, b varchar(50)) ENGINE=MEMORY;

View File

@ -4,7 +4,7 @@ create table t1 (id serial, val int) engine=innodb;
create table t2 (id serial, val int) engine=aria;
insert into t1 values(1, 23);
insert into t2 values(2, 42);
call mtr.add_suppression("WSREP: Replication of non-transactional engines is experimental. Storage engine Aria for table 'test'.'t2' is not supported in Galera");
call mtr.add_suppression("WSREP: Replication of non-transactional engines is experimental\\. Storage engine Aria for table 'test'\\.'t2' is not supported in Galera");
begin;
update t1 set val=24 where id=1;
update t2 set val=41 where id=2;

View File

@ -10,6 +10,7 @@
# transaction in the MDL conflict handling code.
--source include/galera_cluster.inc
--source include/have_innodb.inc
--source include/have_debug_sync.inc
--source include/have_debug.inc

View File

@ -45,7 +45,6 @@ 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;

View File

@ -1,4 +1,5 @@
--source include/galera_cluster.inc
--source include/have_innodb.inc
--echo # On node_1
--connection node_1

View File

@ -1,4 +1,5 @@
--source include/galera_cluster.inc
--source include/have_innodb.inc
--source include/have_aria.inc
#
@ -35,7 +36,4 @@ SELECT COUNT(*) = 1 FROM t1;
DROP TABLE t1;
--connection node_1
--disable_query_log
SET GLOBAL wsrep_mode = DEFAULT;
--enable_query_log

View File

@ -6,10 +6,10 @@ wsrep_sst_auth="root:"
wsrep_debug=1
[mysqld.1]
wsrep_provider_options='base_port=@mysqld.1.#galera_port;gcache.size=1;pc.ignore_sb=true'
wsrep_provider_options='pc.ignore_sb=true;repl.causal_read_timeout=PT90S;base_port=@mysqld.1.#galera_port;evs.suspect_timeout=PT10S;evs.inactive_timeout=PT30S;evs.install_timeout=PT15S;pc.wait_prim_timeout=PT60S;gcache.size=1'
[mysqld.2]
wsrep_provider_options='base_port=@mysqld.2.#galera_port;gcache.size=1;pc.ignore_sb=true'
wsrep_provider_options='pc.ignore_sb=true;repl.causal_read_timeout=PT90S;base_port=@mysqld.2.#galera_port;evs.suspect_timeout=PT10S;evs.inactive_timeout=PT30S;evs.install_timeout=PT15S;pc.wait_prim_timeout=PT60S;gcache.size=1'
[sst]
transferfmt=@ENV.MTR_GALERA_TFMT

View File

@ -126,7 +126,7 @@ let SEARCH_PATTERN = Resuming and resyncing the provider;
let SEARCH_PATTERN = Server not desynched from group because WSREP_MODE_BF_MARIABACKUP used.;
--source include/search_pattern_in_file.inc
SET GLOBAL wsrep_mode = "";
SET GLOBAL wsrep_mode = DEFAULT;
--connection node_1
DROP TABLE t;

View File

@ -89,7 +89,7 @@ SET DEBUG_SYNC = "now SIGNAL continue_kill";
--reap
--connection node_2a
--error 0,1213,2013
--error 0,1213,2013,2026
select * from t1;
--connection node_2b
@ -130,7 +130,7 @@ SET DEBUG_SYNC = "now WAIT_FOR bwoc_reached";
SET DEBUG_SYNC = "now SIGNAL bwoc_continue";
--connection node_2a
--error 0,1213
--error 0,1213,2013,2026
--reap
--connection node_2

View File

@ -101,4 +101,3 @@ DROP TABLE tab;
DROP TABLE tab1;
DROP TABLE tab2;
DROP TABLE tab3;

View File

@ -3,7 +3,7 @@
--source include/have_innodb.inc
--source include/have_aria.inc
call mtr.add_suppression("WSREP: wsrep_mode = STRICT_REPLICATION enabled. Storage engine partition for table.*");
call mtr.add_suppression("WSREP: wsrep_mode = STRICT_REPLICATION enabled\\. Storage engine partition for table");
--echo # wsrep-mode= DEFAULT
SET GLOBAL wsrep_mode = "";

View File

@ -15,9 +15,10 @@
# In both cases apply flood control if >= 10 same warning
#
--source include/galera_cluster.inc
--source include/have_innodb.inc
--source include/have_aria.inc
call mtr.add_suppression("WSREP: wsrep_mode = STRICT_REPLICATION enabled. Storage engine .*");
call mtr.add_suppression("WSREP: wsrep_mode = STRICT_REPLICATION enabled\\. Storage engine ");
CREATE TABLE t1(a int NOT NULL PRIMARY KEY, b varchar(50)) ENGINE=INNODB;
CREATE TABLE t2(a int NOT NULL PRIMARY KEY, b varchar(50)) ENGINE=MYISAM;
@ -114,4 +115,3 @@ DROP TABLE t1,t2,t3,t4;
SET GLOBAL log_warnings=DEFAULT;
SET GLOBAL wsrep_mode=DEFAULT;
--disable_query_log

View File

@ -14,9 +14,10 @@
# In both cases apply flood control if >= 10 same warning
#
--source include/galera_cluster.inc
--source include/have_innodb.inc
--source include/have_aria.inc
call mtr.add_suppression("WSREP: wsrep_mode = REQUIRED_PRIMARY_KEY enabled. Table .*");
call mtr.add_suppression("WSREP: wsrep_mode = REQUIRED_PRIMARY_KEY enabled\\. Table ");
CREATE TABLE t1(a int, b varchar(50)) ENGINE=INNODB;
CREATE TABLE t2(a int, b varchar(50)) ENGINE=MYISAM;
@ -140,4 +141,3 @@ DROP TABLE t1,t2,t3,t4;
SET GLOBAL log_warnings=DEFAULT;
SET GLOBAL wsrep_mode=DEFAULT;
--disable_query_log

View File

@ -94,11 +94,13 @@ SELECT * FROM t1;
--eval SET GLOBAL wsrep_auto_increment_control = $auto_increment_control_orig
--eval SET GLOBAL auto_increment_increment = $auto_increment_increment_node1
--eval SET GLOBAL auto_increment_offset = $auto_increment_offset_node1
--disconnect node_1a
--connection node_2
--eval SET GLOBAL wsrep_auto_increment_control = $auto_increment_control_orig
--eval SET GLOBAL auto_increment_increment = $auto_increment_increment_node2
--eval SET GLOBAL auto_increment_offset = $auto_increment_offset_node2
--disconnect node_2a
--enable_query_log

View File

@ -3,7 +3,6 @@
#
--source include/galera_cluster.inc
--source include/have_innodb.inc
--source include/have_aria.inc
CREATE TABLE t1 (f1 INT PRIMARY KEY) Engine=Aria;

View File

@ -234,4 +234,3 @@ SET GLOBAL wsrep_mode = DEFAULT;
--connection node_2
SET GLOBAL wsrep_mode = DEFAULT;
--enable_query_log

View File

@ -57,9 +57,3 @@ SELECT @@wsrep_mode;
# reset
SET GLOBAL wsrep_mode=DEFAULT;

View File

@ -10,4 +10,3 @@ SELECT @@global.wsrep_strict_ddl;
SET @@global.wsrep_strict_ddl=OFF;
SELECT @@global.wsrep_mode;
SELECT @@global.wsrep_strict_ddl;

View File

@ -91,10 +91,6 @@ CALL mtr.add_suppression("WSREP: Vote 0 \\(success\\) on .* is inconsistent with
DROP TABLE t2;
--let $node_3=node_3
--let $auto_increment_offset_node_3 = 3;
--let $node_4=node_4
--let $auto_increment_offset_node_4 = 4;
--source suite/galera/include/auto_increment_offset_restore.inc
--disconnect node_3

View File

@ -16,7 +16,6 @@ CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB;
DROP TABLE t1;
SET GLOBAL wsrep_mode = default;
# MDEV-25698 SIGSEGV in wsrep_should_replicate_ddl
SET GLOBAL wsrep_mode = STRICT_REPLICATION;

View File

@ -1,4 +1,5 @@
--source include/galera_cluster.inc
--source include/have_innodb.inc
--source include/have_aria.inc
create table t1 (id serial, val int) engine=innodb;
@ -6,7 +7,8 @@ create table t2 (id serial, val int) engine=aria;
insert into t1 values(1, 23);
insert into t2 values(2, 42);
call mtr.add_suppression("WSREP: Replication of non-transactional engines is experimental. Storage engine Aria for table 'test'.'t2' is not supported in Galera");
call mtr.add_suppression("WSREP: Replication of non-transactional engines is experimental\\. Storage engine Aria for table 'test'\\.'t2' is not supported in Galera");
begin;
update t1 set val=24 where id=1;

View File

@ -1,4 +1,5 @@
--source include/galera_cluster.inc
--source include/have_innodb.inc
--source include/have_debug.inc
--source include/have_debug_sync.inc
--source include/big_test.inc

View File

@ -5,12 +5,12 @@ wsrep_sst_method=rsync
[mysqld.1]
wsrep_node_name='node.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;socket.dynamic=true'
wsrep_provider_options='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;socket.dynamic=true;repl.causal_read_timeout=PT90S;base_port=@mysqld.1.#galera_port;evs.suspect_timeout=PT10S;evs.inactive_timeout=PT30S;evs.install_timeout=PT15S;pc.wait_prim_timeout=PT60S;gcache.size=10M'
[mysqld.2]
wsrep_node_name='node.2'
wsrep_provider_options='base_port=@mysqld.2.#galera_port'
wsrep_provider_options='repl.causal_read_timeout=PT90S;base_port=@mysqld.2.#galera_port;evs.suspect_timeout=PT10S;evs.inactive_timeout=PT30S;evs.install_timeout=PT15S;pc.wait_prim_timeout=PT60S;gcache.size=10M'
[mysqld.3]
wsrep_node_name='node.3'
wsrep_provider_options='base_port=@mysqld.3.#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;socket.dynamic=true'
wsrep_provider_options='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;socket.dynamic=true;repl.causal_read_timeout=PT90S;base_port=@mysqld.3.#galera_port;evs.suspect_timeout=PT10S;evs.inactive_timeout=PT30S;evs.install_timeout=PT15S;pc.wait_prim_timeout=PT60S;gcache.size=10M'

View File

@ -14,7 +14,6 @@
--let $node_3 = node_3
--source ../galera/include/auto_increment_offset_save.inc
--connection node_1
--let $wait_condition = SELECT VARIABLE_VALUE = 'Synced' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_state_comment';
--source include/wait_condition.inc

View File

@ -45,7 +45,7 @@ SET SESSION wsrep_sync_wait = 0;
SET SESSION wsrep_sync_wait = DEFAULT;
SET DEBUG_SYNC = 'now SIGNAL continue';
connection node_2;
ERROR HY000: Got error 6 "No such device or address" during COMMIT
ERROR HY000: Error while appending streaming replication fragment(provider status: Not connected to Primary Component)
connection node_2a;
SET DEBUG_SYNC = 'RESET';
connection node_1a;

View File

@ -7774,6 +7774,7 @@ int handler::ha_write_row(const uchar *buf)
Log_func *log_func= Write_rows_log_event::binlog_row_logging_function;
error= binlog_log_row(table, 0, buf, log_func);
}
#ifdef WITH_WSREP
THD *thd= ha_thd();
if (WSREP_NNULL(thd) && table_share->tmp_table == NO_TMP_TABLE &&

View File

@ -2473,25 +2473,22 @@ bool wsrep_should_replicate_ddl(THD* thd, const handlerton *hton)
case DB_TYPE_MYISAM:
if (wsrep_check_mode(WSREP_MODE_REPLICATE_MYISAM))
return true;
else
WSREP_DEBUG("wsrep OSU failed for %s", wsrep_thd_query(thd));
break;
case DB_TYPE_ARIA:
if (wsrep_check_mode(WSREP_MODE_REPLICATE_ARIA))
return true;
break;
case DB_TYPE_PARTITION_DB:
/* In most cases this means we could not find out
table->file->partition_ht() */
return true;
break;
case DB_TYPE_ARIA:
if (wsrep_check_mode(WSREP_MODE_REPLICATE_ARIA))
return true;
else
WSREP_DEBUG("wsrep OSU failed for %s", wsrep_thd_query(thd));
break;
default:
WSREP_DEBUG("wsrep OSU failed for %s", wsrep_thd_query(thd));
break;
}
WSREP_DEBUG("wsrep OSU failed for %s", wsrep_thd_query(thd));
/* wsrep_mode = STRICT_REPLICATION, treat as error */
my_error(ER_GALERA_REPLICATION_NOT_SUPPORTED, MYF(0));
push_warning_printf(thd, Sql_condition::WARN_LEVEL_WARN,
@ -2506,15 +2503,14 @@ bool wsrep_should_replicate_ddl_iterate(THD* thd, const TABLE_LIST* table_list)
{
for (const TABLE_LIST* it= table_list; it; it= it->next_global)
{
if (it->table && !it->table_function)
const TABLE* table= it->table;
if (table && !it->table_function)
{
/* If this is partitioned table we need to find out
implementing storage engine handlerton.
*/
const handlerton *ht= it->table->file->partition_ht() ?
it->table->file->partition_ht() :
it->table->s->db_type();
const handlerton *ht= table->file->partition_ht();
if (!ht) ht= table->s->db_type();
if (!wsrep_should_replicate_ddl(thd, ht))
return false;
}
@ -3208,6 +3204,7 @@ void wsrep_handle_mdl_conflict(MDL_context *requestor_ctx,
THD *request_thd= requestor_ctx->get_thd();
mysql_mutex_lock(&request_thd->LOCK_thd_data);
if (wsrep_thd_is_toi(request_thd) ||
wsrep_thd_is_applying(request_thd))
{

View File

@ -237,25 +237,13 @@ static inline void wsrep_override_error(THD* thd,
wsrep::client_error ce,
enum wsrep::provider::status status)
{
DBUG_ASSERT(ce != wsrep::e_success);
switch (ce)
{
case wsrep::e_error_during_commit:
if (status == wsrep::provider::error_size_exceeded)
wsrep_override_error(thd, ER_UNKNOWN_ERROR, "Maximum writeset size exceeded");
else
wsrep_override_error(thd, ER_ERROR_DURING_COMMIT, 0, status);
break;
case wsrep::e_deadlock_error:
wsrep_override_error(thd, ER_LOCK_DEADLOCK);
break;
case wsrep::e_interrupted_error:
wsrep_override_error(thd, ER_QUERY_INTERRUPTED);
break;
case wsrep::e_size_exceeded_error:
DBUG_ASSERT(ce != wsrep::e_success);
switch (ce)
{
case wsrep::e_error_during_commit:
if (status == wsrep::provider::error_size_exceeded)
wsrep_override_error(thd, ER_UNKNOWN_ERROR, "Maximum writeset size exceeded");
break;
case wsrep::e_append_fragment_error:
else
/* TODO: Figure out better error number */
if (status)
wsrep_override_error(thd, ER_ERROR_DURING_COMMIT,
@ -265,17 +253,45 @@ static inline void wsrep_override_error(THD* thd,
else
wsrep_override_error(thd, ER_ERROR_DURING_COMMIT,
"Error while appending streaming replication fragment");
break;
case wsrep::e_not_supported_error:
wsrep_override_error(thd, ER_NOT_SUPPORTED_YET);
break;
case wsrep::e_timeout_error:
wsrep_override_error(thd, ER_LOCK_WAIT_TIMEOUT);
break;
case wsrep::e_deadlock_error:
switch (thd->lex->sql_command)
{
case SQLCOM_XA_END:
case SQLCOM_XA_PREPARE:
wsrep_override_error(thd, ER_XA_RBDEADLOCK);
break;
default:
wsrep_override_error(thd, ER_UNKNOWN_ERROR);
wsrep_override_error(thd, ER_LOCK_DEADLOCK);
break;
}
break;
case wsrep::e_interrupted_error:
wsrep_override_error(thd, ER_QUERY_INTERRUPTED);
break;
case wsrep::e_size_exceeded_error:
wsrep_override_error(thd, ER_UNKNOWN_ERROR, "Maximum writeset size exceeded");
break;
case wsrep::e_append_fragment_error:
/* TODO: Figure out better error number */
if (status)
wsrep_override_error(thd, ER_ERROR_DURING_COMMIT,
"Error while appending streaming replication fragment"
"(provider status: %s)",
wsrep::provider::to_string(status).c_str());
else
wsrep_override_error(thd, ER_ERROR_DURING_COMMIT,
"Error while appending streaming replication fragment");
break;
case wsrep::e_not_supported_error:
wsrep_override_error(thd, ER_NOT_SUPPORTED_YET);
break;
case wsrep::e_timeout_error:
wsrep_override_error(thd, ER_LOCK_WAIT_TIMEOUT);
break;
default:
wsrep_override_error(thd, ER_UNKNOWN_ERROR);
}
}
/**