Thread: PostgreSQL 9.2 beta1's pg_upgrade fails on Windows XP

PostgreSQL 9.2 beta1's pg_upgrade fails on Windows XP

From
Edmund Horner
Date:
(Sending this again to pgsql-bugs with no attachments; hopefully it'll
be accepted.  Apologies for any duplicates!  I'll provide the
attachments if you need them, though I suspect things may become clear
without them.)

Hello,

I'm forwarding this to pgsql-bugs after sending it to pgsql-testers.
I've been a bit confused about how to file it -- the release notes for
the 9.2 beta point to "More information on how to test and report
issues" here:  http://www.postgresql.org/developer/beta/   which could
possibly use a bit more explanation.  Between the beta not being a
normal release, and me not been an official tester, I opted to send it
there anyway since it wasn't a bug in an *existing* release.  But
there is little traffic to pgsql-testers so I have sought advice on
IRC and been advised to send it here too. :-)

I'm not an official tester but I thought I would briefly experiment
with the beta.  I run PostgreSQL as a normal user on Windows XP
at work, which may be an unusual (and increasingly obsolete) case not
covered as much by other
testers.

I ran into a bit of trouble running pg_upgrade to upgrade from my
9.1.3 cluster.  This is the first time I have run pg_upgrade.  It is
entirely possible I've done something wrong.

As a control, I was able to successfully  "upgrade" the Postgresql
9.1.3 cluster into a second, new 9.1.3 cluster, using the 9.1.3
version of pg_upgrade.  Similar command lines and no issues.

If this does look like a bug, I will help to resolve it (though I
might need some guidance).  I have attached some basic information
below.  Let me know if you need more information.

Regards,
Edmund.


Environment
    Windows XP Service Pack 3
    32-bit mode on Intel Core2 Duo
    Data, binaries, and pg_upgrade working files are on an NTFS
partition with 4k cluster size.
    User has a domain login and local admin rights.

Old cluster
    Version: PostgreSQL 9.1.3
    Binaries: C:\ehorner\pgsql
    Data: C:\ehorner\pgdata
    Locale: C
    Encoding: UTF8

New cluster
    Version: PostgreSQL 9.2 beta1
    Binaries: C:\ehorner\pgsql92
    Data: C:\ehorner\pgdata92
    Locale: C
    Encoding: UTF8

Sequence of steps

    Unzip the PostgreSQL 9.2 demo1 binaries into c:\ehorner\pgsql92

    Shut down the PostgreSQL 9.1.3 cluster (in c:\ehorner\pgsql\bin):

        pg_ctl.exe stop -D c:\ehorner\pgsql

    Create a new 9.2 cluster (in C:\ehorner\pgsql92\bin):

        initdb.exe --no-locale -E UTF8 c:\ehorner\pgdata92

    Run pg_upgrade (in C:\):

        c:\ehorner\pgsql92\bin\pg_upgrade -b c:\ehorner\pgsql\bin -B
c:\ehorner\pgsql92\bin -d c:\ehorner\pgdata -D c:\ehorner\pgdata92

Expected output

    A message indicating successful upgrade of the old cluster into the new one.

Actual output

    Performing Consistency Checks
    -----------------------------
    Checking current, bin, and data directories                 ok
    Checking cluster versions                                   ok
    Checking database user is a superuser                       ok
    Checking for prepared transactions                          ok
    Checking for reg* system OID user data types                ok
    Checking for contrib/isn with bigint-passing mismatch       ok
    Creating catalog dump                                       The
process cannot access the file because it is being used by another
process.
    *failure*

    Consult the last few lines of "pg_upgrade_utility.log" for
    the probable cause of the failure.
    Failure, exiting
    The process cannot access the file because it is being used by
another process.
    *failure*
    Consult the last few lines of "pg_upgrade_utility.log" for
    the probable cause of the failure.

These files are also created (attached, except for
pg_upgrade_dump_all.sql which was 0 bytes):

    pg_upgrade_dump_all.sql
    pg_upgrade_internal.log
    pg_upgrade_restore.log
    pg_upgrade_server.log
    pg_upgrade_utility.log

Running again with -v gives the output shown in output-verbose.txt.
The two lines "The process cannot access the file because it is being
used by another process." appear on stderr, which I piped along with
stdout into that file.

Finally, I have also run it using the "Filemon" program to monitor
file system calls.  Filtering on pg_upgrade gets the result shown in
filemon-output.txt.  There is some cruft from antivirus and other
bloatware which I have removed (since I shouldn't publicise the work
environment too much).  The antivirus does
query the directory information of some of the files, but does not
appear to open them.

There are some SHARING VIOLATION errors on accessing
pg_upgrade_utility.log.  My guess is that's what causes the error.
It's possible the antivirus is interfering with the file (since it
does touch it) but I do not think it explains the problem since the
9.1.3 ->  9.1.3 upgrade had no problems.  I think it could be due to
the change in dump.c where this log file name is used as a pipe
destination in another exec'd program.  Maybe Windows XP is more
sensitive to that than other OSs?

http://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=717f6d60859cc2d1d7dfd57520531a50bd78df9c

As mentioned in another message, I have also run pg_upgrade on Windows
7 64-bit.  It was on a different database cluster though.  On Windows
7, pg_upgrade did not appear to have a sharing violation and proceeded
to make a complete dump of the SQL.  It later ran into trouble with an
oid conflict, but I think that's due to me messing around with the
cluster in question, and in any case is a separate issue.

Re: PostgreSQL 9.2 beta1's pg_upgrade fails on Windows XP

From
Craig Ringer
Date:
First: Best. Bug. Report. Ever.

Comments inline, though I don't know enough about the Windows side to
help much.

>      Checking for contrib/isn with bigint-passing mismatch       ok
>      Creating catalog dump                                       The
> process cannot access the file because it is being used by another
> process.
>      *failure*

Your speculation that antivirus may be involved is worth trying out,
though the fact that a different upgrade worked does indeed suggest it's
probably not that.

When you shut down the 9.1.3 cluster did you make absolutely certain
there were no postgres.exe processes lurking around when you tested?
Given the incredible thouroughness of your report I imagine you did, but
it's worth checking, as a lingering `postgres.exe' could (I imagine)
cause such an issue. Not that it should ever happen.

Do you have the option of re-trying with your AV disabled or removed?

--
Craig Ringer

Re: PostgreSQL 9.2 beta1's pg_upgrade fails on Windows XP

From
Edmund Horner
Date:
On 22 May 2012 18:49, Craig Ringer <ringerc@ringerc.id.au> wrote:
> When you shut down the 9.1.3 cluster did you make absolutely certain there
> were no postgres.exe processes lurking around when you tested? Given the
> incredible thouroughness of your report I imagine you did, but it's worth
> checking, as a lingering `postgres.exe' could (I imagine) cause such an
> issue. Not that it should ever happen.

Yes, I ensured there were no postgres.exe processes running before
running up_upgrade.  On a related note, postgres.exe processes DO
remaining running after pg_upgrade fails with this error.  Not sure if
they're from the old or new binaries.  I generally terminate them and
recreate the destination cluster between retries.  Additionally, the
old cluster needs to be cycled: start it, and then stop it; because
the next pg_upgrade run thinks a postgres.exe could still be using it.
 pg_ctl start also prints a warning about this but starts anyway.

> Do you have the option of re-trying with your AV disabled or removed?

At work I can't tamper with the AV, but I can run pg_upgrade in a
directory that is excluded from AV (the c:\ccviews directory used by
Clearcase!).

The log files are created there, and there is no AV activity on them
according to Filemon.  There is still a SHARING VIOLATION on
pg_upgrade_utility.log, though:

9    3:47:42 p.m.    pg_upgrade.exe:97760    OPEN    C:\CCVIEWS\PG_UPGRADE_UTILITY.LOG    SUCCESS    Options:
Open  Access: 00000081
10    3:47:42 p.m.    pg_upgrade.exe:97760    QUERY
INFORMATION    C:\CCVIEWS\PG_UPGRADE_UTILITY.LOG    SUCCESS    Length: 179
27    3:47:42 p.m.    pg_upgrade.exe:97760    OPEN    C:\ccviews\pg_upgrade_utility.log    SUCCESS    Options:
OpenIf  Access: 00120196
28    3:47:42 p.m.    pg_upgrade.exe:97760    QUERY
INFORMATION    C:\ccviews\pg_upgrade_utility.log    SUCCESS    Length: 179
29    3:47:42 p.m.    pg_upgrade.exe:97760    QUERY
INFORMATION    C:\ccviews\pg_upgrade_utility.log    SUCCESS    Length: 179
30    3:47:42 p.m.    pg_upgrade.exe:97760    WRITE
    C:\ccviews\pg_upgrade_utility.log    SUCCESS    Offset: 179 Length: 179
31    3:47:42 p.m.    pg_upgrade.exe:97760    CLOSE    C:\ccviews\pg_upgrade_utility.log    SUCCESS
101    3:47:45 p.m.    cmd.exe:99028    OPEN    C:\ccviews\pg_upgrade_utility.log    SUCCESS    Options:
Open  Access: 0012019F
102    3:47:45 p.m.    cmd.exe:99028    QUERY
INFORMATION    C:\ccviews\pg_upgrade_utility.log    SUCCESS    Length: 358
103    3:47:45 p.m.    cmd.exe:99028    QUERY
INFORMATION    C:\ccviews\pg_upgrade_utility.log    SUCCESS    Length: 358
104    3:47:45 p.m.    cmd.exe:99028    READ
    C:\ccviews\pg_upgrade_utility.log    SUCCESS    Offset: 357 Length: 1
109    3:47:45 p.m.    pg_ctl.exe:98832    WRITE
    C:\ccviews\pg_upgrade_utility.log    SUCCESS    Offset: 358 Length: 30
110    3:47:45 p.m.    pg_ctl.exe:98832    WRITE    C:\ccviews\pg_upgrade_utility.log    SUCCESS    Offset:
388 Length: 1
133    3:47:45 p.m.    svchost.exe:560    QUERY
INFORMATION    C:\CCVIEWS\PG_UPGRADE_UTILITY.LOG    SUCCESS    Attributes: A
134    3:47:45 p.m.    svchost.exe:560    OPEN    C:\CCVIEWS\PG_UPGRADE_UTILITY.LOG    SUCCESS    Options:
Open  Access: 00020088
135    3:47:45 p.m.    svchost.exe:560    QUERY
INFORMATION    C:\CCVIEWS\PG_UPGRADE_UTILITY.LOG    SUCCESS    FileInternalInformation
136    3:47:45 p.m.    svchost.exe:560    CLOSE    C:\CCVIEWS\PG_UPGRADE_UTILITY.LOG    SUCCESS
141    3:47:47 p.m.    pg_ctl.exe:98832    WRITE
    C:\ccviews\pg_upgrade_utility.log    SUCCESS    Offset: 389 Length: 7
142    3:47:47 p.m.    pg_ctl.exe:98832    WRITE
    C:\ccviews\pg_upgrade_utility.log    SUCCESS    Offset: 396 Length: 16
183    3:48:01 p.m.    cmd.exe:99396    OPEN    C:\ccviews\pg_upgrade_utility.log    SHARING
VIOLATION    Options: Open  Access: 0012019F
184    3:48:01 p.m.    cmd.exe:99396    OPEN    C:\ccviews\pg_upgrade_utility.log    SHARING
VIOLATION    Options: OpenIf  Access: 00120196
195    3:48:02 p.m.    cmd.exe:97484    OPEN    C:\ccviews\pg_upgrade_utility.log    SHARING
VIOLATION    Options: Open  Access: 0012019F
196    3:48:02 p.m.    cmd.exe:97484    OPEN    C:\ccviews\pg_upgrade_utility.log    SHARING
VIOLATION    Options: OpenIf  Access: 00120196

Re: PostgreSQL 9.2 beta1's pg_upgrade fails on Windows XP

From
Magnus Hagander
Date:
On Wed, May 23, 2012 at 5:50 AM, Edmund Horner <ejrh00@gmail.com> wrote:
> On 22 May 2012 18:49, Craig Ringer <ringerc@ringerc.id.au> wrote:
>> When you shut down the 9.1.3 cluster did you make absolutely certain the=
re
>> were no postgres.exe processes lurking around when you tested? Given the
>> incredible thouroughness of your report I imagine you did, but it's worth
>> checking, as a lingering `postgres.exe' could (I imagine) cause such an
>> issue. Not that it should ever happen.
>
> Yes, I ensured there were no postgres.exe processes running before
> running up_upgrade. =A0On a related note, postgres.exe processes DO
> remaining running after pg_upgrade fails with this error. =A0Not sure if
> they're from the old or new binaries. =A0I generally terminate them and
> recreate the destination cluster between retries. =A0Additionally, the
> old cluster needs to be cycled: start it, and then stop it; because
> the next pg_upgrade run thinks a postgres.exe could still be using it.
> =A0pg_ctl start also prints a warning about this but starts anyway.
>
>> Do you have the option of re-trying with your AV disabled or removed?
>
> At work I can't tamper with the AV, but I can run pg_upgrade in a
> directory that is excluded from AV (the c:\ccviews directory used by
> Clearcase!).
>
> The log files are created there, and there is no AV activity on them
> according to Filemon. =A0There is still a SHARING VIOLATION on
> pg_upgrade_utility.log, though:

This certainly looks like both pg_ctl and whatever is running under
cmd are both accessing the same logfile. This won't work. We can make
pg_ctl open it in sharing mode, but I'm pretty sure there is nothing
we can do about CMD - I assume that's coming from a shell redirect
somewhere?

> 142 =A0 =A0 3:47:47 p.m. =A0 =A0pg_ctl.exe:98832 =A0 =A0 =A0 =A0WRITE
> =A0 =A0 =A0 =A0C:\ccviews\pg_upgrade_utility.log =A0 =A0 =A0 SUCCESS Offs=
et: 396 Length: 16
> 183 =A0 =A0 3:48:01 p.m. =A0 =A0cmd.exe:99396 =A0 OPEN =A0 =A0C:\ccviews\=
pg_upgrade_utility.log =A0 =A0 =A0 SHARING
> VIOLATION =A0 =A0 =A0 Options: Open =A0Access: 0012019F

We probably need to send these to different logfiles. Bruce?

--=20
=A0Magnus Hagander
=A0Me: http://www.hagander.net/
=A0Work: http://www.redpill-linpro.com/

Re: PostgreSQL 9.2 beta1's pg_upgrade fails on Windows XP

From
Bruce Momjian
Date:
On Wed, May 23, 2012 at 03:20:30PM +0200, Magnus Hagander wrote:
> On Wed, May 23, 2012 at 5:50 AM, Edmund Horner <ejrh00@gmail.com> wrote:
> > On 22 May 2012 18:49, Craig Ringer <ringerc@ringerc.id.au> wrote:
> >> When you shut down the 9.1.3 cluster did you make absolutely certain there
> >> were no postgres.exe processes lurking around when you tested? Given the
> >> incredible thouroughness of your report I imagine you did, but it's worth
> >> checking, as a lingering `postgres.exe' could (I imagine) cause such an
> >> issue. Not that it should ever happen.
> >
> > Yes, I ensured there were no postgres.exe processes running before
> > running up_upgrade.  On a related note, postgres.exe processes DO
> > remaining running after pg_upgrade fails with this error.  Not sure if
> > they're from the old or new binaries.  I generally terminate them and
> > recreate the destination cluster between retries.  Additionally, the
> > old cluster needs to be cycled: start it, and then stop it; because
> > the next pg_upgrade run thinks a postgres.exe could still be using it.
> >  pg_ctl start also prints a warning about this but starts anyway.
> >
> >> Do you have the option of re-trying with your AV disabled or removed?
> >
> > At work I can't tamper with the AV, but I can run pg_upgrade in a
> > directory that is excluded from AV (the c:\ccviews directory used by
> > Clearcase!).
> >
> > The log files are created there, and there is no AV activity on them
> > according to Filemon.  There is still a SHARING VIOLATION on
> > pg_upgrade_utility.log, though:
>
> This certainly looks like both pg_ctl and whatever is running under
> cmd are both accessing the same logfile. This won't work. We can make
> pg_ctl open it in sharing mode, but I'm pretty sure there is nothing
> we can do about CMD - I assume that's coming from a shell redirect
> somewhere?
>
> > 142     3:47:47 p.m.    pg_ctl.exe:98832        WRITE
> >        C:\ccviews\pg_upgrade_utility.log       SUCCESS Offset: 396 Length: 16
> > 183     3:48:01 p.m.    cmd.exe:99396   OPEN    C:\ccviews\pg_upgrade_utility.log       SHARING
> > VIOLATION       Options: Open  Access: 0012019F
>
> We probably need to send these to different logfiles. Bruce?

I have applied the attached patch which should fix the problem.   How
can we get Edmund a copy of a new binary for testing?  Does he have to
wait for beta2?

In pre-9.2, pg_ctl output was sent to /dev/null to avoid this problem,
but that was to avoid sending pg_ctl -l output and stdout output to the
same file.  With 9.2, now that we have multiple output files, I sent the
pg_ctl stdout to the utility file.  One would think that doing:

    pg_ctl -l file1 > file2
    vacuumedb > file2

would not be a problem, but Edmund is reporting he is getting a file
share error.  It sounds like even though pg_ctl has finished, it still
has the file open, perhaps by the still-running postmaster.  I am
unclear if the 'pg_ctl.exe' reported by the tool above is really pg_ctl
or the postmaster.

Anyway, I am pretty sure this patch fixes the problem, and I added a C
comment explaining what I think is happening, but it isn't totally clear
to me yet.  It would be interesting to see the kept log files if
pg_upgrade is run with the --retain flag.  (Edmund, you can email those
to me privately.)  That would tell me what stage is causing the problem.
The pg_upgrade output reported seems to indicate it is pg_dumpall:

        Creating catalog dump                                       The
    process cannot access the file because it is being used by another
    process.
        *failure*

which supports my idea that it is really the postmaster who has that
file kept open and causing the share violation.

In pre-9.2, we only output one log file, but now that we output 4,
outputting one more on Windows for pg_ctl isn't a problem.  My patch
also adjusts the output file array now that is of variable size.

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

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

Attachment

Re: PostgreSQL 9.2 beta1's pg_upgrade fails on Windows XP

From
Edmund Horner
Date:
On 24 May 2012 12:33, Bruce Momjian <bruce@momjian.us> wrote:
> I have applied the attached patch which should fix the problem. =A0 How
> can we get Edmund a copy of a new binary for testing? =A0Does he have to
> wait for beta2?

My uneducated guess is that your patch will fix the problem.

But I don't think I'm up to compiling it myself.  If someone reputable
can send me a new pg_upgrade.exe binary I'm happy to run it.

Edmund.

Re: PostgreSQL 9.2 beta1's pg_upgrade fails on Windows XP

From
Magnus Hagander
Date:
On Thu, May 24, 2012 at 2:40 AM, Edmund Horner <ejrh00@gmail.com> wrote:
> On 24 May 2012 12:33, Bruce Momjian <bruce@momjian.us> wrote:
>> I have applied the attached patch which should fix the problem. =A0 How
>> can we get Edmund a copy of a new binary for testing? =A0Does he have to
>> wait for beta2?
>
> My uneducated guess is that your patch will fix the problem.
>
> But I don't think I'm up to compiling it myself. =A0If someone reputable
> can send me a new pg_upgrade.exe binary I'm happy to run it.

I've built a new one off git master + Bruce's patch. You can get it
from http://www.hagander.net/tmp/pg_upgrade.zip - please see if that
one works for you.

--=20
=A0Magnus Hagander
=A0Me: http://www.hagander.net/
=A0Work: http://www.redpill-linpro.com/

Re: PostgreSQL 9.2 beta1's pg_upgrade fails on Windows XP

From
Bruce Momjian
Date:
On Thu, May 24, 2012 at 03:42:25PM +0200, Magnus Hagander wrote:
> On Thu, May 24, 2012 at 2:40 AM, Edmund Horner <ejrh00@gmail.com> wrote:
> > On 24 May 2012 12:33, Bruce Momjian <bruce@momjian.us> wrote:
> >> I have applied the attached patch which should fix the problem.   How
> >> can we get Edmund a copy of a new binary for testing?  Does he have to
> >> wait for beta2?
> >
> > My uneducated guess is that your patch will fix the problem.
> >
> > But I don't think I'm up to compiling it myself.  If someone reputable
> > can send me a new pg_upgrade.exe binary I'm happy to run it.
>
> I've built a new one off git master + Bruce's patch. You can get it
> from http://www.hagander.net/tmp/pg_upgrade.zip - please see if that
> one works for you.

Thanks, but thinking more, I am more concerned.  Here is what we think
is happening (ah, flashbacks to the PG Windows port):

    pg_ctl start > file1
    pg_dumpall > file1
    pg_ctl stop > file1

generates a file share error for pg_dump.  I have replaced that with:

    pg_ctl start > file2
    pg_dumpall > file1
    pg_ctl stop > file2

I am now concerned that 'pg_ctl stop' is going to give us a share
violation.  The fix will be to use 'file3' for pg_ctl stop.  Can I get
an updated report to see if that is accurate?  Thanks.

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

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

Re: PostgreSQL 9.2 beta1's pg_upgrade fails on Windows XP

From
Edmund Horner
Date:
On 25 May 2012 01:59, Bruce Momjian <bruce@momjian.us> wrote:
> On Thu, May 24, 2012 at 03:42:25PM +0200, Magnus Hagander wrote:
>> I've built a new one off git master + Bruce's patch. You can get it
>> from http://www.hagander.net/tmp/pg_upgrade.zip - please see if that
>> one works for you.
>
> Thanks, but thinking more, I am more concerned. =A0Here is what we think
> is happening (ah, flashbacks to the PG Windows port):
>
> =A0 =A0 =A0 =A0pg_ctl start > file1
> =A0 =A0 =A0 =A0pg_dumpall > file1
> =A0 =A0 =A0 =A0pg_ctl stop > file1
>
> generates a file share error for pg_dump. =A0I have replaced that with:
>
> =A0 =A0 =A0 =A0pg_ctl start > file2
> =A0 =A0 =A0 =A0pg_dumpall > file1
> =A0 =A0 =A0 =A0pg_ctl stop > file2
>
> I am now concerned that 'pg_ctl stop' is going to give us a share
> violation. =A0The fix will be to use 'file3' for pg_ctl stop. =A0Can I get
> an updated report to see if that is accurate? =A0Thanks.


Hi Bruce and Magnus,

I've run the new EXE.  It makes further progress than the previous
build, and creates the following files (with sizes):

   158,142 pg_upgrade_dump_all.sql
   157,127 pg_upgrade_dump_db.sql
       993 pg_upgrade_dump_globals.sql
    19,164 pg_upgrade_internal.log
       179 pg_upgrade_restore.log
       179 pg_upgrade_server.log
       234 pg_upgrade_server2.log
    43,476 pg_upgrade_utility.log

It still fails (when run in verbose mode):

    Creating catalog dump
""c:\ehorner\pgsql\bin/pg_dumpall" --port 50432 --username "ehorner"
--schema-only --binary-upgrade --verbose > "pg_upgrade_dump_all.sql"
2>> "pg_upgrade_utility.log""
    ok
    ""c:\ehorner\pgsql-old\bin/pg_ctl" -w -l "pg_upgrade_server2.log"
-D "c:\ehorner\pgdata-old" -o""  stop >> "pg_upgrade_server2.log"
2>&1"
    The process cannot access the file because it is being used by
another process.
    *failure*
    There were problems executing """c:\ehorner\pgsql-old\bin/pg_ctl"
-w -l "pg_upgrade_server2.log" -D "c:\ehorner\pgdata-old" -o ""  stop
>> "pg_upgrade_server2.log" 2>&1""

    Consult the last few lines of "pg_upgrade_server2.log" for
    the probable cause of the failure.
    Failure, exiting
    ""c:\ehorner\pgsql-old\bin/pg_ctl" -w -l "pg_upgrade_server2.log"
-D "c:\ehorner\pgdata-old" -o"" -m fast stop >>
"pg_upgrade_server2.log" 2>&1"
    The process cannot access the file because it is being used by
another process.
    *failure*
    There were problems executing """c:\ehorner\pgsql-old\bin/pg_ctl"
-w -l "pg_upgrade_server2.log" -D "c:\ehorner\pgdata-old" -o "" -m
fast stop >> "pg_upgrade_server2.log" 2>&1""
    Consult the last few lines of "pg_upgrade_server2.log" for
    the probable cause of the failure.

These messages are also in pg_upgrade_internal.log.
pg_upgrade_server2.log simply says "waiting for server to start.....
done" and "server started".

There were some SHARING VIOLATIONs on pg_upgrade_server2.log.  In fact
it looks like it occurs twice to two different "cmd.exe" invocations
-- I'm not sure if that's two distinct steps in the process, or a
single step being automatically retried.  It's a bit hard to correlate
the sequence of file system calls with the pg_upgrade log outputs.

    17185   11:15:09 a.m.   pg_ctl.exe:106380       WRITE
C:\pg_upgrade_server2.log       SUCCESS Offset: 210 Length: 1
    18901   11:15:11 a.m.   pg_ctl.exe:106380       WRITE
C:\pg_upgrade_server2.log       SUCCESS Offset: 211 Length: 7
    18904   11:15:11 a.m.   pg_ctl.exe:106380       WRITE
C:\pg_upgrade_server2.log       SUCCESS Offset: 218 Length: 16
    68104   11:15:38 a.m.   cmd.exe:106096  OPEN
C:\pg_upgrade_server2.log       SHARING VIOLATION       Options: Open
Access: 0012019F
    68105   11:15:38 a.m.   cmd.exe:106096  OPEN
C:\pg_upgrade_server2.log       SHARING VIOLATION       Options:
OpenIf  Access: 00120196
    68696   11:15:38 a.m.   cmd.exe:106104  OPEN
C:\pg_upgrade_server2.log       SHARING VIOLATION       Options: Open
Access: 0012019F
    68697   11:15:38 a.m.   cmd.exe:106104  OPEN
C:\pg_upgrade_server2.log       SHARING VIOLATION       Options:
OpenIf  Access: 00120196

The offsets and lengths written by pg_ctl correpond to the last bits
of text content in the file, which is:

    -----------------------------------------------------------------
      pg_upgrade run on Fri May 25 11:27:02 2012
    -----------------------------------------------------------------

    waiting for server to start..... done
    server started

I.e. I think pg_ctl wrote the last couple of lines, and then the two
cmd.exe were unable to write anything more since presumably it's still
open.

So is this the problem you predicted above with pg_ctl stop?

I'll provide the logs and filemon output privately if you need them.

Re: PostgreSQL 9.2 beta1's pg_upgrade fails on Windows XP

From
Edmund Horner
Date:
On 25 May 2012 11:48, Edmund Horner <ejrh00@gmail.com> wrote:
> It still fails (when run in verbose mode):

Sorry, let me correct that to:

It still fails, regardless of verbose mode.  And, in verbose mode, the
output is...

Re: PostgreSQL 9.2 beta1's pg_upgrade fails on Windows XP

From
Bruce Momjian
Date:
On Fri, May 25, 2012 at 11:48:53AM +1200, Edmund Horner wrote:
> It still fails (when run in verbose mode):
>
>     Creating catalog dump
> ""c:\ehorner\pgsql\bin/pg_dumpall" --port 50432 --username "ehorner"
> --schema-only --binary-upgrade --verbose > "pg_upgrade_dump_all.sql"
> 2>> "pg_upgrade_utility.log""
>     ok
>     ""c:\ehorner\pgsql-old\bin/pg_ctl" -w -l "pg_upgrade_server2.log"
> -D "c:\ehorner\pgdata-old" -o""  stop >> "pg_upgrade_server2.log"
> 2>&1"
>     The process cannot access the file because it is being used by
> another process.
>     *failure*
>     There were problems executing """c:\ehorner\pgsql-old\bin/pg_ctl"
> -w -l "pg_upgrade_server2.log" -D "c:\ehorner\pgdata-old" -o ""  stop
> >> "pg_upgrade_server2.log" 2>&1""

Bingo, this is exactly where I expected it to fail.   I am attaching a
new, applied patch that creates files pg_upgrade_server_start.log and
pg_upgrade_server_stop.log to log the pg_ctl start/stop stdout
seperately.  This should fix the error.  Thanks so much for testing.  I
believe someone will generate a new binary for testing.

> I.e. I think pg_ctl wrote the last couple of lines, and then the two
> cmd.exe were unable to write anything more since presumably it's still
> open.
>
> So is this the problem you predicted above with pg_ctl stop?

Yep, I think we are good now.  I never expected this behavior, but it
now makes sense.

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

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

Attachment

Re: PostgreSQL 9.2 beta1's pg_upgrade fails on Windows XP

From
Bruce Momjian
Date:
On Thu, May 24, 2012 at 08:34:01PM -0400, Bruce Momjian wrote:
> On Fri, May 25, 2012 at 11:48:53AM +1200, Edmund Horner wrote:
> > It still fails (when run in verbose mode):
> >
> >     Creating catalog dump
> > ""c:\ehorner\pgsql\bin/pg_dumpall" --port 50432 --username "ehorner"
> > --schema-only --binary-upgrade --verbose > "pg_upgrade_dump_all.sql"
> > 2>> "pg_upgrade_utility.log""
> >     ok
> >     ""c:\ehorner\pgsql-old\bin/pg_ctl" -w -l "pg_upgrade_server2.log"
> > -D "c:\ehorner\pgdata-old" -o""  stop >> "pg_upgrade_server2.log"
> > 2>&1"
> >     The process cannot access the file because it is being used by
> > another process.
> >     *failure*
> >     There were problems executing """c:\ehorner\pgsql-old\bin/pg_ctl"
> > -w -l "pg_upgrade_server2.log" -D "c:\ehorner\pgdata-old" -o ""  stop
> > >> "pg_upgrade_server2.log" 2>&1""
>
> Bingo, this is exactly where I expected it to fail.   I am attaching a
> new, applied patch that creates files pg_upgrade_server_start.log and
> pg_upgrade_server_stop.log to log the pg_ctl start/stop stdout
> seperately.  This should fix the error.  Thanks so much for testing.  I
> believe someone will generate a new binary for testing.
>
> > I.e. I think pg_ctl wrote the last couple of lines, and then the two
> > cmd.exe were unable to write anything more since presumably it's still
> > open.
> >
> > So is this the problem you predicted above with pg_ctl stop?
>
> Yep, I think we are good now.  I never expected this behavior, but it
> now makes sense.

Ah, turns out I only need one extra log file on Windows, not two,
because I can reuse the utility file for pg_ctl stop.  The original
beta1 code usesd the utility file for pg_ctl stop and start, which is
what caused the problem.

Applied patch attached.

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

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

Attachment

Re: PostgreSQL 9.2 beta1's pg_upgrade fails on Windows XP

From
Edmund Horner
Date:
On 26 May 2012 01:10, Bruce Momjian <bruce@momjian.us> wrote:
> Ah, turns out I only need one extra log file on Windows, not two,
> because I can reuse the utility file for pg_ctl stop. =A0The original
> beta1 code usesd the utility file for pg_ctl stop and start, which is
> what caused the problem.
>
> Applied patch attached.

And now pg_upgrade in beta2 works fine.  Thanks.

Re: PostgreSQL 9.2 beta1's pg_upgrade fails on Windows XP

From
Bruce Momjian
Date:
On Tue, Jun 12, 2012 at 05:10:19PM +1200, Edmund Horner wrote:
> On 26 May 2012 01:10, Bruce Momjian <bruce@momjian.us> wrote:
> > Ah, turns out I only need one extra log file on Windows, not two,
> > because I can reuse the utility file for pg_ctl stop.  The original
> > beta1 code usesd the utility file for pg_ctl stop and start, which is
> > what caused the problem.
> >
> > Applied patch attached.
>
> And now pg_upgrade in beta2 works fine.  Thanks.

Great.  Thanks for the report.

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

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