mirror of
https://github.com/MariaDB/server.git
synced 2025-01-31 02:51:44 +01:00
2d6719d7ee
Test innodb_read_only startup (which will be refused after a crash), and test also innodb_force_recovery=5, and extract some change buffer merge statistics. Omit any statistics about delete (purge) buffering, because purge could happen at any time. Use the sequence storage engine for populating the table.
81 lines
2.8 KiB
Text
81 lines
2.8 KiB
Text
--echo #
|
|
--echo # Bug#69122 - INNODB DOESN'T REDO-LOG INSERT BUFFER MERGE
|
|
--echo # OPERATION IF IT IS DONE IN-PLACE
|
|
--echo #
|
|
--source include/have_innodb.inc
|
|
# innodb_change_buffering_debug option is debug only
|
|
--source include/have_debug.inc
|
|
# Embedded server does not support crashing
|
|
--source include/not_embedded.inc
|
|
# DBUG_SUICIDE() hangs under valgrind
|
|
--source include/not_valgrind.inc
|
|
# This test is slow on buildbot.
|
|
--source include/big_test.inc
|
|
--source include/have_sequence.inc
|
|
|
|
call mtr.add_suppression("InnoDB: innodb_read_only prevents crash recovery");
|
|
call mtr.add_suppression("Plugin initialization aborted at srv0start\\.cc");
|
|
call mtr.add_suppression("Plugin 'InnoDB'");
|
|
FLUSH TABLES;
|
|
|
|
CREATE TABLE t1(
|
|
a INT AUTO_INCREMENT PRIMARY KEY,
|
|
b CHAR(1),
|
|
c INT,
|
|
INDEX(b))
|
|
ENGINE=InnoDB STATS_PERSISTENT=0;
|
|
|
|
--let $_server_id= `SELECT @@server_id`
|
|
--let $_expect_file_name= $MYSQLTEST_VARDIR/tmp/mysqld.$_server_id.expect
|
|
|
|
# The flag innodb_change_buffering_debug is only available in debug builds.
|
|
# It instructs InnoDB to try to evict pages from the buffer pool when
|
|
# change buffering is possible, so that the change buffer will be used
|
|
# whenever possible.
|
|
SET GLOBAL innodb_change_buffering_debug = 1;
|
|
let SEARCH_FILE = $MYSQLTEST_VARDIR/log/mysqld.1.err;
|
|
|
|
# Create enough rows for the table, so that the change buffer will be
|
|
# used for modifying the secondary index page. There must be multiple
|
|
# index pages, because changes to the root page are never buffered.
|
|
INSERT INTO t1 SELECT 0,'x',1 FROM seq_1_to_8192;
|
|
|
|
BEGIN;
|
|
SELECT b FROM t1 LIMIT 3;
|
|
|
|
connect (con1,localhost,root,,);
|
|
BEGIN;
|
|
DELETE FROM t1 WHERE a=1;
|
|
# This should be buffered, if innodb_change_buffering_debug = 1 is in effect.
|
|
INSERT INTO t1 VALUES(1,'X',1);
|
|
|
|
SET DEBUG_DBUG='+d,crash_after_log_ibuf_upd_inplace';
|
|
--exec echo "wait" > $_expect_file_name
|
|
--error 2013
|
|
# This should force a change buffer merge
|
|
SELECT b FROM t1 LIMIT 3;
|
|
disconnect con1;
|
|
connection default;
|
|
let SEARCH_PATTERN=Wrote log record for ibuf update in place operation;
|
|
--source include/search_pattern_in_file.inc
|
|
|
|
--let $restart_parameters= --innodb-read-only
|
|
--source include/start_mysqld.inc
|
|
CHECK TABLE t1;
|
|
--source include/shutdown_mysqld.inc
|
|
let SEARCH_PATTERN=innodb_read_only prevents crash recovery;
|
|
--source include/search_pattern_in_file.inc
|
|
|
|
--let $restart_parameters= --innodb-force-recovery=5
|
|
--source include/start_mysqld.inc
|
|
SELECT * FROM t1 LIMIT 1;
|
|
replace_regex /.*operations:.* (insert.*), delete \d.*discarded .*/\1/;
|
|
SHOW ENGINE INNODB STATUS;
|
|
# Slow shutdown will not merge the changes due to innodb_force_recovery=5.
|
|
SET GLOBAL innodb_fast_shutdown=0;
|
|
--let $restart_parameters=
|
|
--source include/restart_mysqld.inc
|
|
CHECK TABLE t1;
|
|
replace_regex /.*operations:.* (insert.*), delete \d.*discarded .*/\1/;
|
|
SHOW ENGINE INNODB STATUS;
|
|
DROP TABLE t1;
|