MDEV-17957 Make Innodb_checksum_algorithm stricter for strict_* values
Problem: Innodb_checksum_algorithm checks for all checksum algorithm to validate the page checksum even though the algorithm is specified as strict_crc32, strict_innodb, strict_none. Fix: Remove the checks for all checksum algorithm to validate the page checksum if the algo is specified as strict_* values.
This commit is contained in:
parent
ce1669af12
commit
5f5e73f1fe
@ -581,6 +581,8 @@ buf_page_is_corrupted(
|
|||||||
|
|
||||||
ulint checksum_field1;
|
ulint checksum_field1;
|
||||||
ulint checksum_field2;
|
ulint checksum_field2;
|
||||||
|
ib_uint32_t crc32 = ULINT32_UNDEFINED;
|
||||||
|
bool crc32_inited = false;
|
||||||
|
|
||||||
if (!zip_size
|
if (!zip_size
|
||||||
&& memcmp(read_buf + FIL_PAGE_LSN + 4,
|
&& memcmp(read_buf + FIL_PAGE_LSN + 4,
|
||||||
@ -660,120 +662,124 @@ buf_page_is_corrupted(
|
|||||||
return(FALSE);
|
return(FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
ulint page_no = mach_read_from_4(read_buf + FIL_PAGE_OFFSET);
|
|
||||||
ulint space_id = mach_read_from_4(read_buf + FIL_PAGE_SPACE_ID);
|
|
||||||
const srv_checksum_algorithm_t curr_algo =
|
const srv_checksum_algorithm_t curr_algo =
|
||||||
static_cast<srv_checksum_algorithm_t>(srv_checksum_algorithm);
|
static_cast<srv_checksum_algorithm_t>(srv_checksum_algorithm);
|
||||||
|
|
||||||
switch (curr_algo) {
|
switch (curr_algo) {
|
||||||
case SRV_CHECKSUM_ALGORITHM_CRC32:
|
|
||||||
case SRV_CHECKSUM_ALGORITHM_STRICT_CRC32:
|
case SRV_CHECKSUM_ALGORITHM_STRICT_CRC32:
|
||||||
|
if (buf_page_is_checksum_valid_crc32(read_buf, checksum_field1,
|
||||||
if (buf_page_is_checksum_valid_crc32(read_buf,
|
checksum_field2)) {
|
||||||
checksum_field1, checksum_field2)) {
|
return FALSE;
|
||||||
return(FALSE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (buf_page_is_checksum_valid_none(read_buf,
|
return TRUE;
|
||||||
checksum_field1, checksum_field2)) {
|
|
||||||
if (curr_algo
|
|
||||||
== SRV_CHECKSUM_ALGORITHM_STRICT_CRC32) {
|
|
||||||
page_warn_strict_checksum(
|
|
||||||
curr_algo,
|
|
||||||
SRV_CHECKSUM_ALGORITHM_NONE,
|
|
||||||
space_id, page_no);
|
|
||||||
}
|
|
||||||
|
|
||||||
return(FALSE);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (buf_page_is_checksum_valid_innodb(read_buf,
|
|
||||||
checksum_field1, checksum_field2)) {
|
|
||||||
if (curr_algo
|
|
||||||
== SRV_CHECKSUM_ALGORITHM_STRICT_CRC32) {
|
|
||||||
page_warn_strict_checksum(
|
|
||||||
curr_algo,
|
|
||||||
SRV_CHECKSUM_ALGORITHM_INNODB,
|
|
||||||
space_id, page_no);
|
|
||||||
}
|
|
||||||
|
|
||||||
return(FALSE);
|
|
||||||
}
|
|
||||||
|
|
||||||
return(TRUE);
|
|
||||||
|
|
||||||
case SRV_CHECKSUM_ALGORITHM_INNODB:
|
|
||||||
case SRV_CHECKSUM_ALGORITHM_STRICT_INNODB:
|
case SRV_CHECKSUM_ALGORITHM_STRICT_INNODB:
|
||||||
|
if (buf_page_is_checksum_valid_innodb(read_buf, checksum_field1,
|
||||||
if (buf_page_is_checksum_valid_innodb(read_buf,
|
checksum_field2)) {
|
||||||
checksum_field1, checksum_field2)) {
|
return FALSE;
|
||||||
return(FALSE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (buf_page_is_checksum_valid_none(read_buf,
|
return TRUE;
|
||||||
checksum_field1, checksum_field2)) {
|
|
||||||
if (curr_algo
|
|
||||||
== SRV_CHECKSUM_ALGORITHM_STRICT_INNODB) {
|
|
||||||
page_warn_strict_checksum(
|
|
||||||
curr_algo,
|
|
||||||
SRV_CHECKSUM_ALGORITHM_NONE,
|
|
||||||
space_id, page_no);
|
|
||||||
}
|
|
||||||
|
|
||||||
return(FALSE);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (buf_page_is_checksum_valid_crc32(read_buf,
|
|
||||||
checksum_field1, checksum_field2)) {
|
|
||||||
if (curr_algo
|
|
||||||
== SRV_CHECKSUM_ALGORITHM_STRICT_INNODB) {
|
|
||||||
page_warn_strict_checksum(
|
|
||||||
curr_algo,
|
|
||||||
SRV_CHECKSUM_ALGORITHM_CRC32,
|
|
||||||
space_id, page_no);
|
|
||||||
}
|
|
||||||
|
|
||||||
return(FALSE);
|
|
||||||
}
|
|
||||||
|
|
||||||
return(TRUE);
|
|
||||||
|
|
||||||
case SRV_CHECKSUM_ALGORITHM_STRICT_NONE:
|
case SRV_CHECKSUM_ALGORITHM_STRICT_NONE:
|
||||||
|
if (buf_page_is_checksum_valid_none(read_buf, checksum_field1,
|
||||||
if (buf_page_is_checksum_valid_none(read_buf,
|
checksum_field2)) {
|
||||||
checksum_field1, checksum_field2)) {
|
return FALSE;
|
||||||
return(FALSE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (buf_page_is_checksum_valid_crc32(read_buf,
|
return TRUE;
|
||||||
checksum_field1, checksum_field2)) {
|
case SRV_CHECKSUM_ALGORITHM_CRC32:
|
||||||
page_warn_strict_checksum(
|
case SRV_CHECKSUM_ALGORITHM_INNODB:
|
||||||
curr_algo,
|
/* Verify old versions of InnoDB only stored 8 byte lsn to the
|
||||||
SRV_CHECKSUM_ALGORITHM_CRC32,
|
start and end of the page. */
|
||||||
space_id, page_no);
|
|
||||||
return(FALSE);
|
/* Since innodb_checksum_algorithm is not strict_* allow
|
||||||
|
any of the algos to match for the old field. */
|
||||||
|
|
||||||
|
if (checksum_field2
|
||||||
|
!= mach_read_from_4(read_buf + FIL_PAGE_LSN)
|
||||||
|
&& checksum_field2 != BUF_NO_CHECKSUM_MAGIC) {
|
||||||
|
|
||||||
|
if (srv_checksum_algorithm
|
||||||
|
== SRV_CHECKSUM_ALGORITHM_CRC32) {
|
||||||
|
|
||||||
|
crc32 = buf_calc_page_crc32(read_buf);
|
||||||
|
crc32_inited = true;
|
||||||
|
|
||||||
|
if (checksum_field2 != crc32
|
||||||
|
&& checksum_field2
|
||||||
|
!= buf_calc_page_old_checksum(read_buf)) {
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
ut_ad(srv_checksum_algorithm
|
||||||
|
== SRV_CHECKSUM_ALGORITHM_INNODB);
|
||||||
|
|
||||||
|
if (checksum_field2
|
||||||
|
!= buf_calc_page_old_checksum(read_buf)) {
|
||||||
|
|
||||||
|
crc32 = buf_calc_page_crc32(read_buf);
|
||||||
|
crc32_inited = TRUE;
|
||||||
|
|
||||||
|
if (checksum_field2 != crc32) {
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (buf_page_is_checksum_valid_innodb(read_buf,
|
/* Old field is fine, check the new field */
|
||||||
checksum_field1, checksum_field2)) {
|
|
||||||
page_warn_strict_checksum(
|
if (checksum_field1 != 0
|
||||||
curr_algo,
|
&& checksum_field1 != BUF_NO_CHECKSUM_MAGIC) {
|
||||||
SRV_CHECKSUM_ALGORITHM_INNODB,
|
|
||||||
space_id, page_no);
|
if (srv_checksum_algorithm
|
||||||
return(FALSE);
|
== SRV_CHECKSUM_ALGORITHM_CRC32) {
|
||||||
|
|
||||||
|
if (!crc32_inited) {
|
||||||
|
crc32 = buf_calc_page_crc32(read_buf);
|
||||||
|
crc32_inited = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (checksum_field1 != crc32
|
||||||
|
&& checksum_field1
|
||||||
|
!= buf_calc_page_new_checksum(read_buf)) {
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
ut_ad(srv_checksum_algorithm
|
||||||
|
== SRV_CHECKSUM_ALGORITHM_INNODB);
|
||||||
|
|
||||||
|
if (checksum_field1
|
||||||
|
!= buf_calc_page_new_checksum(read_buf)) {
|
||||||
|
|
||||||
|
if (!crc32_inited) {
|
||||||
|
crc32 = buf_calc_page_crc32(
|
||||||
|
read_buf);
|
||||||
|
crc32_inited = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (checksum_field1 != crc32) {
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return(TRUE);
|
if (crc32_inited
|
||||||
|
&& ((checksum_field1 == crc32
|
||||||
|
&& checksum_field2 != crc32)
|
||||||
|
|| (checksum_field1 != crc32
|
||||||
|
&& checksum_field2 == crc32))) {
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
case SRV_CHECKSUM_ALGORITHM_NONE:
|
case SRV_CHECKSUM_ALGORITHM_NONE:
|
||||||
/* should have returned FALSE earlier */
|
ut_error;
|
||||||
break;
|
|
||||||
/* no default so the compiler will emit a warning if new enum
|
|
||||||
is added and not handled here */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ut_error;
|
return FALSE;
|
||||||
return(FALSE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Dump a page to stderr.
|
/** Dump a page to stderr.
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
|
|
||||||
Copyright (c) 1994, 2016, Oracle and/or its affiliates. All Rights Reserved.
|
Copyright (c) 1994, 2016, Oracle and/or its affiliates. All Rights Reserved.
|
||||||
Copyright (c) 2013, 2016, MariaDB Corporation
|
Copyright (c) 2013, 2018, MariaDB Corporation.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify it under
|
This program is free software; you can redistribute it and/or modify it under
|
||||||
the terms of the GNU General Public License as published by the Free Software
|
the terms of the GNU General Public License as published by the Free Software
|
||||||
@ -1123,19 +1123,6 @@ const rec_t*
|
|||||||
page_find_rec_max_not_deleted(
|
page_find_rec_max_not_deleted(
|
||||||
const page_t* page);
|
const page_t* page);
|
||||||
|
|
||||||
/** Issue a warning when the checksum that is stored in the page is valid,
|
|
||||||
but different than the global setting innodb_checksum_algorithm.
|
|
||||||
@param[in] current_algo current checksum algorithm
|
|
||||||
@param[in] page_checksum page valid checksum
|
|
||||||
@param[in] space_id tablespace id
|
|
||||||
@param[in] page_no page number */
|
|
||||||
void
|
|
||||||
page_warn_strict_checksum(
|
|
||||||
srv_checksum_algorithm_t curr_algo,
|
|
||||||
srv_checksum_algorithm_t page_checksum,
|
|
||||||
ulint space_id,
|
|
||||||
ulint page_no);
|
|
||||||
|
|
||||||
#ifdef UNIV_MATERIALIZE
|
#ifdef UNIV_MATERIALIZE
|
||||||
#undef UNIV_INLINE
|
#undef UNIV_INLINE
|
||||||
#define UNIV_INLINE UNIV_INLINE_ORIGINAL
|
#define UNIV_INLINE UNIV_INLINE_ORIGINAL
|
||||||
|
@ -546,21 +546,6 @@ from outside the buffer pool.
|
|||||||
# define UNIV_INLINE UNIV_INLINE_ORIGINAL
|
# define UNIV_INLINE UNIV_INLINE_ORIGINAL
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef UNIV_INNOCHECKSUM
|
|
||||||
/** Issue a warning when the checksum that is stored in the page is valid,
|
|
||||||
but different than the global setting innodb_checksum_algorithm.
|
|
||||||
@param[in] current_algo current checksum algorithm
|
|
||||||
@param[in] page_checksum page valid checksum
|
|
||||||
@param[in] space_id tablespace id
|
|
||||||
@param[in] page_no page number */
|
|
||||||
void
|
|
||||||
page_warn_strict_checksum(
|
|
||||||
srv_checksum_algorithm_t curr_algo,
|
|
||||||
srv_checksum_algorithm_t page_checksum,
|
|
||||||
ulint space_id,
|
|
||||||
ulint page_no);
|
|
||||||
#endif /* UNIV_INNOCHECKSUM */
|
|
||||||
|
|
||||||
#ifndef UNIV_INNOCHECKSUM
|
#ifndef UNIV_INNOCHECKSUM
|
||||||
#ifndef UNIV_NONINL
|
#ifndef UNIV_NONINL
|
||||||
# include "page0zip.ic"
|
# include "page0zip.ic"
|
||||||
|
@ -2807,45 +2807,3 @@ page_find_rec_max_not_deleted(
|
|||||||
}
|
}
|
||||||
return(prev_rec);
|
return(prev_rec);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Issue a warning when the checksum that is stored in the page is valid,
|
|
||||||
but different than the global setting innodb_checksum_algorithm.
|
|
||||||
@param[in] current_algo current checksum algorithm
|
|
||||||
@param[in] page_checksum page valid checksum
|
|
||||||
@param[in] space_id tablespace id
|
|
||||||
@param[in] page_no page number */
|
|
||||||
void
|
|
||||||
page_warn_strict_checksum(
|
|
||||||
srv_checksum_algorithm_t curr_algo,
|
|
||||||
srv_checksum_algorithm_t page_checksum,
|
|
||||||
ulint space_id,
|
|
||||||
ulint page_no)
|
|
||||||
{
|
|
||||||
srv_checksum_algorithm_t curr_algo_nonstrict;
|
|
||||||
switch (curr_algo) {
|
|
||||||
case SRV_CHECKSUM_ALGORITHM_STRICT_CRC32:
|
|
||||||
curr_algo_nonstrict = SRV_CHECKSUM_ALGORITHM_CRC32;
|
|
||||||
break;
|
|
||||||
case SRV_CHECKSUM_ALGORITHM_STRICT_INNODB:
|
|
||||||
curr_algo_nonstrict = SRV_CHECKSUM_ALGORITHM_INNODB;
|
|
||||||
break;
|
|
||||||
case SRV_CHECKSUM_ALGORITHM_STRICT_NONE:
|
|
||||||
curr_algo_nonstrict = SRV_CHECKSUM_ALGORITHM_NONE;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
ut_error;
|
|
||||||
}
|
|
||||||
|
|
||||||
ib_logf(IB_LOG_LEVEL_WARN,
|
|
||||||
"innodb_checksum_algorithm is set to \"%s\""
|
|
||||||
" but the page [page id: space=" ULINTPF ","
|
|
||||||
" page number=" ULINTPF "] contains a valid checksum \"%s\"."
|
|
||||||
" Accepting the page as valid. Change innodb_checksum_algorithm"
|
|
||||||
" to \"%s\" to silently accept such pages or rewrite all pages"
|
|
||||||
" so that they contain \"%s\" checksum.",
|
|
||||||
buf_checksum_algorithm_name(curr_algo),
|
|
||||||
space_id, page_no,
|
|
||||||
buf_checksum_algorithm_name(page_checksum),
|
|
||||||
buf_checksum_algorithm_name(curr_algo_nonstrict),
|
|
||||||
buf_checksum_algorithm_name(curr_algo_nonstrict));
|
|
||||||
}
|
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
Copyright (c) 2005, 2016, Oracle and/or its affiliates. All Rights Reserved.
|
Copyright (c) 2005, 2016, Oracle and/or its affiliates. All Rights Reserved.
|
||||||
Copyright (c) 2012, Facebook Inc.
|
Copyright (c) 2012, Facebook Inc.
|
||||||
Copyright (c) 2017, MariaDB Corporation.
|
Copyright (c) 2014, 2018, MariaDB Corporation.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify it under
|
This program is free software; you can redistribute it and/or modify it under
|
||||||
the terms of the GNU General Public License as published by the Free Software
|
the terms of the GNU General Public License as published by the Free Software
|
||||||
@ -48,8 +48,6 @@ using namespace std;
|
|||||||
#include "btr0cur.h"
|
#include "btr0cur.h"
|
||||||
#include "page0types.h"
|
#include "page0types.h"
|
||||||
#include "log0recv.h"
|
#include "log0recv.h"
|
||||||
#else
|
|
||||||
#define page_warn_strict_checksum(A,B,C,D)
|
|
||||||
#endif /* !UNIV_INNOCHECKSUM */
|
#endif /* !UNIV_INNOCHECKSUM */
|
||||||
#include "zlib.h"
|
#include "zlib.h"
|
||||||
#ifndef UNIV_HOTBACKUP
|
#ifndef UNIV_HOTBACKUP
|
||||||
@ -4926,13 +4924,6 @@ page_zip_verify_checksum(
|
|||||||
stored = static_cast<ib_uint32_t>(mach_read_from_4(
|
stored = static_cast<ib_uint32_t>(mach_read_from_4(
|
||||||
static_cast<const unsigned char*>(data) + FIL_PAGE_SPACE_OR_CHKSUM));
|
static_cast<const unsigned char*>(data) + FIL_PAGE_SPACE_OR_CHKSUM));
|
||||||
|
|
||||||
ulint page_no MY_ATTRIBUTE((unused)) =
|
|
||||||
mach_read_from_4(static_cast<const unsigned char*>
|
|
||||||
(data) + FIL_PAGE_OFFSET);
|
|
||||||
ulint space_id MY_ATTRIBUTE((unused)) =
|
|
||||||
mach_read_from_4(static_cast<const unsigned char*>
|
|
||||||
(data) + FIL_PAGE_SPACE_ID);
|
|
||||||
|
|
||||||
#if FIL_PAGE_LSN % 8
|
#if FIL_PAGE_LSN % 8
|
||||||
#error "FIL_PAGE_LSN must be 64 bit aligned"
|
#error "FIL_PAGE_LSN must be 64 bit aligned"
|
||||||
#endif
|
#endif
|
||||||
@ -4974,97 +4965,31 @@ page_zip_verify_checksum(
|
|||||||
|
|
||||||
switch (curr_algo) {
|
switch (curr_algo) {
|
||||||
case SRV_CHECKSUM_ALGORITHM_STRICT_CRC32:
|
case SRV_CHECKSUM_ALGORITHM_STRICT_CRC32:
|
||||||
case SRV_CHECKSUM_ALGORITHM_CRC32:
|
|
||||||
|
|
||||||
if (stored == BUF_NO_CHECKSUM_MAGIC) {
|
|
||||||
if (curr_algo
|
|
||||||
== SRV_CHECKSUM_ALGORITHM_STRICT_CRC32) {
|
|
||||||
page_warn_strict_checksum(
|
|
||||||
curr_algo,
|
|
||||||
SRV_CHECKSUM_ALGORITHM_NONE,
|
|
||||||
space_id, page_no);
|
|
||||||
}
|
|
||||||
|
|
||||||
return(TRUE);
|
|
||||||
}
|
|
||||||
|
|
||||||
innodb = static_cast<ib_uint32_t>(page_zip_calc_checksum(
|
|
||||||
data, size, SRV_CHECKSUM_ALGORITHM_INNODB));
|
|
||||||
|
|
||||||
if (stored == innodb) {
|
|
||||||
if (curr_algo
|
|
||||||
== SRV_CHECKSUM_ALGORITHM_STRICT_CRC32) {
|
|
||||||
page_warn_strict_checksum(
|
|
||||||
curr_algo,
|
|
||||||
SRV_CHECKSUM_ALGORITHM_INNODB,
|
|
||||||
space_id, page_no);
|
|
||||||
}
|
|
||||||
|
|
||||||
return(TRUE);
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
case SRV_CHECKSUM_ALGORITHM_STRICT_INNODB:
|
case SRV_CHECKSUM_ALGORITHM_STRICT_INNODB:
|
||||||
case SRV_CHECKSUM_ALGORITHM_INNODB:
|
|
||||||
|
|
||||||
if (stored == BUF_NO_CHECKSUM_MAGIC) {
|
|
||||||
if (curr_algo
|
|
||||||
== SRV_CHECKSUM_ALGORITHM_STRICT_INNODB) {
|
|
||||||
page_warn_strict_checksum(
|
|
||||||
curr_algo,
|
|
||||||
SRV_CHECKSUM_ALGORITHM_NONE,
|
|
||||||
space_id, page_no);
|
|
||||||
}
|
|
||||||
|
|
||||||
return(TRUE);
|
|
||||||
}
|
|
||||||
|
|
||||||
crc32 = static_cast<ib_uint32_t>(page_zip_calc_checksum(
|
|
||||||
data, size, SRV_CHECKSUM_ALGORITHM_CRC32));
|
|
||||||
|
|
||||||
if (stored == crc32) {
|
|
||||||
if (curr_algo
|
|
||||||
== SRV_CHECKSUM_ALGORITHM_STRICT_INNODB) {
|
|
||||||
page_warn_strict_checksum(
|
|
||||||
curr_algo,
|
|
||||||
SRV_CHECKSUM_ALGORITHM_CRC32,
|
|
||||||
space_id, page_no);
|
|
||||||
}
|
|
||||||
|
|
||||||
return(TRUE);
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
case SRV_CHECKSUM_ALGORITHM_STRICT_NONE:
|
case SRV_CHECKSUM_ALGORITHM_STRICT_NONE:
|
||||||
|
return stored == calc;
|
||||||
|
|
||||||
crc32 = static_cast<ib_uint32_t>(page_zip_calc_checksum(
|
case SRV_CHECKSUM_ALGORITHM_CRC32:
|
||||||
data, size, SRV_CHECKSUM_ALGORITHM_CRC32));
|
if (stored == BUF_NO_CHECKSUM_MAGIC) {
|
||||||
|
|
||||||
if (stored == crc32) {
|
|
||||||
page_warn_strict_checksum(
|
|
||||||
curr_algo, SRV_CHECKSUM_ALGORITHM_CRC32,
|
|
||||||
space_id, page_no);
|
|
||||||
|
|
||||||
return(TRUE);
|
return(TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
crc32 = calc;
|
||||||
innodb = static_cast<ib_uint32_t>(page_zip_calc_checksum(
|
innodb = static_cast<ib_uint32_t>(page_zip_calc_checksum(
|
||||||
data, size, SRV_CHECKSUM_ALGORITHM_INNODB));
|
data, size, SRV_CHECKSUM_ALGORITHM_INNODB));
|
||||||
|
break;
|
||||||
if (stored == innodb) {
|
case SRV_CHECKSUM_ALGORITHM_INNODB:
|
||||||
page_warn_strict_checksum(
|
if (stored == BUF_NO_CHECKSUM_MAGIC) {
|
||||||
curr_algo,
|
return TRUE;
|
||||||
SRV_CHECKSUM_ALGORITHM_INNODB,
|
|
||||||
space_id, page_no);
|
|
||||||
return(TRUE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
crc32 = static_cast<ib_uint32_t>(page_zip_calc_checksum(
|
||||||
|
data, size, SRV_CHECKSUM_ALGORITHM_CRC32));
|
||||||
|
innodb = calc;
|
||||||
break;
|
break;
|
||||||
case SRV_CHECKSUM_ALGORITHM_NONE:
|
case SRV_CHECKSUM_ALGORITHM_NONE:
|
||||||
ut_error;
|
return TRUE;
|
||||||
/* no default so the compiler will emit a warning if new enum
|
|
||||||
is added and not handled here */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return(FALSE);
|
return (stored == crc32 || stored == innodb);
|
||||||
}
|
}
|
||||||
|
@ -653,6 +653,8 @@ buf_page_is_corrupted(
|
|||||||
|
|
||||||
ulint checksum_field1;
|
ulint checksum_field1;
|
||||||
ulint checksum_field2;
|
ulint checksum_field2;
|
||||||
|
ib_uint32_t crc32 = ULINT32_UNDEFINED;
|
||||||
|
bool crc32_inited = false;
|
||||||
|
|
||||||
if (!zip_size
|
if (!zip_size
|
||||||
&& memcmp(read_buf + FIL_PAGE_LSN + 4,
|
&& memcmp(read_buf + FIL_PAGE_LSN + 4,
|
||||||
@ -732,120 +734,124 @@ buf_page_is_corrupted(
|
|||||||
return(FALSE);
|
return(FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
ulint page_no = mach_read_from_4(read_buf + FIL_PAGE_OFFSET);
|
|
||||||
ulint space_id = mach_read_from_4(read_buf + FIL_PAGE_SPACE_ID);
|
|
||||||
const srv_checksum_algorithm_t curr_algo =
|
const srv_checksum_algorithm_t curr_algo =
|
||||||
static_cast<srv_checksum_algorithm_t>(srv_checksum_algorithm);
|
static_cast<srv_checksum_algorithm_t>(srv_checksum_algorithm);
|
||||||
|
|
||||||
switch (curr_algo) {
|
switch (curr_algo) {
|
||||||
case SRV_CHECKSUM_ALGORITHM_CRC32:
|
|
||||||
case SRV_CHECKSUM_ALGORITHM_STRICT_CRC32:
|
case SRV_CHECKSUM_ALGORITHM_STRICT_CRC32:
|
||||||
|
if (buf_page_is_checksum_valid_crc32(read_buf, checksum_field1,
|
||||||
if (buf_page_is_checksum_valid_crc32(read_buf,
|
checksum_field2)) {
|
||||||
checksum_field1, checksum_field2)) {
|
return FALSE;
|
||||||
return(FALSE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (buf_page_is_checksum_valid_none(read_buf,
|
return TRUE;
|
||||||
checksum_field1, checksum_field2)) {
|
|
||||||
if (curr_algo
|
|
||||||
== SRV_CHECKSUM_ALGORITHM_STRICT_CRC32) {
|
|
||||||
page_warn_strict_checksum(
|
|
||||||
curr_algo,
|
|
||||||
SRV_CHECKSUM_ALGORITHM_NONE,
|
|
||||||
space_id, page_no);
|
|
||||||
}
|
|
||||||
|
|
||||||
return(FALSE);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (buf_page_is_checksum_valid_innodb(read_buf,
|
|
||||||
checksum_field1, checksum_field2)) {
|
|
||||||
if (curr_algo
|
|
||||||
== SRV_CHECKSUM_ALGORITHM_STRICT_CRC32) {
|
|
||||||
page_warn_strict_checksum(
|
|
||||||
curr_algo,
|
|
||||||
SRV_CHECKSUM_ALGORITHM_INNODB,
|
|
||||||
space_id, page_no);
|
|
||||||
}
|
|
||||||
|
|
||||||
return(FALSE);
|
|
||||||
}
|
|
||||||
|
|
||||||
return(TRUE);
|
|
||||||
|
|
||||||
case SRV_CHECKSUM_ALGORITHM_INNODB:
|
|
||||||
case SRV_CHECKSUM_ALGORITHM_STRICT_INNODB:
|
case SRV_CHECKSUM_ALGORITHM_STRICT_INNODB:
|
||||||
|
if (buf_page_is_checksum_valid_innodb(read_buf, checksum_field1,
|
||||||
if (buf_page_is_checksum_valid_innodb(read_buf,
|
checksum_field2)) {
|
||||||
checksum_field1, checksum_field2)) {
|
return FALSE;
|
||||||
return(FALSE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (buf_page_is_checksum_valid_none(read_buf,
|
return TRUE;
|
||||||
checksum_field1, checksum_field2)) {
|
|
||||||
if (curr_algo
|
|
||||||
== SRV_CHECKSUM_ALGORITHM_STRICT_INNODB) {
|
|
||||||
page_warn_strict_checksum(
|
|
||||||
curr_algo,
|
|
||||||
SRV_CHECKSUM_ALGORITHM_NONE,
|
|
||||||
space_id, page_no);
|
|
||||||
}
|
|
||||||
|
|
||||||
return(FALSE);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (buf_page_is_checksum_valid_crc32(read_buf,
|
|
||||||
checksum_field1, checksum_field2)) {
|
|
||||||
if (curr_algo
|
|
||||||
== SRV_CHECKSUM_ALGORITHM_STRICT_INNODB) {
|
|
||||||
page_warn_strict_checksum(
|
|
||||||
curr_algo,
|
|
||||||
SRV_CHECKSUM_ALGORITHM_CRC32,
|
|
||||||
space_id, page_no);
|
|
||||||
}
|
|
||||||
|
|
||||||
return(FALSE);
|
|
||||||
}
|
|
||||||
|
|
||||||
return(TRUE);
|
|
||||||
|
|
||||||
case SRV_CHECKSUM_ALGORITHM_STRICT_NONE:
|
case SRV_CHECKSUM_ALGORITHM_STRICT_NONE:
|
||||||
|
if (buf_page_is_checksum_valid_none(read_buf, checksum_field1,
|
||||||
if (buf_page_is_checksum_valid_none(read_buf,
|
checksum_field2)) {
|
||||||
checksum_field1, checksum_field2)) {
|
return FALSE;
|
||||||
return(FALSE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (buf_page_is_checksum_valid_crc32(read_buf,
|
return TRUE;
|
||||||
checksum_field1, checksum_field2)) {
|
case SRV_CHECKSUM_ALGORITHM_CRC32:
|
||||||
page_warn_strict_checksum(
|
case SRV_CHECKSUM_ALGORITHM_INNODB:
|
||||||
curr_algo,
|
/* Verify old versions of InnoDB only stored 8 byte lsn to the
|
||||||
SRV_CHECKSUM_ALGORITHM_CRC32,
|
start and end of the page. */
|
||||||
space_id, page_no);
|
|
||||||
return(FALSE);
|
/* Since innodb_checksum_algorithm is not strict_* allow
|
||||||
|
any of the algos to match for the old field. */
|
||||||
|
|
||||||
|
if (checksum_field2
|
||||||
|
!= mach_read_from_4(read_buf + FIL_PAGE_LSN)
|
||||||
|
&& checksum_field2 != BUF_NO_CHECKSUM_MAGIC) {
|
||||||
|
|
||||||
|
if (srv_checksum_algorithm
|
||||||
|
== SRV_CHECKSUM_ALGORITHM_CRC32) {
|
||||||
|
|
||||||
|
crc32 = buf_calc_page_crc32(read_buf);
|
||||||
|
crc32_inited = true;
|
||||||
|
|
||||||
|
if (checksum_field2 != crc32
|
||||||
|
&& checksum_field2
|
||||||
|
!= buf_calc_page_old_checksum(read_buf)) {
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
ut_ad(srv_checksum_algorithm
|
||||||
|
== SRV_CHECKSUM_ALGORITHM_INNODB);
|
||||||
|
|
||||||
|
if (checksum_field2
|
||||||
|
!= buf_calc_page_old_checksum(read_buf)) {
|
||||||
|
|
||||||
|
crc32 = buf_calc_page_crc32(read_buf);
|
||||||
|
crc32_inited = TRUE;
|
||||||
|
|
||||||
|
if (checksum_field2 != crc32) {
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (buf_page_is_checksum_valid_innodb(read_buf,
|
/* Old field is fine, check the new field */
|
||||||
checksum_field1, checksum_field2)) {
|
|
||||||
page_warn_strict_checksum(
|
if (checksum_field1 != 0
|
||||||
curr_algo,
|
&& checksum_field1 != BUF_NO_CHECKSUM_MAGIC) {
|
||||||
SRV_CHECKSUM_ALGORITHM_INNODB,
|
|
||||||
space_id, page_no);
|
if (srv_checksum_algorithm
|
||||||
return(FALSE);
|
== SRV_CHECKSUM_ALGORITHM_CRC32) {
|
||||||
|
|
||||||
|
if (!crc32_inited) {
|
||||||
|
crc32 = buf_calc_page_crc32(read_buf);
|
||||||
|
crc32_inited = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (checksum_field1 != crc32
|
||||||
|
&& checksum_field1
|
||||||
|
!= buf_calc_page_new_checksum(read_buf)) {
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
ut_ad(srv_checksum_algorithm
|
||||||
|
== SRV_CHECKSUM_ALGORITHM_INNODB);
|
||||||
|
|
||||||
|
if (checksum_field1
|
||||||
|
!= buf_calc_page_new_checksum(read_buf)) {
|
||||||
|
|
||||||
|
if (!crc32_inited) {
|
||||||
|
crc32 = buf_calc_page_crc32(
|
||||||
|
read_buf);
|
||||||
|
crc32_inited = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (checksum_field1 != crc32) {
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return(TRUE);
|
if (crc32_inited
|
||||||
|
&& ((checksum_field1 == crc32
|
||||||
|
&& checksum_field2 != crc32)
|
||||||
|
|| (checksum_field1 != crc32
|
||||||
|
&& checksum_field2 == crc32))) {
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
case SRV_CHECKSUM_ALGORITHM_NONE:
|
|
||||||
/* should have returned FALSE earlier */
|
|
||||||
break;
|
break;
|
||||||
/* no default so the compiler will emit a warning if new enum
|
case SRV_CHECKSUM_ALGORITHM_NONE:
|
||||||
is added and not handled here */
|
ut_error;
|
||||||
}
|
}
|
||||||
|
|
||||||
ut_error;
|
return FALSE;
|
||||||
return(FALSE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Dump a page to stderr.
|
/** Dump a page to stderr.
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
|
|
||||||
Copyright (c) 1994, 2016, Oracle and/or its affiliates. All Rights Reserved.
|
Copyright (c) 1994, 2016, Oracle and/or its affiliates. All Rights Reserved.
|
||||||
|
Copyright (c) 2013, 2018, MariaDB Corporation.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify it under
|
This program is free software; you can redistribute it and/or modify it under
|
||||||
the terms of the GNU General Public License as published by the Free Software
|
the terms of the GNU General Public License as published by the Free Software
|
||||||
@ -1109,23 +1110,6 @@ const rec_t*
|
|||||||
page_find_rec_max_not_deleted(
|
page_find_rec_max_not_deleted(
|
||||||
const page_t* page);
|
const page_t* page);
|
||||||
|
|
||||||
#endif /* #ifndef UNIV_INNOCHECKSUM */
|
|
||||||
|
|
||||||
/** Issue a warning when the checksum that is stored in the page is valid,
|
|
||||||
but different than the global setting innodb_checksum_algorithm.
|
|
||||||
@param[in] current_algo current checksum algorithm
|
|
||||||
@param[in] page_checksum page valid checksum
|
|
||||||
@param[in] space_id tablespace id
|
|
||||||
@param[in] page_no page number */
|
|
||||||
void
|
|
||||||
page_warn_strict_checksum(
|
|
||||||
srv_checksum_algorithm_t curr_algo,
|
|
||||||
srv_checksum_algorithm_t page_checksum,
|
|
||||||
ulint space_id,
|
|
||||||
ulint page_no);
|
|
||||||
|
|
||||||
#ifndef UNIV_INNOCHECKSUM
|
|
||||||
|
|
||||||
#ifdef UNIV_MATERIALIZE
|
#ifdef UNIV_MATERIALIZE
|
||||||
#undef UNIV_INLINE
|
#undef UNIV_INLINE
|
||||||
#define UNIV_INLINE UNIV_INLINE_ORIGINAL
|
#define UNIV_INLINE UNIV_INLINE_ORIGINAL
|
||||||
|
@ -2814,49 +2814,3 @@ page_find_rec_max_not_deleted(
|
|||||||
}
|
}
|
||||||
|
|
||||||
#endif /* #ifndef UNIV_INNOCHECKSUM */
|
#endif /* #ifndef UNIV_INNOCHECKSUM */
|
||||||
|
|
||||||
/** Issue a warning when the checksum that is stored in the page is valid,
|
|
||||||
but different than the global setting innodb_checksum_algorithm.
|
|
||||||
@param[in] current_algo current checksum algorithm
|
|
||||||
@param[in] page_checksum page valid checksum
|
|
||||||
@param[in] space_id tablespace id
|
|
||||||
@param[in] page_no page number */
|
|
||||||
void
|
|
||||||
page_warn_strict_checksum(
|
|
||||||
srv_checksum_algorithm_t curr_algo,
|
|
||||||
srv_checksum_algorithm_t page_checksum,
|
|
||||||
ulint space_id,
|
|
||||||
ulint page_no)
|
|
||||||
{
|
|
||||||
srv_checksum_algorithm_t curr_algo_nonstrict = srv_checksum_algorithm_t();
|
|
||||||
switch (curr_algo) {
|
|
||||||
case SRV_CHECKSUM_ALGORITHM_STRICT_CRC32:
|
|
||||||
curr_algo_nonstrict = SRV_CHECKSUM_ALGORITHM_CRC32;
|
|
||||||
break;
|
|
||||||
case SRV_CHECKSUM_ALGORITHM_STRICT_INNODB:
|
|
||||||
curr_algo_nonstrict = SRV_CHECKSUM_ALGORITHM_INNODB;
|
|
||||||
break;
|
|
||||||
case SRV_CHECKSUM_ALGORITHM_STRICT_NONE:
|
|
||||||
curr_algo_nonstrict = SRV_CHECKSUM_ALGORITHM_NONE;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
ut_error;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef UNIV_INNOCHECKSUM
|
|
||||||
fprintf(stderr,
|
|
||||||
#else
|
|
||||||
ib_logf(IB_LOG_LEVEL_WARN,
|
|
||||||
#endif
|
|
||||||
"innodb_checksum_algorithm is set to \"%s\""
|
|
||||||
" but the page [page id: space=" ULINTPF ","
|
|
||||||
" page number=" ULINTPF "] contains a valid checksum \"%s\"."
|
|
||||||
" Accepting the page as valid. Change innodb_checksum_algorithm"
|
|
||||||
" to \"%s\" to silently accept such pages or rewrite all pages"
|
|
||||||
" so that they contain \"%s\" checksum.",
|
|
||||||
buf_checksum_algorithm_name(curr_algo),
|
|
||||||
space_id, page_no,
|
|
||||||
buf_checksum_algorithm_name(page_checksum),
|
|
||||||
buf_checksum_algorithm_name(curr_algo_nonstrict),
|
|
||||||
buf_checksum_algorithm_name(curr_algo_nonstrict));
|
|
||||||
}
|
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
Copyright (c) 2005, 2016, Oracle and/or its affiliates. All Rights Reserved.
|
Copyright (c) 2005, 2016, Oracle and/or its affiliates. All Rights Reserved.
|
||||||
Copyright (c) 2012, Facebook Inc.
|
Copyright (c) 2012, Facebook Inc.
|
||||||
Copyright (c) 2014, SkySQL Ab. All Rights Reserved.
|
Copyright (c) 2014, 2018, MariaDB Corporation.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify it under
|
This program is free software; you can redistribute it and/or modify it under
|
||||||
the terms of the GNU General Public License as published by the Free Software
|
the terms of the GNU General Public License as published by the Free Software
|
||||||
@ -4934,10 +4934,6 @@ page_zip_verify_checksum(
|
|||||||
stored = static_cast<ib_uint32_t>(mach_read_from_4(
|
stored = static_cast<ib_uint32_t>(mach_read_from_4(
|
||||||
static_cast<const unsigned char*>(data) + FIL_PAGE_SPACE_OR_CHKSUM));
|
static_cast<const unsigned char*>(data) + FIL_PAGE_SPACE_OR_CHKSUM));
|
||||||
|
|
||||||
ulint page_no = mach_read_from_4(static_cast<const unsigned char*> (data) + FIL_PAGE_OFFSET);
|
|
||||||
ulint space_id = mach_read_from_4(static_cast<const unsigned char*>
|
|
||||||
(data) + FIL_PAGE_SPACE_ID);
|
|
||||||
|
|
||||||
#if FIL_PAGE_LSN % 8
|
#if FIL_PAGE_LSN % 8
|
||||||
#error "FIL_PAGE_LSN must be 64 bit aligned"
|
#error "FIL_PAGE_LSN must be 64 bit aligned"
|
||||||
#endif
|
#endif
|
||||||
@ -4974,97 +4970,30 @@ page_zip_verify_checksum(
|
|||||||
|
|
||||||
switch (curr_algo) {
|
switch (curr_algo) {
|
||||||
case SRV_CHECKSUM_ALGORITHM_STRICT_CRC32:
|
case SRV_CHECKSUM_ALGORITHM_STRICT_CRC32:
|
||||||
case SRV_CHECKSUM_ALGORITHM_CRC32:
|
|
||||||
|
|
||||||
if (stored == BUF_NO_CHECKSUM_MAGIC) {
|
|
||||||
if (curr_algo
|
|
||||||
== SRV_CHECKSUM_ALGORITHM_STRICT_CRC32) {
|
|
||||||
page_warn_strict_checksum(
|
|
||||||
curr_algo,
|
|
||||||
SRV_CHECKSUM_ALGORITHM_NONE,
|
|
||||||
space_id, page_no);
|
|
||||||
}
|
|
||||||
|
|
||||||
return(TRUE);
|
|
||||||
}
|
|
||||||
|
|
||||||
innodb = static_cast<ib_uint32_t>(page_zip_calc_checksum(
|
|
||||||
data, size, SRV_CHECKSUM_ALGORITHM_INNODB));
|
|
||||||
|
|
||||||
if (stored == innodb) {
|
|
||||||
if (curr_algo
|
|
||||||
== SRV_CHECKSUM_ALGORITHM_STRICT_CRC32) {
|
|
||||||
page_warn_strict_checksum(
|
|
||||||
curr_algo,
|
|
||||||
SRV_CHECKSUM_ALGORITHM_INNODB,
|
|
||||||
space_id, page_no);
|
|
||||||
}
|
|
||||||
|
|
||||||
return(TRUE);
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
case SRV_CHECKSUM_ALGORITHM_STRICT_INNODB:
|
case SRV_CHECKSUM_ALGORITHM_STRICT_INNODB:
|
||||||
case SRV_CHECKSUM_ALGORITHM_INNODB:
|
|
||||||
|
|
||||||
if (stored == BUF_NO_CHECKSUM_MAGIC) {
|
|
||||||
if (curr_algo
|
|
||||||
== SRV_CHECKSUM_ALGORITHM_STRICT_INNODB) {
|
|
||||||
page_warn_strict_checksum(
|
|
||||||
curr_algo,
|
|
||||||
SRV_CHECKSUM_ALGORITHM_NONE,
|
|
||||||
space_id, page_no);
|
|
||||||
}
|
|
||||||
|
|
||||||
return(TRUE);
|
|
||||||
}
|
|
||||||
|
|
||||||
crc32 = static_cast<ib_uint32_t>(page_zip_calc_checksum(
|
|
||||||
data, size, SRV_CHECKSUM_ALGORITHM_CRC32));
|
|
||||||
|
|
||||||
if (stored == crc32) {
|
|
||||||
if (curr_algo
|
|
||||||
== SRV_CHECKSUM_ALGORITHM_STRICT_INNODB) {
|
|
||||||
page_warn_strict_checksum(
|
|
||||||
curr_algo,
|
|
||||||
SRV_CHECKSUM_ALGORITHM_CRC32,
|
|
||||||
space_id, page_no);
|
|
||||||
}
|
|
||||||
|
|
||||||
return(TRUE);
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
case SRV_CHECKSUM_ALGORITHM_STRICT_NONE:
|
case SRV_CHECKSUM_ALGORITHM_STRICT_NONE:
|
||||||
|
return stored == calc;
|
||||||
crc32 = static_cast<ib_uint32_t>(page_zip_calc_checksum(
|
case SRV_CHECKSUM_ALGORITHM_CRC32:
|
||||||
data, size, SRV_CHECKSUM_ALGORITHM_CRC32));
|
if (stored == BUF_NO_CHECKSUM_MAGIC) {
|
||||||
|
|
||||||
if (stored == crc32) {
|
|
||||||
page_warn_strict_checksum(
|
|
||||||
curr_algo, SRV_CHECKSUM_ALGORITHM_CRC32,
|
|
||||||
space_id, page_no);
|
|
||||||
|
|
||||||
return(TRUE);
|
return(TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
crc32 = calc;
|
||||||
innodb = static_cast<ib_uint32_t>(page_zip_calc_checksum(
|
innodb = static_cast<ib_uint32_t>(page_zip_calc_checksum(
|
||||||
data, size, SRV_CHECKSUM_ALGORITHM_INNODB));
|
data, size, SRV_CHECKSUM_ALGORITHM_INNODB));
|
||||||
|
break;
|
||||||
if (stored == innodb) {
|
case SRV_CHECKSUM_ALGORITHM_INNODB:
|
||||||
page_warn_strict_checksum(
|
if (stored == BUF_NO_CHECKSUM_MAGIC) {
|
||||||
curr_algo,
|
|
||||||
SRV_CHECKSUM_ALGORITHM_INNODB,
|
|
||||||
space_id, page_no);
|
|
||||||
return(TRUE);
|
return(TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
crc32 = static_cast<ib_uint32_t>(page_zip_calc_checksum(
|
||||||
|
data, size, SRV_CHECKSUM_ALGORITHM_CRC32));
|
||||||
|
innodb = calc;
|
||||||
break;
|
break;
|
||||||
case SRV_CHECKSUM_ALGORITHM_NONE:
|
case SRV_CHECKSUM_ALGORITHM_NONE:
|
||||||
ut_error;
|
return TRUE;
|
||||||
/* no default so the compiler will emit a warning if new enum
|
|
||||||
is added and not handled here */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return(FALSE);
|
return (stored == crc32 || stored == innodb);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user