diff options
Diffstat (limited to 'extra')
-rw-r--r-- | extra/innochecksum.cc | 10 | ||||
-rw-r--r-- | extra/mariabackup/ds_local.cc | 4 | ||||
-rw-r--r-- | extra/mariabackup/fil_cur.cc | 3 |
3 files changed, 11 insertions, 6 deletions
diff --git a/extra/innochecksum.cc b/extra/innochecksum.cc index 55d41fc04ad..dc49e3e0817 100644 --- a/extra/innochecksum.cc +++ b/extra/innochecksum.cc @@ -281,7 +281,7 @@ static void init_page_size(const byte* buf) const unsigned flags = mach_read_from_4(buf + FIL_PAGE_DATA + FSP_SPACE_FLAGS); - if (FSP_FLAGS_FCRC32_HAS_MARKER(flags)) { + if (fil_space_t::full_crc32(flags)) { srv_page_size = fil_space_t::logical_size(flags); physical_page_size = srv_page_size; return; @@ -461,7 +461,7 @@ is_page_corrupted( return (false); } - if (!zip_size) { + if (!zip_size && (!is_compressed || !use_full_crc32)) { /* check the stored log sequence numbers for uncompressed tablespace. */ logseq = mach_read_from_4(buf + FIL_PAGE_LSN + 4); @@ -613,8 +613,10 @@ static bool update_checksum(byte* page, ulint flags) } } else if (use_full_crc32) { - checksum = buf_calc_page_full_crc32(page); - byte* c = page + physical_page_size - FIL_PAGE_FCRC32_CHECKSUM; + ulint payload = buf_page_full_crc32_size(page, NULL, NULL) + - FIL_PAGE_FCRC32_CHECKSUM; + checksum = ut_crc32(page, payload); + byte* c = page + payload; if (mach_read_from_4(c) == checksum) return false; mach_write_to_4(c, checksum); if (is_log_enabled) { diff --git a/extra/mariabackup/ds_local.cc b/extra/mariabackup/ds_local.cc index eea4fcecdd8..90fb88ef381 100644 --- a/extra/mariabackup/ds_local.cc +++ b/extra/mariabackup/ds_local.cc @@ -178,7 +178,9 @@ static void init_ibd_data(ds_local_file_t *local_file, const uchar *buf, size_t ulint flags = mach_read_from_4(&buf[FIL_PAGE_DATA + FSP_SPACE_FLAGS]); ulint ssize = FSP_FLAGS_GET_PAGE_SSIZE(flags); local_file->pagesize= ssize == 0 ? UNIV_PAGE_SIZE_ORIG : ((UNIV_ZIP_SIZE_MIN >> 1) << ssize); - local_file->compressed = (my_bool)FSP_FLAGS_HAS_PAGE_COMPRESSION(flags); + local_file->compressed = fil_space_t::full_crc32(flags) + ? fil_space_t::is_compressed(flags) + : bool(FSP_FLAGS_HAS_PAGE_COMPRESSION(flags)); #if defined(_WIN32) && (MYSQL_VERSION_ID > 100200) /* Make compressed file sparse, on Windows. diff --git a/extra/mariabackup/fil_cur.cc b/extra/mariabackup/fil_cur.cc index 9678fcf5775..8dcb07d069d 100644 --- a/extra/mariabackup/fil_cur.cc +++ b/extra/mariabackup/fil_cur.cc @@ -361,7 +361,8 @@ static bool page_is_corrupted(const byte *page, ulint page_no, if (page_type == FIL_PAGE_PAGE_COMPRESSED || page_type == FIL_PAGE_PAGE_COMPRESSED_ENCRYPTED) { - ulint decomp = fil_page_decompress(tmp_frame, tmp_page); + ulint decomp = fil_page_decompress(tmp_frame, tmp_page, + space->flags); page_type = mach_read_from_2(tmp_page + FIL_PAGE_TYPE); return (!decomp |