mirror of
https://github.com/MariaDB/server.git
synced 2025-01-21 06:22:28 +01:00
branches/zip: Remove page_zip_decompress_low(). Do not call page_validate()
on the ZIP_DUMMY index. Because it does not contain valid collation information, the ordering check in page_validate() may fail on pages containing non-binary data. Instead, let the callers of page_zip_decompress() invoke page_validate() when the index information is available.
This commit is contained in:
parent
9a16aac783
commit
a1bca48c85
3 changed files with 8 additions and 25 deletions
|
@ -1160,6 +1160,7 @@ use_heap:
|
|||
if (!page_zip_decompress(page_zip_orig, page)) {
|
||||
ut_error; /* Memory corrupted? */
|
||||
}
|
||||
ut_ad(page_validate(page, index));
|
||||
return(NULL);
|
||||
}
|
||||
|
||||
|
|
|
@ -620,6 +620,7 @@ page_copy_rec_list_end(
|
|||
new_page))) {
|
||||
ut_error;
|
||||
}
|
||||
ut_ad(page_validate(new_page, index));
|
||||
return(NULL);
|
||||
} else {
|
||||
/* The page was reorganized:
|
||||
|
@ -729,7 +730,7 @@ page_copy_rec_list_start(
|
|||
new_page))) {
|
||||
ut_error;
|
||||
}
|
||||
|
||||
ut_ad(page_validate(new_page, index));
|
||||
return(NULL);
|
||||
} else {
|
||||
/* The page was reorganized:
|
||||
|
|
|
@ -1544,16 +1544,14 @@ page_zip_apply_log(
|
|||
Decompress a page. This function should tolerate errors on the compressed
|
||||
page. Instead of letting assertions fail, it will return FALSE if an
|
||||
inconsistency is detected. */
|
||||
static
|
||||
|
||||
ibool
|
||||
page_zip_decompress_low(
|
||||
/*====================*/
|
||||
page_zip_decompress(
|
||||
/*================*/
|
||||
/* out: TRUE on success, FALSE on failure */
|
||||
page_zip_des_t* page_zip,/* in: data, size;
|
||||
out: m_start, m_end, n_blobs */
|
||||
page_t* page, /* out: uncompressed page, may be trashed */
|
||||
ibool do_validate __attribute__((unused)))
|
||||
/* in: TRUE=assert page_validate() */
|
||||
page_t* page) /* out: uncompressed page, may be trashed */
|
||||
{
|
||||
z_stream d_stream;
|
||||
dict_index_t* index = NULL;
|
||||
|
@ -2015,7 +2013,6 @@ err_exit:
|
|||
|
||||
recs_done:
|
||||
ut_a(page_is_comp(page));
|
||||
ut_ad(!do_validate || page_validate(page, index));
|
||||
|
||||
page_zip_fields_free(index);
|
||||
mem_heap_free(heap);
|
||||
|
@ -2023,22 +2020,6 @@ recs_done:
|
|||
return(TRUE);
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
Decompress a page. This function should tolerate errors on the compressed
|
||||
page. Instead of letting assertions fail, it will return FALSE if an
|
||||
inconsistency is detected. */
|
||||
|
||||
ibool
|
||||
page_zip_decompress(
|
||||
/*================*/
|
||||
/* out: TRUE on success, FALSE on failure */
|
||||
page_zip_des_t* page_zip,/* in: data, size;
|
||||
out: m_start, m_end, n_blobs */
|
||||
page_t* page) /* out: uncompressed page, may be trashed */
|
||||
{
|
||||
return(page_zip_decompress_low(page_zip, page, TRUE));
|
||||
}
|
||||
|
||||
#ifdef UNIV_ZIP_DEBUG
|
||||
/* Flag: make page_zip_validate() compare page headers only */
|
||||
ibool page_zip_validate_header_only = FALSE;
|
||||
|
@ -2080,7 +2061,7 @@ page_zip_validate(
|
|||
temp_page_buf = ut_malloc(2 * UNIV_PAGE_SIZE);
|
||||
temp_page = ut_align(temp_page_buf, UNIV_PAGE_SIZE);
|
||||
|
||||
valid = page_zip_decompress_low(&temp_page_zip, temp_page, FALSE);
|
||||
valid = page_zip_decompress(&temp_page_zip, temp_page);
|
||||
if (!valid) {
|
||||
fputs("page_zip_validate(): failed to decompress\n", stderr);
|
||||
goto func_exit;
|
||||
|
|
Loading…
Reference in a new issue