mirror of
https://github.com/MariaDB/server.git
synced 2025-09-02 09:41:40 +03:00
merge from main
This commit is contained in:
21
mysql-test/include/diff_master_slave.inc
Normal file
21
mysql-test/include/diff_master_slave.inc
Normal file
@@ -0,0 +1,21 @@
|
||||
# ==== Purpose ====
|
||||
#
|
||||
# Diff the output of a statement on master and slave
|
||||
#
|
||||
# ==== Usage =====
|
||||
#
|
||||
# let $diff_statement= SELECT * FROM t1 WHERE a < 100;
|
||||
# source include/diff_master_slave.inc;
|
||||
|
||||
--echo source include/diff_master_slave.inc;
|
||||
disable_query_log;
|
||||
disable_result_log;
|
||||
|
||||
exec $MYSQL test -e "$diff_statement" > $MYSQLTEST_VARDIR/tmp/diff_master.out;
|
||||
sync_slave_with_master;
|
||||
exec $MYSQL_SLAVE test -e "$diff_statement" > $MYSQLTEST_VARDIR/tmp/diff_slave.out;
|
||||
|
||||
diff_files $MYSQLTEST_VARDIR/tmp/diff_master.out $MYSQLTEST_VARDIR/tmp/diff_slave.out;
|
||||
|
||||
enable_result_log;
|
||||
enable_query_log;
|
@@ -720,3 +720,11 @@ connection con1;
|
||||
drop table t1;
|
||||
disconnect con1;
|
||||
connection default;
|
||||
|
||||
#
|
||||
# Bug#44151 using handler commands on information_schema tables crashes server
|
||||
#
|
||||
USE information_schema;
|
||||
--error ER_WRONG_USAGE
|
||||
HANDLER COLUMNS OPEN;
|
||||
USE test;
|
||||
|
68
mysql-test/include/kill_query.inc
Normal file
68
mysql-test/include/kill_query.inc
Normal file
@@ -0,0 +1,68 @@
|
||||
# ==== Purpose ====
|
||||
#
|
||||
# Kill a query in the master connection, and then try to reap the
|
||||
# result of the killed query.
|
||||
#
|
||||
# ==== Usage ====
|
||||
#
|
||||
# The following variables should be set before sourcing this file.
|
||||
#
|
||||
# $debug_lock: name of the debug user lock, if set, will release/lock
|
||||
# the specified debug lock accordingly, and before
|
||||
# sourcing this, connection 'master' should get the user
|
||||
# lock and run a query in another thread, which will
|
||||
# block before creating statement event.
|
||||
#
|
||||
# $connection_name: name of the connection that is waiting for the
|
||||
# lock, this can not be 'master'
|
||||
#
|
||||
# $connection_id: id of the connection that is waiting for the lock
|
||||
#
|
||||
# Example:
|
||||
# let $debug_lock=;
|
||||
# connection master1;
|
||||
# let $connection_name= master1;
|
||||
# let $connection_id= `SELECT CONNECTION_ID()`;
|
||||
# send CREATE TABLE t1;
|
||||
# source kill_query.inc;
|
||||
#
|
||||
# let $debug_lock= "debug_lock.before_query_log_event";
|
||||
# connection master;
|
||||
# eval SELECT GET_LOCK($debug_lock, 10);
|
||||
# connection master1;
|
||||
# let $connection_name= master1;
|
||||
# let $connection_id= `SELECT CONNECTION_ID()`;
|
||||
# send CREATE TABLE t1;
|
||||
# source kill_query.inc;
|
||||
|
||||
|
||||
--echo source include/kill_query.inc;
|
||||
disable_query_log;
|
||||
disable_result_log;
|
||||
connection master;
|
||||
|
||||
# kill the query that is waiting
|
||||
eval kill query $connection_id;
|
||||
|
||||
if (`SELECT '$debug_lock' != ''`)
|
||||
{
|
||||
# release the lock to allow binlog continue
|
||||
eval SELECT RELEASE_LOCK($debug_lock);
|
||||
}
|
||||
|
||||
# reap the result of the waiting query
|
||||
connection $connection_name;
|
||||
error 0, 1317, 1307, 1306, 1334, 1305;
|
||||
reap;
|
||||
|
||||
connection master;
|
||||
|
||||
if (`SELECT '$debug_lock' != ''`)
|
||||
{
|
||||
# get lock again to make the next query wait
|
||||
eval SELECT GET_LOCK($debug_lock, 10);
|
||||
}
|
||||
|
||||
connection $connection_name;
|
||||
enable_query_log;
|
||||
enable_result_log;
|
43
mysql-test/include/kill_query_and_diff_master_slave.inc
Normal file
43
mysql-test/include/kill_query_and_diff_master_slave.inc
Normal file
@@ -0,0 +1,43 @@
|
||||
# ==== Purpose ====
|
||||
#
|
||||
# Kill a query, sync master with slave, and diff the output of a
|
||||
# statement on master and slave to check if statement is correctly
|
||||
# replicated.
|
||||
#
|
||||
# ==== Usage ====
|
||||
#
|
||||
# connection <CONNECTION>;
|
||||
# let $connection_name=<CONNECTION>
|
||||
# let $connection_id=`SELECT CONNECTION_ID()`;
|
||||
# let $diff_statement=<SQL COMMAND>;
|
||||
# send <SQL COMMAND>;
|
||||
# source include/kill_query_and_diff_master_slave.inc;
|
||||
#
|
||||
# Note: <CONNECTION> must not be 'master'.
|
||||
#
|
||||
# See also kill_query.inc and diff_master_slave.inc for more
|
||||
# information
|
||||
|
||||
source include/kill_query.inc;
|
||||
|
||||
# Release the debug lock if used, so that the statements in
|
||||
# diff_master_slave.inc will not be blocked.
|
||||
connection master;
|
||||
disable_query_log;
|
||||
disable_result_log;
|
||||
if (`SELECT '$debug_lock' != ''`)
|
||||
{
|
||||
eval SELECT RELEASE_LOCK($debug_lock);
|
||||
}
|
||||
enable_result_log;
|
||||
enable_query_log;
|
||||
|
||||
source include/diff_master_slave.inc;
|
||||
|
||||
# Acquire the debug lock again if used
|
||||
connection master;
|
||||
disable_query_log; disable_result_log; if (`SELECT '$debug_lock' !=
|
||||
''`) { eval SELECT GET_LOCK($debug_lock, 10); } enable_result_log;
|
||||
enable_query_log;
|
||||
|
||||
connection $connection_name;
|
@@ -1122,6 +1122,46 @@ SELECT a, b, c FROM t1 WHERE b = 1 ORDER BY a DESC LIMIT 5;
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
#
|
||||
# Bug#37284 Crash in Field_string::type()
|
||||
#
|
||||
--disable_warnings
|
||||
DROP TABLE IF EXISTS t1;
|
||||
--enable_warnings
|
||||
CREATE TABLE t1 (a char(50)) ENGINE=InnoDB;
|
||||
CREATE INDEX i1 on t1 (a(3));
|
||||
SELECT * FROM t1 WHERE a = 'abcde';
|
||||
DROP TABLE t1;
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # BUG #26288: savepoint are not deleted on comit, if the transaction
|
||||
--echo # was otherwise empty
|
||||
--echo #
|
||||
BEGIN;
|
||||
SAVEPOINT s1;
|
||||
COMMIT;
|
||||
--error 1305
|
||||
RELEASE SAVEPOINT s1;
|
||||
|
||||
BEGIN;
|
||||
SAVEPOINT s2;
|
||||
COMMIT;
|
||||
--error 1305
|
||||
ROLLBACK TO SAVEPOINT s2;
|
||||
|
||||
BEGIN;
|
||||
SAVEPOINT s3;
|
||||
ROLLBACK;
|
||||
--error 1305
|
||||
RELEASE SAVEPOINT s3;
|
||||
|
||||
BEGIN;
|
||||
SAVEPOINT s4;
|
||||
ROLLBACK;
|
||||
--error 1305
|
||||
ROLLBACK TO SAVEPOINT s4;
|
||||
|
||||
--echo End of 5.0 tests
|
||||
|
||||
# Fix for BUG#19243 "wrong LAST_INSERT_ID() after ON DUPLICATE KEY
|
||||
@@ -1368,6 +1408,7 @@ SELECT * FROM t1;
|
||||
|
||||
--echo # Switch to connection con2
|
||||
connection con2;
|
||||
--reap
|
||||
SELECT * FROM t1;
|
||||
|
||||
connection default;
|
||||
|
68
mysql-test/include/wait_for_status_var.inc
Normal file
68
mysql-test/include/wait_for_status_var.inc
Normal file
@@ -0,0 +1,68 @@
|
||||
# ==== Purpose ====
|
||||
#
|
||||
# Waits until a variable from SHOW STATUS has returned a specified
|
||||
# value, or until a timeout is reached.
|
||||
#
|
||||
# ==== Usage ====
|
||||
#
|
||||
# let $status_var= Threads_connected;
|
||||
# let $status_var_value= 1;
|
||||
# --source include/wait_for_status_var.inc
|
||||
#
|
||||
# Parameters:
|
||||
#
|
||||
# $status_var, $status_var_value
|
||||
# This macro will wait until the variable of SHOW STATUS
|
||||
# named $status_var gets the value $status_var_value. See
|
||||
# the example above.
|
||||
#
|
||||
# $status_type= GLOBAL|SESSION
|
||||
# To specify the type (attribute) of status variable and
|
||||
# run either SHOW GLOBAL STATUS or SHOW SESSION STATUS.
|
||||
#
|
||||
# $status_var_comparsion
|
||||
# By default, this file waits until $status_var becomes equal to
|
||||
# $status_var_value. If you want to wait until $status_var
|
||||
# becomes *unequal* to $status_var_value, set this parameter to the
|
||||
# string '!=', like this:
|
||||
# let $status_var_comparsion= !=;
|
||||
#
|
||||
# $status_timeout
|
||||
# The default timeout is 1 minute. You can change the timeout by
|
||||
# setting $status_timeout. The unit is tenths of seconds.
|
||||
#
|
||||
|
||||
if (`SELECT STRCMP('$status_type', '') * STRCMP(UPPER('$status_type'), 'SESSION') * STRCMP(UPPER('$status_type'), 'GLOBAL')`)
|
||||
{
|
||||
--echo **** ERROR: Unknown type of variable status_type: allowed values are: SESSION or GLOBAL ****
|
||||
exit;
|
||||
}
|
||||
|
||||
let $_status_timeout_counter= $status_timeout;
|
||||
if (!$_status_timeout_counter)
|
||||
{
|
||||
let $_status_timeout_counter= 600;
|
||||
}
|
||||
|
||||
let $_status_var_comparsion= $status_var_comparsion;
|
||||
if (`SELECT '$_status_var_comparsion' = ''`)
|
||||
{
|
||||
let $_status_var_comparsion= =;
|
||||
}
|
||||
|
||||
let $_show_status_value= query_get_value("SHOW $status_type STATUS LIKE '$status_var'", Value, 1);
|
||||
while (`SELECT NOT('$_show_status_value' $_status_var_comparsion '$status_var_value')`)
|
||||
{
|
||||
if (!$_status_timeout_counter)
|
||||
{
|
||||
--echo **** ERROR: failed while waiting for $status_type $status_var $_status_var_comparison $status_var_value ****
|
||||
--echo Note: the following output may have changed since the failure was detected
|
||||
--echo **** Showing STATUS, PROCESSLIST ****
|
||||
eval SHOW $status_type STATUS LIKE '$status_var';
|
||||
SHOW PROCESSLIST;
|
||||
exit;
|
||||
}
|
||||
dec $_status_timeout_counter;
|
||||
sleep 0.1;
|
||||
let $_show_status_value= query_get_value("SHOW $status_type STATUS LIKE '$status_var'", Value, 1);
|
||||
}
|
Reference in New Issue
Block a user