diff options
author | unknown <sanja@montyprogram.com> | 2013-07-17 17:03:59 +0300 |
---|---|---|
committer | unknown <sanja@montyprogram.com> | 2013-07-17 17:03:59 +0300 |
commit | c7973615e723b13c6457b494b72be2fac35bfd18 (patch) | |
tree | 7ba91d16cc52816f351a3ddf6b3da5badd6ec1bf | |
parent | 66ec79fc87da6fea5bed2e5a6d9881c306d9e8fa (diff) | |
download | mariadb-git-c7973615e723b13c6457b494b72be2fac35bfd18.tar.gz |
Revert of marko.makela@oracle.com-20130430103950-j353faze84zzk9xf for xtradb
(fix of http://bugs.mysql.com/bug.php?id=69623)
-rw-r--r-- | storage/xtradb/buf/buf0buf.c | 6 | ||||
-rw-r--r-- | storage/xtradb/fil/fil0fil.c | 103 | ||||
-rw-r--r-- | storage/xtradb/include/buf0buf.h | 7 | ||||
-rw-r--r-- | storage/xtradb/include/fil0fil.h | 13 | ||||
-rw-r--r-- | storage/xtradb/srv/srv0start.c | 23 | ||||
-rw-r--r-- | storage/xtradb/trx/trx0sys.c | 8 |
6 files changed, 24 insertions, 136 deletions
diff --git a/storage/xtradb/buf/buf0buf.c b/storage/xtradb/buf/buf0buf.c index 1084dcdf344..b294c88497e 100644 --- a/storage/xtradb/buf/buf0buf.c +++ b/storage/xtradb/buf/buf0buf.c @@ -581,8 +581,6 @@ UNIV_INTERN ibool buf_page_is_corrupted( /*==================*/ - ibool check_lsn, /*!< in: TRUE if we need to check - and complain about the LSN */ const byte* read_buf, /*!< in: a database page */ ulint zip_size) /*!< in: size of compressed page; 0 for uncompressed pages */ @@ -602,7 +600,7 @@ buf_page_is_corrupted( } #ifndef UNIV_HOTBACKUP - if (check_lsn && recv_lsn_checks_on) { + if (recv_lsn_checks_on) { ib_uint64_t current_lsn; if (log_peek_lsn(¤t_lsn) @@ -3947,7 +3945,7 @@ buf_page_io_complete( /* From version 3.23.38 up we store the page checksum to the 4 first bytes of the page end lsn field */ - if (buf_page_is_corrupted(TRUE, frame, + if (buf_page_is_corrupted(frame, buf_page_get_zip_size(bpage))) { corrupt: fprintf(stderr, diff --git a/storage/xtradb/fil/fil0fil.c b/storage/xtradb/fil/fil0fil.c index 929e24d20ce..48f3c43cdc0 100644 --- a/storage/xtradb/fil/fil0fil.c +++ b/storage/xtradb/fil/fil0fil.c @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1995, 2013, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1995, 2010, Innobase Oy. All Rights Reserved. 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 @@ -1884,62 +1884,10 @@ fil_write_flushed_lsn_to_data_files( } /*******************************************************************//** -Checks the consistency of the first data page of a data file -at database startup. -@retval NULL on success, or if innodb_force_recovery is set -@return pointer to an error message string */ -static __attribute__((warn_unused_result)) -const char* -fil_check_first_page( -/*=================*/ - const page_t* page, /*!< in: data page */ - ibool first_page) /*!< in: TRUE if this is the - first page of the tablespace */ -{ - ulint space_id; - ulint flags; - - if (srv_force_recovery >= SRV_FORCE_IGNORE_CORRUPT) { - return(NULL); - } - - space_id = mach_read_from_4(FSP_HEADER_OFFSET + FSP_SPACE_ID + page); - flags = mach_read_from_4(FSP_HEADER_OFFSET + FSP_SPACE_FLAGS + page); - - if (first_page && !space_id && !flags) { - ulint nonzero_bytes = UNIV_PAGE_SIZE; - const byte* b = page; - - while (!*b && --nonzero_bytes) { - b++; - } - - if (!nonzero_bytes) { - return("space header page consists of zero bytes"); - } - } - - if (buf_page_is_corrupted( - FALSE, page, dict_table_flags_to_zip_size(flags))) { - return("checksum mismatch"); - } - - if (!first_page - || (page_get_space_id(page) == space_id - && page_get_page_no(page) == 0)) { - return(NULL); - } - - return("inconsistent data in space header"); -} - -/*******************************************************************//** Reads the flushed lsn, arch no, and tablespace flag fields from a data -file at database startup. -@retval NULL on success, or if innodb_force_recovery is set -@return pointer to an error message string */ +file at database startup. */ UNIV_INTERN -const char* +void fil_read_first_page( /*================*/ os_file_t data_file, /*!< in: open data file */ @@ -1961,7 +1909,6 @@ fil_read_first_page( byte* buf; page_t* page; ib_uint64_t flushed_lsn; - const char* check_msg; buf = ut_malloc(2 * UNIV_PAGE_SIZE); /* Align the memory for a possible read from a raw device */ @@ -1969,18 +1916,13 @@ fil_read_first_page( os_file_read(data_file, page, 0, 0, UNIV_PAGE_SIZE); - *flags = mach_read_from_4(FSP_HEADER_OFFSET + FSP_SPACE_FLAGS + page); + *flags = mach_read_from_4(page + + FSP_HEADER_OFFSET + FSP_SPACE_FLAGS); flushed_lsn = mach_read_from_8(page + FIL_PAGE_FILE_FLUSH_LSN); - check_msg = fil_check_first_page(page, !one_read_already); - ut_free(buf); - if (check_msg) { - return(check_msg); - } - if (!one_read_already) { *min_flushed_lsn = flushed_lsn; *max_flushed_lsn = flushed_lsn; @@ -1988,7 +1930,7 @@ fil_read_first_page( *min_arch_log_no = arch_log_no; *max_arch_log_no = arch_log_no; #endif /* UNIV_LOG_ARCHIVE */ - return(NULL); + return; } if (*min_flushed_lsn > flushed_lsn) { @@ -2005,8 +1947,6 @@ fil_read_first_page( *max_arch_log_no = arch_log_no; } #endif /* UNIV_LOG_ARCHIVE */ - - return(NULL); } /*================ SINGLE-TABLE TABLESPACES ==========================*/ @@ -3331,7 +3271,6 @@ fil_open_single_table_tablespace( os_file_t file; char* filepath; ibool success; - const char* check_msg; byte* buf2; byte* page; ulint space_id; @@ -3392,8 +3331,6 @@ fil_open_single_table_tablespace( success = os_file_read(file, page, 0, 0, UNIV_PAGE_SIZE); - check_msg = fil_check_first_page(page, TRUE); - /* We have to read the tablespace id and flags from the file. */ space_id = fsp_header_get_space_id(page); @@ -3429,7 +3366,7 @@ fil_open_single_table_tablespace( current_lsn = log_get_lsn(); /* check the header page's consistency */ - if (buf_page_is_corrupted(TRUE, page, + if (buf_page_is_corrupted(page, dict_table_flags_to_zip_size(space_flags))) { fprintf(stderr, "InnoDB: page 0 of %s seems corrupt.\n", filepath); file_is_corrupt = TRUE; @@ -3851,20 +3788,8 @@ skip_write: ut_free(buf2); - if (check_msg) { - ut_print_timestamp(stderr); - fprintf(stderr, " InnoDB: Error: %s in file ", check_msg); - ut_print_filename(stderr, filepath); - fprintf(stderr, " (tablespace id=%lu, flags=%lu)\n" - "InnoDB: Please refer to " REFMAN - "innodb-troubleshooting-datadict.html\n", - (ulong) id, (ulong) flags); - success = FALSE; - goto func_exit; - } - - if (space_id != id - || space_flags != (flags & ~(~0 << DICT_TF_BITS))) { + if (UNIV_UNLIKELY(space_id != id + || space_flags != (flags & ~(~0 << DICT_TF_BITS)))) { ut_print_timestamp(stderr); fputs(" InnoDB: Error: tablespace id and flags in file ", @@ -4355,21 +4280,11 @@ fil_load_single_table_tablespace( page = ut_align(buf2, UNIV_PAGE_SIZE); if (size >= FIL_IBD_FILE_INITIAL_SIZE * (lint)UNIV_PAGE_SIZE) { - const char* check_msg; success = os_file_read(file, page, 0, 0, UNIV_PAGE_SIZE); /* We have to read the tablespace id from the file */ - check_msg = fil_check_first_page(page, TRUE); - - if (check_msg) { - fprintf(stderr, - "InnoDB: Error: %s in file %s", - check_msg, filepath); - goto func_exit; - } - space_id = fsp_header_get_space_id(page); flags = fsp_header_get_flags(page); } else { diff --git a/storage/xtradb/include/buf0buf.h b/storage/xtradb/include/buf0buf.h index 233231e4cab..f00a06c8805 100644 --- a/storage/xtradb/include/buf0buf.h +++ b/storage/xtradb/include/buf0buf.h @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1995, 2013, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1995, 2012, Oracle and/or its affiliates. All Rights Reserved. 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 @@ -684,12 +684,9 @@ UNIV_INTERN ibool buf_page_is_corrupted( /*==================*/ - ibool check_lsn, /*!< in: TRUE if we need to check - and complain about the LSN */ const byte* read_buf, /*!< in: a database page */ - ulint zip_size) /*!< in: size of compressed page; + ulint zip_size); /*!< in: size of compressed page; 0 for uncompressed pages */ - __attribute__((warn_unused_result)); #ifndef UNIV_HOTBACKUP /**********************************************************************//** Gets the space id, page offset, and byte offset within page of a diff --git a/storage/xtradb/include/fil0fil.h b/storage/xtradb/include/fil0fil.h index 881623b30cf..2149d0aadca 100644 --- a/storage/xtradb/include/fil0fil.h +++ b/storage/xtradb/include/fil0fil.h @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1995, 2013, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1995, 2010, Innobase Oy. All Rights Reserved. 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 @@ -328,12 +328,10 @@ fil_write_flushed_lsn_to_data_files( ulint arch_log_no); /*!< in: latest archived log file number */ /*******************************************************************//** -Reads the flushed lsn, arch no, and tablespace flag fields from a data -file at database startup. -@retval NULL on success, or if innodb_force_recovery is set -@return pointer to an error message string */ +Reads the flushed lsn and arch no fields from a data file at database +startup. */ UNIV_INTERN -const char* +void fil_read_first_page( /*================*/ os_file_t data_file, /*!< in: open data file */ @@ -349,9 +347,8 @@ fil_read_first_page( #endif /* UNIV_LOG_ARCHIVE */ ib_uint64_t* min_flushed_lsn, /*!< out: min of flushed lsn values in data files */ - ib_uint64_t* max_flushed_lsn) /*!< out: max of flushed + ib_uint64_t* max_flushed_lsn); /*!< out: max of flushed lsn values in data files */ - __attribute__((warn_unused_result)); /*******************************************************************//** Increments the count of pending operation, if space is not being deleted. @return TRUE if being deleted, and operation should be skipped */ diff --git a/storage/xtradb/srv/srv0start.c b/storage/xtradb/srv/srv0start.c index 93416088f17..6e6c5ff4e41 100644 --- a/storage/xtradb/srv/srv0start.c +++ b/storage/xtradb/srv/srv0start.c @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved. +Copyright (c) 1996, 2010, Innobase Oy. All Rights Reserved. Copyright (c) 2008, Google Inc. Copyright (c) 2009, Percona Inc. @@ -817,7 +817,6 @@ open_or_create_data_files( } if (ret == FALSE) { - const char* check_msg; /* We open the data file */ if (one_created) { @@ -915,20 +914,13 @@ open_or_create_data_files( return(DB_ERROR); } skip_size_check: - check_msg = fil_read_first_page( + fil_read_first_page( files[i], one_opened, &flags, #ifdef UNIV_LOG_ARCHIVE min_arch_log_no, max_arch_log_no, #endif /* UNIV_LOG_ARCHIVE */ min_flushed_lsn, max_flushed_lsn); - if (check_msg) { - fprintf(stderr, - "InnoDB: Error: %s in data file %s\n", - check_msg, name); - return(DB_ERROR); - } - if (!one_opened && UNIV_PAGE_SIZE != fsp_flags_get_page_size(flags)) { @@ -1050,8 +1042,6 @@ skip_size_check: if (ret == FALSE) { - const char* check_msg; - /* We open the data file */ files[i] = os_file_create(innodb_file_data_key, @@ -1088,20 +1078,13 @@ skip_size_check: (ulong) TRX_SYS_DOUBLEWRITE_BLOCK_SIZE * 9); } - check_msg = fil_read_first_page( + fil_read_first_page( files[i], one_opened, &flags, #ifdef UNIV_LOG_ARCHIVE min_arch_log_no, max_arch_log_no, #endif /* UNIV_LOG_ARCHIVE */ min_flushed_lsn, max_flushed_lsn); - if (check_msg) { - fprintf(stderr, - "InnoDB: Error: %s in doublewrite " - "buffer file %s\n", check_msg, name); - return(DB_ERROR); - } - one_opened = TRUE; } else { /* We created the data file and now write it full of diff --git a/storage/xtradb/trx/trx0sys.c b/storage/xtradb/trx/trx0sys.c index a56e55c0e19..ef00bc0a1f0 100644 --- a/storage/xtradb/trx/trx0sys.c +++ b/storage/xtradb/trx/trx0sys.c @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2013, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1996, 2012, Oracle and/or its affiliates. All Rights Reserved. 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 @@ -726,8 +726,7 @@ trx_sys_doublewrite_init_or_restore_pages( /* Check if the page is corrupt */ if (UNIV_UNLIKELY - (buf_page_is_corrupted( - TRUE, read_buf, zip_size))) { + (buf_page_is_corrupted(read_buf, zip_size))) { fprintf(stderr, "InnoDB: Warning: database page" @@ -738,8 +737,7 @@ trx_sys_doublewrite_init_or_restore_pages( " the doublewrite buffer.\n", (ulong) space_id, (ulong) page_no); - if (buf_page_is_corrupted( - TRUE, page, zip_size)) { + if (buf_page_is_corrupted(page, zip_size)) { fprintf(stderr, "InnoDB: Dump of the page:\n"); buf_page_print( |