1
0
mirror of https://github.com/MariaDB/server.git synced 2025-08-07 00:04:31 +03:00

Merge 10.6 into 10.11

This commit is contained in:
Marko Mäkelä
2025-02-10 14:45:18 +02:00
22 changed files with 345 additions and 80 deletions

View File

@@ -4458,14 +4458,12 @@ sub extract_warning_lines ($$) {
( (
@global_suppressions, @global_suppressions,
qr/error .*connecting to master/, qr/error .*connecting to master/,
qr/InnoDB: Error: in ALTER TABLE `test`.`t[12]`/,
qr/InnoDB: Error: table `test`.`t[12]` .*does not exist in the InnoDB internal/,
qr/InnoDB: Warning: a long semaphore wait:/,
qr/InnoDB: Dumping buffer pool.*/, qr/InnoDB: Dumping buffer pool.*/,
qr/InnoDB: Buffer pool.*/, qr/InnoDB: Buffer pool.*/,
qr/InnoDB: Could not free any blocks in the buffer pool!/, qr/InnoDB: Could not free any blocks in the buffer pool!/,
qr/InnoDB: Warning: Writer thread is waiting this semaphore:/,
qr/InnoDB: innodb_open_files .* should not be greater than/, qr/InnoDB: innodb_open_files .* should not be greater than/,
qr/InnoDB: Trying to delete tablespace.*but there are.*pending/,
qr/InnoDB: Tablespace 1[0-9]* was not found at .*, and innodb_force_recovery was set/,
qr/Slave: Unknown table 't1' .* 1051/, qr/Slave: Unknown table 't1' .* 1051/,
qr/Slave SQL:.*(Internal MariaDB error code: [[:digit:]]+|Query:.*)/, qr/Slave SQL:.*(Internal MariaDB error code: [[:digit:]]+|Query:.*)/,
qr/slave SQL thread aborted/, qr/slave SQL thread aborted/,

View File

@@ -0,0 +1,35 @@
# include/wait_condition_with_debug_and_kill.inc
#
# SUMMARY
#
# Waits until the passed statement returns true, or the operation
# times out. If the operation times out, the additional error
# statement will be executed and server is killed.
#
# USAGE
#
# let $wait_condition=
# SELECT c = 3 FROM t;
# let $wait_condition_on_error_output= select count(*) from t;
# [let $explicit_default_wait_timeout= N] # to override the default reset
# --source include/wait_condition_with_debug_and_kill.inc
#
# OR
#
# let $wait_timeout= 60; # Override default 30 seconds with 60.
# let $wait_condition=
# SELECT c = 3 FROM t;
# let $wait_condition_on_error_output= select count(*) from t;
# --source include/wait_condition_with_debug_and_kill.inc
# --echo Executed the test condition $wait_condition_reps times
#
#
# EXAMPLE
# events_bugs.test, events_time_zone.test
#
--source include/wait_condition_with_debug.inc
if (!$success)
{
--source include/kill_galera.inc
}

View File

@@ -0,0 +1,16 @@
connection node_2;
connection node_1;
connection node_1;
connection node_2;
SET GLOBAL wsrep_provider_options = 'gmcast.isolate=1';
SET SESSION wsrep_sync_wait=0;
SET SESSION wsrep_sync_wait=DEFAULT;
DELETE FROM mysql.wsrep_streaming_log;
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
SET SESSION wsrep_sync_wait=0;
SET GLOBAL wsrep_provider_options = 'gmcast.isolate=0';
SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status';
VARIABLE_VALUE
Primary
SET SESSION wsrep_sync_wait=DEFAULT;
CALL mtr.add_suppression("WSREP: Protocol violation\\. JOIN message sender (.*) is not in state transfer \\(SYNCED\\)\\. Message ignored\\.");

View File

@@ -7,6 +7,7 @@ LOCK TABLE t1 WRITE;
connection node_1; connection node_1;
INSERT INTO t1 VALUES (2); INSERT INTO t1 VALUES (2);
connection node_2; connection node_2;
SET SESSION wsrep_sync_wait = 0;
UNLOCK TABLES; UNLOCK TABLES;
COMMIT; COMMIT;
SELECT COUNT(*) = 1 FROM t1; SELECT COUNT(*) = 1 FROM t1;

View File

@@ -40,18 +40,19 @@ drop table t1;
disconnect node_2a; disconnect node_2a;
connect node_2a, 127.0.0.1, root, , test, $NODE_MYPORT_2; connect node_2a, 127.0.0.1, root, , test, $NODE_MYPORT_2;
connection node_2a; connection node_2a;
CREATE TABLE t1 (i int primary key); CREATE TABLE t1 (i int primary key) engine=innodb;
SET DEBUG_SYNC = "before_wsrep_ordered_commit SIGNAL bwoc_reached WAIT_FOR bwoc_continue"; SET DEBUG_SYNC = "before_wsrep_ordered_commit SIGNAL bwoc_reached WAIT_FOR bwoc_continue";
INSERT INTO t1 VALUES (1); INSERT INTO t1 VALUES (1);
connection node_2; connection node_2;
SET DEBUG_SYNC = "now WAIT_FOR bwoc_reached"; SET DEBUG_SYNC = "now WAIT_FOR bwoc_reached";
SET DEBUG_SYNC = "now SIGNAL bwoc_continue"; SET DEBUG_SYNC = "now SIGNAL bwoc_continue";
SET DEBUG_SYNC='RESET';
connection node_2a; connection node_2a;
connection node_2; connection node_2;
SET DEBUG_SYNC='RESET';
select * from t1; select * from t1;
i i
1 1
disconnect node_2a; disconnect node_2a;
disconnect node_2b;
connection node_1; connection node_1;
drop table t1; drop table t1;

View File

@@ -0,0 +1,30 @@
connection node_2;
connection node_1;
# Correct Galera library found
connection node_1;
connection node_2;
connection node_1;
connection node_2;
SELECT VARIABLE_VALUE = 'Synced' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_state_comment';
VARIABLE_VALUE = 'Synced'
1
SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
VARIABLE_VALUE = 2
1
connection node_1;
SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
VARIABLE_VALUE = 2
1
connection node_2;
SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
VARIABLE_VALUE = 2
1
connection node_1;
SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
VARIABLE_VALUE = 2
1
connection node_2;
connection node_1;
call mtr.add_suppression("WSREP: write_handler\\(\\)");
connection node_2;
call mtr.add_suppression("WSREP: write_handler\\(\\)");

View File

@@ -0,0 +1,41 @@
#
# MDEV-35946: Assertion `thd->is_error()' failed in Sql_cmd_dml::prepare
#
--source include/have_innodb.inc
--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
#
# Disconnect from the cluster
#
SET GLOBAL wsrep_provider_options = 'gmcast.isolate=1';
SET SESSION wsrep_sync_wait=0;
--let $wait_condition = SELECT VARIABLE_VALUE = 'non-Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status';
--source include/wait_condition.inc
SET SESSION wsrep_sync_wait=DEFAULT;
#
# If bug is present, assertion will fire
# during the execution of the following DELETE
#
--error ER_LOCK_WAIT_TIMEOUT
DELETE FROM mysql.wsrep_streaming_log;
#
# Reconnect to the cluster
#
SET SESSION wsrep_sync_wait=0;
SET GLOBAL wsrep_provider_options = 'gmcast.isolate=0';
--let $wait_condition = SELECT VARIABLE_VALUE = 'Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status';
--source include/wait_condition.inc
SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status';
SET SESSION wsrep_sync_wait=DEFAULT;
--source include/auto_increment_offset_restore.inc
CALL mtr.add_suppression("WSREP: Protocol violation\\. JOIN message sender (.*) is not in state transfer \\(SYNCED\\)\\. Message ignored\\.");

View File

@@ -0,0 +1,5 @@
!include ../galera_2nodes.cnf
[mysqld.1]
wsrep-debug=1
loose-galera-bf-abort-lock-table=1

View File

@@ -1,5 +1,6 @@
--source include/galera_cluster.inc --source include/galera_cluster.inc
--source include/have_innodb.inc --source include/have_innodb.inc
--source include/force_restart.inc
# #
# Test that a local LOCK TABLE will NOT be broken by an incoming remote transaction against that table # Test that a local LOCK TABLE will NOT be broken by an incoming remote transaction against that table
@@ -16,13 +17,16 @@ LOCK TABLE t1 WRITE;
INSERT INTO t1 VALUES (2); INSERT INTO t1 VALUES (2);
--connection node_2 --connection node_2
SET SESSION wsrep_sync_wait = 0;
--let $wait_condition = SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE USER = 'system user' AND STATE = 'Waiting for table metadata lock' --let $wait_condition = SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE USER = 'system user' AND STATE = 'Waiting for table metadata lock'
--source include/wait_condition.inc --let $wait_condition_on_error_output = SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST
--source include/wait_condition_with_debug_and_kill.inc
UNLOCK TABLES; UNLOCK TABLES;
--let $wait_condition = SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE USER = 'system user' AND STATE = 'Waiting for table metadata lock' --let $wait_condition = SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE USER = 'system user' AND STATE = 'Waiting for table metadata lock'
--source include/wait_condition.inc --let $wait_condition_on_error_output = SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST
--source include/wait_condition_with_debug_and_kill.inc
COMMIT; COMMIT;
SELECT COUNT(*) = 1 FROM t1; SELECT COUNT(*) = 1 FROM t1;

View File

@@ -110,7 +110,7 @@ drop table t1;
--connection node_2a --connection node_2a
--let $connection_id = `SELECT CONNECTION_ID()` --let $connection_id = `SELECT CONNECTION_ID()`
CREATE TABLE t1 (i int primary key); CREATE TABLE t1 (i int primary key) engine=innodb;
# Set up sync point # Set up sync point
SET DEBUG_SYNC = "before_wsrep_ordered_commit SIGNAL bwoc_reached WAIT_FOR bwoc_continue"; SET DEBUG_SYNC = "before_wsrep_ordered_commit SIGNAL bwoc_reached WAIT_FOR bwoc_continue";
@@ -129,17 +129,17 @@ SET DEBUG_SYNC = "now WAIT_FOR bwoc_reached";
--enable_query_log --enable_query_log
SET DEBUG_SYNC = "now SIGNAL bwoc_continue"; SET DEBUG_SYNC = "now SIGNAL bwoc_continue";
SET DEBUG_SYNC='RESET';
--connection node_2a --connection node_2a
--error 0,1213,2013,2026 --error 0,1213,2013,2026
--reap --reap
--connection node_2 --connection node_2
SET DEBUG_SYNC='RESET';
# victim was able to complete the INSERT # victim was able to complete the INSERT
select * from t1; select * from t1;
--disconnect node_2a --disconnect node_2a
--disconnect node_2b
--connection node_1 --connection node_1
drop table t1; drop table t1;

View File

@@ -0,0 +1,11 @@
!include ../galera_2nodes.cnf
[mysqld]
loose-galera-ssl-cipher=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;cert.log_conflicts=YES'
[mysqld.2]
wsrep_provider_options='base_port=@mysqld.2.#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;cert.log_conflicts=YES'

View File

@@ -0,0 +1,82 @@
#
# Test upgrading the SSL chipher
#
--source include/galera_cluster.inc
--source include/have_ssl_communication.inc
--source include/have_openssl.inc
--source include/force_restart.inc
#
# Lowest supported Galera library version
#
--let $galera_version=26.4.21
source ../wsrep/include/check_galera_version.inc;
# Save original auto_increment_offset values.
--let $node_1=node_1
--let $node_2=node_2
--source include/auto_increment_offset_save.inc
# Setup galera ports
--connection node_1
--source suite/galera/include/galera_base_port.inc
--let $NODE_GALERAPORT_1 = $_NODE_GALERAPORT
--connection node_2
--source suite/galera/include/galera_base_port.inc
--let $NODE_GALERAPORT_2 = $_NODE_GALERAPORT
SELECT VARIABLE_VALUE = 'Synced' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_state_comment';
SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
# 2. Restart node #1 with a socket.ssl_cipher
--connection node_1
--source include/shutdown_mysqld.inc
--let $restart_noprint = 1
--let $start_mysqld_params = --wsrep-cluster-address=gcomm://127.0.0.1:$NODE_GALERAPORT_2 --wsrep_provider_options=base_port=$NODE_GALERAPORT_1;socket.ssl=yes;socket.ssl_ca=$MYSQL_TEST_DIR/std_data/galera-upgrade-ca-cert.pem;socket.ssl_cert=$MYSQL_TEST_DIR/std_data/galera-cert.pem;socket.ssl_key=$MYSQL_TEST_DIR/std_data/galera-key.pem;socket.ssl_cipher=AES256-SHA
--source include/start_mysqld.inc
--source include/wait_until_connected_again.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
SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
# 3. Restart node #2 with the new socket.ssl_ca , socket.ssl_cert, socket.ssl_key and socket.ssl_cipher
--connection node_2
--source include/shutdown_mysqld.inc
--let $start_mysqld_params = --wsrep_provider_options=base_port=$NODE_GALERAPORT_2;socket.ssl=yes;socket.ssl_ca=$MYSQL_TEST_DIR/std_data/galera-upgrade-ca-cert.pem;socket.ssl_cert=$MYSQL_TEST_DIR/std_data/galera-upgrade-server-cert.pem;socket.ssl_key=$MYSQL_TEST_DIR/std_data/galera-upgrade-server-key.pem;socket.ssl_cipher=AES256-SHA
--source include/start_mysqld.inc
--source include/wait_until_connected_again.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
SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
# 4. Restart node #1 with the new socket.ssl_ca , socket.ssl_cert, socket.ssl_key and socket.ssl_cipher
--connection node_1
--source include/shutdown_mysqld.inc
--let $start_mysqld_params = --wsrep-cluster-address=gcomm://127.0.0.1:$NODE_GALERAPORT_2 --wsrep_provider_options=base_port=$NODE_GALERAPORT_1;socket.ssl=yes;socket.ssl_ca=$MYSQL_TEST_DIR/std_data/galera-upgrade-ca-cert.pem;socket.ssl_cert=$MYSQL_TEST_DIR/std_data/galera-upgrade-server-cert.pem;socket.ssl_key=$MYSQL_TEST_DIR/std_data/galera-upgrade-server-key.pem;socket.ssl_cipher=AES256-SHA
--source include/start_mysqld.inc
--source include/wait_until_connected_again.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
SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
# 5. Make sure node_2 is ready as well
--connection node_2
--source include/galera_wait_ready.inc
# Upgrade complete. Both nodes now use the new key and certificate
# Restore original auto_increment_offset values.
--source include/auto_increment_offset_restore.inc
--connection node_1
call mtr.add_suppression("WSREP: write_handler\\(\\)");
--connection node_2
call mtr.add_suppression("WSREP: write_handler\\(\\)");

View File

@@ -1,9 +1,6 @@
!include ../galera_2nodes.cnf !include ../galera_2nodes.cnf
[mysqld.1] [mysqld]
log-bin
wsrep-debug=1
[mysqld.1]
log-bin log-bin
wsrep-debug=1 wsrep-debug=1
loose-mysql-wsrep198=1

View File

@@ -22,7 +22,8 @@ LOCK TABLE t2 WRITE;
--connection node_2 --connection node_2
SET SESSION wsrep_sync_wait = 0; SET SESSION wsrep_sync_wait = 0;
--let $wait_condition = SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE STATE = 'Waiting for table metadata lock' --let $wait_condition = SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE STATE = 'Waiting for table metadata lock'
--source include/wait_condition.inc --let $wait_condition_on_error_output = SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST
--source include/wait_condition_with_debug_and_kill.inc
--connection node_1 --connection node_1
INSERT INTO t2 VALUES (1); INSERT INTO t2 VALUES (1);

View File

@@ -11,6 +11,8 @@ insert into t1 values(5, repeat('.',12));
commit work; commit work;
SET GLOBAL innodb_fast_shutdown = 0; SET GLOBAL innodb_fast_shutdown = 0;
# restart # restart
SET GLOBAL innodb_max_dirty_pages_pct_lwm=0,innodb_max_dirty_pages_pct=0;
SET GLOBAL innodb_max_dirty_pages_pct=99;
connect dml,localhost,root,,; connect dml,localhost,root,,;
XA START 'x'; XA START 'x';
insert into t1 values(6, repeat('%', @@innodb_page_size/2)); insert into t1 values(6, repeat('%', @@innodb_page_size/2));
@@ -23,7 +25,6 @@ flush table t1 for export;
# restart # restart
FOUND 1 /InnoDB: Recovered page \[page id: space=[1-9][0-9]*, page number=0\]/ in mysqld.1.err FOUND 1 /InnoDB: Recovered page \[page id: space=[1-9][0-9]*, page number=0\]/ in mysqld.1.err
# restart # restart
XA ROLLBACK 'x';
check table t1; check table t1;
Table Op Msg_type Msg_text Table Op Msg_type Msg_text
test.t1 check status OK test.t1 check status OK
@@ -34,18 +35,13 @@ f1 f2
3 //////////// 3 ////////////
4 ------------ 4 ------------
5 ............ 5 ............
connect dml,localhost,root,,; SET GLOBAL innodb_max_dirty_pages_pct_lwm=0,innodb_max_dirty_pages_pct=0;
XA START 'x'; SET GLOBAL innodb_max_dirty_pages_pct=99;
insert into t1 values (6, repeat('%', @@innodb_page_size/2)); XA ROLLBACK 'x';
XA END 'x'; FLUSH TABLE t1 FOR EXPORT;
XA PREPARE 'x';
disconnect dml;
connection default;
flush table t1 for export;
# Kill the server # Kill the server
# restart # restart
FOUND 4 /InnoDB: Recovered page \[page id: space=[1-9][0-9]*, page number=[03]\]/ in mysqld.1.err FOUND 4 /InnoDB: Recovered page \[page id: space=[1-9][0-9]*, page number=[03]\]/ in mysqld.1.err
XA ROLLBACK 'x';
check table t1; check table t1;
Table Op Msg_type Msg_text Table Op Msg_type Msg_text
test.t1 check status OK test.t1 check status OK

View File

@@ -1,10 +1,18 @@
CREATE TABLE `t`(`id` INT, PRIMARY KEY(`id`)) ENGINE=InnoDB STATS_PERSISTENT=0; CREATE TABLE `t`(`id` INT, PRIMARY KEY(`id`)) ENGINE=InnoDB STATS_PERSISTENT=0;
INSERT INTO t VALUES (1); INSERT INTO t VALUES (1);
SET GLOBAL innodb_monitor_reset = "module_innodb"; SET GLOBAL innodb_monitor_disable="lock_row_lock_time";
SET GLOBAL innodb_monitor_disable="lock_row_lock_time_max";
SET GLOBAL innodb_monitor_reset_all='lock_row_lock_time';
SET GLOBAL innodb_monitor_reset_all='lock_row_lock_time_max';
SET GLOBAL innodb_monitor_enable="lock_row_lock_time";
SET GLOBAL innodb_monitor_enable="lock_row_lock_time_max";
BEGIN; BEGIN;
SELECT * FROM t FOR UPDATE; SELECT * FROM t FOR UPDATE;
id id
1 1
SELECT @innodb_row_lock_time_before := variable_value
FROM information_schema.global_status
WHERE LOWER(variable_name) = 'innodb_row_lock_time';
connect con1,localhost,root,,; connect con1,localhost,root,,;
SET innodb_lock_wait_timeout = 1; SET innodb_lock_wait_timeout = 1;
SELECT * FROM t FOR UPDATE; SELECT * FROM t FOR UPDATE;
@@ -12,29 +20,27 @@ ERROR HY000: Lock wait timeout exceeded; try restarting transaction
disconnect con1; disconnect con1;
connection default; connection default;
COMMIT; COMMIT;
SELECT variable_value > 100 FROM information_schema.global_status SELECT variable_value - @innodb_row_lock_time_before > 100
FROM information_schema.global_status
WHERE LOWER(variable_name) = 'innodb_row_lock_time'; WHERE LOWER(variable_name) = 'innodb_row_lock_time';
variable_value > 100 variable_value - @innodb_row_lock_time_before > 100
1 1
SELECT variable_value > 100 FROM information_schema.global_status SELECT variable_value > 100
FROM information_schema.global_status
WHERE LOWER(variable_name) = 'innodb_row_lock_time_max'; WHERE LOWER(variable_name) = 'innodb_row_lock_time_max';
variable_value > 100 variable_value > 100
1 1
SELECT variable_value > 100 FROM information_schema.global_status SELECT count_reset > 100
WHERE LOWER(variable_name) = 'innodb_row_lock_time_avg'; FROM INFORMATION_SCHEMA.INNODB_METRICS
variable_value > 100 WHERE NAME='lock_row_lock_time';
1
SELECT count_reset > 100 FROM INFORMATION_SCHEMA.INNODB_METRICS
WHERE NAME="lock_row_lock_time";
count_reset > 100 count_reset > 100
1 1
SELECT count_reset > 100 FROM INFORMATION_SCHEMA.INNODB_METRICS SELECT count_reset > 100
WHERE NAME="lock_row_lock_time_max"; FROM INFORMATION_SCHEMA.INNODB_METRICS
count_reset > 100 WHERE NAME='lock_row_lock_time_max';
1
SELECT count_reset > 100 FROM INFORMATION_SCHEMA.INNODB_METRICS
WHERE NAME="lock_row_lock_time_avg";
count_reset > 100 count_reset > 100
1 1
DROP TABLE t; DROP TABLE t;
SET GLOBAL innodb_monitor_reset=default; SET GLOBAL innodb_monitor_enable=default;
SET GLOBAL innodb_monitor_disable=default;
SET GLOBAL innodb_monitor_reset_all=default;

View File

@@ -1,7 +1,9 @@
[strict_crc32] [strict_crc32]
--innodb-checksum-algorithm=strict_crc32 --innodb-checksum-algorithm=strict_crc32
--innodb-use-atomic-writes=0 --innodb-use-atomic-writes=0
--innodb-undo-tablespaces=0
[strict_full_crc32] [strict_full_crc32]
--innodb-checksum-algorithm=strict_full_crc32 --innodb-checksum-algorithm=strict_full_crc32
--innodb-use-atomic-writes=0 --innodb-use-atomic-writes=0
--innodb-undo-tablespaces=0

View File

@@ -42,6 +42,13 @@ commit work;
SET GLOBAL innodb_fast_shutdown = 0; SET GLOBAL innodb_fast_shutdown = 0;
let $shutdown_timeout=; let $shutdown_timeout=;
--source include/restart_mysqld.inc --source include/restart_mysqld.inc
SET GLOBAL innodb_max_dirty_pages_pct_lwm=0,innodb_max_dirty_pages_pct=0;
let $wait_condition =
SELECT variable_value = 0
FROM information_schema.global_status
WHERE variable_name = 'INNODB_BUFFER_POOL_PAGES_DIRTY';
--source include/wait_condition.inc
SET GLOBAL innodb_max_dirty_pages_pct=99;
--source ../include/no_checkpoint_start.inc --source ../include/no_checkpoint_start.inc
connect (dml,localhost,root,,); connect (dml,localhost,root,,);
XA START 'x'; XA START 'x';
@@ -53,10 +60,12 @@ connection default;
flush table t1 for export; flush table t1 for export;
let $restart_parameters=; --let CLEANUP_IF_CHECKPOINT=drop table t1, unexpected_checkpoint;
--let CLEANUP_IF_CHECKPOINT=XA COMMIT 'x';drop table t1;
--source ../include/no_checkpoint_end.inc --source ../include/no_checkpoint_end.inc
--copy_file $MYSQLD_DATADIR/ibdata1 $MYSQLD_DATADIR/ibdata1.bak
--copy_file $MYSQLD_DATADIR/ib_logfile0 $MYSQLD_DATADIR/ib_logfile0.bak
perl; perl;
use IO::Handle; use IO::Handle;
do "$ENV{MTR_SUITE_DIR}/include/crc32.pl"; do "$ENV{MTR_SUITE_DIR}/include/crc32.pl";
@@ -145,6 +154,12 @@ let $shutdown_timeout=0;
--source include/shutdown_mysqld.inc --source include/shutdown_mysqld.inc
let $shutdown_timeout=; let $shutdown_timeout=;
# Corrupt the file in a better way. # Corrupt the file in a better way.
--remove_file $MYSQLD_DATADIR/ibdata1
--remove_file $MYSQLD_DATADIR/ib_logfile0
--move_file $MYSQLD_DATADIR/ibdata1.bak $MYSQLD_DATADIR/ibdata1
--move_file $MYSQLD_DATADIR/ib_logfile0.bak $MYSQLD_DATADIR/ib_logfile0
perl; perl;
use IO::Handle; use IO::Handle;
my $fname= "$ENV{'MYSQLD_DATADIR'}test/t1.ibd"; my $fname= "$ENV{'MYSQLD_DATADIR'}test/t1.ibd";
@@ -157,22 +172,23 @@ syswrite(FILE, chr(0) x ($page_size/2));
close FILE; close FILE;
EOF EOF
--source include/start_mysqld.inc --source include/start_mysqld.inc
XA ROLLBACK 'x';
check table t1; check table t1;
select f1, f2 from t1; select f1, f2 from t1;
SET GLOBAL innodb_max_dirty_pages_pct_lwm=0,innodb_max_dirty_pages_pct=0;
let $wait_condition =
SELECT variable_value = 0
FROM information_schema.global_status
WHERE variable_name = 'INNODB_BUFFER_POOL_PAGES_DIRTY';
--source include/wait_condition.inc
SET GLOBAL innodb_max_dirty_pages_pct=99;
--source ../include/no_checkpoint_start.inc --source ../include/no_checkpoint_start.inc
connect (dml,localhost,root,,); XA ROLLBACK 'x';
XA START 'x'; FLUSH TABLE t1 FOR EXPORT;
insert into t1 values (6, repeat('%', @@innodb_page_size/2));
XA END 'x';
XA PREPARE 'x';
disconnect dml;
connection default;
flush table t1 for export; # If we are skipping the test at this point due to an unexpected
# checkpoint, we will already have tested a part of this functionality.
let $restart_parameters=; --let CLEANUP_IF_CHECKPOINT=drop table t1;
--source ../include/no_checkpoint_end.inc --source ../include/no_checkpoint_end.inc
# Zero out the first page in file and try to recover from dblwr # Zero out the first page in file and try to recover from dblwr
@@ -186,7 +202,6 @@ EOF
--source include/start_mysqld.inc --source include/start_mysqld.inc
let SEARCH_PATTERN=InnoDB: Recovered page \\[page id: space=[1-9][0-9]*, page number=[03]\\]; let SEARCH_PATTERN=InnoDB: Recovered page \\[page id: space=[1-9][0-9]*, page number=[03]\\];
--source include/search_pattern_in_file.inc --source include/search_pattern_in_file.inc
XA ROLLBACK 'x';
check table t1; check table t1;
select f1, f2 from t1; select f1, f2 from t1;
drop table t1; drop table t1;

View File

@@ -5,11 +5,26 @@ CREATE TABLE `t`(`id` INT, PRIMARY KEY(`id`)) ENGINE=InnoDB STATS_PERSISTENT=0;
INSERT INTO t VALUES (1); INSERT INTO t VALUES (1);
SET GLOBAL innodb_monitor_reset = "module_innodb"; SET GLOBAL innodb_monitor_disable="lock_row_lock_time";
SET GLOBAL innodb_monitor_disable="lock_row_lock_time_max";
SET GLOBAL innodb_monitor_reset_all='lock_row_lock_time';
SET GLOBAL innodb_monitor_reset_all='lock_row_lock_time_max';
SET GLOBAL innodb_monitor_enable="lock_row_lock_time";
SET GLOBAL innodb_monitor_enable="lock_row_lock_time_max";
BEGIN; BEGIN;
SELECT * FROM t FOR UPDATE; SELECT * FROM t FOR UPDATE;
# We can't predict (innodb/lock)_row_lock_time_avg value, because it's counted
# as the whole waiting time divided by the amount of waits. The
# corresponding counters in lock_sys can't be reset with any query.
--disable_result_log
SELECT @innodb_row_lock_time_before := variable_value
FROM information_schema.global_status
WHERE LOWER(variable_name) = 'innodb_row_lock_time';
--enable_result_log
--connect(con1,localhost,root,,) --connect(con1,localhost,root,,)
SET innodb_lock_wait_timeout = 1; SET innodb_lock_wait_timeout = 1;
--error ER_LOCK_WAIT_TIMEOUT --error ER_LOCK_WAIT_TIMEOUT
@@ -19,24 +34,28 @@ SELECT * FROM t FOR UPDATE;
--connection default --connection default
COMMIT; COMMIT;
SELECT variable_value > 100 FROM information_schema.global_status SELECT variable_value - @innodb_row_lock_time_before > 100
FROM information_schema.global_status
WHERE LOWER(variable_name) = 'innodb_row_lock_time'; WHERE LOWER(variable_name) = 'innodb_row_lock_time';
SELECT variable_value > 100 FROM information_schema.global_status # We can't use 'variable_value - @innodb_row_lock_time_max_before' trick for
# innodb_row_lock_time_max, because we can't reset it, and we don't know the
# initial value at the moment of the test execution.
SELECT variable_value > 100
FROM information_schema.global_status
WHERE LOWER(variable_name) = 'innodb_row_lock_time_max'; WHERE LOWER(variable_name) = 'innodb_row_lock_time_max';
SELECT variable_value > 100 FROM information_schema.global_status SELECT count_reset > 100
WHERE LOWER(variable_name) = 'innodb_row_lock_time_avg'; FROM INFORMATION_SCHEMA.INNODB_METRICS
WHERE NAME='lock_row_lock_time';
SELECT count_reset > 100 FROM INFORMATION_SCHEMA.INNODB_METRICS SELECT count_reset > 100
WHERE NAME="lock_row_lock_time"; FROM INFORMATION_SCHEMA.INNODB_METRICS
SELECT count_reset > 100 FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE NAME='lock_row_lock_time_max';
WHERE NAME="lock_row_lock_time_max";
SELECT count_reset > 100 FROM INFORMATION_SCHEMA.INNODB_METRICS
WHERE NAME="lock_row_lock_time_avg";
DROP TABLE t; DROP TABLE t;
--disable_warnings --disable_warnings
SET GLOBAL innodb_monitor_reset=default; SET GLOBAL innodb_monitor_enable=default;
SET GLOBAL innodb_monitor_disable=default;
SET GLOBAL innodb_monitor_reset_all=default;
--enable_warnings --enable_warnings
--source include/wait_until_count_sessions.inc --source include/wait_until_count_sessions.inc

View File

@@ -1,10 +1,10 @@
SELECT name, type, processlist_user, processlist_host, processlist_db, SELECT name, type, processlist_user, processlist_host, processlist_db,
processlist_command, processlist_time, processlist_state, processlist_info, processlist_command, processlist_time, processlist_info,
parent_thread_id, role, instrumented parent_thread_id, role, instrumented
FROM performance_schema.threads FROM performance_schema.threads
WHERE name LIKE 'thread/innodb/%' WHERE name LIKE 'thread/innodb/%'
GROUP BY name; GROUP BY name;
name type processlist_user processlist_host processlist_db processlist_command processlist_time processlist_state processlist_info parent_thread_id role instrumented name type processlist_user processlist_host processlist_db processlist_command processlist_time processlist_info parent_thread_id role instrumented
thread/innodb/page_cleaner_thread BACKGROUND NULL NULL NULL NULL NULL NULL NULL NULL NULL YES thread/innodb/page_cleaner_thread BACKGROUND NULL NULL NULL NULL NULL NULL NULL NULL YES
thread/innodb/page_encrypt_thread BACKGROUND NULL NULL NULL NULL NULL NULL NULL NULL NULL YES thread/innodb/page_encrypt_thread BACKGROUND NULL NULL NULL NULL NULL NULL NULL NULL YES
thread/innodb/thread_pool_thread BACKGROUND NULL NULL NULL NULL NULL NULL NULL NULL NULL YES thread/innodb/thread_pool_thread BACKGROUND NULL NULL NULL NULL NULL NULL NULL NULL YES

View File

@@ -14,7 +14,7 @@
# We suppress here duplicates rows with the goal to avoid that the test fails # We suppress here duplicates rows with the goal to avoid that the test fails
# in case some defaults are changed. # in case some defaults are changed.
SELECT name, type, processlist_user, processlist_host, processlist_db, SELECT name, type, processlist_user, processlist_host, processlist_db,
processlist_command, processlist_time, processlist_state, processlist_info, processlist_command, processlist_time, processlist_info,
parent_thread_id, role, instrumented parent_thread_id, role, instrumented
FROM performance_schema.threads FROM performance_schema.threads
WHERE name LIKE 'thread/innodb/%' WHERE name LIKE 'thread/innodb/%'

View File

@@ -1603,7 +1603,12 @@ bool wsrep_sync_wait (THD* thd, uint mask)
This allows autocommit SELECTs and a first SELECT after SET AUTOCOMMIT=0 This allows autocommit SELECTs and a first SELECT after SET AUTOCOMMIT=0
TODO: modify to check if thd has locked any rows. TODO: modify to check if thd has locked any rows.
*/ */
return thd->wsrep_cs().sync_wait(-1); if (thd->wsrep_cs().sync_wait(-1))
{
wsrep_override_error(thd, thd->wsrep_cs().current_error(),
thd->wsrep_cs().current_error_status());
return true;
}
} }
return false; return false;