Commit 5a6ab6ad authored by unknown's avatar unknown

Merge istruewing@bk-internal.mysql.com:/home/bk/mysql-4.0

into mysql.com:/home/mydev/mysql-4.0

parents a60b8496 5e33eb8e
...@@ -936,17 +936,15 @@ esac ...@@ -936,17 +936,15 @@ esac
MAX_C_OPTIMIZE="-O3" MAX_C_OPTIMIZE="-O3"
MAX_CXX_OPTIMIZE="-O3" MAX_CXX_OPTIMIZE="-O3"
fix_for_forte_x86 () # workaround for Sun Forte/x86 see BUG#4681
{ case $SYSTEM_TYPE-$MACHINE_TYPE-$ac_cv_prog_gcc in
case $MACHINE_TYPE-$ac_cv_prog_gcc in *solaris*-i?86-no)
i?86-no) CFLAGS="$CFLAGS -DBIG_FILES"
# workaround for Sun Forte/x86 see BUG#4681 CXXFLAGS="$CXXFLAGS -DBIG_FILES"
CFLAGS="$CFLAGS -DBIG_FILES" ;;
CXXFLAGS="$CXXFLAGS -DBIG_FILES" *) ;;
;; esac
*) ;;
esac
}
case $SYSTEM_TYPE in case $SYSTEM_TYPE in
*solaris2.7*) *solaris2.7*)
...@@ -962,7 +960,6 @@ case $SYSTEM_TYPE in ...@@ -962,7 +960,6 @@ case $SYSTEM_TYPE in
sed -e "s|^#if[ ]*!defined(lint) && !defined(__lint)|#if !defined\(lint\) \&\& !defined\(__lint\) \&\& !defined\(getwc\)|" < /usr/include/widec.h > include/widec.h sed -e "s|^#if[ ]*!defined(lint) && !defined(__lint)|#if !defined\(lint\) \&\& !defined\(__lint\) \&\& !defined\(getwc\)|" < /usr/include/widec.h > include/widec.h
CFLAGS="$CFLAGS -DHAVE_CURSES_H -I$builddir/include -DHAVE_RWLOCK_T" CFLAGS="$CFLAGS -DHAVE_CURSES_H -I$builddir/include -DHAVE_RWLOCK_T"
CXXFLAGS="$CXXFLAGS -DHAVE_CURSES_H -I$builddir/include -DHAVE_RWLOCK_T" CXXFLAGS="$CXXFLAGS -DHAVE_CURSES_H -I$builddir/include -DHAVE_RWLOCK_T"
fix_for_forte_x86
;; ;;
*solaris2.8*) *solaris2.8*)
# Solaris 2.8 has a broken /usr/include/widec.h # Solaris 2.8 has a broken /usr/include/widec.h
...@@ -977,23 +974,19 @@ case $SYSTEM_TYPE in ...@@ -977,23 +974,19 @@ case $SYSTEM_TYPE in
sed -e "s|^#if[ ]*!defined(__lint)|#if !defined\(__lint\) \&\& !defined\(getwc\)|" < /usr/include/widec.h > include/widec.h sed -e "s|^#if[ ]*!defined(__lint)|#if !defined\(__lint\) \&\& !defined\(getwc\)|" < /usr/include/widec.h > include/widec.h
CFLAGS="$CFLAGS -DHAVE_CURSES_H -I$builddir/include -DHAVE_RWLOCK_T" CFLAGS="$CFLAGS -DHAVE_CURSES_H -I$builddir/include -DHAVE_RWLOCK_T"
CXXFLAGS="$CXXFLAGS -DHAVE_CURSES_H -I$builddir/include -DHAVE_RWLOCK_T" CXXFLAGS="$CXXFLAGS -DHAVE_CURSES_H -I$builddir/include -DHAVE_RWLOCK_T"
fix_for_forte_x86
;; ;;
*solaris2.5.1*) *solaris2.5.1*)
echo "Enabling getpass() workaround for Solaris 2.5.1" echo "Enabling getpass() workaround for Solaris 2.5.1"
CFLAGS="$CFLAGS -DHAVE_BROKEN_GETPASS -DSOLARIS -DHAVE_RWLOCK_T"; CFLAGS="$CFLAGS -DHAVE_BROKEN_GETPASS -DSOLARIS -DHAVE_RWLOCK_T";
CXXFLAGS="$CXXFLAGS -DHAVE_RWLOCK_T -DSOLARIS" CXXFLAGS="$CXXFLAGS -DHAVE_RWLOCK_T -DSOLARIS"
fix_for_forte_x86
;; ;;
*solaris*) *solaris*)
CFLAGS="$CFLAGS -DHAVE_RWLOCK_T" CFLAGS="$CFLAGS -DHAVE_RWLOCK_T"
CXXFLAGS="$CXXFLAGS -DHAVE_RWLOCK_T" CXXFLAGS="$CXXFLAGS -DHAVE_RWLOCK_T"
fix_for_forte_x86
;; ;;
*SunOS*) *SunOS*)
echo "Enabling getpass() workaround for SunOS" echo "Enabling getpass() workaround for SunOS"
CFLAGS="$CFLAGS -DHAVE_BROKEN_GETPASS -DSOLARIS"; CFLAGS="$CFLAGS -DHAVE_BROKEN_GETPASS -DSOLARIS";
fix_for_forte_x86
;; ;;
*hpux10.20*) *hpux10.20*)
echo "Enabling workarounds for hpux 10.20" echo "Enabling workarounds for hpux 10.20"
......
...@@ -213,7 +213,9 @@ buf_flush_buffered_writes(void) ...@@ -213,7 +213,9 @@ buf_flush_buffered_writes(void)
/*===========================*/ /*===========================*/
{ {
buf_block_t* block; buf_block_t* block;
byte* write_buf;
ulint len; ulint len;
ulint len2;
ulint i; ulint i;
if (trx_doublewrite == NULL) { if (trx_doublewrite == NULL) {
...@@ -240,6 +242,16 @@ buf_flush_buffered_writes(void) ...@@ -240,6 +242,16 @@ buf_flush_buffered_writes(void)
block = trx_doublewrite->buf_block_arr[i]; block = trx_doublewrite->buf_block_arr[i];
ut_a(block->state == BUF_BLOCK_FILE_PAGE); ut_a(block->state == BUF_BLOCK_FILE_PAGE);
if (mach_read_from_4(block->frame + FIL_PAGE_LSN + 4)
!= mach_read_from_4(block->frame + UNIV_PAGE_SIZE
- FIL_PAGE_END_LSN_OLD_CHKSUM + 4)) {
ut_print_timestamp(stderr);
fprintf(stderr,
" InnoDB: ERROR: The page to be written seems corrupt!\n"
"InnoDB: The lsn fields do not match! Noticed in the buffer pool\n"
"InnoDB: before posting to the doublewrite buffer.\n");
}
if (block->check_index_page_at_flush if (block->check_index_page_at_flush
&& !page_simple_validate(block->frame)) { && !page_simple_validate(block->frame)) {
...@@ -268,6 +280,19 @@ buf_flush_buffered_writes(void) ...@@ -268,6 +280,19 @@ buf_flush_buffered_writes(void)
trx_doublewrite->block1, 0, len, trx_doublewrite->block1, 0, len,
(void*)trx_doublewrite->write_buf, NULL); (void*)trx_doublewrite->write_buf, NULL);
write_buf = trx_doublewrite->write_buf;
for (len2 = 0; len2 + UNIV_PAGE_SIZE <= len; len2 += UNIV_PAGE_SIZE) {
if (mach_read_from_4(write_buf + len2 + FIL_PAGE_LSN + 4)
!= mach_read_from_4(write_buf + len2 + UNIV_PAGE_SIZE
- FIL_PAGE_END_LSN_OLD_CHKSUM + 4)) {
ut_print_timestamp(stderr);
fprintf(stderr,
" InnoDB: ERROR: The page to be written seems corrupt!\n"
"InnoDB: The lsn fields do not match! Noticed in the doublewrite block1.\n");
}
}
if (trx_doublewrite->first_free > TRX_SYS_DOUBLEWRITE_BLOCK_SIZE) { if (trx_doublewrite->first_free > TRX_SYS_DOUBLEWRITE_BLOCK_SIZE) {
len = (trx_doublewrite->first_free len = (trx_doublewrite->first_free
- TRX_SYS_DOUBLEWRITE_BLOCK_SIZE) * UNIV_PAGE_SIZE; - TRX_SYS_DOUBLEWRITE_BLOCK_SIZE) * UNIV_PAGE_SIZE;
...@@ -278,6 +303,22 @@ buf_flush_buffered_writes(void) ...@@ -278,6 +303,22 @@ buf_flush_buffered_writes(void)
(void*)(trx_doublewrite->write_buf (void*)(trx_doublewrite->write_buf
+ TRX_SYS_DOUBLEWRITE_BLOCK_SIZE * UNIV_PAGE_SIZE), + TRX_SYS_DOUBLEWRITE_BLOCK_SIZE * UNIV_PAGE_SIZE),
NULL); NULL);
write_buf = trx_doublewrite->write_buf
+ TRX_SYS_DOUBLEWRITE_BLOCK_SIZE * UNIV_PAGE_SIZE;
for (len2 = 0; len2 + UNIV_PAGE_SIZE <= len;
len2 += UNIV_PAGE_SIZE) {
if (mach_read_from_4(write_buf + len2
+ FIL_PAGE_LSN + 4)
!= mach_read_from_4(write_buf + len2
+ UNIV_PAGE_SIZE
- FIL_PAGE_END_LSN_OLD_CHKSUM + 4)) {
ut_print_timestamp(stderr);
fprintf(stderr,
" InnoDB: ERROR: The page to be written seems corrupt!\n"
"InnoDB: The lsn fields do not match! Noticed in the doublewrite block2.\n");
}
}
} }
/* Now flush the doublewrite buffer data to disk */ /* Now flush the doublewrite buffer data to disk */
...@@ -291,6 +332,19 @@ buf_flush_buffered_writes(void) ...@@ -291,6 +332,19 @@ buf_flush_buffered_writes(void)
for (i = 0; i < trx_doublewrite->first_free; i++) { for (i = 0; i < trx_doublewrite->first_free; i++) {
block = trx_doublewrite->buf_block_arr[i]; block = trx_doublewrite->buf_block_arr[i];
if (mach_read_from_4(block->frame + FIL_PAGE_LSN + 4)
!= mach_read_from_4(block->frame + UNIV_PAGE_SIZE
- FIL_PAGE_END_LSN_OLD_CHKSUM + 4)) {
ut_print_timestamp(stderr);
fprintf(stderr,
" InnoDB: ERROR: The page to be written seems corrupt!\n"
"InnoDB: The lsn fields do not match! Noticed in the buffer pool\n"
"InnoDB: after posting and flushing the doublewrite buffer.\n"
"InnoDB: Page buf fix count %lu, io fix %lu, state %lu\n",
(ulong)block->buf_fix_count, (ulong)block->io_fix,
(ulong)block->state);
}
fil_io(OS_FILE_WRITE | OS_AIO_SIMULATED_WAKE_LATER, fil_io(OS_FILE_WRITE | OS_AIO_SIMULATED_WAKE_LATER,
FALSE, block->space, block->offset, 0, UNIV_PAGE_SIZE, FALSE, block->space, block->offset, 0, UNIV_PAGE_SIZE,
(void*)block->frame, (void*)block); (void*)block->frame, (void*)block);
......
...@@ -479,7 +479,15 @@ page_rec_get_next( ...@@ -479,7 +479,15 @@ page_rec_get_next(
offs = rec_get_next_offs(rec); offs = rec_get_next_offs(rec);
ut_a(offs < UNIV_PAGE_SIZE); if (offs >= UNIV_PAGE_SIZE) {
fprintf(stderr,
"InnoDB: Next record offset is nonsensical %lu in record at offset %lu\n",
(ulong)offs, (ulong)(rec - page));
buf_page_print(page);
ut_a(0);
}
if (offs == 0) { if (offs == 0) {
......
...@@ -2736,6 +2736,9 @@ consecutive_loop: ...@@ -2736,6 +2736,9 @@ consecutive_loop:
ut_print_timestamp(stderr); ut_print_timestamp(stderr);
fprintf(stderr, fprintf(stderr,
" InnoDB: ERROR: The page to be written seems corrupt!\n"); " InnoDB: ERROR: The page to be written seems corrupt!\n");
fprintf(stderr,
"InnoDB: Writing a block of %lu bytes, currently writing at offset %lu\n",
(ulong)total_len, (ulong)len2);
buf_page_print(combined_buf + len2); buf_page_print(combined_buf + len2);
fprintf(stderr, fprintf(stderr,
"InnoDB: ERROR: The page to be written seems corrupt!\n"); "InnoDB: ERROR: The page to be written seems corrupt!\n");
......
...@@ -3088,6 +3088,7 @@ rec_loop: ...@@ -3088,6 +3088,7 @@ rec_loop:
if (srv_force_recovery == 0 || moves_up == FALSE) { if (srv_force_recovery == 0 || moves_up == FALSE) {
ut_print_timestamp(stderr); ut_print_timestamp(stderr);
buf_page_print(buf_frame_align(rec));
fprintf(stderr, fprintf(stderr,
" InnoDB: Index corruption: rec offs %lu next offs %lu, page no %lu,\n" " InnoDB: Index corruption: rec offs %lu next offs %lu, page no %lu,\n"
"InnoDB: ", "InnoDB: ",
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment