mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 20:42:30 +01:00
30d3d8d3fc
- Ignore CRC errors in REDO for potential new pages - Ignore CRC errors when repairing tables - Don't do readcheck callback on read error - Set my_errno to HA_ERR_WRONG_CRC if we find page with wrong CRC - Check index page for length before calculating CRC to catch bad pages Fixed bugs where we used wrong file descriptor to read/write bitmaps Fixed wrong hash key in 'files_in_flush' Fixed wrong lock method when writing bitmap Fixed some wrong printf statements in check/repair that caused core dumps Fixed argument to translog_page_validator that cause reading of log files to fail Store number of bytes used for delete-linked key pages to be able to use standard index CRC for deleted key pages. Use fast 'dummy' pagecheck callbacks for temporary tables Don't die silently if flush finds pinned pages Give error (for now) if one tries to create a transactional table with fulltext or spatial keys Removed some not needed calls to pagecache_file_init() Added checking of pagecache checksums to ma_test1 and ma_test2 More DBUG Fixed some DBUG_PRINT to be in line with rest of the code include/my_base.h: Added HA_ERR_INTERNAL_ERROR (used for flush with pinned pages) and HA_ERR_WRONG_CRC mysql-test/r/binlog_unsafe.result: Added missing DROP VIEW statement mysql-test/r/maria.result: Added TRANSACTIONAL=0 when testing with fulltext keys Added test that verifies we can't yet create transactional test with fulltext or spatial keys mysql-test/r/ps_maria.result: Added TRANSACTIONAL=0 when testing with fulltext keys mysql-test/t/binlog_unsafe.test: Added missing DROP VIEW statement mysql-test/t/maria.test: Added TRANSACTIONAL=0 when testing with fulltext keys Added test that verifies we can't yet create transactional test with fulltext or spatial keys mysql-test/t/ps_maria.test: Added TRANSACTIONAL=0 when testing with fulltext keys mysys/my_fopen.c: Fd: -> fd: mysys/my_handler.c: Added new error messages mysys/my_lock.c: Fd: -> fd: mysys/my_pread.c: Fd: -> fd: mysys/my_read.c: Fd: -> fd: mysys/my_seek.c: Fd: -> fd: mysys/my_sync.c: Fd: -> fd: mysys/my_write.c: Fd: -> fd: sql/mysqld.cc: Fixed wrong argument to my_uuid_init() sql/sql_plugin.cc: Unified DBUG_PRINT (for convert-dbug-for-diff) storage/maria/ma_bitmap.c: Fixed wrong lock method when writing bitmap Fixed valgrind error Use fast 'dummy' pagecheck callbacks for temporary tables Faster bitmap handling for non transational tables storage/maria/ma_blockrec.c: Fixed that bitmap reading is done with the correct filehandle Handle reading of pages with wrong CRC when page contect doesn't matter Use the page buffer also when we get WRONG CRC or FILE_TOO_SHORT. (Faster and fixed a couple of bugs) storage/maria/ma_check.c: Split long strings for readablity Fixed some wrong printf statements that caused core dumps Use bitmap.file for bitmaps Ignore pages with wrong CRC storage/maria/ma_close.c: More DBUG_PRINT storage/maria/ma_create.c: Give error (for now) if one tries to create a crash safe table with fulltext or spatial keys storage/maria/ma_key_recover.c: Ignore HA_ERR_WRONG_CRC for new pages info->s -> share Store number of bytes used for delete-linked key pages to be able to use standard index CRC for deleted key pages. storage/maria/ma_loghandler.c: Fixed argument to translog_page_validator() storage/maria/ma_open.c: Removed old VMS specific code Added function to setup pagecache callbacks Moved code around to set 'share->temporary' early Removed some not needed calls to pagecache_file_init() storage/maria/ma_page.c: Store number of bytes used for delete-linked key pages to be able to use standard index CRC for deleted key pages. storage/maria/ma_pagecache.c: Don't do readcheck callback on read error Reset PCBLOCK_ERROR in pagecache_unlock_by_link() if we write page Set my_errno to HA_ER_INTERNAL_ERROR if flush() finds pinned pages Don't die silently if flush finds pinned pages. Use correct file descriptor when flushing pages Fixed wrong hash key in 'files_in_flush'; This must be the file descriptor, not the PAGECACHE_FILE as there may be several PAGECACHE_FILE for same file descriptor More DBUG_PRINT storage/maria/ma_pagecrc.c: Removed inline from not tiny static function Set my_errno to HA_ERR_WRONG_CRC if we find page with wrong CRC (Otherwise my_errno may be 0, and a lot of other code will be confused) CRCerror -> error (to keep code uniform) Print crc with %lu, as in my_checksum() uchar* -> uchar * Check index page for length before calculating CRC to catch bad pages Added 'dummy' crc_check and filler functions that are used for temporary tables storage/maria/ma_recovery.c: More DBUG More message to users to give information what phase failed Better error message if recovery failed storage/maria/ma_test1.c: Added checking of page checksums (combined with 'c' to not have to add more test runs) storage/maria/ma_test2.c: Added checking of page checksums (combined with 'c' to not have to add more test runs) storage/maria/maria_chk.c: Fixed wrong argument to _ma_check_print_error() storage/maria/maria_def.h: Added format information to _ma_check_print_xxxx functions uchar* -> uchar *
101 lines
3.2 KiB
C
101 lines
3.2 KiB
C
/* Copyright (C) 2000 MySQL AB
|
|
|
|
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 Foundation; version 2 of the License.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program; if not, write to the Free Software
|
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
|
|
|
|
#include "mysys_priv.h"
|
|
|
|
/*
|
|
Seek to a position in a file.
|
|
|
|
ARGUMENTS
|
|
File fd The file descriptor
|
|
my_off_t pos The expected position (absolute or relative)
|
|
int whence A direction parameter and one of
|
|
{SEEK_SET, SEEK_CUR, SEEK_END}
|
|
myf MyFlags MY_THREADSAFE must be set in case my_seek may be mixed
|
|
with my_pread/my_pwrite calls and fd is shared among
|
|
threads.
|
|
|
|
DESCRIPTION
|
|
The my_seek function is a wrapper around the system call lseek and
|
|
repositions the offset of the file descriptor fd to the argument
|
|
offset according to the directive whence as follows:
|
|
SEEK_SET The offset is set to offset bytes.
|
|
SEEK_CUR The offset is set to its current location plus offset bytes
|
|
SEEK_END The offset is set to the size of the file plus offset bytes
|
|
|
|
RETURN VALUE
|
|
my_off_t newpos The new position in the file.
|
|
MY_FILEPOS_ERROR An error was encountered while performing
|
|
the seek. my_errno is set to indicate the
|
|
actual error.
|
|
*/
|
|
|
|
my_off_t my_seek(File fd, my_off_t pos, int whence,
|
|
myf MyFlags __attribute__((unused)))
|
|
{
|
|
reg1 os_off_t newpos= -1;
|
|
DBUG_ENTER("my_seek");
|
|
DBUG_PRINT("my",("fd: %d Hpos: %lu Pos: %lu Whence: %d MyFlags: %d",
|
|
fd, (ulong) (((ulonglong) pos) >> 32), (ulong) pos,
|
|
whence, MyFlags));
|
|
DBUG_ASSERT(pos != MY_FILEPOS_ERROR); /* safety check */
|
|
|
|
/*
|
|
Make sure we are using a valid file descriptor!
|
|
*/
|
|
DBUG_ASSERT(fd != -1);
|
|
#if defined(THREAD) && !defined(HAVE_PREAD)
|
|
if (MyFlags & MY_THREADSAFE)
|
|
{
|
|
pthread_mutex_lock(&my_file_info[fd].mutex);
|
|
newpos= lseek(fd, pos, whence);
|
|
pthread_mutex_unlock(&my_file_info[fd].mutex);
|
|
}
|
|
else
|
|
#endif
|
|
newpos= lseek(fd, pos, whence);
|
|
if (newpos == (os_off_t) -1)
|
|
{
|
|
my_errno=errno;
|
|
DBUG_PRINT("error",("lseek: %lu errno: %d", (ulong) newpos,errno));
|
|
DBUG_RETURN(MY_FILEPOS_ERROR);
|
|
}
|
|
if ((my_off_t) newpos != pos)
|
|
{
|
|
DBUG_PRINT("exit",("pos: %lu", (ulong) newpos));
|
|
}
|
|
DBUG_RETURN((my_off_t) newpos);
|
|
} /* my_seek */
|
|
|
|
|
|
/* Tell current position of file */
|
|
/* ARGSUSED */
|
|
|
|
my_off_t my_tell(File fd, myf MyFlags __attribute__((unused)))
|
|
{
|
|
os_off_t pos;
|
|
DBUG_ENTER("my_tell");
|
|
DBUG_PRINT("my",("fd: %d MyFlags: %d",fd, MyFlags));
|
|
DBUG_ASSERT(fd >= 0);
|
|
#ifdef HAVE_TELL
|
|
pos=tell(fd);
|
|
#else
|
|
pos=lseek(fd, 0L, MY_SEEK_CUR);
|
|
#endif
|
|
if (pos == (os_off_t) -1)
|
|
my_errno=errno;
|
|
DBUG_PRINT("exit",("pos: %lu", (ulong) pos));
|
|
DBUG_RETURN((my_off_t) pos);
|
|
} /* my_tell */
|