Thread: pg_upgrade -j broken on Windows
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. +
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. +
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. +
Attachment
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. +