mirror of
https://github.com/postgres/postgres.git
synced 2025-05-05 09:19:17 +03:00
Handle fsync failures in pg_receivewal and pg_recvlogical
It is not safe to simply report an fsync error and continue. We must exit the program instead. Reviewed-by: Michael Paquier <michael@paquier.xyz> Reviewed-by: Sehrope Sarkuni <sehrope@jackdb.com> Discussion: https://www.postgresql.org/message-id/flat/9b49fe44-8f3e-eca9-5914-29e9e99030bf@2ndquadrant.com
This commit is contained in:
parent
eb43f3d193
commit
1e2fddfa33
@ -192,8 +192,8 @@ OutputFsync(TimestampTz now)
|
|||||||
|
|
||||||
if (fsync(outfd) != 0)
|
if (fsync(outfd) != 0)
|
||||||
{
|
{
|
||||||
pg_log_error("could not fsync file \"%s\": %m", outfile);
|
pg_log_fatal("could not fsync file \"%s\": %m", outfile);
|
||||||
return false;
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -134,10 +134,10 @@ open_walfile(StreamCtl *stream, XLogRecPtr startpoint)
|
|||||||
/* fsync file in case of a previous crash */
|
/* fsync file in case of a previous crash */
|
||||||
if (stream->walmethod->sync(f) != 0)
|
if (stream->walmethod->sync(f) != 0)
|
||||||
{
|
{
|
||||||
pg_log_error("could not fsync existing write-ahead log file \"%s\": %s",
|
pg_log_fatal("could not fsync existing write-ahead log file \"%s\": %s",
|
||||||
fn, stream->walmethod->getlasterror());
|
fn, stream->walmethod->getlasterror());
|
||||||
stream->walmethod->close(f, CLOSE_UNLINK);
|
stream->walmethod->close(f, CLOSE_UNLINK);
|
||||||
return false;
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
walfile = f;
|
walfile = f;
|
||||||
@ -763,9 +763,9 @@ HandleCopyStream(PGconn *conn, StreamCtl *stream,
|
|||||||
{
|
{
|
||||||
if (stream->walmethod->sync(walfile) != 0)
|
if (stream->walmethod->sync(walfile) != 0)
|
||||||
{
|
{
|
||||||
pg_log_error("could not fsync file \"%s\": %s",
|
pg_log_fatal("could not fsync file \"%s\": %s",
|
||||||
current_walfile_name, stream->walmethod->getlasterror());
|
current_walfile_name, stream->walmethod->getlasterror());
|
||||||
goto error;
|
exit(1);
|
||||||
}
|
}
|
||||||
lastFlushPosition = blockpos;
|
lastFlushPosition = blockpos;
|
||||||
|
|
||||||
@ -1015,9 +1015,9 @@ ProcessKeepaliveMsg(PGconn *conn, StreamCtl *stream, char *copybuf, int len,
|
|||||||
*/
|
*/
|
||||||
if (stream->walmethod->sync(walfile) != 0)
|
if (stream->walmethod->sync(walfile) != 0)
|
||||||
{
|
{
|
||||||
pg_log_error("could not fsync file \"%s\": %s",
|
pg_log_fatal("could not fsync file \"%s\": %s",
|
||||||
current_walfile_name, stream->walmethod->getlasterror());
|
current_walfile_name, stream->walmethod->getlasterror());
|
||||||
return false;
|
exit(1);
|
||||||
}
|
}
|
||||||
lastFlushPosition = blockpos;
|
lastFlushPosition = blockpos;
|
||||||
}
|
}
|
||||||
|
@ -864,7 +864,7 @@ tar_close(Walfile f, WalCloseMethod method)
|
|||||||
|
|
||||||
/* Always fsync on close, so the padding gets fsynced */
|
/* Always fsync on close, so the padding gets fsynced */
|
||||||
if (tar_sync(f) < 0)
|
if (tar_sync(f) < 0)
|
||||||
return -1;
|
exit(1);
|
||||||
|
|
||||||
/* Clean up and done */
|
/* Clean up and done */
|
||||||
pg_free(tf->pathname);
|
pg_free(tf->pathname);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user