From: | Noah Misch <noah(at)leadboat(dot)com> |
---|---|
To: | pgsql-bugs(at)postgresql(dot)org, dilipbalaut(at)gmail(dot)com |
Cc: | robertmhaas(at)gmail(dot)com |
Subject: | Re: STRATEGY=WAL_LOG missing checkpoint interlocks and sync |
Date: | 2024-02-01 23:28:28 |
Message-ID: | 20240201232828.b1.nmisch@google.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | 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.
From | Date | Subject | |
---|---|---|---|
Next Message | Peter Smith | 2024-02-02 00:35:41 | Re: BUG #18319: Logical Replication updates causing duplication of row if evaluation filter is set to the same field |
Previous Message | Tom Lane | 2024-02-01 22:34:29 | Re: BUG #18322: pg_dump fails with "incorrect version found" (with no good reason) |