Fix missing fsync of SLRU directories.
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 <andres@anarazel.de> Reviewed-by: Michael Paquier <michael@paquier.xyz> Discussion: https://postgr.es/m/CA%2BhUKGLtsTUOScnNoSMZ-2ZLv%2BwGh01J6kAo_DM8mTRq1sKdSQ%40mail.gmail.com
This commit is contained in:
parent
c1f63c42fc
commit
c5a5bd0bb6
@ -837,13 +837,6 @@ CheckPointCLOG(void)
|
|||||||
/* Flush dirty CLOG pages to disk */
|
/* Flush dirty CLOG pages to disk */
|
||||||
TRACE_POSTGRESQL_CLOG_CHECKPOINT_START(true);
|
TRACE_POSTGRESQL_CLOG_CHECKPOINT_START(true);
|
||||||
SimpleLruFlush(ClogCtl, 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);
|
TRACE_POSTGRESQL_CLOG_CHECKPOINT_DONE(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -761,12 +761,6 @@ CheckPointCommitTs(void)
|
|||||||
{
|
{
|
||||||
/* Flush dirty CommitTs pages to disk */
|
/* Flush dirty CommitTs pages to disk */
|
||||||
SimpleLruFlush(CommitTsCtl, true);
|
SimpleLruFlush(CommitTsCtl, true);
|
||||||
|
|
||||||
/*
|
|
||||||
* fsync pg_commit_ts to ensure that any files flushed previously are
|
|
||||||
* durably on disk.
|
|
||||||
*/
|
|
||||||
fsync_fname("pg_commit_ts", true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1159,6 +1159,10 @@ SimpleLruFlush(SlruCtl ctl, bool allow_redirtied)
|
|||||||
}
|
}
|
||||||
if (!ok)
|
if (!ok)
|
||||||
SlruReportIOError(ctl, pageno, InvalidTransactionId);
|
SlruReportIOError(ctl, pageno, InvalidTransactionId);
|
||||||
|
|
||||||
|
/* Ensure that directory entries for new files are on disk. */
|
||||||
|
if (ctl->do_fsync)
|
||||||
|
fsync_fname(ctl->Dir, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Loading…
x
Reference in New Issue
Block a user