Add proper errcodes to new error messages for read() failures
Those would use the default ERRCODE_INTERNAL_ERROR, but for foreseeable
failures an errcode ought to be set, ERRCODE_DATA_CORRUPTED making the
most sense here.
While on the way, fix one errcode_for_file_access missing in origin.c
since the code has been created, and remove one assignment of errno to 0
before calling read(), as this was around to fit with what was present
before 811b6e36
where errno would not be set when not enough bytes are
read. I have noticed the first one, and Tom has pinged me about the
second one.
Author: Michael Paquier
Reported-by: Tom Lane
Discussion: https://postgr.es/m/27265.1531925836@sss.pgh.pa.us
This commit is contained in:
parent
56df07bb9e
commit
e41d0a1090
|
@ -3412,7 +3412,6 @@ XLogFileCopy(XLogSegNo destsegno, TimeLineID srcTLI, XLogSegNo srcsegno,
|
||||||
|
|
||||||
if (nread > sizeof(buffer))
|
if (nread > sizeof(buffer))
|
||||||
nread = sizeof(buffer);
|
nread = sizeof(buffer);
|
||||||
errno = 0;
|
|
||||||
pgstat_report_wait_start(WAIT_EVENT_WAL_COPY_READ);
|
pgstat_report_wait_start(WAIT_EVENT_WAL_COPY_READ);
|
||||||
r = read(srcfd, buffer, nread);
|
r = read(srcfd, buffer, nread);
|
||||||
if (r != nread)
|
if (r != nread)
|
||||||
|
@ -3424,7 +3423,8 @@ XLogFileCopy(XLogSegNo destsegno, TimeLineID srcTLI, XLogSegNo srcsegno,
|
||||||
path)));
|
path)));
|
||||||
else
|
else
|
||||||
ereport(ERROR,
|
ereport(ERROR,
|
||||||
(errmsg("could not read file \"%s\": read %d of %zu",
|
(errcode(ERRCODE_DATA_CORRUPTED),
|
||||||
|
errmsg("could not read file \"%s\": read %d of %zu",
|
||||||
path, r, (Size) nread)));
|
path, r, (Size) nread)));
|
||||||
}
|
}
|
||||||
pgstat_report_wait_end();
|
pgstat_report_wait_end();
|
||||||
|
@ -4564,7 +4564,8 @@ ReadControlFile(void)
|
||||||
XLOG_CONTROL_FILE)));
|
XLOG_CONTROL_FILE)));
|
||||||
else
|
else
|
||||||
ereport(PANIC,
|
ereport(PANIC,
|
||||||
(errmsg("could not read file \"%s\": read %d of %zu",
|
(errcode(ERRCODE_DATA_CORRUPTED),
|
||||||
|
errmsg("could not read file \"%s\": read %d of %zu",
|
||||||
XLOG_CONTROL_FILE, r, sizeof(ControlFileData))));
|
XLOG_CONTROL_FILE, r, sizeof(ControlFileData))));
|
||||||
}
|
}
|
||||||
pgstat_report_wait_end();
|
pgstat_report_wait_end();
|
||||||
|
@ -11829,7 +11830,8 @@ retry:
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
ereport(emode_for_corrupt_record(emode, targetPagePtr + reqLen),
|
ereport(emode_for_corrupt_record(emode, targetPagePtr + reqLen),
|
||||||
(errmsg("could not read from log segment %s, offset %u: read %d of %zu",
|
(errcode(ERRCODE_DATA_CORRUPTED),
|
||||||
|
errmsg("could not read from log segment %s, offset %u: read %d of %zu",
|
||||||
fname, readOff, r, (Size) XLOG_BLCKSZ)));
|
fname, readOff, r, (Size) XLOG_BLCKSZ)));
|
||||||
goto next_record_is_invalid;
|
goto next_record_is_invalid;
|
||||||
}
|
}
|
||||||
|
|
|
@ -715,11 +715,13 @@ StartupReplicationOrigin(void)
|
||||||
{
|
{
|
||||||
if (readBytes < 0)
|
if (readBytes < 0)
|
||||||
ereport(PANIC,
|
ereport(PANIC,
|
||||||
(errmsg("could not read file \"%s\": %m",
|
(errcode_for_file_access(),
|
||||||
|
errmsg("could not read file \"%s\": %m",
|
||||||
path)));
|
path)));
|
||||||
else
|
else
|
||||||
ereport(PANIC,
|
ereport(PANIC,
|
||||||
(errmsg("could not read file \"%s\": read %d of %zu",
|
(errcode(ERRCODE_DATA_CORRUPTED),
|
||||||
|
errmsg("could not read file \"%s\": read %d of %zu",
|
||||||
path, readBytes, sizeof(magic))));
|
path, readBytes, sizeof(magic))));
|
||||||
}
|
}
|
||||||
COMP_CRC32C(crc, &magic, sizeof(magic));
|
COMP_CRC32C(crc, &magic, sizeof(magic));
|
||||||
|
|
|
@ -1736,7 +1736,8 @@ SnapBuildRestore(SnapBuild *builder, XLogRecPtr lsn)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
ereport(ERROR,
|
ereport(ERROR,
|
||||||
(errmsg("could not read file \"%s\": read %d of %zu",
|
(errcode(ERRCODE_DATA_CORRUPTED),
|
||||||
|
errmsg("could not read file \"%s\": read %d of %zu",
|
||||||
path, readBytes,
|
path, readBytes,
|
||||||
(Size) SnapBuildOnDiskConstantSize)));
|
(Size) SnapBuildOnDiskConstantSize)));
|
||||||
}
|
}
|
||||||
|
@ -1775,7 +1776,8 @@ SnapBuildRestore(SnapBuild *builder, XLogRecPtr lsn)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
ereport(ERROR,
|
ereport(ERROR,
|
||||||
(errmsg("could not read file \"%s\": read %d of %zu",
|
(errcode(ERRCODE_DATA_CORRUPTED),
|
||||||
|
errmsg("could not read file \"%s\": read %d of %zu",
|
||||||
path, readBytes, sizeof(SnapBuild))));
|
path, readBytes, sizeof(SnapBuild))));
|
||||||
}
|
}
|
||||||
COMP_CRC32C(checksum, &ondisk.builder, sizeof(SnapBuild));
|
COMP_CRC32C(checksum, &ondisk.builder, sizeof(SnapBuild));
|
||||||
|
@ -1802,7 +1804,8 @@ SnapBuildRestore(SnapBuild *builder, XLogRecPtr lsn)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
ereport(ERROR,
|
ereport(ERROR,
|
||||||
(errmsg("could not read file \"%s\": read %d of %zu",
|
(errcode(ERRCODE_DATA_CORRUPTED),
|
||||||
|
errmsg("could not read file \"%s\": read %d of %zu",
|
||||||
path, readBytes, sz)));
|
path, readBytes, sz)));
|
||||||
}
|
}
|
||||||
COMP_CRC32C(checksum, ondisk.builder.was_running.was_xip, sz);
|
COMP_CRC32C(checksum, ondisk.builder.was_running.was_xip, sz);
|
||||||
|
@ -1828,7 +1831,8 @@ SnapBuildRestore(SnapBuild *builder, XLogRecPtr lsn)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
ereport(ERROR,
|
ereport(ERROR,
|
||||||
(errmsg("could not read file \"%s\": read %d of %zu",
|
(errcode(ERRCODE_DATA_CORRUPTED),
|
||||||
|
errmsg("could not read file \"%s\": read %d of %zu",
|
||||||
path, readBytes, sz)));
|
path, readBytes, sz)));
|
||||||
}
|
}
|
||||||
COMP_CRC32C(checksum, ondisk.builder.committed.xip, sz);
|
COMP_CRC32C(checksum, ondisk.builder.committed.xip, sz);
|
||||||
|
|
|
@ -1420,7 +1420,8 @@ RestoreSlotFromDisk(const char *name)
|
||||||
errmsg("could not read file \"%s\": %m", path)));
|
errmsg("could not read file \"%s\": %m", path)));
|
||||||
else
|
else
|
||||||
ereport(PANIC,
|
ereport(PANIC,
|
||||||
(errmsg("could not read file \"%s\": read %d of %zu",
|
(errcode(ERRCODE_DATA_CORRUPTED),
|
||||||
|
errmsg("could not read file \"%s\": read %d of %zu",
|
||||||
path, readBytes,
|
path, readBytes,
|
||||||
(Size) ReplicationSlotOnDiskConstantSize)));
|
(Size) ReplicationSlotOnDiskConstantSize)));
|
||||||
}
|
}
|
||||||
|
@ -1464,7 +1465,8 @@ RestoreSlotFromDisk(const char *name)
|
||||||
errmsg("could not read file \"%s\": %m", path)));
|
errmsg("could not read file \"%s\": %m", path)));
|
||||||
else
|
else
|
||||||
ereport(PANIC,
|
ereport(PANIC,
|
||||||
(errmsg("could not read file \"%s\": read %d of %zu",
|
(errcode(ERRCODE_DATA_CORRUPTED),
|
||||||
|
errmsg("could not read file \"%s\": read %d of %zu",
|
||||||
path, readBytes, (Size) cp.length)));
|
path, readBytes, (Size) cp.length)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -509,7 +509,8 @@ SendTimeLineHistory(TimeLineHistoryCmd *cmd)
|
||||||
path)));
|
path)));
|
||||||
else if (nread == 0)
|
else if (nread == 0)
|
||||||
ereport(ERROR,
|
ereport(ERROR,
|
||||||
(errmsg("could not read file \"%s\": read %d of %zu",
|
(errcode(ERRCODE_DATA_CORRUPTED),
|
||||||
|
errmsg("could not read file \"%s\": read %d of %zu",
|
||||||
path, nread, (Size) bytesleft)));
|
path, nread, (Size) bytesleft)));
|
||||||
|
|
||||||
pq_sendbytes(&buf, rbuf, nread);
|
pq_sendbytes(&buf, rbuf, nread);
|
||||||
|
@ -2442,7 +2443,8 @@ retry:
|
||||||
else if (readbytes == 0)
|
else if (readbytes == 0)
|
||||||
{
|
{
|
||||||
ereport(ERROR,
|
ereport(ERROR,
|
||||||
(errmsg("could not read from log segment %s, offset %u: read %d of %zu",
|
(errcode(ERRCODE_DATA_CORRUPTED),
|
||||||
|
errmsg("could not read from log segment %s, offset %u: read %d of %zu",
|
||||||
XLogFileNameP(curFileTimeLine, sendSegNo),
|
XLogFileNameP(curFileTimeLine, sendSegNo),
|
||||||
sendOff, readbytes, (Size) segbytes)));
|
sendOff, readbytes, (Size) segbytes)));
|
||||||
}
|
}
|
||||||
|
|
|
@ -669,7 +669,8 @@ load_relmap_file(bool shared)
|
||||||
errmsg("could not read file \"%s\": %m", mapfilename)));
|
errmsg("could not read file \"%s\": %m", mapfilename)));
|
||||||
else
|
else
|
||||||
ereport(FATAL,
|
ereport(FATAL,
|
||||||
(errmsg("could not read file \"%s\": read %d of %zu",
|
(errcode(ERRCODE_DATA_CORRUPTED),
|
||||||
|
errmsg("could not read file \"%s\": read %d of %zu",
|
||||||
mapfilename, r, sizeof(RelMapFile))));
|
mapfilename, r, sizeof(RelMapFile))));
|
||||||
}
|
}
|
||||||
pgstat_report_wait_end();
|
pgstat_report_wait_end();
|
||||||
|
|
|
@ -83,7 +83,8 @@ get_controlfile(const char *DataDir, const char *progname, bool *crc_ok_p)
|
||||||
else
|
else
|
||||||
#ifndef FRONTEND
|
#ifndef FRONTEND
|
||||||
ereport(ERROR,
|
ereport(ERROR,
|
||||||
(errmsg("could not read file \"%s\": read %d of %zu",
|
(errcode(ERRCODE_DATA_CORRUPTED),
|
||||||
|
errmsg("could not read file \"%s\": read %d of %zu",
|
||||||
ControlFilePath, r, sizeof(ControlFileData))));
|
ControlFilePath, r, sizeof(ControlFileData))));
|
||||||
#else
|
#else
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue