summaryrefslogtreecommitdiff
path: root/src/bin/pg_basebackup/pg_basebackup.c
diff options
context:
space:
mode:
authorAlvaro Herrera <alvherre@alvh.no-ip.org>2020-06-19 16:46:07 -0400
committerAlvaro Herrera <alvherre@alvh.no-ip.org>2020-06-19 16:46:07 -0400
commit5b52008a64414cd161db11f4c0d52fc0d2ee304a (patch)
treef273702b9db6a7b85aa9abb718cd002ef042917f /src/bin/pg_basebackup/pg_basebackup.c
parentb22ca7648b6fafea51978d206a5989cfe0900211 (diff)
Ensure write failure reports no-disk-space
A few places calling fwrite and gzwrite were not setting errno to ENOSPC when reporting errors, as is customary; this led to some failures being reported as "could not write file: Success" which makes us look silly. Make a few of these places in pg_dump and pg_basebackup use our customary pattern. Backpatch-to: 9.5 Author: Justin Pryzby <pryzby@telsasoft.com> Author: Tom Lane <tgl@sss.pgh.pa.us> Author: Álvaro Herrera <alvherre@alvh.no-ip.org> Discussion: https://postgr.es/m/20200611153753.GU14879@telsasoft.com
Diffstat (limited to 'src/bin/pg_basebackup/pg_basebackup.c')
-rw-r--r--src/bin/pg_basebackup/pg_basebackup.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/bin/pg_basebackup/pg_basebackup.c b/src/bin/pg_basebackup/pg_basebackup.c
index dfd45aecc56..d472f4d1c23 100644
--- a/src/bin/pg_basebackup/pg_basebackup.c
+++ b/src/bin/pg_basebackup/pg_basebackup.c
@@ -892,8 +892,12 @@ writeTarData(
#ifdef HAVE_LIBZ
if (ztarfile != NULL)
{
+ errno = 0;
if (gzwrite(ztarfile, buf, r) != r)
{
+ /* if write didn't set errno, assume problem is no disk space */
+ if (errno == 0)
+ errno = ENOSPC;
pg_log_error("could not write to compressed file \"%s\": %s",
current_file, get_gz_error(ztarfile));
exit(1);
@@ -902,8 +906,12 @@ writeTarData(
else
#endif
{
+ errno = 0;
if (fwrite(buf, r, 1, tarfile) != 1)
{
+ /* if write didn't set errno, assume problem is no disk space */
+ if (errno == 0)
+ errno = ENOSPC;
pg_log_error("could not write to file \"%s\": %m", current_file);
exit(1);
}
@@ -1596,8 +1604,12 @@ ReceiveAndUnpackTarFile(PGconn *conn, PGresult *res, int rownum)
continue;
}
+ errno = 0;
if (fwrite(copybuf, r, 1, file) != 1)
{
+ /* if write didn't set errno, assume problem is no disk space */
+ if (errno == 0)
+ errno = ENOSPC;
pg_log_error("could not write to file \"%s\": %m", filename);
exit(1);
}