pg_upgrade misreports full disk
When pg_upgrade encounters a full disk while copying relation files,
it reports this as:
error while copying relation "xyz" (...): Success
because it doesn't set errno in some error cases. In other places we
treat short writes as ENOSPC, so here is a patch to do that for
pg_upgrade as well.
Attachments:
pg_upgrade-fix.patchtext/x-diff; name=pg_upgrade-fix.patchDownload
diff --git a/contrib/pg_upgrade/file.c b/contrib/pg_upgrade/file.c
index dfeb79f..b35034b 100644
--- a/contrib/pg_upgrade/file.c
+++ b/contrib/pg_upgrade/file.c
@@ -136,16 +136,22 @@ copy_file(const char *srcfile, const char *dstfile, bool force)
int save_errno = 0;
if ((srcfile == NULL) || (dstfile == NULL))
+ {
+ errno = EINVAL;
return -1;
+ }
if ((src_fd = open(srcfile, O_RDONLY, 0)) < 0)
return -1;
if ((dest_fd = open(dstfile, O_RDWR | O_CREAT | (force ? 0 : O_EXCL), S_IRUSR | S_IWUSR)) < 0)
{
+ save_errno = errno;
+
if (src_fd != 0)
close(src_fd);
+ errno = save_errno;
return -1;
}
@@ -170,6 +176,8 @@ copy_file(const char *srcfile, const char *dstfile, bool force)
if (write(dest_fd, buffer, nbytes) != nbytes)
{
+ if (errno == 0)
+ errno = ENOSPC;
save_errno = errno;
ret = -1;
break;
On Wed, Nov 13, 2013 at 10:28 AM, Peter Eisentraut <peter_e@gmx.net> wrote:
When pg_upgrade encounters a full disk while copying relation files,
it reports this as:error while copying relation "xyz" (...): Success
because it doesn't set errno in some error cases. In other places we
treat short writes as ENOSPC, so here is a patch to do that for
pg_upgrade as well.
+1 for committing this and back-patching it.
--
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company
--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers