OSDN Git Service

Resurrect -F switch: it controls fsyncs again, though the fsyncs are
authorTom Lane <tgl@sss.pgh.pa.us>
Fri, 8 Dec 2000 22:21:33 +0000 (22:21 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Fri, 8 Dec 2000 22:21:33 +0000 (22:21 +0000)
mostly just on the WAL logfile nowadays.  But if people want to disable
fsync for performance, why should we say no?

src/backend/access/transam/xlog.c
src/backend/storage/file/fd.c
src/include/storage/fd.h

index e1a8ef9..cf65dc0 100644 (file)
@@ -6,7 +6,7 @@
  * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Header: /cvsroot/pgsql/src/backend/access/transam/xlog.c,v 1.39 2000/12/03 10:27:26 vadim Exp $
+ * $Header: /cvsroot/pgsql/src/backend/access/transam/xlog.c,v 1.40 2000/12/08 22:21:33 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -621,7 +621,7 @@ XLogFlush(XLogRecPtr record)
                logFile = XLogFileOpen(logId, logSeg, false);
        }
 
-       if (fsync(logFile) != 0)
+       if (pg_fsync(logFile) != 0)
                elog(STOP, "fsync(logfile %u seg %u) failed: %m",
                         logId, logSeg);
        LgwrResult.Flush = LgwrResult.Write;
@@ -717,7 +717,7 @@ XLogWrite(char *buffer)
                {
                        if (wcnt > 0)
                        {
-                               if (fsync(logFile) != 0)
+                               if (pg_fsync(logFile) != 0)
                                        elog(STOP, "fsync(logfile %u seg %u) failed: %m",
                                                 logId, logSeg);
                                if (LgwrResult.Write.xlogid != logId)
@@ -799,7 +799,7 @@ XLogWrite(char *buffer)
        if (XLByteLT(LgwrResult.Flush, LgwrRqst.Flush) &&
                XLByteLE(LgwrRqst.Flush, LgwrResult.Write))
        {
-               if (fsync(logFile) != 0)
+               if (pg_fsync(logFile) != 0)
                        elog(STOP, "fsync(logfile %u seg %u) failed: %m",
                                 logId, logSeg);
                LgwrResult.Flush = LgwrResult.Write;
@@ -864,7 +864,7 @@ XLogFileInit(uint32 log, uint32 seg, bool *usexistent)
                elog(STOP, "write(logfile %u seg %u) failed: %m",
                         logId, logSeg);
 
-       if (fsync(fd) != 0)
+       if (pg_fsync(fd) != 0)
                elog(STOP, "fsync(logfile %u seg %u) failed: %m",
                         logId, logSeg);
 
@@ -1213,7 +1213,7 @@ next_record_is_invalid:;
        }
        if (readFile >= 0)
        {
-               if (fsync(readFile) < 0)
+               if (pg_fsync(readFile) < 0)
                        elog(STOP, "ReadRecord: fsync(logfile %u seg %u) failed: %m",
                                 readId, readSeg);
                close(readFile);
@@ -1330,7 +1330,7 @@ WriteControlFile(void)
        if (write(fd, buffer, BLCKSZ) != BLCKSZ)
                elog(STOP, "WriteControlFile failed to write control file: %m");
 
-       if (fsync(fd) != 0)
+       if (pg_fsync(fd) != 0)
                elog(STOP, "WriteControlFile failed to fsync control file: %m");
 
        close(fd);
@@ -1400,7 +1400,7 @@ UpdateControlFile(void)
        if (write(fd, ControlFile, sizeof(ControlFileData)) != sizeof(ControlFileData))
                elog(STOP, "write(cntlfile) failed: %m");
 
-       if (fsync(fd) != 0)
+       if (pg_fsync(fd) != 0)
                elog(STOP, "fsync(cntlfile) failed: %m");
 
        close(fd);
@@ -1489,7 +1489,7 @@ BootStrapXLOG()
        if (write(logFile, buffer, BLCKSZ) != BLCKSZ)
                elog(STOP, "BootStrapXLOG failed to write logfile: %m");
 
-       if (fsync(logFile) != 0)
+       if (pg_fsync(logFile) != 0)
                elog(STOP, "BootStrapXLOG failed to fsync logfile: %m");
 
        close(logFile);
index f46c04c..3cff793 100644 (file)
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/storage/file/fd.c,v 1.68 2000/11/30 08:46:23 vadim Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/storage/file/fd.c,v 1.69 2000/12/08 22:21:32 tgl Exp $
  *
  * NOTES:
  *
@@ -193,6 +193,18 @@ static char *filepath(char *filename);
 static long pg_nofile(void);
 
 /*
+ * pg_fsync --- same as fsync except does nothing if -F switch was given
+ */
+int
+pg_fsync(int fd)
+{
+       if (enableFsync)
+               return fsync(fd);
+       else
+               return 0;
+}
+
+/*
  * BasicOpenFile --- same as open(2) except can free other FDs if needed
  *
  * This is exported for use by places that really want a plain kernel FD,
index c4b1a85..d3905df 100644 (file)
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: fd.h,v 1.24 2000/11/30 08:46:26 vadim Exp $
+ * $Id: fd.h,v 1.25 2000/12/08 22:21:32 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -70,7 +70,6 @@ extern int    BasicOpenFile(FileName fileName, int fileFlags, int fileMode);
 /* Miscellaneous support routines */
 extern void closeAllVfds(void);
 extern void AtEOXact_Files(void);
-
-#define pg_fsync(fd)   fsync(fd)
+extern int     pg_fsync(int fd);
 
 #endif  /* FD_H */