mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
MDEV-22653: Remove the useless parameter innodb_simulate_comp_failures
The debug parameter innodb_simulate_comp_failures injected compression failures for ROW_FORMAT=COMPRESSED tables, breaking the pre-existing logic that I had implemented in the InnoDB Plugin for MySQL 5.1 to prevent compressed page overflows. A much better check is already achieved by defining UNIV_ZIP_COPY at the compilation time. (Only UNIV_ZIP_DEBUG is part of cmake -DWITH_INNODB_EXTRA_DEBUG=ON.)
This commit is contained in:
@ -1,152 +0,0 @@
|
||||
--echo #
|
||||
--echo # Testing robustness against random compression failures
|
||||
--echo #
|
||||
|
||||
--source include/not_embedded.inc
|
||||
--source include/have_innodb.inc
|
||||
|
||||
--let $simulate_comp_failures_save = `SELECT @@innodb_simulate_comp_failures`
|
||||
|
||||
--disable_query_log
|
||||
call mtr.add_suppression("InnoDB: Simulating a compression failure for table `test`\\.`t1`");
|
||||
--enable_query_log
|
||||
|
||||
# create the table with compressed pages of size 8K.
|
||||
CREATE TABLE t1(id INT AUTO_INCREMENT PRIMARY KEY, msg VARCHAR(255), KEY msg_i(msg)) ENGINE=INNODB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8;
|
||||
|
||||
SHOW CREATE TABLE t1;
|
||||
|
||||
# percentage of compressions that will be forced to fail
|
||||
SET GLOBAL innodb_simulate_comp_failures = 25;
|
||||
|
||||
--disable_query_log
|
||||
--disable_result_log
|
||||
|
||||
let $num_inserts_ind = $num_inserts;
|
||||
let $commit_iterations=50;
|
||||
|
||||
while ($num_inserts_ind)
|
||||
{
|
||||
let $repeat = `select floor(rand() * 10)`;
|
||||
eval INSERT INTO t1(id, msg)
|
||||
VALUES ($num_inserts_ind, REPEAT('abcdefghijklmnopqrstuvwxyz', $repeat));
|
||||
dec $num_inserts_ind;
|
||||
}
|
||||
|
||||
--enable_query_log
|
||||
--enable_result_log
|
||||
|
||||
COMMIT;
|
||||
SELECT COUNT(id) FROM t1;
|
||||
|
||||
--disable_query_log
|
||||
--disable_result_log
|
||||
|
||||
# do random ops, making sure that some pages will get fragmented and reorganized.
|
||||
let $num_ops_ind = $num_ops;
|
||||
let $commit_count= $commit_iterations;
|
||||
|
||||
BEGIN;
|
||||
|
||||
while($num_ops_ind)
|
||||
{
|
||||
let $idx = `select floor(rand()*$num_inserts)`;
|
||||
let $insert_or_update = `select floor(rand()*3)`;
|
||||
|
||||
let $repeat = `select floor(rand() * 9) + 1`;
|
||||
|
||||
let $msg = query_get_value(`select repeat('abcdefghijklmnopqrstuvwxyz', $repeat) as x`, x, 1);
|
||||
|
||||
let $single_or_multi = `select floor(rand()*10)`;
|
||||
|
||||
if ($insert_or_update)
|
||||
{
|
||||
let $cnt = query_get_value(SELECT COUNT(*) cnt FROM t1 WHERE id=$idx, cnt, 1);
|
||||
|
||||
if ($cnt)
|
||||
{
|
||||
let $update = `select floor(rand()*2)`;
|
||||
|
||||
if ($update)
|
||||
{
|
||||
if ($single_or_multi)
|
||||
{
|
||||
eval UPDATE t1 SET msg=\"$msg\" WHERE id=$idx;
|
||||
}
|
||||
|
||||
if (!$single_or_multi)
|
||||
{
|
||||
eval UPDATE t1 SET msg=\"$msg\" WHERE id >= $idx - 100 AND id <= $idx + 100;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (!$update)
|
||||
{
|
||||
if ($single_or_multi)
|
||||
{
|
||||
eval INSERT INTO t1(msg, id) VALUES (\"$msg\", $idx) ON DUPLICATE KEY UPDATE msg=VALUES(msg), id = VALUES(id);
|
||||
}
|
||||
|
||||
if (!$single_or_multi)
|
||||
{
|
||||
let $diff = 200;
|
||||
|
||||
while ($diff)
|
||||
{
|
||||
eval INSERT INTO t1(msg, id) VALUES (\"$msg\", $idx + 100 - $diff) ON DUPLICATE KEY UPDATE msg=VALUES(msg), id=VALUES(id);
|
||||
|
||||
dec $diff;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!$cnt)
|
||||
{
|
||||
let $null_msg = `select floor(rand()*2)`;
|
||||
|
||||
if ($null_msg)
|
||||
{
|
||||
eval INSERT INTO t1(id,msg) VALUES ($idx, NULL);
|
||||
}
|
||||
|
||||
if (!$null_msg)
|
||||
{
|
||||
eval INSERT INTO t1(id, msg) VALUES ($idx, \"$msg\");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!$insert_or_update)
|
||||
{
|
||||
if ($single_or_multi)
|
||||
{
|
||||
eval DELETE from t1 WHERE id=$idx;
|
||||
}
|
||||
|
||||
if (!$single_or_multi)
|
||||
{
|
||||
eval DELETE from t1 WHERE id >= $idx - 100 AND id <= $idx + 100;
|
||||
}
|
||||
}
|
||||
|
||||
dec $commit_count;
|
||||
if (!$commit_count)
|
||||
{
|
||||
let $commit_count= $commit_iterations;
|
||||
COMMIT;
|
||||
BEGIN;
|
||||
}
|
||||
|
||||
dec $num_ops_ind;
|
||||
}
|
||||
|
||||
COMMIT;
|
||||
|
||||
# final cleanup
|
||||
DROP TABLE t1;
|
||||
|
||||
eval SET GLOBAL innodb_simulate_comp_failures = $simulate_comp_failures_save;
|
||||
|
||||
--enable_query_log
|
@ -1,17 +0,0 @@
|
||||
#
|
||||
# Testing robustness against random compression failures
|
||||
#
|
||||
CREATE TABLE t1(id INT AUTO_INCREMENT PRIMARY KEY, msg VARCHAR(255), KEY msg_i(msg)) ENGINE=INNODB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`msg` varchar(255) DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `msg_i` (`msg`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8
|
||||
SET GLOBAL innodb_simulate_comp_failures = 25;
|
||||
COMMIT;
|
||||
SELECT COUNT(id) FROM t1;
|
||||
COUNT(id)
|
||||
1500
|
@ -1,17 +0,0 @@
|
||||
#
|
||||
# Testing robustness against random compression failures
|
||||
#
|
||||
CREATE TABLE t1(id INT AUTO_INCREMENT PRIMARY KEY, msg VARCHAR(255), KEY msg_i(msg)) ENGINE=INNODB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`msg` varchar(255) DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `msg_i` (`msg`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8
|
||||
SET GLOBAL innodb_simulate_comp_failures = 25;
|
||||
COMMIT;
|
||||
SELECT COUNT(id) FROM t1;
|
||||
COUNT(id)
|
||||
1000
|
@ -1,2 +0,0 @@
|
||||
--innodb-file-per-table
|
||||
--skip-innodb-doublewrite
|
@ -1,9 +0,0 @@
|
||||
--source include/big_test.inc
|
||||
# test takes too long with valgrind
|
||||
--source include/not_valgrind.inc
|
||||
--source include/have_debug.inc
|
||||
--let $num_inserts = 1500
|
||||
--let $num_ops = 3500
|
||||
--source suite/innodb/include/innodb_simulate_comp_failures.inc
|
||||
# clean exit
|
||||
--exit
|
@ -1,2 +0,0 @@
|
||||
--innodb-file-per-table
|
||||
|
@ -1,8 +0,0 @@
|
||||
--source include/have_debug.inc
|
||||
--source include/not_valgrind.inc
|
||||
|
||||
--let $num_inserts = 1000
|
||||
--let $num_ops = 30
|
||||
--source suite/innodb/include/innodb_simulate_comp_failures.inc
|
||||
# clean exit
|
||||
--exit
|
@ -1,77 +0,0 @@
|
||||
SET @start_global_value = @@global.innodb_simulate_comp_failures;
|
||||
SELECT @start_global_value;
|
||||
@start_global_value
|
||||
0
|
||||
Valid values are between 0 and 99
|
||||
select @@global.innodb_simulate_comp_failures between 0 and 99;
|
||||
@@global.innodb_simulate_comp_failures between 0 and 99
|
||||
1
|
||||
select @@global.innodb_simulate_comp_failures;
|
||||
@@global.innodb_simulate_comp_failures
|
||||
0
|
||||
select @@session.innodb_simulate_comp_failures;
|
||||
ERROR HY000: Variable 'innodb_simulate_comp_failures' is a GLOBAL variable
|
||||
show global variables like 'innodb_simulate_comp_failures';
|
||||
Variable_name Value
|
||||
innodb_simulate_comp_failures 0
|
||||
show session variables like 'innodb_simulate_comp_failures';
|
||||
Variable_name Value
|
||||
innodb_simulate_comp_failures 0
|
||||
select * from information_schema.global_variables where variable_name='innodb_simulate_comp_failures';
|
||||
VARIABLE_NAME VARIABLE_VALUE
|
||||
INNODB_SIMULATE_COMP_FAILURES 0
|
||||
select * from information_schema.session_variables where variable_name='innodb_simulate_comp_failures';
|
||||
VARIABLE_NAME VARIABLE_VALUE
|
||||
INNODB_SIMULATE_COMP_FAILURES 0
|
||||
set global innodb_simulate_comp_failures=10;
|
||||
select @@global.innodb_simulate_comp_failures;
|
||||
@@global.innodb_simulate_comp_failures
|
||||
10
|
||||
select * from information_schema.global_variables where variable_name='innodb_simulate_comp_failures';
|
||||
VARIABLE_NAME VARIABLE_VALUE
|
||||
INNODB_SIMULATE_COMP_FAILURES 10
|
||||
select * from information_schema.session_variables where variable_name='innodb_simulate_comp_failures';
|
||||
VARIABLE_NAME VARIABLE_VALUE
|
||||
INNODB_SIMULATE_COMP_FAILURES 10
|
||||
set session innodb_simulate_comp_failures=1;
|
||||
ERROR HY000: Variable 'innodb_simulate_comp_failures' is a GLOBAL variable and should be set with SET GLOBAL
|
||||
set global innodb_simulate_comp_failures=1.1;
|
||||
ERROR 42000: Incorrect argument type to variable 'innodb_simulate_comp_failures'
|
||||
set global innodb_simulate_comp_failures=1e1;
|
||||
ERROR 42000: Incorrect argument type to variable 'innodb_simulate_comp_failures'
|
||||
set global innodb_simulate_comp_failures="foo";
|
||||
ERROR 42000: Incorrect argument type to variable 'innodb_simulate_comp_failures'
|
||||
set global innodb_simulate_comp_failures=-7;
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect innodb_simulate_comp_failures value: '-7'
|
||||
select @@global.innodb_simulate_comp_failures;
|
||||
@@global.innodb_simulate_comp_failures
|
||||
0
|
||||
select * from information_schema.global_variables where variable_name='innodb_simulate_comp_failures';
|
||||
VARIABLE_NAME VARIABLE_VALUE
|
||||
INNODB_SIMULATE_COMP_FAILURES 0
|
||||
set global innodb_simulate_comp_failures=106;
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect innodb_simulate_comp_failures value: '106'
|
||||
select @@global.innodb_simulate_comp_failures;
|
||||
@@global.innodb_simulate_comp_failures
|
||||
99
|
||||
select * from information_schema.global_variables where variable_name='innodb_simulate_comp_failures';
|
||||
VARIABLE_NAME VARIABLE_VALUE
|
||||
INNODB_SIMULATE_COMP_FAILURES 99
|
||||
set global innodb_simulate_comp_failures=0;
|
||||
select @@global.innodb_simulate_comp_failures;
|
||||
@@global.innodb_simulate_comp_failures
|
||||
0
|
||||
set global innodb_simulate_comp_failures=99;
|
||||
select @@global.innodb_simulate_comp_failures;
|
||||
@@global.innodb_simulate_comp_failures
|
||||
99
|
||||
set global innodb_simulate_comp_failures=DEFAULT;
|
||||
select @@global.innodb_simulate_comp_failures;
|
||||
@@global.innodb_simulate_comp_failures
|
||||
0
|
||||
SET @@global.innodb_simulate_comp_failures = @start_global_value;
|
||||
SELECT @@global.innodb_simulate_comp_failures;
|
||||
@@global.innodb_simulate_comp_failures
|
||||
0
|
@ -2202,18 +2202,6 @@ NUMERIC_BLOCK_SIZE 0
|
||||
ENUM_VALUE_LIST NULL
|
||||
READ_ONLY NO
|
||||
COMMAND_LINE_ARGUMENT REQUIRED
|
||||
VARIABLE_NAME INNODB_SIMULATE_COMP_FAILURES
|
||||
SESSION_VALUE NULL
|
||||
DEFAULT_VALUE 0
|
||||
VARIABLE_SCOPE GLOBAL
|
||||
VARIABLE_TYPE INT UNSIGNED
|
||||
VARIABLE_COMMENT Simulate compression failures.
|
||||
NUMERIC_MIN_VALUE 0
|
||||
NUMERIC_MAX_VALUE 99
|
||||
NUMERIC_BLOCK_SIZE 0
|
||||
ENUM_VALUE_LIST NULL
|
||||
READ_ONLY NO
|
||||
COMMAND_LINE_ARGUMENT NONE
|
||||
VARIABLE_NAME INNODB_SORT_BUFFER_SIZE
|
||||
SESSION_VALUE NULL
|
||||
DEFAULT_VALUE 1048576
|
||||
|
@ -1,65 +0,0 @@
|
||||
--source include/have_innodb.inc
|
||||
--source include/have_debug.inc
|
||||
|
||||
SET @start_global_value = @@global.innodb_simulate_comp_failures;
|
||||
SELECT @start_global_value;
|
||||
|
||||
#
|
||||
# exists as global only
|
||||
#
|
||||
|
||||
--echo Valid values are between 0 and 99
|
||||
select @@global.innodb_simulate_comp_failures between 0 and 99;
|
||||
select @@global.innodb_simulate_comp_failures;
|
||||
|
||||
--error ER_INCORRECT_GLOBAL_LOCAL_VAR
|
||||
select @@session.innodb_simulate_comp_failures;
|
||||
|
||||
show global variables like 'innodb_simulate_comp_failures';
|
||||
show session variables like 'innodb_simulate_comp_failures';
|
||||
select * from information_schema.global_variables where variable_name='innodb_simulate_comp_failures';
|
||||
select * from information_schema.session_variables where variable_name='innodb_simulate_comp_failures';
|
||||
|
||||
#
|
||||
# show that it's writable
|
||||
#
|
||||
|
||||
set global innodb_simulate_comp_failures=10;
|
||||
select @@global.innodb_simulate_comp_failures;
|
||||
select * from information_schema.global_variables where variable_name='innodb_simulate_comp_failures';
|
||||
select * from information_schema.session_variables where variable_name='innodb_simulate_comp_failures';
|
||||
|
||||
--error ER_GLOBAL_VARIABLE
|
||||
set session innodb_simulate_comp_failures=1;
|
||||
|
||||
#
|
||||
# incorrect types
|
||||
#
|
||||
|
||||
--error ER_WRONG_TYPE_FOR_VAR
|
||||
set global innodb_simulate_comp_failures=1.1;
|
||||
--error ER_WRONG_TYPE_FOR_VAR
|
||||
set global innodb_simulate_comp_failures=1e1;
|
||||
--error ER_WRONG_TYPE_FOR_VAR
|
||||
set global innodb_simulate_comp_failures="foo";
|
||||
|
||||
set global innodb_simulate_comp_failures=-7;
|
||||
select @@global.innodb_simulate_comp_failures;
|
||||
select * from information_schema.global_variables where variable_name='innodb_simulate_comp_failures';
|
||||
set global innodb_simulate_comp_failures=106;
|
||||
select @@global.innodb_simulate_comp_failures;
|
||||
select * from information_schema.global_variables where variable_name='innodb_simulate_comp_failures';
|
||||
|
||||
#
|
||||
# min/max/DEFAULT values
|
||||
#
|
||||
|
||||
set global innodb_simulate_comp_failures=0;
|
||||
select @@global.innodb_simulate_comp_failures;
|
||||
set global innodb_simulate_comp_failures=99;
|
||||
select @@global.innodb_simulate_comp_failures;
|
||||
set global innodb_simulate_comp_failures=DEFAULT;
|
||||
select @@global.innodb_simulate_comp_failures;
|
||||
|
||||
SET @@global.innodb_simulate_comp_failures = @start_global_value;
|
||||
SELECT @@global.innodb_simulate_comp_failures;
|
@ -21044,11 +21044,6 @@ static MYSQL_SYSVAR_BOOL(master_thread_disabled_debug,
|
||||
PLUGIN_VAR_OPCMDARG,
|
||||
"Disable master thread",
|
||||
NULL, srv_master_thread_disabled_debug_update, FALSE);
|
||||
|
||||
static MYSQL_SYSVAR_UINT(simulate_comp_failures, srv_simulate_comp_failures,
|
||||
PLUGIN_VAR_NOCMDARG,
|
||||
"Simulate compression failures.",
|
||||
NULL, NULL, 0, 0, 99, 0);
|
||||
#endif /* UNIV_DEBUG */
|
||||
|
||||
static MYSQL_SYSVAR_BOOL(force_primary_key,
|
||||
@ -21392,7 +21387,6 @@ static struct st_mysql_sys_var* innobase_system_variables[]= {
|
||||
MYSQL_SYSVAR(compression_pad_pct_max),
|
||||
MYSQL_SYSVAR(default_row_format),
|
||||
#ifdef UNIV_DEBUG
|
||||
MYSQL_SYSVAR(simulate_comp_failures),
|
||||
MYSQL_SYSVAR(trx_rseg_n_slots_debug),
|
||||
MYSQL_SYSVAR(limit_optimistic_insert_debug),
|
||||
MYSQL_SYSVAR(trx_purge_view_update_only_debug),
|
||||
|
@ -619,9 +619,6 @@ extern struct export_var_t export_vars;
|
||||
/** Global counters */
|
||||
extern srv_stats_t srv_stats;
|
||||
|
||||
/** Simulate compression failures. */
|
||||
extern uint srv_simulate_comp_failures;
|
||||
|
||||
/** Fatal semaphore wait threshold = maximum number of seconds
|
||||
that semaphore times out in InnoDB */
|
||||
#define DEFAULT_SRV_FATAL_SEMAPHORE_TIMEOUT 600
|
||||
|
@ -1372,33 +1372,6 @@ page_zip_compress(
|
||||
|
||||
MONITOR_INC(MONITOR_PAGE_COMPRESS);
|
||||
|
||||
/* Simulate a compression failure with a probability determined by
|
||||
innodb_simulate_comp_failures, only if the page has 2 or more
|
||||
records. */
|
||||
|
||||
if (srv_simulate_comp_failures
|
||||
&& !dict_index_is_ibuf(index)
|
||||
&& page_get_n_recs(page) >= 2
|
||||
&& ((ulint)(rand() % 100) < srv_simulate_comp_failures)
|
||||
&& strcasecmp(index->table_name, "IBUF_DUMMY") != 0) {
|
||||
|
||||
#ifdef UNIV_DEBUG
|
||||
ib::error()
|
||||
<< "Simulating a compression failure"
|
||||
<< " for table " << index->table->name
|
||||
<< " index "
|
||||
<< index->name()
|
||||
<< " page "
|
||||
<< page_get_page_no(page)
|
||||
<< "("
|
||||
<< (page_is_leaf(page) ? "leaf" : "non-leaf")
|
||||
<< ")";
|
||||
|
||||
#endif
|
||||
|
||||
goto err_exit;
|
||||
}
|
||||
|
||||
heap = mem_heap_create(page_zip_get_size(page_zip)
|
||||
+ n_fields * (2 + sizeof(ulint))
|
||||
+ REC_OFFS_HEADER_SIZE
|
||||
|
@ -509,9 +509,6 @@ current_time % 5 != 0. */
|
||||
#endif /* MEM_PERIODIC_CHECK */
|
||||
# define SRV_MASTER_DICT_LRU_INTERVAL (47)
|
||||
|
||||
/** Simulate compression failures. */
|
||||
UNIV_INTERN uint srv_simulate_comp_failures;
|
||||
|
||||
/** Buffer pool dump status frequence in percentages */
|
||||
UNIV_INTERN ulong srv_buf_dump_status_frequency;
|
||||
|
||||
|
Reference in New Issue
Block a user