Commit 83aaebba authored by Tom Lane's avatar Tom Lane

Fix incorrect comment about the timing of AbsorbFsyncRequests() during

checkpoint.  The comment claimed that we could do this anytime after
setting the checkpoint REDO point, but actually BufferSync is relying
on the assumption that buffers dumped by other backends will be fsync'd
too.  So we really could not do it any sooner than we are doing it.
parent a5589813
...@@ -37,7 +37,7 @@ ...@@ -37,7 +37,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/postmaster/bgwriter.c,v 1.40 2007/06/30 19:12:01 tgl Exp $ * $PostgreSQL: pgsql/src/backend/postmaster/bgwriter.c,v 1.41 2007/07/03 14:51:24 tgl Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -1007,9 +1007,9 @@ ForwardFsyncRequest(RelFileNode rnode, BlockNumber segno) ...@@ -1007,9 +1007,9 @@ ForwardFsyncRequest(RelFileNode rnode, BlockNumber segno)
* Retrieve queued fsync requests and pass them to local smgr. * Retrieve queued fsync requests and pass them to local smgr.
* *
* This is exported because it must be called during CreateCheckPoint; * This is exported because it must be called during CreateCheckPoint;
* we have to be sure we have accepted all pending requests *after* we * we have to be sure we have accepted all pending requests just before
* establish the checkpoint REDO pointer. Since CreateCheckPoint * we start fsync'ing. Since CreateCheckPoint sometimes runs in
* sometimes runs in non-bgwriter processes, do nothing if not bgwriter. * non-bgwriter processes, do nothing if not bgwriter.
*/ */
void void
AbsorbFsyncRequests(void) AbsorbFsyncRequests(void)
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/storage/smgr/md.c,v 1.128 2007/04/12 17:10:55 tgl Exp $ * $PostgreSQL: pgsql/src/backend/storage/smgr/md.c,v 1.129 2007/07/03 14:51:24 tgl Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -880,9 +880,12 @@ mdsync(void) ...@@ -880,9 +880,12 @@ mdsync(void)
/* /*
* If we are in the bgwriter, the sync had better include all fsync * If we are in the bgwriter, the sync had better include all fsync
* requests that were queued by backends before the checkpoint REDO * requests that were queued by backends up to this point. The tightest
* point was determined. We go that a little better by accepting all * race condition that could occur is that a buffer that must be written
* requests queued up to the point where we start fsync'ing. * and fsync'd for the checkpoint could have been dumped by a backend
* just before it was visited by BufferSync(). We know the backend will
* have queued an fsync request before clearing the buffer's dirtybit,
* so we are safe as long as we do an Absorb after completing BufferSync().
*/ */
AbsorbFsyncRequests(); AbsorbFsyncRequests();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment