mirror of
https://github.com/MariaDB/server.git
synced 2025-07-07 06:01:31 +03:00
Merged revision 3471, 3472 & 3473 from maria-5.5-galera.
This commit is contained in:
@ -98,6 +98,11 @@ static struct my_option my_long_options[] =
|
|||||||
{0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}
|
{0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void cleanup_and_exit(int exit_code)
|
||||||
|
{
|
||||||
|
my_end(0);
|
||||||
|
exit(exit_code);
|
||||||
|
}
|
||||||
|
|
||||||
static void usage(my_bool version)
|
static void usage(my_bool version)
|
||||||
{
|
{
|
||||||
@ -112,7 +117,7 @@ static void usage(my_bool version)
|
|||||||
my_print_default_files(config_file);
|
my_print_default_files(config_file);
|
||||||
my_print_variables(my_long_options);
|
my_print_variables(my_long_options);
|
||||||
printf("\nExample usage:\n%s --defaults-file=example.cnf client client-server mysql\n", my_progname);
|
printf("\nExample usage:\n%s --defaults-file=example.cnf client client-server mysql\n", my_progname);
|
||||||
exit(0);
|
cleanup_and_exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -125,7 +130,7 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
|
|||||||
opt_defaults_file_used= 1;
|
opt_defaults_file_used= 1;
|
||||||
break;
|
break;
|
||||||
case 'n':
|
case 'n':
|
||||||
exit(0);
|
cleanup_and_exit(0);
|
||||||
case 'I':
|
case 'I':
|
||||||
case '?':
|
case '?':
|
||||||
usage(0);
|
usage(0);
|
||||||
@ -174,7 +179,7 @@ int main(int argc, char **argv)
|
|||||||
|
|
||||||
/* Check out the args */
|
/* Check out the args */
|
||||||
if (get_options(&argc,&argv))
|
if (get_options(&argc,&argv))
|
||||||
exit(1);
|
cleanup_and_exit(1);
|
||||||
|
|
||||||
nargs= argc + 1;
|
nargs= argc + 1;
|
||||||
if (opt_mysqld)
|
if (opt_mysqld)
|
||||||
|
10
mysql-test/include/galera_cluster.inc
Normal file
10
mysql-test/include/galera_cluster.inc
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
# galera_cluster.inc
|
||||||
|
# ==================
|
||||||
|
#
|
||||||
|
# Description
|
||||||
|
# -----------
|
||||||
|
# Configure galera cluster with 2 nodes.
|
||||||
|
#
|
||||||
|
|
||||||
|
--let $galera_cluster_size = 2
|
||||||
|
--source include/galera_init.inc
|
45
mysql-test/include/galera_connect.inc
Normal file
45
mysql-test/include/galera_connect.inc
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
# galera_connect.inc
|
||||||
|
# ==================
|
||||||
|
#
|
||||||
|
# Description
|
||||||
|
# -----------
|
||||||
|
# Open a connection to the specified server number ($galera_server_number).
|
||||||
|
# The connection itself would be identified by $galera_connection_name.
|
||||||
|
#
|
||||||
|
# Parameters
|
||||||
|
# ----------
|
||||||
|
# $galera_connection_name
|
||||||
|
# Name of the resulting connection.
|
||||||
|
#
|
||||||
|
# $galera_server_number
|
||||||
|
# Sequence number of the node in the galera cluster.
|
||||||
|
#
|
||||||
|
# $galera_debug
|
||||||
|
# Print debug information.
|
||||||
|
#
|
||||||
|
|
||||||
|
if (!$galera_connection_name)
|
||||||
|
{
|
||||||
|
--die ERROR IN TEST: $galera_connection_name must be set before sourcing include/galera_connect.inc
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$galera_server_number)
|
||||||
|
{
|
||||||
|
--die ERROR IN TEST: $galera_server_number must be set before sourcing include/galera_connect.inc
|
||||||
|
}
|
||||||
|
|
||||||
|
--let $_galera_port= \$NODE_MYPORT_$galera_server_number
|
||||||
|
if (!$_galera_port)
|
||||||
|
{
|
||||||
|
--echo Bug in test case: '\$NODE_MYPORT_$galera_server_number' not initialized. Check the test's .cfg file.
|
||||||
|
--die Not all NODE_MYPORT_* environment variables are setup correctly.
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($galera_debug)
|
||||||
|
{
|
||||||
|
--echo connect($galera_connection_name,127.0.0.1,root,,test,$_galera_port,)
|
||||||
|
}
|
||||||
|
|
||||||
|
# Open a connection
|
||||||
|
--connect($galera_connection_name,127.0.0.1,root,,test,$_galera_port,)
|
||||||
|
|
100
mysql-test/include/galera_diff.inc
Normal file
100
mysql-test/include/galera_diff.inc
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
# galera_diff.inc
|
||||||
|
# ===============
|
||||||
|
#
|
||||||
|
# Description
|
||||||
|
# -----------
|
||||||
|
# Compare the output of the given statement on all the nodes of the cluster.
|
||||||
|
#
|
||||||
|
# Parameters
|
||||||
|
# ----------
|
||||||
|
# $galera_diff_statement
|
||||||
|
# Statement for which the output would be compared.
|
||||||
|
#
|
||||||
|
# $galera_diff_database
|
||||||
|
# Database against which the above statement would be executed.
|
||||||
|
# (Default : test)
|
||||||
|
#
|
||||||
|
# $galera_diff_servers
|
||||||
|
# Comma separated list of servers to executed the diff statement on. If not
|
||||||
|
# set, a list of servers will be generated based on $galera_cluster_size.
|
||||||
|
#
|
||||||
|
# $galerra_debug
|
||||||
|
# Print debug information.
|
||||||
|
#
|
||||||
|
|
||||||
|
if (!$galera_diff_statement)
|
||||||
|
{
|
||||||
|
--die ERROR IN TEST: $galera_diff_statement must be set before sourcing include/galera_diff.inc
|
||||||
|
}
|
||||||
|
|
||||||
|
--let $_galera_diff_database = $galera_diff_database
|
||||||
|
if (!$_galera_diff_database)
|
||||||
|
{
|
||||||
|
--let $_galera_diff_database = test
|
||||||
|
}
|
||||||
|
|
||||||
|
--let $_galera_diff_servers= $galera_diff_servers
|
||||||
|
if (!$_galera_diff_servers)
|
||||||
|
{
|
||||||
|
--let $_i= $galera_cluster_size
|
||||||
|
--let $_galera_diff_servers=
|
||||||
|
while ($_i)
|
||||||
|
{
|
||||||
|
--let $_galera_diff_servers= $_i,$_galera_diff_servers
|
||||||
|
--dec $_i
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ($galera_debug)
|
||||||
|
{
|
||||||
|
--echo \$galera_diff_servers= '$_galera_diff_servers'
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$galera_debug)
|
||||||
|
{
|
||||||
|
--disable_query_log
|
||||||
|
}
|
||||||
|
|
||||||
|
# Generate file containing $galera_diff_statement. We don't pass the
|
||||||
|
# statement on the command line, because it would be subject to shell
|
||||||
|
# substitutions.
|
||||||
|
--let $write_to_file= GENERATE
|
||||||
|
--let $write_var= $galera_diff_statement
|
||||||
|
--source include/write_var_to_file.inc
|
||||||
|
--let $_galera_diff_statement_file= $write_to_file
|
||||||
|
|
||||||
|
if (!$galera_debug)
|
||||||
|
{
|
||||||
|
--enable_query_log
|
||||||
|
}
|
||||||
|
|
||||||
|
# Compare all servers.
|
||||||
|
--let $_galera_diff_first= 1
|
||||||
|
while ($_galera_diff_servers)
|
||||||
|
{
|
||||||
|
# Set $_galera_diff_server_i to the first number in the list
|
||||||
|
--let $_galera_diff_server_i= `SELECT SUBSTRING_INDEX('$_galera_diff_servers', ',', 1)`
|
||||||
|
# Remove $_galera_diff_server_i from the list
|
||||||
|
--let $_galera_diff_servers= `SELECT SUBSTRING('$_galera_diff_servers', LENGTH('$_galera_diff_server_i') + 2)`
|
||||||
|
|
||||||
|
# Execute statement
|
||||||
|
--let $_galera_diff_file= $MYSQLTEST_VARDIR/tmp/_galera_diff_server-$_galera_diff_server_i.tmp
|
||||||
|
--exec $MYSQL --defaults-group-suffix=.$_galera_diff_server_i $_galera_diff_database < $_galera_diff_statement_file > $_galera_diff_file
|
||||||
|
|
||||||
|
# Compare
|
||||||
|
if (!$_galera_diff_first)
|
||||||
|
{
|
||||||
|
if ($galera_debug)
|
||||||
|
{
|
||||||
|
--echo diffing $_galera_diff_file and $_galera_diff_prev_file
|
||||||
|
}
|
||||||
|
--diff_files $_galera_diff_file $_galera_diff_prev_file
|
||||||
|
--remove_file $_galera_diff_prev_file
|
||||||
|
}
|
||||||
|
--let $_galera_diff_prev_file= $_galera_diff_file
|
||||||
|
--let $_galera_diff_first= 0
|
||||||
|
}
|
||||||
|
|
||||||
|
# Cleanup
|
||||||
|
--remove_file $_galera_diff_prev_file
|
||||||
|
--remove_file $_galera_diff_statement_file
|
||||||
|
|
25
mysql-test/include/galera_end.inc
Normal file
25
mysql-test/include/galera_end.inc
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
# galera_end.inc
|
||||||
|
# ==============
|
||||||
|
#
|
||||||
|
# Description
|
||||||
|
# -----------
|
||||||
|
# Closes the connections opened via include/galera_init.inc
|
||||||
|
#
|
||||||
|
# Parameters
|
||||||
|
# ----------
|
||||||
|
# $galera_cluster_size
|
||||||
|
# Number of nodes in the cluster.
|
||||||
|
#
|
||||||
|
|
||||||
|
--let $_galera_node= $galera_cluster_size
|
||||||
|
|
||||||
|
while ($_galera_node)
|
||||||
|
{
|
||||||
|
if ($galera_debug)
|
||||||
|
{
|
||||||
|
--echo Disconnecting node_$_galera_node
|
||||||
|
}
|
||||||
|
--disconnect node_$_galera_node
|
||||||
|
--dec $_galera_node
|
||||||
|
}
|
||||||
|
|
26
mysql-test/include/galera_init.inc
Normal file
26
mysql-test/include/galera_init.inc
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
# galera_init.inc
|
||||||
|
# ===============
|
||||||
|
#
|
||||||
|
# Description
|
||||||
|
# -----------
|
||||||
|
# Set up a Galera cluster with $wsrep_cluster_size nodes.
|
||||||
|
#
|
||||||
|
# Parameters
|
||||||
|
# ----------
|
||||||
|
# $galera_cluster_size
|
||||||
|
# Number of nodes in the cluster.
|
||||||
|
#
|
||||||
|
|
||||||
|
--source include/have_wsrep_enabled.inc
|
||||||
|
|
||||||
|
--let $_galera_node= $galera_cluster_size
|
||||||
|
|
||||||
|
while ($_galera_node)
|
||||||
|
{
|
||||||
|
--let $galera_connection_name= node_$_galera_node
|
||||||
|
--let $galera_server_number= $_galera_node
|
||||||
|
--source include/galera_connect.inc
|
||||||
|
|
||||||
|
--dec $_galera_node
|
||||||
|
}
|
||||||
|
|
@ -1,4 +1,8 @@
|
|||||||
-- require r/have_wsrep.require
|
# To be used in a test which requires server to be compiled with wsrep support
|
||||||
disable_query_log;
|
# (-DWITH_WSREP=ON) and wsrep plugin is ACTIVE.
|
||||||
show variables like 'wsrep_on';
|
|
||||||
enable_query_log;
|
if (`SELECT COUNT(*)=0 FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME = 'wsrep' AND PLUGIN_STATUS='ACTIVE'`)
|
||||||
|
{
|
||||||
|
--skip Test required wsrep plugin.
|
||||||
|
}
|
||||||
|
|
||||||
|
9
mysql-test/include/have_wsrep_enabled.inc
Normal file
9
mysql-test/include/have_wsrep_enabled.inc
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
# To be used in a test which requires wsrep plugin to be ACTIVE and enabled
|
||||||
|
# (i.e. wsrep_on=ON). It includes have_wsrep.inc.
|
||||||
|
|
||||||
|
--source include/have_wsrep.inc
|
||||||
|
|
||||||
|
--require r/have_wsrep.require
|
||||||
|
disable_query_log;
|
||||||
|
SHOW VARIABLES LIKE 'wsrep_on';
|
||||||
|
enable_query_log;
|
@ -226,6 +226,14 @@ INSERT INTO global_suppressions VALUES
|
|||||||
("Slave I/O: Notifying master by SET @master_binlog_checksum= @@global.binlog_checksum failed with error.*"),
|
("Slave I/O: Notifying master by SET @master_binlog_checksum= @@global.binlog_checksum failed with error.*"),
|
||||||
("Slave I/O: Setting master-side filtering of @@skip_replication failed with error:.*"),
|
("Slave I/O: Setting master-side filtering of @@skip_replication failed with error:.*"),
|
||||||
("Slave I/O: Setting @mariadb_slave_capability failed with error:.*"),
|
("Slave I/O: Setting @mariadb_slave_capability failed with error:.*"),
|
||||||
|
|
||||||
|
/*
|
||||||
|
Galera-related warnings.
|
||||||
|
*/
|
||||||
|
("WSREP: Could not open saved state file for reading: .*"),
|
||||||
|
("WSREP: last inactive check more than .* skipping check"),
|
||||||
|
("WSREP: Gap in state sequence. Need state transfer."),
|
||||||
|
("WSREP: Failed to prepare for incremental state transfer: .*"),
|
||||||
("THE_LAST_SUPPRESSION")||
|
("THE_LAST_SUPPRESSION")||
|
||||||
|
|
||||||
|
|
||||||
|
7
mysql-test/include/not_wsrep.inc
Normal file
7
mysql-test/include/not_wsrep.inc
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
# To be used in a test which should be skipped if server is compiled with wsrep
|
||||||
|
# support (-DWITH_WSREP=ON) and wsrep plugin is ACTIVE.
|
||||||
|
|
||||||
|
-- require r/not_wsrep.require
|
||||||
|
disable_query_log;
|
||||||
|
SELECT VERSION() LIKE '%wsrep%' AS 'HAVE_WSREP';
|
||||||
|
enable_query_log;
|
@ -862,6 +862,8 @@ sub collect_one_test_case {
|
|||||||
# Suite has no config, autodetect which one to use
|
# Suite has no config, autodetect which one to use
|
||||||
if ($tinfo->{rpl_test}) {
|
if ($tinfo->{rpl_test}) {
|
||||||
$config= "suite/rpl/my.cnf";
|
$config= "suite/rpl/my.cnf";
|
||||||
|
} elsif ($tinfo->{galera_test}) {
|
||||||
|
$config= "suite/galera/my.cnf";
|
||||||
} else {
|
} else {
|
||||||
$config= "include/default_my.cnf";
|
$config= "include/default_my.cnf";
|
||||||
}
|
}
|
||||||
@ -982,6 +984,7 @@ my $tags_map= {'big_test' => ['big_test', 1],
|
|||||||
'master-slave' => ['rpl_test', 1],
|
'master-slave' => ['rpl_test', 1],
|
||||||
'ndb_master-slave' => ['rpl_test', 1, 'ndb_test', 1],
|
'ndb_master-slave' => ['rpl_test', 1, 'ndb_test', 1],
|
||||||
'long_test' => ['long_test', 1],
|
'long_test' => ['long_test', 1],
|
||||||
|
'galera_init' => ['galera_test', 1],
|
||||||
};
|
};
|
||||||
my $tags_regex_string= join('|', keys %$tags_map);
|
my $tags_regex_string= join('|', keys %$tags_map);
|
||||||
my $tags_regex= qr:include/($tags_regex_string)\.inc:o;
|
my $tags_regex= qr:include/($tags_regex_string)\.inc:o;
|
||||||
|
@ -4832,6 +4832,9 @@ sub extract_warning_lines ($$) {
|
|||||||
qr|Plugin 'FEEDBACK' registration as a INFORMATION SCHEMA failed|,
|
qr|Plugin 'FEEDBACK' registration as a INFORMATION SCHEMA failed|,
|
||||||
qr|'log-bin-use-v1-row-events' is MySQL 5.6 compatible option|,
|
qr|'log-bin-use-v1-row-events' is MySQL 5.6 compatible option|,
|
||||||
qr|InnoDB: Setting thread \d+ nice to \d+ failed, current nice \d+, errno 13|, # setpriority() fails under valgrind
|
qr|InnoDB: Setting thread \d+ nice to \d+ failed, current nice \d+, errno 13|, # setpriority() fails under valgrind
|
||||||
|
# Galera-related warnings.
|
||||||
|
qr|WSREP:.*down context.*|,
|
||||||
|
qr|WSREP: Failed to send state UUID:.*|,
|
||||||
);
|
);
|
||||||
|
|
||||||
my $matched_lines= [];
|
my $matched_lines= [];
|
||||||
|
2
mysql-test/r/not_wsrep.require
Normal file
2
mysql-test/r/not_wsrep.require
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
HAVE_WSREP
|
||||||
|
0
|
21
mysql-test/suite/galera/galera_2nodes.cnf
Normal file
21
mysql-test/suite/galera/galera_2nodes.cnf
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
# Use default setting for mysqld processes
|
||||||
|
!include include/default_mysqld.cnf
|
||||||
|
|
||||||
|
[mysqld.1]
|
||||||
|
binlog-format=row
|
||||||
|
wsrep_provider=/usr/lib/libgalera_smm.so
|
||||||
|
wsrep_cluster_address='gcomm://'
|
||||||
|
|
||||||
|
[mysqld.2]
|
||||||
|
binlog-format=row
|
||||||
|
wsrep_provider=/usr/lib/libgalera_smm.so
|
||||||
|
wsrep_cluster_address='gcomm://127.0.0.1:4567'
|
||||||
|
wsrep_provider_options='gmcast.listen_addr=tcp://127.0.0.1:4568'
|
||||||
|
|
||||||
|
[ENV]
|
||||||
|
NODE_MYPORT_1= @mysqld.1.port
|
||||||
|
NODE_MYSOCK_1= @mysqld.1.socket
|
||||||
|
|
||||||
|
NODE_MYPORT_2= @mysqld.2.port
|
||||||
|
NODE_MYSOCK_2= @mysqld.2.socket
|
||||||
|
|
1
mysql-test/suite/galera/my.cnf
Normal file
1
mysql-test/suite/galera/my.cnf
Normal file
@ -0,0 +1 @@
|
|||||||
|
!include galera_2nodes.cnf
|
30
mysql-test/suite/galera/r/basic.result
Normal file
30
mysql-test/suite/galera/r/basic.result
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
USE test;
|
||||||
|
CREATE TABLE t1(c1 INT PRIMARY KEY) ENGINE=INNODB;
|
||||||
|
INSERT INTO t1 VALUES (1), (2), (3), (4), (5);
|
||||||
|
SELECT * FROM t1;
|
||||||
|
c1
|
||||||
|
1
|
||||||
|
2
|
||||||
|
3
|
||||||
|
4
|
||||||
|
5
|
||||||
|
|
||||||
|
# On node_1
|
||||||
|
SELECT * FROM test.t1;
|
||||||
|
c1
|
||||||
|
1
|
||||||
|
2
|
||||||
|
3
|
||||||
|
4
|
||||||
|
5
|
||||||
|
|
||||||
|
# On node_2
|
||||||
|
SELECT * FROM test.t1;
|
||||||
|
c1
|
||||||
|
1
|
||||||
|
2
|
||||||
|
3
|
||||||
|
4
|
||||||
|
5
|
||||||
|
DROP TABLE t1;
|
||||||
|
# End of test
|
47
mysql-test/suite/galera/r/unique_key.result
Normal file
47
mysql-test/suite/galera/r/unique_key.result
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
#
|
||||||
|
# MDEV#5552 Deadlock when inserting NULL column value in column with
|
||||||
|
# UNIQUE index
|
||||||
|
#
|
||||||
|
USE test;
|
||||||
|
|
||||||
|
# On node_1
|
||||||
|
CREATE TABLE t1(c1 INT DEFAULT NULL, UNIQUE KEY c1(c1)) ENGINE=INNODB;
|
||||||
|
INSERT INTO t1 VALUES (NULL);
|
||||||
|
INSERT INTO t1 VALUES (NULL);
|
||||||
|
SELECT * FROM test.t1;
|
||||||
|
c1
|
||||||
|
NULL
|
||||||
|
NULL
|
||||||
|
|
||||||
|
# On node_2
|
||||||
|
SELECT * FROM test.t1;
|
||||||
|
c1
|
||||||
|
NULL
|
||||||
|
NULL
|
||||||
|
|
||||||
|
# On node_1
|
||||||
|
INSERT INTO t1 VALUES (1);
|
||||||
|
UPDATE t1 SET c1=NULL WHERE c1=1;
|
||||||
|
SELECT * FROM test.t1;
|
||||||
|
c1
|
||||||
|
NULL
|
||||||
|
NULL
|
||||||
|
NULL
|
||||||
|
|
||||||
|
# On node_2
|
||||||
|
SELECT * FROM test.t1;
|
||||||
|
c1
|
||||||
|
NULL
|
||||||
|
NULL
|
||||||
|
NULL
|
||||||
|
|
||||||
|
# On node_1
|
||||||
|
DELETE FROM t1 WHERE c1<=>NULL;
|
||||||
|
SELECT * FROM test.t1;
|
||||||
|
c1
|
||||||
|
|
||||||
|
# On node_2
|
||||||
|
SELECT * FROM test.t1;
|
||||||
|
c1
|
||||||
|
DROP TABLE t1;
|
||||||
|
# End of test
|
26
mysql-test/suite/galera/t/basic.test
Normal file
26
mysql-test/suite/galera/t/basic.test
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
--source include/galera_cluster.inc
|
||||||
|
--source include/have_innodb.inc
|
||||||
|
|
||||||
|
USE test;
|
||||||
|
CREATE TABLE t1(c1 INT PRIMARY KEY) ENGINE=INNODB;
|
||||||
|
INSERT INTO t1 VALUES (1), (2), (3), (4), (5);
|
||||||
|
SELECT * FROM t1;
|
||||||
|
|
||||||
|
--echo
|
||||||
|
--echo # On node_1
|
||||||
|
--connection node_1
|
||||||
|
SELECT * FROM test.t1;
|
||||||
|
|
||||||
|
--echo
|
||||||
|
--echo # On node_2
|
||||||
|
--connection node_2
|
||||||
|
SELECT * FROM test.t1;
|
||||||
|
|
||||||
|
--let $galera_diff_statement = SELECT * FROM t1
|
||||||
|
--source include/galera_diff.inc
|
||||||
|
|
||||||
|
# Cleanup
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
--source include/galera_end.inc
|
||||||
|
--echo # End of test
|
54
mysql-test/suite/galera/t/unique_key.test
Normal file
54
mysql-test/suite/galera/t/unique_key.test
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
--source include/galera_cluster.inc
|
||||||
|
--source include/have_innodb.inc
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV#5552 Deadlock when inserting NULL column value in column with
|
||||||
|
--echo # UNIQUE index
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
USE test;
|
||||||
|
--echo
|
||||||
|
--echo # On node_1
|
||||||
|
--connection node_1
|
||||||
|
CREATE TABLE t1(c1 INT DEFAULT NULL, UNIQUE KEY c1(c1)) ENGINE=INNODB;
|
||||||
|
INSERT INTO t1 VALUES (NULL);
|
||||||
|
INSERT INTO t1 VALUES (NULL);
|
||||||
|
SELECT * FROM test.t1;
|
||||||
|
|
||||||
|
--echo
|
||||||
|
--echo # On node_2
|
||||||
|
--connection node_2
|
||||||
|
SELECT * FROM test.t1;
|
||||||
|
|
||||||
|
|
||||||
|
--echo
|
||||||
|
--echo # On node_1
|
||||||
|
--connection node_1
|
||||||
|
INSERT INTO t1 VALUES (1);
|
||||||
|
UPDATE t1 SET c1=NULL WHERE c1=1;
|
||||||
|
SELECT * FROM test.t1;
|
||||||
|
|
||||||
|
--echo
|
||||||
|
--echo # On node_2
|
||||||
|
--connection node_2
|
||||||
|
SELECT * FROM test.t1;
|
||||||
|
|
||||||
|
--echo
|
||||||
|
--echo # On node_1
|
||||||
|
--connection node_1
|
||||||
|
DELETE FROM t1 WHERE c1<=>NULL;
|
||||||
|
SELECT * FROM test.t1;
|
||||||
|
|
||||||
|
--echo
|
||||||
|
--echo # On node_2
|
||||||
|
--connection node_2
|
||||||
|
SELECT * FROM test.t1;
|
||||||
|
|
||||||
|
--let $galera_diff_statement = SELECT * FROM t1
|
||||||
|
--source include/galera_diff.inc
|
||||||
|
|
||||||
|
# Cleanup
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
--source include/galera_end.inc
|
||||||
|
--echo # End of test
|
7
mysql-test/suite/wsrep/README
Normal file
7
mysql-test/suite/wsrep/README
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
* 'wsrep' suite is designated for tests which do not require a multi-node
|
||||||
|
galera cluster.
|
||||||
|
|
||||||
|
* As these tests are specific to wsrep-related functionalities, they must skip
|
||||||
|
on server built without wsrep patch (vanilla). (-DWITH_WSREP=OFF)
|
||||||
|
See : include/have_wsrep.inc, include/have_wsrep_enabled.inc, not_wsrep.inc
|
||||||
|
|
@ -1,3 +1,5 @@
|
|||||||
|
call mtr.add_suppression("WSREP: cannot get fake InnoDB transaction ID");
|
||||||
|
call mtr.add_suppression("WSREP: Could not open saved state file for reading:.*");
|
||||||
SHOW VARIABLES LIKE 'binlog_format';
|
SHOW VARIABLES LIKE 'binlog_format';
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
binlog_format ROW
|
binlog_format ROW
|
||||||
|
70
mysql-test/suite/wsrep/r/mysql_tzinfo_to_sql_symlink.result
Normal file
70
mysql-test/suite/wsrep/r/mysql_tzinfo_to_sql_symlink.result
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
#
|
||||||
|
# MDEV-5226 mysql_tzinfo_to_sql errors with tzdata 2013f and above
|
||||||
|
#
|
||||||
|
# Verbose run
|
||||||
|
SET GLOBAL wsrep_replicate_myisam= ON;
|
||||||
|
TRUNCATE TABLE time_zone;
|
||||||
|
TRUNCATE TABLE time_zone_name;
|
||||||
|
TRUNCATE TABLE time_zone_transition;
|
||||||
|
TRUNCATE TABLE time_zone_transition_type;
|
||||||
|
INSERT INTO time_zone (Use_leap_seconds) VALUES ('N');
|
||||||
|
SET @time_zone_id= LAST_INSERT_ID();
|
||||||
|
INSERT INTO time_zone_name (Name, Time_zone_id) VALUES ('GMT', @time_zone_id);
|
||||||
|
INSERT INTO time_zone_transition_type (Time_zone_id, Transition_type_id, Offset, Is_DST, Abbreviation) VALUES
|
||||||
|
(@time_zone_id, 0, 0, 0, 'GMT')
|
||||||
|
;
|
||||||
|
Warning: Unable to load 'MYSQLTEST_VARDIR/zoneinfo/garbage' as time zone. Skipping it.
|
||||||
|
Warning: Unable to load 'MYSQLTEST_VARDIR/zoneinfo/ignored.tab' as time zone. Skipping it.
|
||||||
|
INSERT INTO time_zone (Use_leap_seconds) VALUES ('N');
|
||||||
|
SET @time_zone_id= LAST_INSERT_ID();
|
||||||
|
INSERT INTO time_zone_name (Name, Time_zone_id) VALUES ('posix/GMT', @time_zone_id);
|
||||||
|
INSERT INTO time_zone_transition_type (Time_zone_id, Transition_type_id, Offset, Is_DST, Abbreviation) VALUES
|
||||||
|
(@time_zone_id, 0, 0, 0, 'GMT')
|
||||||
|
;
|
||||||
|
Warning: Unable to load 'MYSQLTEST_VARDIR/zoneinfo/posix/garbage' as time zone. Skipping it.
|
||||||
|
Warning: Unable to load 'MYSQLTEST_VARDIR/zoneinfo/posix/ignored.tab' as time zone. Skipping it.
|
||||||
|
Warning: Skipping directory 'MYSQLTEST_VARDIR/zoneinfo/posix/posix': to avoid infinite symlink recursion.
|
||||||
|
ALTER TABLE time_zone_transition ORDER BY Time_zone_id, Transition_time;
|
||||||
|
ALTER TABLE time_zone_transition_type ORDER BY Time_zone_id, Transition_type_id;
|
||||||
|
SET GLOBAL wsrep_replicate_myisam= OFF;
|
||||||
|
# Silent run
|
||||||
|
SET GLOBAL wsrep_replicate_myisam= ON;
|
||||||
|
TRUNCATE TABLE time_zone;
|
||||||
|
TRUNCATE TABLE time_zone_name;
|
||||||
|
TRUNCATE TABLE time_zone_transition;
|
||||||
|
TRUNCATE TABLE time_zone_transition_type;
|
||||||
|
INSERT INTO time_zone (Use_leap_seconds) VALUES ('N');
|
||||||
|
SET @time_zone_id= LAST_INSERT_ID();
|
||||||
|
INSERT INTO time_zone_name (Name, Time_zone_id) VALUES ('GMT', @time_zone_id);
|
||||||
|
INSERT INTO time_zone_transition_type (Time_zone_id, Transition_type_id, Offset, Is_DST, Abbreviation) VALUES
|
||||||
|
(@time_zone_id, 0, 0, 0, 'GMT')
|
||||||
|
;
|
||||||
|
Warning: Unable to load 'MYSQLTEST_VARDIR/zoneinfo/garbage' as time zone. Skipping it.
|
||||||
|
INSERT INTO time_zone (Use_leap_seconds) VALUES ('N');
|
||||||
|
SET @time_zone_id= LAST_INSERT_ID();
|
||||||
|
INSERT INTO time_zone_name (Name, Time_zone_id) VALUES ('posix/GMT', @time_zone_id);
|
||||||
|
INSERT INTO time_zone_transition_type (Time_zone_id, Transition_type_id, Offset, Is_DST, Abbreviation) VALUES
|
||||||
|
(@time_zone_id, 0, 0, 0, 'GMT')
|
||||||
|
;
|
||||||
|
Warning: Unable to load 'MYSQLTEST_VARDIR/zoneinfo/posix/garbage' as time zone. Skipping it.
|
||||||
|
ALTER TABLE time_zone_transition ORDER BY Time_zone_id, Transition_time;
|
||||||
|
ALTER TABLE time_zone_transition_type ORDER BY Time_zone_id, Transition_type_id;
|
||||||
|
SET GLOBAL wsrep_replicate_myisam= OFF;
|
||||||
|
#
|
||||||
|
# Testing with explicit timezonefile
|
||||||
|
#
|
||||||
|
SET GLOBAL wsrep_replicate_myisam= ON;
|
||||||
|
INSERT INTO time_zone (Use_leap_seconds) VALUES ('N');
|
||||||
|
SET @time_zone_id= LAST_INSERT_ID();
|
||||||
|
INSERT INTO time_zone_name (Name, Time_zone_id) VALUES ('XXX', @time_zone_id);
|
||||||
|
INSERT INTO time_zone_transition_type (Time_zone_id, Transition_type_id, Offset, Is_DST, Abbreviation) VALUES
|
||||||
|
(@time_zone_id, 0, 0, 0, 'GMT')
|
||||||
|
;
|
||||||
|
SET GLOBAL wsrep_replicate_myisam= OFF;
|
||||||
|
#
|
||||||
|
# Testing --leap
|
||||||
|
#
|
||||||
|
SET GLOBAL wsrep_replicate_myisam= ON;
|
||||||
|
TRUNCATE TABLE time_zone_leap_second;
|
||||||
|
ALTER TABLE time_zone_leap_second ORDER BY Transition_time;
|
||||||
|
SET GLOBAL wsrep_replicate_myisam= OFF;
|
8
mysql-test/suite/wsrep/r/pool_of_threads.result
Normal file
8
mysql-test/suite/wsrep/r/pool_of_threads.result
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
|
||||||
|
#
|
||||||
|
# MDEV#5687: Maria doesn't shutdown following upgrade to 5.5.35-galera
|
||||||
|
#
|
||||||
|
SELECT @@GLOBAL.thread_handling;
|
||||||
|
@@GLOBAL.thread_handling
|
||||||
|
pool-of-threads
|
||||||
|
# End of test.
|
@ -1,3 +1,16 @@
|
|||||||
|
|
||||||
|
# MDEV#5534: mysql_tzinfo_to_sql generates wrong query
|
||||||
|
#
|
||||||
|
# Testing wsrep_replicate_myisam variable.
|
||||||
|
SELECT @@session.wsrep_replicate_myisam;
|
||||||
|
ERROR HY000: Variable 'wsrep_replicate_myisam' is a GLOBAL variable
|
||||||
|
SELECT @@global.wsrep_replicate_myisam;
|
||||||
|
@@global.wsrep_replicate_myisam
|
||||||
|
0
|
||||||
|
SET SESSION wsrep_replicate_myisam= ON;
|
||||||
|
ERROR HY000: Variable 'wsrep_replicate_myisam' is a GLOBAL variable and should be set with SET GLOBAL
|
||||||
|
SET GLOBAL wsrep_replicate_myisam= ON;
|
||||||
|
SET GLOBAL wsrep_replicate_myisam= OFF;
|
||||||
#
|
#
|
||||||
# MDEV#5790: SHOW GLOBAL STATUS LIKE does not show the correct list of
|
# MDEV#5790: SHOW GLOBAL STATUS LIKE does not show the correct list of
|
||||||
# variables when using "_"
|
# variables when using "_"
|
||||||
|
@ -1,8 +1,11 @@
|
|||||||
--source include/have_wsrep.inc
|
--source include/have_wsrep_enabled.inc
|
||||||
--source include/have_binlog_format_row.inc
|
--source include/have_binlog_format_row.inc
|
||||||
#
|
#
|
||||||
# MDEV-4227: Galera server should stop crashing on setting binlog_format STATEMENT
|
# MDEV-4227: Galera server should stop crashing on setting binlog_format STATEMENT
|
||||||
#
|
#
|
||||||
|
call mtr.add_suppression("WSREP: cannot get fake InnoDB transaction ID");
|
||||||
|
call mtr.add_suppression("WSREP: Could not open saved state file for reading:.*");
|
||||||
|
|
||||||
SHOW VARIABLES LIKE 'binlog_format';
|
SHOW VARIABLES LIKE 'binlog_format';
|
||||||
-- error ER_WRONG_VALUE_FOR_VAR
|
-- error ER_WRONG_VALUE_FOR_VAR
|
||||||
SET binlog_format=STATEMENT;
|
SET binlog_format=STATEMENT;
|
||||||
|
40
mysql-test/suite/wsrep/t/mysql_tzinfo_to_sql_symlink.test
Normal file
40
mysql-test/suite/wsrep/t/mysql_tzinfo_to_sql_symlink.test
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
--source include/have_wsrep.inc
|
||||||
|
--source include/have_symlink.inc
|
||||||
|
--source include/not_windows.inc
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-5226 mysql_tzinfo_to_sql errors with tzdata 2013f and above
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
--exec mkdir $MYSQLTEST_VARDIR/zoneinfo
|
||||||
|
--exec ln -s $MYSQLTEST_VARDIR/zoneinfo $MYSQLTEST_VARDIR/zoneinfo/posix
|
||||||
|
--copy_file std_data/zoneinfo/GMT $MYSQLTEST_VARDIR/zoneinfo/GMT
|
||||||
|
--copy_file std_data/words.dat $MYSQLTEST_VARDIR/zoneinfo/garbage
|
||||||
|
--copy_file std_data/words.dat $MYSQLTEST_VARDIR/zoneinfo/ignored.tab
|
||||||
|
|
||||||
|
--echo # Verbose run
|
||||||
|
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||||
|
--exec $MYSQL_TZINFO_TO_SQL --verbose $MYSQLTEST_VARDIR/zoneinfo 2>&1
|
||||||
|
|
||||||
|
--echo # Silent run
|
||||||
|
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||||
|
--exec $MYSQL_TZINFO_TO_SQL $MYSQLTEST_VARDIR/zoneinfo 2>&1
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Testing with explicit timezonefile
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||||
|
--exec $MYSQL_TZINFO_TO_SQL $MYSQLTEST_VARDIR/zoneinfo/GMT XXX 2>&1
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Testing --leap
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
--exec $MYSQL_TZINFO_TO_SQL --leap $MYSQLTEST_VARDIR/zoneinfo/GMT 2>&1
|
||||||
|
|
||||||
|
#
|
||||||
|
# Cleanup
|
||||||
|
#
|
||||||
|
|
||||||
|
--exec rm -rf $MYSQLTEST_VARDIR/zoneinfo
|
1
mysql-test/suite/wsrep/t/pool_of_threads.opt
Normal file
1
mysql-test/suite/wsrep/t/pool_of_threads.opt
Normal file
@ -0,0 +1 @@
|
|||||||
|
--binlog-format=row --innodb_autoinc_lock_mode=2 --innodb_locks_unsafe_for_binlog=1 --wsrep-provider=/usr/lib/galera/libgalera_smm.so --wsrep-cluster-address=gcomm:// --thread_handling=pool-of-threads
|
11
mysql-test/suite/wsrep/t/pool_of_threads.test
Normal file
11
mysql-test/suite/wsrep/t/pool_of_threads.test
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
--source include/have_wsrep.inc
|
||||||
|
|
||||||
|
--echo
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV#5687: Maria doesn't shutdown following upgrade to 5.5.35-galera
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
# Note: This test is to ensure that server shuts down properly.
|
||||||
|
SELECT @@GLOBAL.thread_handling;
|
||||||
|
|
||||||
|
--echo # End of test.
|
@ -1,3 +1,4 @@
|
|||||||
|
--source include/have_wsrep.inc
|
||||||
--source include/have_innodb.inc
|
--source include/have_innodb.inc
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
|
@ -1,5 +1,21 @@
|
|||||||
--source include/have_wsrep.inc
|
--source include/have_wsrep.inc
|
||||||
|
|
||||||
|
--echo
|
||||||
|
--echo # MDEV#5534: mysql_tzinfo_to_sql generates wrong query
|
||||||
|
--echo #
|
||||||
|
--echo # Testing wsrep_replicate_myisam variable.
|
||||||
|
|
||||||
|
--error ER_INCORRECT_GLOBAL_LOCAL_VAR
|
||||||
|
SELECT @@session.wsrep_replicate_myisam;
|
||||||
|
SELECT @@global.wsrep_replicate_myisam;
|
||||||
|
|
||||||
|
--error ER_GLOBAL_VARIABLE
|
||||||
|
SET SESSION wsrep_replicate_myisam= ON;
|
||||||
|
SET GLOBAL wsrep_replicate_myisam= ON;
|
||||||
|
|
||||||
|
# Reset it back.
|
||||||
|
SET GLOBAL wsrep_replicate_myisam= OFF;
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
--echo # MDEV#5790: SHOW GLOBAL STATUS LIKE does not show the correct list of
|
--echo # MDEV#5790: SHOW GLOBAL STATUS LIKE does not show the correct list of
|
||||||
--echo # variables when using "_"
|
--echo # variables when using "_"
|
||||||
@ -18,4 +34,3 @@ SHOW VARIABLES LIKE 'wsrep_%';
|
|||||||
SHOW VARIABLES LIKE 'x';
|
SHOW VARIABLES LIKE 'x';
|
||||||
|
|
||||||
--echo # End of test.
|
--echo # End of test.
|
||||||
|
|
||||||
|
@ -1,6 +1,11 @@
|
|||||||
--source include/have_symlink.inc
|
--source include/have_symlink.inc
|
||||||
--source include/not_windows.inc
|
--source include/not_windows.inc
|
||||||
|
|
||||||
|
# Note: The output of mysql_tzinfo_to_sql is different if server is compiled
|
||||||
|
# with wsrep. Hence a copy of this test has been placed under wsrep suite with
|
||||||
|
# the updated result. (lp:1161432)
|
||||||
|
--source include/not_wsrep.inc
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
--echo # MDEV-5226 mysql_tzinfo_to_sql errors with tzdata 2013f and above
|
--echo # MDEV-5226 mysql_tzinfo_to_sql errors with tzdata 2013f and above
|
||||||
--echo #
|
--echo #
|
||||||
|
@ -6218,7 +6218,7 @@ void ha_wsrep_fake_trx_id(THD *thd)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
WSREP_WARN("cannot get get fake InnoDB transaction ID");
|
WSREP_WARN("cannot get fake InnoDB transaction ID");
|
||||||
}
|
}
|
||||||
|
|
||||||
DBUG_VOID_RETURN;
|
DBUG_VOID_RETURN;
|
||||||
|
@ -2055,6 +2055,10 @@ extern "C" void unireg_abort(int exit_code)
|
|||||||
wsrep_close_threads(thd); /* this won't close all threads */
|
wsrep_close_threads(thd); /* this won't close all threads */
|
||||||
sleep(1); /* so give some time to exit for those which can */
|
sleep(1); /* so give some time to exit for those which can */
|
||||||
WSREP_INFO("Some threads may fail to exit.");
|
WSREP_INFO("Some threads may fail to exit.");
|
||||||
|
|
||||||
|
/* In bootstrap mode we deinitialize wsrep here. */
|
||||||
|
if (opt_bootstrap && wsrep_inited)
|
||||||
|
wsrep_deinit();
|
||||||
}
|
}
|
||||||
#endif // WITH_WSREP
|
#endif // WITH_WSREP
|
||||||
clean_up(!opt_abort && (exit_code || !opt_bootstrap)); /* purecov: inspected */
|
clean_up(!opt_abort && (exit_code || !opt_bootstrap)); /* purecov: inspected */
|
||||||
|
@ -2709,8 +2709,10 @@ main(int argc, char **argv)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef WITH_WSREP
|
||||||
// Replicate MyISAM DDL for this session, cf. lp:1161432
|
// Replicate MyISAM DDL for this session, cf. lp:1161432
|
||||||
printf("SET SESSION wsrep_replicate_myisam=ON;\n");
|
printf("SET GLOBAL wsrep_replicate_myisam= ON;\n");
|
||||||
|
#endif /* WITH_WSREP */
|
||||||
|
|
||||||
if (argc == 1 && !opt_leap)
|
if (argc == 1 && !opt_leap)
|
||||||
{
|
{
|
||||||
@ -2759,6 +2761,11 @@ main(int argc, char **argv)
|
|||||||
free_root(&tz_storage, MYF(0));
|
free_root(&tz_storage, MYF(0));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef WITH_WSREP
|
||||||
|
// Reset wsrep_replicate_myisam. lp:1161432
|
||||||
|
printf("SET GLOBAL wsrep_replicate_myisam= OFF;\n");
|
||||||
|
#endif /* WITH_WSREP */
|
||||||
|
|
||||||
free_defaults(default_argv);
|
free_defaults(default_argv);
|
||||||
my_end(0);
|
my_end(0);
|
||||||
return 0;
|
return 0;
|
||||||
|
Reference in New Issue
Block a user