diff options
author | Marko Mäkelä <marko.makela@mariadb.com> | 2020-03-13 07:20:36 +0200 |
---|---|---|
committer | Marko Mäkelä <marko.makela@mariadb.com> | 2020-03-13 07:20:36 +0200 |
commit | 32904dc5fac36bffeacc75512f0444c8817a39ce (patch) | |
tree | ad5809c25e6d0e577d6433a67482735262328c5f /storage/innobase | |
parent | 5257bcfc7afad9068ccb7f5f1777c03aa5bedb12 (diff) | |
parent | 7b082fb099348da664cf9b35f75eab54deba3b29 (diff) | |
download | mariadb-git-32904dc5fac36bffeacc75512f0444c8817a39ce.tar.gz |
Merge 10.1 into 10.2
Diffstat (limited to 'storage/innobase')
-rw-r--r-- | storage/innobase/btr/btr0defragment.cc | 3 | ||||
-rw-r--r-- | storage/innobase/include/buf0buf.h | 4 | ||||
-rw-r--r-- | storage/innobase/include/page0zip.h | 16 | ||||
-rw-r--r-- | storage/innobase/page/page0zip.cc | 65 |
4 files changed, 28 insertions, 60 deletions
diff --git a/storage/innobase/btr/btr0defragment.cc b/storage/innobase/btr/btr0defragment.cc index 545989fa867..0f6c7d87ca2 100644 --- a/storage/innobase/btr/btr0defragment.cc +++ b/storage/innobase/btr/btr0defragment.cc @@ -39,6 +39,9 @@ Modified 30/07/2014 Jan Lindström jan.lindstrom@mariadb.com #include <list> +using std::list; +using std::min; + /* When there's no work, either because defragment is disabled, or because no query is submitted, thread checks state every BTR_DEFRAGMENT_SLEEP_IN_USECS.*/ #define BTR_DEFRAGMENT_SLEEP_IN_USECS 1000000 diff --git a/storage/innobase/include/buf0buf.h b/storage/innobase/include/buf0buf.h index 7eac1fab64e..a061d8e18f8 100644 --- a/storage/innobase/include/buf0buf.h +++ b/storage/innobase/include/buf0buf.h @@ -1400,7 +1400,7 @@ buf_page_encrypt_before_write( NOTE! The definition appears here only for other modules of this directory (buf) to see it. Do not use from outside! */ -typedef struct { +struct buf_tmp_buffer_t { private: int32 reserved; /*!< true if this slot is reserved */ @@ -1430,7 +1430,7 @@ public: return !my_atomic_fas32_explicit(&reserved, true, MY_MEMORY_ORDER_RELAXED); } -} buf_tmp_buffer_t; +}; /** The common buffer control block structure for compressed and uncompressed frames */ diff --git a/storage/innobase/include/page0zip.h b/storage/innobase/include/page0zip.h index 98a1422f496..63674748463 100644 --- a/storage/innobase/include/page0zip.h +++ b/storage/innobase/include/page0zip.h @@ -2,7 +2,7 @@ Copyright (c) 2005, 2016, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2012, Facebook Inc. -Copyright (c) 2017, 2019, MariaDB Corporation. +Copyright (c) 2017, 2020, MariaDB Corporation. 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 @@ -503,15 +503,11 @@ page_zip_calc_checksum( #endif ); -/**********************************************************************//** -Verify a compressed page's checksum. -@return TRUE if the stored checksum is valid according to the value of -innodb_checksum_algorithm */ -ibool -page_zip_verify_checksum( -/*=====================*/ - const void* data, /*!< in: compressed page */ - ulint size); /*!< in: size of compressed page */ +/** Validate the checksum on a ROW_FORMAT=COMPRESSED page. +@param data ROW_FORMAT=COMPRESSED page +@param size size of the page, in bytes +@return whether the stored checksum matches innodb_checksum_algorithm */ +bool page_zip_verify_checksum(const void *data, size_t size); #ifndef UNIV_INNOCHECKSUM /**********************************************************************//** diff --git a/storage/innobase/page/page0zip.cc b/storage/innobase/page/page0zip.cc index aec6bcc38da..6a86ad6be23 100644 --- a/storage/innobase/page/page0zip.cc +++ b/storage/innobase/page/page0zip.cc @@ -4986,60 +4986,30 @@ page_zip_calc_checksum( return(0); } -/**********************************************************************//** -Verify a compressed page's checksum. -@return TRUE if the stored checksum is valid according to the value of -innodb_checksum_algorithm */ -ibool -page_zip_verify_checksum( -/*=====================*/ - const void* data, /*!< in: compressed page */ - ulint size) /*!< in: size of compressed page */ +/** Validate the checksum on a ROW_FORMAT=COMPRESSED page. +@param data ROW_FORMAT=COMPRESSED page +@param size size of the page, in bytes +@return whether the stored checksum matches innodb_checksum_algorithm */ +bool page_zip_verify_checksum(const void *data, size_t size) { - const uint32_t stored = mach_read_from_4( - static_cast<const byte*>(data) + FIL_PAGE_SPACE_OR_CHKSUM); + const srv_checksum_algorithm_t curr_algo = + static_cast<srv_checksum_algorithm_t>(srv_checksum_algorithm); -#if FIL_PAGE_LSN % 8 -#error "FIL_PAGE_LSN must be 64 bit aligned" -#endif + if (curr_algo == SRV_CHECKSUM_ALGORITHM_NONE) { + return true; + } - /* Check if page is empty */ - if (stored == 0 - && *reinterpret_cast<const ib_uint64_t*>(static_cast<const char*>( - data) - + FIL_PAGE_LSN) == 0) { - /* make sure that the page is really empty */ -#ifdef UNIV_INNOCHECKSUM - ulint i; - for (i = 0; i < size; i++) { - if (*((const char*) data + i) != 0) - break; + for (size_t i = 0; i < size; i++) { + if (static_cast<const byte*>(data)[i] != 0) { + goto not_all_zeroes; } - if (i >= size) { - if (log_file) { - fprintf(log_file, "Page::%llu is empty and" - " uncorrupted\n", cur_page_num); - } - - return(TRUE); - } -#else - for (ulint i = 0; i < size; i++) { - if (*((const char*) data + i) != 0) { - return(FALSE); - } - } - /* Empty page */ - return(TRUE); -#endif /* UNIV_INNOCHECKSUM */ } - const srv_checksum_algorithm_t curr_algo = - static_cast<srv_checksum_algorithm_t>(srv_checksum_algorithm); + return true; - if (curr_algo == SRV_CHECKSUM_ALGORITHM_NONE) { - return(TRUE); - } +not_all_zeroes: + const uint32_t stored = mach_read_from_4( + static_cast<const byte*>(data) + FIL_PAGE_SPACE_OR_CHKSUM); uint32_t calc = page_zip_calc_checksum(data, size, curr_algo); @@ -5055,7 +5025,6 @@ page_zip_verify_checksum( } if (!strict_verify) { - const uint32_t crc32 = page_zip_calc_checksum( data, size, SRV_CHECKSUM_ALGORITHM_CRC32); |