mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Call my_sync() after all data is written to .frm file
Added my_sync() to mysys which will do fsync/fdatasync/_commit() on a file. VC++Files/mysys/mysys.dsp: Added my_sync.c configure.in: Added testing of fsync and fdatasync include/my_sys.h: Added my_sync() include/mysys_err.h: Added my_sync() isam/extra.c: Added my_sync() myisam/mi_extra.c: Added my_sync() myisam/mi_locking.c: Added my_sync() mysql-test/mysql-test-run.sh: Added option --valgrind-all mysys/Makefile.am: Added my_sync.c mysys/errors.c: Added my_sync() mysys/my_symlink.c: Removed compiler warning mysys/thr_alarm.c: Fix for link error on windows sql/unireg.cc: Call my_sync() after all data is written to .frm file BitKeeper/etc/logging_ok: Logging to logging@openlogging.org accepted
This commit is contained in:
@ -66,6 +66,7 @@ monty@hundin.mysql.fi
|
|||||||
monty@mashka.(none)
|
monty@mashka.(none)
|
||||||
monty@mashka.mysql.fi
|
monty@mashka.mysql.fi
|
||||||
monty@mishka.mysql.fi
|
monty@mishka.mysql.fi
|
||||||
|
monty@mysql.com
|
||||||
monty@narttu.
|
monty@narttu.
|
||||||
monty@narttu.mysql.fi
|
monty@narttu.mysql.fi
|
||||||
monty@rescue.
|
monty@rescue.
|
||||||
|
@ -426,6 +426,10 @@ SOURCE=.\my_symlink2.c
|
|||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\my_sync.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=.\my_tempnam.c
|
SOURCE=.\my_tempnam.c
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
@ -1817,7 +1817,7 @@ AC_CHECK_FUNCS(alarm bmove \
|
|||||||
pthread_attr_create pthread_getsequence_np pthread_attr_setstacksize \
|
pthread_attr_create pthread_getsequence_np pthread_attr_setstacksize \
|
||||||
pthread_attr_getstacksize \
|
pthread_attr_getstacksize \
|
||||||
pthread_condattr_create rwlock_init pthread_rwlock_rdlock \
|
pthread_condattr_create rwlock_init pthread_rwlock_rdlock \
|
||||||
fchmod getpass getpassphrase initgroups mlockall)
|
fsync fdatasync fchmod getpass getpassphrase initgroups mlockall)
|
||||||
|
|
||||||
CFLAGS="$ORG_CFLAGS"
|
CFLAGS="$ORG_CFLAGS"
|
||||||
|
|
||||||
|
@ -566,6 +566,7 @@ extern FILE *my_fopen(const char *FileName,int Flags,myf MyFlags);
|
|||||||
extern FILE *my_fdopen(File Filedes,const char *name, int Flags,myf MyFlags);
|
extern FILE *my_fdopen(File Filedes,const char *name, int Flags,myf MyFlags);
|
||||||
extern int my_fclose(FILE *fd,myf MyFlags);
|
extern int my_fclose(FILE *fd,myf MyFlags);
|
||||||
extern int my_chsize(File fd,my_off_t newlength, int filler, myf MyFlags);
|
extern int my_chsize(File fd,my_off_t newlength, int filler, myf MyFlags);
|
||||||
|
extern int my_sync(File fd, myf my_flags);
|
||||||
extern int my_error _VARARGS((int nr,myf MyFlags, ...));
|
extern int my_error _VARARGS((int nr,myf MyFlags, ...));
|
||||||
extern int my_printf_error _VARARGS((uint my_err, const char *format,
|
extern int my_printf_error _VARARGS((uint my_err, const char *format,
|
||||||
myf MyFlags, ...)
|
myf MyFlags, ...)
|
||||||
|
@ -21,7 +21,7 @@ extern "C" {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define GLOB 0 /* Error maps */
|
#define GLOB 0 /* Error maps */
|
||||||
#define GLOBERRS 27 /* Max number of error messages in map's */
|
#define GLOBERRS 28 /* Max number of error messages in map's */
|
||||||
#define EE(X) globerrs[ X ] /* Defines to add error to right map */
|
#define EE(X) globerrs[ X ] /* Defines to add error to right map */
|
||||||
|
|
||||||
extern const char * NEAR globerrs[]; /* my_error_messages is here */
|
extern const char * NEAR globerrs[]; /* my_error_messages is here */
|
||||||
@ -53,6 +53,7 @@ extern const char * NEAR globerrs[]; /* my_error_messages is here */
|
|||||||
#define EE_CANT_READLINK 24
|
#define EE_CANT_READLINK 24
|
||||||
#define EE_CANT_SYMLINK 25
|
#define EE_CANT_SYMLINK 25
|
||||||
#define EE_REALPATH 26
|
#define EE_REALPATH 26
|
||||||
|
#define EE_SYNC 27
|
||||||
|
|
||||||
/* exit codes for all MySQL programs */
|
/* exit codes for all MySQL programs */
|
||||||
|
|
||||||
|
10
isam/extra.c
10
isam/extra.c
@ -250,17 +250,15 @@ int nisam_extra(N_INFO *info, enum ha_extra_function function)
|
|||||||
pthread_mutex_unlock(&THR_LOCK_isam);
|
pthread_mutex_unlock(&THR_LOCK_isam);
|
||||||
break;
|
break;
|
||||||
case HA_EXTRA_FLUSH:
|
case HA_EXTRA_FLUSH:
|
||||||
#ifdef __WIN__
|
|
||||||
if (info->s->not_flushed)
|
if (info->s->not_flushed)
|
||||||
{
|
{
|
||||||
info->s->not_flushed=0;
|
info->s->not_flushed=0;
|
||||||
if (_commit(info->s->kfile))
|
if (my_sync(info->s->kfile, MYF(0)))
|
||||||
error=errno;
|
error= my_errno;
|
||||||
if (_commit(info->dfile))
|
if (my_sync(info->dfile, MYF(0)))
|
||||||
error=errno;
|
error= my_errno;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
#endif
|
|
||||||
case HA_EXTRA_NORMAL: /* Theese isn't in use */
|
case HA_EXTRA_NORMAL: /* Theese isn't in use */
|
||||||
case HA_EXTRA_QUICK:
|
case HA_EXTRA_QUICK:
|
||||||
case HA_EXTRA_KEY_CACHE:
|
case HA_EXTRA_KEY_CACHE:
|
||||||
|
@ -336,22 +336,10 @@ int mi_extra(MI_INFO *info, enum ha_extra_function function, void *extra_arg)
|
|||||||
if (share->not_flushed)
|
if (share->not_flushed)
|
||||||
{
|
{
|
||||||
share->not_flushed=0;
|
share->not_flushed=0;
|
||||||
#if defined(__WIN__)
|
if (my_sync(share->kfile, MYF(0)))
|
||||||
if (_commit(share->kfile))
|
error= my_errno;
|
||||||
error=errno;
|
if (my_sync(info->dfile, MYF(0)))
|
||||||
if (_commit(info->dfile))
|
error= my_errno;
|
||||||
error=errno;
|
|
||||||
#elif defined(HAVE_FDATASYNC)
|
|
||||||
if (fdatasync(share->kfile))
|
|
||||||
error=errno;
|
|
||||||
if (fdatasync(share->dfile))
|
|
||||||
error=errno;
|
|
||||||
#elif defined(HAVE_FSYNC)
|
|
||||||
if ( fsync(share->kfile))
|
|
||||||
error=errno;
|
|
||||||
if (fsync(share->dfile))
|
|
||||||
error=errno;
|
|
||||||
#endif
|
|
||||||
if (error)
|
if (error)
|
||||||
{
|
{
|
||||||
share->changed=1;
|
share->changed=1;
|
||||||
|
@ -88,22 +88,10 @@ int mi_lock_database(MI_INFO *info, int lock_type)
|
|||||||
share->changed=0;
|
share->changed=0;
|
||||||
if (myisam_flush)
|
if (myisam_flush)
|
||||||
{
|
{
|
||||||
#if defined(__WIN__)
|
if (my_sync(share->kfile, MYF(0)))
|
||||||
if (_commit(share->kfile))
|
error= my_errno;
|
||||||
error=errno;
|
if (my_sync(info->dfile, MYF(0)))
|
||||||
if (_commit(info->dfile))
|
error= my_errno;
|
||||||
error=errno;
|
|
||||||
#elif defined(HAVE_FDATASYNC)
|
|
||||||
if (fdatasync(share->kfile))
|
|
||||||
error=errno;
|
|
||||||
if (fdatasync(share->dfile))
|
|
||||||
error=errno;
|
|
||||||
#elif defined(HAVE_FSYNC)
|
|
||||||
if (fsync(share->kfile))
|
|
||||||
error=errno;
|
|
||||||
if (fsync(share->dfile))
|
|
||||||
error=errno;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
share->not_flushed=1;
|
share->not_flushed=1;
|
||||||
|
@ -353,6 +353,9 @@ while test $# -gt 0; do
|
|||||||
TMP=`$ECHO "$1" | $SED -e "s;--valgrind-options=;;"`
|
TMP=`$ECHO "$1" | $SED -e "s;--valgrind-options=;;"`
|
||||||
VALGRIND="$VALGRIND $TMP"
|
VALGRIND="$VALGRIND $TMP"
|
||||||
;;
|
;;
|
||||||
|
--valgrind-all)
|
||||||
|
VALGRIND="$VALGRIND -v --show-reachable=yes"
|
||||||
|
;;
|
||||||
--skip-*)
|
--skip-*)
|
||||||
EXTRA_MASTER_MYSQLD_OPT="$EXTRA_MASTER_MYSQLD_OPT $1"
|
EXTRA_MASTER_MYSQLD_OPT="$EXTRA_MASTER_MYSQLD_OPT $1"
|
||||||
EXTRA_SLAVE_MYSQLD_OPT="$EXTRA_SLAVE_MYSQLD_OPT $1"
|
EXTRA_SLAVE_MYSQLD_OPT="$EXTRA_SLAVE_MYSQLD_OPT $1"
|
||||||
|
@ -47,7 +47,7 @@ libmysys_a_SOURCES = my_init.c my_getwd.c mf_getdate.c\
|
|||||||
my_delete.c my_rename.c my_redel.c my_tempnam.c \
|
my_delete.c my_rename.c my_redel.c my_tempnam.c \
|
||||||
my_chsize.c my_lread.c my_lwrite.c my_clock.c \
|
my_chsize.c my_lread.c my_lwrite.c my_clock.c \
|
||||||
my_quick.c my_lockmem.c my_static.c \
|
my_quick.c my_lockmem.c my_static.c \
|
||||||
my_getopt.c my_mkdir.c \
|
my_sync.c my_getopt.c my_mkdir.c \
|
||||||
default.c my_compress.c checksum.c raid.cc \
|
default.c my_compress.c checksum.c raid.cc \
|
||||||
my_net.c my_semaphore.c my_port.c my_sleep.c \
|
my_net.c my_semaphore.c my_port.c my_sleep.c \
|
||||||
my_vsnprintf.c charset.c my_bitmap.c my_bit.c md5.c \
|
my_vsnprintf.c charset.c my_bitmap.c my_bit.c md5.c \
|
||||||
|
@ -48,6 +48,7 @@ const char * NEAR globerrs[GLOBERRS]=
|
|||||||
"Can't read value for symlink '%s' (Error %d)",
|
"Can't read value for symlink '%s' (Error %d)",
|
||||||
"Can't create symlink '%s' pointing at '%s' (Error %d)",
|
"Can't create symlink '%s' pointing at '%s' (Error %d)",
|
||||||
"Error on realpath() on '%s' (Error %d)",
|
"Error on realpath() on '%s' (Error %d)",
|
||||||
|
"Can't sync file '%s' to disk (Errcode: %d)",
|
||||||
};
|
};
|
||||||
|
|
||||||
void init_glob_errs(void)
|
void init_glob_errs(void)
|
||||||
@ -84,8 +85,9 @@ void init_glob_errs()
|
|||||||
EE(EE_CANT_MKDIR) ="Can't create directory '%s' (Errcode: %d)";
|
EE(EE_CANT_MKDIR) ="Can't create directory '%s' (Errcode: %d)";
|
||||||
EE(EE_UNKNOWN_CHARSET)= "Character set is not a compiled character set and is not specified in the %s file";
|
EE(EE_UNKNOWN_CHARSET)= "Character set is not a compiled character set and is not specified in the %s file";
|
||||||
EE(EE_OUT_OF_FILERESOURCES)="Out of resources when opening file '%s' (Errcode: %d)";
|
EE(EE_OUT_OF_FILERESOURCES)="Out of resources when opening file '%s' (Errcode: %d)";
|
||||||
EE(EE_CANT_READLINK)="Can't read value for symlink '%s' (Error %d)";
|
EE(EE_CANT_READLINK)= "Can't read value for symlink '%s' (Error %d)";
|
||||||
EE(EE_CANT_SYMLINK)="Can't create symlink '%s' pointing at '%s' (Error %d)";
|
EE(EE_CANT_SYMLINK)= "Can't create symlink '%s' pointing at '%s' (Error %d)";
|
||||||
EE(EE_REALPATH)="Error on realpath() on '%s' (Error %d)";
|
EE(EE_REALPATH)= "Error on realpath() on '%s' (Error %d)";
|
||||||
|
EE(EE_SYNC)= "Can't sync file '%s' to disk (Errcode: %d)";
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -103,7 +103,8 @@ int my_symlink(const char *content, const char *linkname, myf MyFlags)
|
|||||||
#define BUFF_LEN FN_LEN
|
#define BUFF_LEN FN_LEN
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int my_realpath(char *to, const char *filename, myf MyFlags)
|
int my_realpath(char *to, const char *filename,
|
||||||
|
myf MyFlags __attribute__((unused)))
|
||||||
{
|
{
|
||||||
#if defined(HAVE_REALPATH) && !defined(HAVE_purify) && !defined(HAVE_BROKEN_REALPATH)
|
#if defined(HAVE_REALPATH) && !defined(HAVE_purify) && !defined(HAVE_BROKEN_REALPATH)
|
||||||
int result=0;
|
int result=0;
|
||||||
|
60
mysys/my_sync.c
Normal file
60
mysys/my_sync.c
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
/* Copyright (C) 2003 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; either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
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"
|
||||||
|
#include "mysys_err.h"
|
||||||
|
#include <errno.h>
|
||||||
|
|
||||||
|
/*
|
||||||
|
Sync data in file to disk
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
my_sync()
|
||||||
|
fd File descritor to sync
|
||||||
|
my_flags Flags (now only MY_WME is supported)
|
||||||
|
|
||||||
|
NOTE
|
||||||
|
If file system supports its, only file data is synced, not inode date
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
0 ok
|
||||||
|
-1 error
|
||||||
|
*/
|
||||||
|
|
||||||
|
int my_sync(File fd, myf my_flags)
|
||||||
|
{
|
||||||
|
int res;
|
||||||
|
DBUG_ENTER("my_sync");
|
||||||
|
DBUG_PRINT("my",("Fd: %d my_flags: %d", fd, my_flags));
|
||||||
|
|
||||||
|
#if defined(HAVE_FDATASYNC)
|
||||||
|
res= fdatasync(fd);
|
||||||
|
#elif defined(HAVE_FSYNC)
|
||||||
|
res=fsync(fd);
|
||||||
|
#elif defined(__WIN__)
|
||||||
|
res= _commit(fd);
|
||||||
|
#else
|
||||||
|
res= 0; /* No sync (strange OS) */
|
||||||
|
#endif
|
||||||
|
if (res)
|
||||||
|
{
|
||||||
|
if (!(my_errno= errno))
|
||||||
|
my_errno= -1; /* Unknown error */
|
||||||
|
if (my_flags & MY_WME)
|
||||||
|
my_error(EE_SYNC, MYF(ME_BELL+ME_WAITTANG), my_filename(fd), my_errno);
|
||||||
|
}
|
||||||
|
DBUG_RETURN(res);
|
||||||
|
} /* my_read */
|
@ -714,6 +714,9 @@ void thr_alarm_info(ALARM_INFO *info)
|
|||||||
bzero((char*) info, sizeof(*info));
|
bzero((char*) info, sizeof(*info));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void resize_thr_alarm(uint max_alarms)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
thr_alarm for win95
|
thr_alarm for win95
|
||||||
@ -793,6 +796,10 @@ void thr_alarm_info(ALARM_INFO *info)
|
|||||||
bzero((char*) info, sizeof(*info));
|
bzero((char*) info, sizeof(*info));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void resize_thr_alarm(uint max_alarms)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* __WIN__ */
|
#endif /* __WIN__ */
|
||||||
|
|
||||||
#endif /* THREAD */
|
#endif /* THREAD */
|
||||||
|
@ -150,16 +150,19 @@ int rea_create_table(my_string file_name,
|
|||||||
|
|
||||||
my_free((gptr) screen_buff,MYF(0));
|
my_free((gptr) screen_buff,MYF(0));
|
||||||
my_afree((gptr) keybuff);
|
my_afree((gptr) keybuff);
|
||||||
VOID(my_close(file,MYF(MY_WME)));
|
if (my_sync(file, MYF(MY_WME)))
|
||||||
if (ha_create_table(file_name,create_info,0))
|
|
||||||
goto err2;
|
goto err2;
|
||||||
|
if (my_close(file,MYF(MY_WME)) ||
|
||||||
|
ha_create_table(file_name,create_info,0))
|
||||||
|
goto err3;
|
||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
|
|
||||||
err:
|
err:
|
||||||
my_free((gptr) screen_buff,MYF(0));
|
my_free((gptr) screen_buff,MYF(0));
|
||||||
my_afree((gptr) keybuff);
|
my_afree((gptr) keybuff);
|
||||||
|
err2:
|
||||||
VOID(my_close(file,MYF(MY_WME)));
|
VOID(my_close(file,MYF(MY_WME)));
|
||||||
err2:
|
err3:
|
||||||
my_delete(file_name,MYF(0));
|
my_delete(file_name,MYF(0));
|
||||||
DBUG_RETURN(1);
|
DBUG_RETURN(1);
|
||||||
} /* rea_create_table */
|
} /* rea_create_table */
|
||||||
|
Reference in New Issue
Block a user