fsync pg_logical/mappings in CheckPointLogicalRewriteHeap().
authorAndres Freund <[email protected]>
Fri, 21 Jan 2022 19:22:55 +0000 (11:22 -0800)
committerAndres Freund <[email protected]>
Fri, 21 Jan 2022 19:24:12 +0000 (11:24 -0800)
While individual logical rewrite files were synced to disk, the directory was
not. On some filesystems that could lead to loosing directory entries after a
crash.

Reported-By: Tom Lane <[email protected]>
Author: Nathan Bossart <[email protected]>
Discussion: https://postgr.es/m/867F2E29-2782-4869-970E-B984C6D35A8F@amazon.com
Backpatch: 10-

src/backend/access/heap/rewriteheap.c

index f208b5c4aa90ad668fafe2da73d75490158f97b3..894bb17fcc6b41538643e850d19fd0f7c7bf8ddc 100644 (file)
@@ -1307,4 +1307,7 @@ CheckPointLogicalRewriteHeap(void)
        }
    }
    FreeDir(mappings_dir);
+
+   /* persist directory entries to disk */
+   fsync_fname("pg_logical/mappings", true);
 }