Fix missing fsync of SLRU directories.
authorThomas Munro
Wed, 23 Sep 2020 21:26:09 +0000 (09:26 +1200)
committerThomas Munro
Wed, 23 Sep 2020 22:33:00 +0000 (10:33 +1200)
Harmonize behavior by moving reponsibility for fsyncing directories down
into slru.c.  In 10 and later, only the multixact directories were
missed (see commit 1b02be21), and in older branches all SLRUs were
missed.

Back-patch to all supported releases.

Reviewed-by: Andres Freund
Reviewed-by: Michael Paquier
Discussion: https://postgr.es/m/CA%2BhUKGLtsTUOScnNoSMZ-2ZLv%2BwGh01J6kAo_DM8mTRq1sKdSQ%40mail.gmail.com

src/backend/access/transam/clog.c
src/backend/access/transam/commit_ts.c
src/backend/access/transam/slru.c

index 41778584ba87f84680d6ea019e3eedf35978ba4a..87cd260c4056de38aa94b2b54f5890996407d1a4 100644 (file)
@@ -602,13 +602,6 @@ CheckPointCLOG(void)
    /* Flush dirty CLOG pages to disk */
    TRACE_POSTGRESQL_CLOG_CHECKPOINT_START(true);
    SimpleLruFlush(ClogCtl, true);
-
-   /*
-    * fsync pg_xact to ensure that any files flushed previously are durably
-    * on disk.
-    */
-   fsync_fname("pg_xact", true);
-
    TRACE_POSTGRESQL_CLOG_CHECKPOINT_DONE(true);
 }
 
index d7637b37e8da18d89f539cd0c728db1c1b427704..4b9d95c5ba5adf61d287c57140c2fbec5cef512b 100644 (file)
@@ -761,12 +761,6 @@ CheckPointCommitTs(void)
 {
    /* Flush dirty CommitTs pages to disk */
    SimpleLruFlush(CommitTsCtl, true);
-
-   /*
-    * fsync pg_commit_ts to ensure that any files flushed previously are
-    * durably on disk.
-    */
-   fsync_fname("pg_commit_ts", true);
 }
 
 /*
index c7e3a76b35aeef51f06004da57ca08232ef47f34..fd0c186e090cd7dcfea3d8d6ff53b31c00809bb9 100644 (file)
@@ -1160,6 +1160,10 @@ SimpleLruFlush(SlruCtl ctl, bool allow_redirtied)
    }
    if (!ok)
        SlruReportIOError(ctl, pageno, InvalidTransactionId);
+
+   /* Ensure that directory entries for new files are on disk. */
+   if (ctl->do_fsync)
+       fsync_fname(ctl->Dir, true);
 }
 
 /*