pg_upgrade -j broken on Windows

Started by Bruce Momjianalmost 13 years ago4 messageshackers
Jump to latest
#1Bruce Momjian
bruce@momjian.us

Everyone should be aware that the 9.3 pg_upgrade -j/--jobs option on
Windows is currently broken, and hopefully will be fixed by the next
beta.

Someone at PGDay UK told me they were getting pg_upgrade -j crashes on
Windows. Andrew Dunstan was able to reproduce the crash, and that has
been fixed, but there is still a race condition that I am trying to
diagnose.

--
Bruce Momjian <bruce@momjian.us> http://momjian.us
EnterpriseDB http://enterprisedb.com

+ It's impossible for everything to be true. +

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#2Bruce Momjian
bruce@momjian.us
In reply to: Bruce Momjian (#1)
Re: pg_upgrade -j broken on Windows

On Thu, Jul 25, 2013 at 10:57:28AM -0400, Bruce Momjian wrote:

Everyone should be aware that the 9.3 pg_upgrade -j/--jobs option on
Windows is currently broken, and hopefully will be fixed by the next
beta.

Someone at PGDay UK told me they were getting pg_upgrade -j crashes on
Windows. Andrew Dunstan was able to reproduce the crash, and that has
been fixed, but there is still a race condition that I am trying to
diagnose.

After three days of testing and creating a Windows MinGW build
environment (with Andrew's help), I have come up with the attached patch
which fixes the pg_upgrade -j race condition on Windows. In summary,
creating a file with fopen() from a non-primary thread and then calling
system() soon after can result in a file-in-use error. The solution was
to issue the fopen() after system() in such cases.

This would be applied to head and 9.3.

--
Bruce Momjian <bruce@momjian.us> http://momjian.us
EnterpriseDB http://enterprisedb.com

+ It's impossible for everything to be true. +

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#3Bruce Momjian
bruce@momjian.us
In reply to: Bruce Momjian (#2)
Re: pg_upgrade -j broken on Windows

On Fri, Jul 26, 2013 at 01:27:34PM -0400, Bruce Momjian wrote:

On Thu, Jul 25, 2013 at 10:57:28AM -0400, Bruce Momjian wrote:

Everyone should be aware that the 9.3 pg_upgrade -j/--jobs option on
Windows is currently broken, and hopefully will be fixed by the next
beta.

Someone at PGDay UK told me they were getting pg_upgrade -j crashes on
Windows. Andrew Dunstan was able to reproduce the crash, and that has
been fixed, but there is still a race condition that I am trying to
diagnose.

After three days of testing and creating a Windows MinGW build
environment (with Andrew's help), I have come up with the attached patch
which fixes the pg_upgrade -j race condition on Windows. In summary,
creating a file with fopen() from a non-primary thread and then calling
system() soon after can result in a file-in-use error. The solution was
to issue the fopen() after system() in such cases.

This would be applied to head and 9.3.

Sorry, patch attached.

--
Bruce Momjian <bruce@momjian.us> http://momjian.us
EnterpriseDB http://enterprisedb.com

+ It's impossible for everything to be true. +

Attachments:

pg_upgrade.difftext/x-diff; charset=us-asciiDownload+43-14
#4Bruce Momjian
bruce@momjian.us
In reply to: Bruce Momjian (#3)
Re: pg_upgrade -j broken on Windows

On Fri, Jul 26, 2013 at 01:31:45PM -0400, Bruce Momjian wrote:

On Fri, Jul 26, 2013 at 01:27:34PM -0400, Bruce Momjian wrote:

On Thu, Jul 25, 2013 at 10:57:28AM -0400, Bruce Momjian wrote:

Everyone should be aware that the 9.3 pg_upgrade -j/--jobs option on
Windows is currently broken, and hopefully will be fixed by the next
beta.

Someone at PGDay UK told me they were getting pg_upgrade -j crashes on
Windows. Andrew Dunstan was able to reproduce the crash, and that has
been fixed, but there is still a race condition that I am trying to
diagnose.

After three days of testing and creating a Windows MinGW build
environment (with Andrew's help), I have come up with the attached patch
which fixes the pg_upgrade -j race condition on Windows. In summary,
creating a file with fopen() from a non-primary thread and then calling
system() soon after can result in a file-in-use error. The solution was
to issue the fopen() after system() in such cases.

This would be applied to head and 9.3.

Sorry, patch attached.

Applied, and backpatched to 9.3.

--
Bruce Momjian <bruce@momjian.us> http://momjian.us
EnterpriseDB http://enterprisedb.com

+ It's impossible for everything to be true. +

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers