mirror of
https://github.com/postgres/postgres.git
synced 2025-06-01 00:01:20 -04:00
Simplify some ERROR paths clearing wait events and transient files
Transient files and wait events get normally cleaned up when seeing an exception (be it in the context of a transaction for a backend or another process like the checkpointer), hence there is little point in complicating error code paths to do this work. This shaves a bit of code, and removes some extra handling with errno which needed to be preserved during the cleanup steps done. Reported-by: Masahiko Sawada Author: Michael Paquier Reviewed-by: Tom Lane, Masahiko Sawada Discussion: https://postgr.es/m/CAD21AoDhHYVq5KkXfkaHhmjA-zJYj-e4teiRAJefvXuKJz1tKQ@mail.gmail.com
This commit is contained in:
parent
a6dcf9df4d
commit
47ac2033d4
@ -1693,26 +1693,18 @@ RecreateTwoPhaseFile(TransactionId xid, void *content, int len)
|
||||
pgstat_report_wait_start(WAIT_EVENT_TWOPHASE_FILE_WRITE);
|
||||
if (write(fd, content, len) != len)
|
||||
{
|
||||
int save_errno = errno;
|
||||
|
||||
pgstat_report_wait_end();
|
||||
CloseTransientFile(fd);
|
||||
|
||||
/* if write didn't set errno, assume problem is no disk space */
|
||||
errno = save_errno ? save_errno : ENOSPC;
|
||||
if (errno == 0)
|
||||
errno = ENOSPC;
|
||||
ereport(ERROR,
|
||||
(errcode_for_file_access(),
|
||||
errmsg("could not write file \"%s\": %m", path)));
|
||||
}
|
||||
if (write(fd, &statefile_crc, sizeof(pg_crc32c)) != sizeof(pg_crc32c))
|
||||
{
|
||||
int save_errno = errno;
|
||||
|
||||
pgstat_report_wait_end();
|
||||
CloseTransientFile(fd);
|
||||
|
||||
/* if write didn't set errno, assume problem is no disk space */
|
||||
errno = save_errno ? save_errno : ENOSPC;
|
||||
if (errno == 0)
|
||||
errno = ENOSPC;
|
||||
ereport(ERROR,
|
||||
(errcode_for_file_access(),
|
||||
errmsg("could not write file \"%s\": %m", path)));
|
||||
@ -1725,15 +1717,9 @@ RecreateTwoPhaseFile(TransactionId xid, void *content, int len)
|
||||
*/
|
||||
pgstat_report_wait_start(WAIT_EVENT_TWOPHASE_FILE_SYNC);
|
||||
if (pg_fsync(fd) != 0)
|
||||
{
|
||||
int save_errno = errno;
|
||||
|
||||
CloseTransientFile(fd);
|
||||
errno = save_errno;
|
||||
ereport(ERROR,
|
||||
(errcode_for_file_access(),
|
||||
errmsg("could not fsync file \"%s\": %m", path)));
|
||||
}
|
||||
pgstat_report_wait_end();
|
||||
|
||||
if (CloseTransientFile(fd) != 0)
|
||||
|
@ -579,12 +579,9 @@ CheckPointReplicationOrigin(void)
|
||||
errno = 0;
|
||||
if ((write(tmpfd, &magic, sizeof(magic))) != sizeof(magic))
|
||||
{
|
||||
int save_errno = errno;
|
||||
|
||||
CloseTransientFile(tmpfd);
|
||||
|
||||
/* if write didn't set errno, assume problem is no disk space */
|
||||
errno = save_errno ? save_errno : ENOSPC;
|
||||
if (errno == 0)
|
||||
errno = ENOSPC;
|
||||
ereport(PANIC,
|
||||
(errcode_for_file_access(),
|
||||
errmsg("could not write to file \"%s\": %m",
|
||||
@ -624,12 +621,9 @@ CheckPointReplicationOrigin(void)
|
||||
if ((write(tmpfd, &disk_state, sizeof(disk_state))) !=
|
||||
sizeof(disk_state))
|
||||
{
|
||||
int save_errno = errno;
|
||||
|
||||
CloseTransientFile(tmpfd);
|
||||
|
||||
/* if write didn't set errno, assume problem is no disk space */
|
||||
errno = save_errno ? save_errno : ENOSPC;
|
||||
if (errno == 0)
|
||||
errno = ENOSPC;
|
||||
ereport(PANIC,
|
||||
(errcode_for_file_access(),
|
||||
errmsg("could not write to file \"%s\": %m",
|
||||
@ -646,12 +640,9 @@ CheckPointReplicationOrigin(void)
|
||||
errno = 0;
|
||||
if ((write(tmpfd, &crc, sizeof(crc))) != sizeof(crc))
|
||||
{
|
||||
int save_errno = errno;
|
||||
|
||||
CloseTransientFile(tmpfd);
|
||||
|
||||
/* if write didn't set errno, assume problem is no disk space */
|
||||
errno = save_errno ? save_errno : ENOSPC;
|
||||
if (errno == 0)
|
||||
errno = ENOSPC;
|
||||
ereport(PANIC,
|
||||
(errcode_for_file_access(),
|
||||
errmsg("could not write to file \"%s\": %m",
|
||||
|
@ -1398,16 +1398,10 @@ RestoreSlotFromDisk(const char *name)
|
||||
*/
|
||||
pgstat_report_wait_start(WAIT_EVENT_REPLICATION_SLOT_RESTORE_SYNC);
|
||||
if (pg_fsync(fd) != 0)
|
||||
{
|
||||
int save_errno = errno;
|
||||
|
||||
CloseTransientFile(fd);
|
||||
errno = save_errno;
|
||||
ereport(PANIC,
|
||||
(errcode_for_file_access(),
|
||||
errmsg("could not fsync file \"%s\": %m",
|
||||
path)));
|
||||
}
|
||||
pgstat_report_wait_end();
|
||||
|
||||
/* Also sync the parent directory */
|
||||
@ -1421,10 +1415,6 @@ RestoreSlotFromDisk(const char *name)
|
||||
pgstat_report_wait_end();
|
||||
if (readBytes != ReplicationSlotOnDiskConstantSize)
|
||||
{
|
||||
int saved_errno = errno;
|
||||
|
||||
CloseTransientFile(fd);
|
||||
errno = saved_errno;
|
||||
if (readBytes < 0)
|
||||
ereport(PANIC,
|
||||
(errcode_for_file_access(),
|
||||
@ -1466,10 +1456,6 @@ RestoreSlotFromDisk(const char *name)
|
||||
pgstat_report_wait_end();
|
||||
if (readBytes != cp.length)
|
||||
{
|
||||
int saved_errno = errno;
|
||||
|
||||
CloseTransientFile(fd);
|
||||
errno = saved_errno;
|
||||
if (readBytes < 0)
|
||||
ereport(PANIC,
|
||||
(errcode_for_file_access(),
|
||||
|
@ -199,7 +199,6 @@ copy_file(char *fromfile, char *tofile)
|
||||
pgstat_report_wait_start(WAIT_EVENT_COPY_FILE_WRITE);
|
||||
if ((int) write(dstfd, buffer, nbytes) != nbytes)
|
||||
{
|
||||
pgstat_report_wait_end();
|
||||
/* if write didn't set errno, assume problem is no disk space */
|
||||
if (errno == 0)
|
||||
errno = ENOSPC;
|
||||
|
Loading…
x
Reference in New Issue
Block a user