Re: Service startup delay
Bruce Momjian <[email protected]>
| Newsgroups | gmane.comp.db.postgresql.devel.win32,gmane.comp.db.postgresql.devel.patches |
|---|---|
| Message-ID | <[email protected]> |
OK, I started running tests with pg_ctl -w and found it did not work even on Unix. I found that the code was not checking the return value of PQsetdbLogin(), and wasn't looping properly using a sleep. The attached applied patch should fix should fix your reported problem. --------------------------------------------------------------------------- Max Dunn wrote: > I tried adding the "-w" option to the registry entry for starting the > Postgres service(see below) but it didn't help; Tomcat still started before > Postgres was ready: > > c:\Program Files\Xythos\WebFile Server Evaluation\pgsql\bin>sc qc postgresql > [SC] GetServiceConfig SUCCESS > > SERVICE_NAME: postgresql > TYPE : 10 WIN32_OWN_PROCESS > START_TYPE : 2 AUTO_START > ERROR_CONTROL : 1 NORMAL > BINARY_PATH_NAME : C:/Program Files/Xythos/WebFile Server > Evaluation/p > gsql/bin/pg_ctl.exe runservice -w -N "PostgreSQL" -D "C:/Program > Files/Xythos/We > bFile Server Evaluation/pgsql/data" -o "-i" > LOAD_ORDER_GROUP : > TAG : 0 > DISPLAY_NAME : PostgreSQL > DEPENDENCIES : RPCSS > SERVICE_START_NAME : .\postgres > > --Max > > -----Original Message----- > From: Dave Page [mailto:[email protected]] > Sent: Friday, August 20, 2004 4:09 PM > To: Bruce Momjian; Barry Lind > Cc: [email protected]; Max Dunn > Subject: RE: [pgsql-hackers-win32] Service startup delay > > > > > -----Original Message----- > > From: [email protected] > > [mailto:[email protected]] On Behalf Of Bruce > > Momjian > > Sent: 20 August 2004 19:00 > > To: Barry Lind > > Cc: [email protected]; Max Dunn > > Subject: Re: [pgsql-hackers-win32] Service startup delay > > > > > > I think you need to use 'pg_ctl -w' to wait for it to start. > > > > Does -w work when starting in service mode? Aside from that, one possible > problem with this is what happens if the database goes into recovery mode at > startup. Whilst waiting for that to run, I would think it's possible that > the service control manager would timeout waiting for the service to > complete startup. > > Regards, Dave. > > > ---------------------------(end of broadcast)--------------------------- > TIP 9: the planner will ignore your desire to choose an index scan if your > joining column's datatypes do not match > -- Bruce Momjian | http://candle.pha.pa.us [email protected] | (610) 359-1001 + If your life is a hard drive, | 13 Roberts Road + Christ can be your backup. | Newtown Square, Pennsylvania 19073 ---------------------------(end of broadcast)--------------------------- TIP 5: Have you checked our extensive FAQ? http://www.postgresql.org/docs/faqs/FAQ.html
/bjm/diff
(text/plain, 1018 B)
Index: src/bin/pg_ctl/pg_ctl.c
===================================================================
RCS file: /cvsroot/pgsql-server/src/bin/pg_ctl/pg_ctl.c,v
retrieving revision 1.24
diff -c -c -r1.24 pg_ctl.c
*** src/bin/pg_ctl/pg_ctl.c 29 Jul 2004 16:11:11 -0000 1.24
--- src/bin/pg_ctl/pg_ctl.c 21 Aug 2004 03:07:25 -0000
***************
*** 404,415 ****
for (i = 0; i < wait_seconds; i++)
{
! if ((conn = PQsetdbLogin(NULL, portstr, NULL, NULL, "template1", NULL, NULL)) != NULL)
{
PQfinish(conn);
success = true;
break;
}
}
return success;
--- 404,426 ----
for (i = 0; i < wait_seconds; i++)
{
! if ((conn = PQsetdbLogin(NULL, portstr, NULL, NULL,
! "template1", NULL, NULL)) != NULL &&
! PQstatus(conn) == CONNECTION_OK)
{
PQfinish(conn);
success = true;
break;
}
+ else
+ {
+ if (!silence_echo)
+ {
+ printf(".");
+ fflush(stdout);
+ }
+ pg_usleep(1000000); /* 1 sec */
+ }
}
return success;