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:30:47 +0000 (10:30 +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 8a706445230e068ab15c878777de6f36e7605883..6c6ca10f07de6b28354a7322c18bef9dd5b89249 100644 (file)
@@ -837,13 +837,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 3316734e14fce4b6bb293a302823767f670baeca..6a46137052f04e3f65127d76d45e903b6d5bcef2 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 f78a90f333658ec42d039373d196bbf8a745c1db..72213a97a8c21080fc7898716b95031e45983555 100644 (file)
@@ -1176,6 +1176,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);
 }
 
 /*