diff options
author | Teodor Sigaev <teodor@sigaev.ru> | 2017-03-27 19:33:01 +0300 |
---|---|---|
committer | Teodor Sigaev <teodor@sigaev.ru> | 2017-03-27 19:33:01 +0300 |
commit | 1b02be21f271db6bd3cd43abb23fa596fcb6bac3 (patch) | |
tree | 1052877089af6b9cf2c8cc4f91d365147de40575 /src/backend/access/transam/twophase.c | |
parent | 1f171a1803c28d3ae24636c9ca3352ec82c39e5f (diff) |
Fsync directory after creating or unlinking file.
If file was created/deleted just before powerloss it's possible that
file system will miss that. To prevent it, call fsync() where creating/
unlinkg file is critical.
Author: Michael Paquier
Reviewed-by: Ashutosh Bapat, Takayuki Tsunakawa, me
Diffstat (limited to 'src/backend/access/transam/twophase.c')
-rw-r--r-- | src/backend/access/transam/twophase.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/src/backend/access/transam/twophase.c b/src/backend/access/transam/twophase.c index 4b4999fd7b4..83169cccc30 100644 --- a/src/backend/access/transam/twophase.c +++ b/src/backend/access/transam/twophase.c @@ -1650,6 +1650,14 @@ CheckPointTwoPhase(XLogRecPtr redo_horizon) } LWLockRelease(TwoPhaseStateLock); + /* + * Flush unconditionally the parent directory to make any information + * durable on disk. Two-phase files could have been removed and those + * removals need to be made persistent as well as any files newly created + * previously since the last checkpoint. + */ + fsync_fname(TWOPHASE_DIR, true); + TRACE_POSTGRESQL_TWOPHASE_CHECKPOINT_DONE(); if (log_checkpoints && serialized_xacts > 0) |