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 | |
parent | 5257bcfc7afad9068ccb7f5f1777c03aa5bedb12 (diff) | |
parent | 7b082fb099348da664cf9b35f75eab54deba3b29 (diff) | |
download | mariadb-git-32904dc5fac36bffeacc75512f0444c8817a39ce.tar.gz |
Merge 10.1 into 10.2
-rw-r--r-- | client/mysqlbinlog.cc | 14 | ||||
-rw-r--r-- | sql/sql_select.cc | 2 | ||||
-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 | ||||
-rw-r--r-- | storage/xtradb/include/buf0buf.h | 4 | ||||
-rw-r--r-- | storage/xtradb/page/page0zip.cc | 37 |
8 files changed, 53 insertions, 92 deletions
diff --git a/client/mysqlbinlog.cc b/client/mysqlbinlog.cc index acccf0a3411..65e2abf0556 100644 --- a/client/mysqlbinlog.cc +++ b/client/mysqlbinlog.cc @@ -1,6 +1,6 @@ /* Copyright (c) 2000, 2014, Oracle and/or its affiliates. - Copyright (c) 2009, 2014, MariaDB + Copyright (c) 2009, 2020, MariaDB 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 @@ -176,7 +176,7 @@ enum Exit_status { */ static Annotate_rows_log_event *annotate_event= NULL; -void free_annotate_event() +static void free_annotate_event() { if (annotate_event) { @@ -921,7 +921,7 @@ static bool print_row_event(PRINT_EVENT_INFO *print_event_info, Log_event *ev, } } - /* + /* end of statement check: i) destroy/free ignored maps ii) if skip event @@ -932,21 +932,21 @@ static bool print_row_event(PRINT_EVENT_INFO *print_event_info, Log_event *ev, */ if (is_stmt_end) { - /* + /* Now is safe to clear ignored map (clear_tables will also delete original table map events stored in the map). */ if (print_event_info->m_table_map_ignored.count() > 0) print_event_info->m_table_map_ignored.clear_tables(); - /* + /* If there is a kept Annotate event and all corresponding rbr-events were filtered away, the Annotate event was not freed and it is just the time to do it. */ - free_annotate_event(); + free_annotate_event(); - /* + /* One needs to take into account an event that gets filtered but was last event in the statement. If this is the case, previous rows events that were written into diff --git a/sql/sql_select.cc b/sql/sql_select.cc index 59bb4ac1e81..97002ef071f 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -4599,7 +4599,7 @@ make_join_statistics(JOIN *join, List<TABLE_LIST> &tables_list, for (i= 0; i < join->table_count ; i++) if (double rr= join->best_positions[i].records_read) records= COST_MULT(records, rr); - ha_rows rows= records > HA_ROWS_MAX ? HA_ROWS_MAX : (ha_rows) records; + ha_rows rows= records > (double) HA_ROWS_MAX ? HA_ROWS_MAX : (ha_rows) records; set_if_smaller(rows, unit->select_limit_cnt); join->select_lex->increase_derived_records(rows); } 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); diff --git a/storage/xtradb/include/buf0buf.h b/storage/xtradb/include/buf0buf.h index e8a82f2e3e4..39fceeef384 100644 --- a/storage/xtradb/include/buf0buf.h +++ b/storage/xtradb/include/buf0buf.h @@ -1528,7 +1528,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 */ @@ -1558,7 +1558,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/xtradb/page/page0zip.cc b/storage/xtradb/page/page0zip.cc index 0c7f9b6feff..d85594c5ce3 100644 --- a/storage/xtradb/page/page0zip.cc +++ b/storage/xtradb/page/page0zip.cc @@ -4927,35 +4927,28 @@ page_zip_verify_checksum( ib_uint32_t crc32 = 0 /* silence bogus warning */; ib_uint32_t innodb = 0 /* silence bogus warning */; - stored = static_cast<ib_uint32_t>(mach_read_from_4( - static_cast<const unsigned char*>(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 */ - for (ulint i = 0; i < size; i++) { - if (*((const char*) data + i) != 0) { - return(FALSE); - } + bool all_zeroes = true; + for (size_t i = 0; i < size; i++) { + if (static_cast<const byte*>(data)[i] != 0) { + all_zeroes = false; + break; } - /* Empty page */ - return(TRUE); } - const srv_checksum_algorithm_t curr_algo = - static_cast<srv_checksum_algorithm_t>(srv_checksum_algorithm); - - if (curr_algo == SRV_CHECKSUM_ALGORITHM_NONE) { - return(TRUE); + if (all_zeroes) { + return true; } + stored = static_cast<ib_uint32_t>(mach_read_from_4( + static_cast<const unsigned char*>(data) + FIL_PAGE_SPACE_OR_CHKSUM)); + calc = static_cast<ib_uint32_t>(page_zip_calc_checksum( data, size, curr_algo)); |