Fix some BufFileRead() error reporting

Remove "%m" from error messages where errno would be bogus.  Add short
read byte counts where appropriate.

This is equivalent to what was done in
7897e3bb90, but some code was apparently
developed concurrently to that and not updated accordingly.

Reviewed-by: Amit Kapila <amit.kapila16@gmail.com>
Discussion: https://www.postgresql.org/message-id/flat/f3501945-c591-8cc3-5ef0-b72a2e0eaa9c@enterprisedb.com
This commit is contained in:
Peter Eisentraut 2023-01-16 09:20:44 +01:00
parent 9a740f81eb
commit 1561612e3b
2 changed files with 21 additions and 15 deletions

View File

@ -371,7 +371,8 @@ SendBackupManifest(backup_manifest_info *manifest, bbsink *sink)
if (rc != bytes_to_read) if (rc != bytes_to_read)
ereport(ERROR, ereport(ERROR,
(errcode_for_file_access(), (errcode_for_file_access(),
errmsg("could not read from temporary file: %m"))); errmsg("could not read from temporary file: read only %zu of %zu bytes",
rc, bytes_to_read)));
bbsink_manifest_contents(sink, bytes_to_read); bbsink_manifest_contents(sink, bytes_to_read);
manifest_bytes_done += bytes_to_read; manifest_bytes_done += bytes_to_read;
} }

View File

@ -2063,7 +2063,7 @@ apply_spooled_messages(FileSet *stream_fileset, TransactionId xid,
nchanges = 0; nchanges = 0;
while (true) while (true)
{ {
int nbytes; size_t nbytes;
int len; int len;
CHECK_FOR_INTERRUPTS(); CHECK_FOR_INTERRUPTS();
@ -2079,8 +2079,8 @@ apply_spooled_messages(FileSet *stream_fileset, TransactionId xid,
if (nbytes != sizeof(len)) if (nbytes != sizeof(len))
ereport(ERROR, ereport(ERROR,
(errcode_for_file_access(), (errcode_for_file_access(),
errmsg("could not read from streaming transaction's changes file \"%s\": %m", errmsg("could not read from streaming transaction's changes file \"%s\": read only %zu of %zu bytes",
path))); path, nbytes, sizeof(len))));
if (len <= 0) if (len <= 0)
elog(ERROR, "incorrect length %d in streaming transaction's changes file \"%s\"", elog(ERROR, "incorrect length %d in streaming transaction's changes file \"%s\"",
@ -2090,11 +2090,12 @@ apply_spooled_messages(FileSet *stream_fileset, TransactionId xid,
buffer = repalloc(buffer, len); buffer = repalloc(buffer, len);
/* and finally read the data into the buffer */ /* and finally read the data into the buffer */
if (BufFileRead(stream_fd, buffer, len) != len) nbytes = BufFileRead(stream_fd, buffer, len);
if (nbytes != len)
ereport(ERROR, ereport(ERROR,
(errcode_for_file_access(), (errcode_for_file_access(),
errmsg("could not read from streaming transaction's changes file \"%s\": %m", errmsg("could not read from streaming transaction's changes file \"%s\": read only %zu of %zu bytes",
path))); path, nbytes, (size_t) len)));
BufFileTell(stream_fd, &fileno, &offset); BufFileTell(stream_fd, &fileno, &offset);
@ -3992,6 +3993,7 @@ static void
subxact_info_read(Oid subid, TransactionId xid) subxact_info_read(Oid subid, TransactionId xid)
{ {
char path[MAXPGPATH]; char path[MAXPGPATH];
size_t nread;
Size len; Size len;
BufFile *fd; BufFile *fd;
MemoryContext oldctx; MemoryContext oldctx;
@ -4011,13 +4013,12 @@ subxact_info_read(Oid subid, TransactionId xid)
return; return;
/* read number of subxact items */ /* read number of subxact items */
if (BufFileRead(fd, &subxact_data.nsubxacts, nread = BufFileRead(fd, &subxact_data.nsubxacts, sizeof(subxact_data.nsubxacts));
sizeof(subxact_data.nsubxacts)) != if (nread != sizeof(subxact_data.nsubxacts))
sizeof(subxact_data.nsubxacts))
ereport(ERROR, ereport(ERROR,
(errcode_for_file_access(), (errcode_for_file_access(),
errmsg("could not read from streaming transaction's subxact file \"%s\": %m", errmsg("could not read from streaming transaction's subxact file \"%s\": read only %zu of %zu bytes",
path))); path, nread, sizeof(subxact_data.nsubxacts))));
len = sizeof(SubXactInfo) * subxact_data.nsubxacts; len = sizeof(SubXactInfo) * subxact_data.nsubxacts;
@ -4035,11 +4036,15 @@ subxact_info_read(Oid subid, TransactionId xid)
sizeof(SubXactInfo)); sizeof(SubXactInfo));
MemoryContextSwitchTo(oldctx); MemoryContextSwitchTo(oldctx);
if ((len > 0) && ((BufFileRead(fd, subxact_data.subxacts, len)) != len)) if (len > 0)
{
nread = BufFileRead(fd, subxact_data.subxacts, len);
if (nread != len)
ereport(ERROR, ereport(ERROR,
(errcode_for_file_access(), (errcode_for_file_access(),
errmsg("could not read from streaming transaction's subxact file \"%s\": %m", errmsg("could not read from streaming transaction's subxact file \"%s\": read only %zu of %zu bytes",
path))); path, nread, len)));
}
BufFileClose(fd); BufFileClose(fd);
} }