]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Fix some BufFileRead() error reporting
authorPeter Eisentraut <peter@eisentraut.org>
Mon, 16 Jan 2023 08:20:44 +0000 (09:20 +0100)
committerPeter Eisentraut <peter@eisentraut.org>
Mon, 16 Jan 2023 08:45:03 +0000 (09:45 +0100)
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
7897e3bb902c557412645b82120f4d95f7474906, 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

src/backend/backup/backup_manifest.c
src/backend/replication/logical/worker.c

index a54185fdab8c4971415d32e0eff3a9832c2d5135..618bd0d55501cff508486a2d4f78b182ebf6c82c 100644 (file)
@@ -371,7 +371,8 @@ SendBackupManifest(backup_manifest_info *manifest, bbsink *sink)
                if (rc != bytes_to_read)
                        ereport(ERROR,
                                        (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);
                manifest_bytes_done += bytes_to_read;
        }
index e2e3da0591083436beee2008b395110d335d8220..cc6b079fcd677b7e38574ef6cf87e8666d327db7 100644 (file)
@@ -1398,7 +1398,7 @@ apply_spooled_messages(TransactionId xid, XLogRecPtr lsn)
        nchanges = 0;
        while (true)
        {
-               int                     nbytes;
+               size_t          nbytes;
                int                     len;
 
                CHECK_FOR_INTERRUPTS();
@@ -1414,8 +1414,8 @@ apply_spooled_messages(TransactionId xid, XLogRecPtr lsn)
                if (nbytes != sizeof(len))
                        ereport(ERROR,
                                        (errcode_for_file_access(),
-                                        errmsg("could not read from streaming transaction's changes file \"%s\": %m",
-                                                       path)));
+                                        errmsg("could not read from streaming transaction's changes file \"%s\": read only %zu of %zu bytes",
+                                                       path, nbytes, sizeof(len))));
 
                if (len <= 0)
                        elog(ERROR, "incorrect length %d in streaming transaction's changes file \"%s\"",
@@ -1425,11 +1425,12 @@ apply_spooled_messages(TransactionId xid, XLogRecPtr lsn)
                buffer = repalloc(buffer, len);
 
                /* and finally read the data into the buffer */
-               if (BufFileRead(fd, buffer, len) != len)
+               nbytes = BufFileRead(fd, buffer, len);
+               if (nbytes != len)
                        ereport(ERROR,
                                        (errcode_for_file_access(),
-                                        errmsg("could not read from streaming transaction's changes file \"%s\": %m",
-                                                       path)));
+                                        errmsg("could not read from streaming transaction's changes file \"%s\": read only %zu of %zu bytes",
+                                                       path, nbytes, (size_t) len)));
 
                /* copy the buffer to the stringinfo and call apply_dispatch */
                resetStringInfo(&s2);
@@ -3192,6 +3193,7 @@ static void
 subxact_info_read(Oid subid, TransactionId xid)
 {
        char            path[MAXPGPATH];
+       size_t          nread;
        Size            len;
        BufFile    *fd;
        MemoryContext oldctx;
@@ -3211,13 +3213,12 @@ subxact_info_read(Oid subid, TransactionId xid)
                return;
 
        /* read number of subxact items */
-       if (BufFileRead(fd, &subxact_data.nsubxacts,
-                                       sizeof(subxact_data.nsubxacts)) !=
-               sizeof(subxact_data.nsubxacts))
+       nread = BufFileRead(fd, &subxact_data.nsubxacts, sizeof(subxact_data.nsubxacts));
+       if (nread != sizeof(subxact_data.nsubxacts))
                ereport(ERROR,
                                (errcode_for_file_access(),
-                                errmsg("could not read from streaming transaction's subxact file \"%s\": %m",
-                                               path)));
+                                errmsg("could not read from streaming transaction's subxact file \"%s\": read only %zu of %zu bytes",
+                                               path, nread, sizeof(subxact_data.nsubxacts))));
 
        len = sizeof(SubXactInfo) * subxact_data.nsubxacts;
 
@@ -3235,11 +3236,15 @@ subxact_info_read(Oid subid, TransactionId xid)
                                                                   sizeof(SubXactInfo));
        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,
                                (errcode_for_file_access(),
-                                errmsg("could not read from streaming transaction's subxact file \"%s\": %m",
-                                               path)));
+                                errmsg("could not read from streaming transaction's subxact file \"%s\": read only %zu of %zu bytes",
+                                               path, nread, len)));
+       }
 
        BufFileClose(fd);
 }