Skip to content

Commit

Permalink
MDEV-30825 innodb_compression_algorithm=0 (none) increments Innodb_nu…
Browse files Browse the repository at this point in the history
…m_pages_page_compression_error

fil_page_compress_low returns 0 for both innodb_compression_algorithm=0
and where there is compression errors. On the two callers to this
function, don't increment the compression errors if the algorithm was
none.

Reviewed by: Marko Mäkelä
  • Loading branch information
grooverdan committed Oct 18, 2023
1 parent ac15141 commit e467e8d
Show file tree
Hide file tree
Showing 3 changed files with 50 additions and 4 deletions.
18 changes: 18 additions & 0 deletions mysql-test/suite/innodb/r/innodb-page_compression_none.result
@@ -0,0 +1,18 @@
#
# MDEV-30825 innodb_compression_algorithm=0 (none) increments Innodb_num_pages_page_compression_error
#
SET @save_compression_algorithm=@@GLOBAL.innodb_compression_algorithm;
SET GLOBAL innodb_compression_algorithm=0;
SELECT VARIABLE_VALUE INTO @compress_errors FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_num_pages_page_compression_error';
CREATE TABLE t (c INT) page_compressed=1 page_compression_level=4 ENGINE=InnoDB;
INSERT INTO t VALUES (1);
FLUSH TABLES t FOR EXPORT;
UNLOCK TABLES;
SELECT VARIABLE_VALUE - @compress_errors AS NUMBER_OF_ERRORS FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_num_pages_page_compression_error';
NUMBER_OF_ERRORS
0
DROP TABLE t;
SET GLOBAL innodb_compression_algorithm=@save_compression_algorithm;
#
# End of 10.4 tests
#
26 changes: 26 additions & 0 deletions mysql-test/suite/innodb/t/innodb-page_compression_none.test
@@ -0,0 +1,26 @@
-- source include/innodb_checksum_algorithm.inc

--echo #
--echo # MDEV-30825 innodb_compression_algorithm=0 (none) increments Innodb_num_pages_page_compression_error
--echo #

SET @save_compression_algorithm=@@GLOBAL.innodb_compression_algorithm;
SET GLOBAL innodb_compression_algorithm=0;
SELECT VARIABLE_VALUE INTO @compress_errors FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_num_pages_page_compression_error';


CREATE TABLE t (c INT) page_compressed=1 page_compression_level=4 ENGINE=InnoDB;
INSERT INTO t VALUES (1);

FLUSH TABLES t FOR EXPORT;
UNLOCK TABLES;

SELECT VARIABLE_VALUE - @compress_errors AS NUMBER_OF_ERRORS FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_num_pages_page_compression_error';

DROP TABLE t;
SET GLOBAL innodb_compression_algorithm=@save_compression_algorithm;

--echo #
--echo # End of 10.4 tests
--echo #

10 changes: 6 additions & 4 deletions storage/innobase/fil/fil0pagecompress.cc
Expand Up @@ -201,6 +201,7 @@ static ulint fil_page_compress_for_full_crc32(
bool encrypted)
{
ulint comp_level = fsp_flags_get_page_compression_level(flags);
ulint comp_algo = fil_space_t::get_compression_algo(flags);

if (comp_level == 0) {
comp_level = page_zip_level;
Expand All @@ -209,12 +210,12 @@ static ulint fil_page_compress_for_full_crc32(
const ulint header_len = FIL_PAGE_COMP_ALGO;

ulint write_size = fil_page_compress_low(
buf, out_buf, header_len,
fil_space_t::get_compression_algo(flags), comp_level);
buf, out_buf, header_len, comp_algo, comp_level);

if (write_size == 0) {
fail:
srv_stats.pages_page_compression_error.inc();
if (comp_algo != PAGE_UNCOMPRESSED)
srv_stats.pages_page_compression_error.inc();
return 0;
}

Expand Down Expand Up @@ -293,7 +294,8 @@ static ulint fil_page_compress_for_non_full_crc32(
header_len, comp_algo, comp_level);

if (write_size == 0) {
srv_stats.pages_page_compression_error.inc();
if (comp_algo != PAGE_UNCOMPRESSED)
srv_stats.pages_page_compression_error.inc();
return 0;
}

Expand Down

0 comments on commit e467e8d

Please sign in to comment.