Re: STRATEGY=WAL_LOG missing checkpoint interlocks and sync - Mailing list pgsql-bugs

From Noah Misch
Subject Re: STRATEGY=WAL_LOG missing checkpoint interlocks and sync
Date
Msg-id 20240201232828.b1.nmisch@google.com
Whole thread Raw
In response to STRATEGY=WAL_LOG missing checkpoint interlocks and sync  (Noah Misch <noah@leadboat.com>)
List pgsql-bugs
On Tue, Jan 30, 2024 at 11:50:03AM -0800, Noah Misch wrote:
> (1) CreateDirAndVersionFile() uses a code sequence: XLogInsert(), XLogFlush(),
> write(PG_VERSION).  This is missing the interlock with checkpoints, which
> pd_lsn usually secures.  This breaks when one takes a base backup between the
> XLogInsert() and the write().  The transam/README "action first and then write
> a WAL entry" strategy works well.  createdb_failure_callback() will remove the
> whole directory on failure.
> 
> (2) RelationMapCopy() reasons that it doesn't need RelationMappingLock.
> CheckPointRelationMap() relies on RelationMappingLock to avoid completing a
> checkpoint between the WAL and the sync.  A base backup taken in the middle of
> write_relmap_file() has no relmap after recovery.
> 
> (3) CreateDirAndVersionFile() populates the PG_VERSION file without syncing
> it.  An OS crash after the next checkpoint may leave PG_VERSION empty or
> missing.  Let's fsync the file immediately.  I used LazyFS to confirm the
> defect and fix.  Though I was skeptical about adding a wait event in back
> branches, I plan to do so anyway.  Commit 368ffde got away with it, and we do
> have this pattern of the sync event being separate from the write event.

Pushed at commit 0b6517a.



pgsql-bugs by date:

Previous
From: Tom Lane
Date:
Subject: Re: BUG #18322: pg_dump fails with "incorrect version found" (with no good reason)
Next
From: Peter Smith
Date:
Subject: Re: BUG #18319: Logical Replication updates causing duplication of row if evaluation filter is set to the same field