Lists: | pgsql-bugspgsql-hackers |
---|
From: | krystian(dot)bigaj(at)gmail(dot)com |
---|---|
To: | pgsql-bugs(at)postgresql(dot)org |
Subject: | BUG #11805: Missing SetServiceStatus call during service shutdown in pg_ctl (Windows only) |
Date: | 2014-10-28 07:02:41 |
Message-ID: | 20141028070241.2593.58180@wrigleys.postgresql.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-bugs pgsql-hackers |
The following bug has been logged on the website:
Bug reference: 11805
Logged by: Krystian Bigaj
Email address: krystian(dot)bigaj(at)gmail(dot)com
PostgreSQL version: 9.3.5
Operating system: Windows 7 Pro x64
Description:
pg_ctl on Windows during service start/shutdown should notify service
manager about it's status by increment dwCheckPoint and call to
SetServiceStatus/pgwin32_SetServiceStatus.
However during shutdown there is a missing call to SetServiceStatus.
See src\bin\pg_ctl\pg_ctl.c:
[code]
static void WINAPI
pgwin32_ServiceMain(DWORD argc, LPTSTR *argv)
{
...
/*
* Increment the checkpoint and try again Abort after 12
* checkpoints as the postmaster has probably hung
*/
while (WaitForSingleObject(postmasterProcess, 5000) ==
WAIT_TIMEOUT && status.dwCheckPoint < 12)
status.dwCheckPoint++; <------- missing SetServiceStatus
call
break;
case (WAIT_OBJECT_0 + 1): /* postmaster went down */
break;
[/code]
As you can see there is only a dwCheckPoint increment, but there is no call
to SetServiceStatus(hStatus, (LPSERVICE_STATUS) &status);
This problem was reported before here:
http://www.postgresql.org/message-id/CAN=kAeGOEmfh_+vdg+2oD=9KhWzGn4NNqfZNdHoQ_2QOsHhuLQ@mail.gmail.com
Another problem is with above condition "status.dwCheckPoint < 12" if
service (pg_ctl) is started with -w parameter (wait for startup).
In that case test_postmaster_connection(true) increments
status.dwCheckPoint,
so during shutdown that value can be larger than 0 (and even larger than 12,
because default wait time is 60s), so there could be only one 5000ms wait
for postmaster shutdown.
Patch to fix for this bugs could looks like this:
[code]
case WAIT_OBJECT_0: /* shutdown event */
/*
* Value status.dwCheckPoint can be incremented by
test_postmaster_connection(true)
* so dwCheckPoint might not start from 0.
*/
int maxShutdownCheckPoint = status.dwCheckPoint + 12;
kill(postmasterPID, SIGINT);
/*
* Increment the checkpoint and try again Abort after 12
* checkpoints as the postmaster has probably hung
*/
while (WaitForSingleObject(postmasterProcess, 5000) ==
WAIT_TIMEOUT && status.dwCheckPoint < maxShutdownCheckPoint)
{
status.dwCheckPoint++;
SetServiceStatus(hStatus, (LPSERVICE_STATUS) &status);
}
break;
[/code]
From: | Krystian Bigaj <krystian(dot)bigaj(at)gmail(dot)com> |
---|---|
To: | pgsql-bugs(at)postgresql(dot)org |
Subject: | Re: BUG #11805: Missing SetServiceStatus call during service shutdown in pg_ctl (Windows only) |
Date: | 2014-10-28 08:04:05 |
Message-ID: | CAN=kAeG05tOsAYJxLJBDGih9ixjUwUvnjaWKJLKcSJ7e+M5Ndw@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-bugs pgsql-hackers |
Patch for 9.3 in attachment (previous inline patch didn't compile)
Best regards,
Krystian Bigaj
On 28 October 2014 08:02, <krystian(dot)bigaj(at)gmail(dot)com> wrote:
> The following bug has been logged on the website:
>
> Bug reference: 11805
> Logged by: Krystian Bigaj
> Email address: krystian(dot)bigaj(at)gmail(dot)com
> PostgreSQL version: 9.3.5
> Operating system: Windows 7 Pro x64
> Description:
>
> pg_ctl on Windows during service start/shutdown should notify service
> manager about it's status by increment dwCheckPoint and call to
> SetServiceStatus/pgwin32_SetServiceStatus.
>
> However during shutdown there is a missing call to SetServiceStatus.
> See src\bin\pg_ctl\pg_ctl.c:
> [code]
> static void WINAPI
> pgwin32_ServiceMain(DWORD argc, LPTSTR *argv)
> {
> ...
> /*
> * Increment the checkpoint and try again Abort after 12
> * checkpoints as the postmaster has probably hung
> */
> while (WaitForSingleObject(postmasterProcess, 5000) ==
> WAIT_TIMEOUT && status.dwCheckPoint < 12)
> status.dwCheckPoint++; <------- missing SetServiceStatus
> call
> break;
>
> case (WAIT_OBJECT_0 + 1): /* postmaster went down */
> break;
> [/code]
>
> As you can see there is only a dwCheckPoint increment, but there is no call
> to SetServiceStatus(hStatus, (LPSERVICE_STATUS) &status);
> This problem was reported before here:
>
> http://www.postgresql.org/message-id/CAN=kAeGOEmfh_+vdg+2oD=9KhWzGn4NNqfZNdHoQ_2QOsHhuLQ@mail.gmail.com
>
> Another problem is with above condition "status.dwCheckPoint < 12" if
> service (pg_ctl) is started with -w parameter (wait for startup).
> In that case test_postmaster_connection(true) increments
> status.dwCheckPoint,
> so during shutdown that value can be larger than 0 (and even larger than
> 12,
> because default wait time is 60s), so there could be only one 5000ms wait
> for postmaster shutdown.
>
> Patch to fix for this bugs could looks like this:
> [code]
> case WAIT_OBJECT_0: /* shutdown event */
> /*
> * Value status.dwCheckPoint can be incremented by
> test_postmaster_connection(true)
> * so dwCheckPoint might not start from 0.
> */
> int maxShutdownCheckPoint = status.dwCheckPoint + 12;
>
> kill(postmasterPID, SIGINT);
>
> /*
> * Increment the checkpoint and try again Abort after 12
> * checkpoints as the postmaster has probably hung
> */
> while (WaitForSingleObject(postmasterProcess, 5000) ==
> WAIT_TIMEOUT && status.dwCheckPoint < maxShutdownCheckPoint)
> {
> status.dwCheckPoint++;
> SetServiceStatus(hStatus, (LPSERVICE_STATUS) &status);
> }
> break;
> [/code]
>
>
>
> --
> Sent via pgsql-bugs mailing list (pgsql-bugs(at)postgresql(dot)org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-bugs
>
Attachment | Content-Type | Size |
---|---|---|
pg_ctl_bug_11805.patch | application/octet-stream | 1.4 KB |
From: | Bruce Momjian <bruce(at)momjian(dot)us> |
---|---|
To: | krystian(dot)bigaj(at)gmail(dot)com |
Cc: | PostgreSQL-development <pgsql-hackers(at)postgreSQL(dot)org> |
Subject: | Re: [BUGS] BUG #11805: Missing SetServiceStatus call during service shutdown in pg_ctl (Windows only) |
Date: | 2015-03-20 12:48:29 |
Message-ID: | 20150320124829.GK6317@momjian.us |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-bugs pgsql-hackers |
On Tue, Oct 28, 2014 at 07:02:41AM +0000, krystian(dot)bigaj(at)gmail(dot)com wrote:
> The following bug has been logged on the website:
>
> Bug reference: 11805
> Logged by: Krystian Bigaj
> Email address: krystian(dot)bigaj(at)gmail(dot)com
> PostgreSQL version: 9.3.5
> Operating system: Windows 7 Pro x64
> Description:
>
> pg_ctl on Windows during service start/shutdown should notify service
> manager about it's status by increment dwCheckPoint and call to
> SetServiceStatus/pgwin32_SetServiceStatus.
>
> However during shutdown there is a missing call to SetServiceStatus.
> See src\bin\pg_ctl\pg_ctl.c:
[ thread moved to hackers ]
Can a Windows person look into this issue?
http://www.postgresql.org/message-id/20141028070241.2593.58180@wrigleys.postgresql.org
The thread includes a patch. I need a second person to verify its
validity. Thanks.
--
Bruce Momjian <bruce(at)momjian(dot)us> http://momjian.us
EnterpriseDB http://enterprisedb.com
+ Everyone has their own god. +
From: | Michael Paquier <michael(dot)paquier(at)gmail(dot)com> |
---|---|
To: | Bruce Momjian <bruce(at)momjian(dot)us> |
Cc: | krystian(dot)bigaj(at)gmail(dot)com, PostgreSQL-development <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Re: Re: [BUGS] BUG #11805: Missing SetServiceStatus call during service shutdown in pg_ctl (Windows only) |
Date: | 2015-03-21 13:00:42 |
Message-ID: | CAB7nPqTiZcEbvBYHrw_yuhp6VifT_Q=3wp3wYfdVLUKtxOJ-Sg@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-bugs pgsql-hackers |
On Fri, Mar 20, 2015 at 9:48 PM, Bruce Momjian <bruce(at)momjian(dot)us> wrote:
> On Tue, Oct 28, 2014 at 07:02:41AM +0000, krystian(dot)bigaj(at)gmail(dot)com wrote:
>> The following bug has been logged on the website:
>>
>> Bug reference: 11805
>> Logged by: Krystian Bigaj
>> Email address: krystian(dot)bigaj(at)gmail(dot)com
>> PostgreSQL version: 9.3.5
>> Operating system: Windows 7 Pro x64
>> Description:
>>
>> pg_ctl on Windows during service start/shutdown should notify service
>> manager about it's status by increment dwCheckPoint and call to
>> SetServiceStatus/pgwin32_SetServiceStatus.
>>
>> However during shutdown there is a missing call to SetServiceStatus.
>> See src\bin\pg_ctl\pg_ctl.c:
>
> [ thread moved to hackers ]
>
> Can a Windows person look into this issue?
>
> http://www.postgresql.org/message-id/20141028070241.2593.58180@wrigleys.postgresql.org
>
> The thread includes a patch. I need a second person to verify its
> validity. Thanks.
FWIW, it looks sane to me to do so, ServiceMain declaration is in
charge to start the service, and to wait for the postmaster to stop,
and indeed process may increment dwcheckpoint in -w mode, and it
expects for process to wait for 12 times but this promise is broken.
The extra calls to SetServiceStatus are also welcome to let the SCM
know the current status in more details.
A back-patch would be good as well...
Regards,
--
Michael
From: | Robert Haas <robertmhaas(at)gmail(dot)com> |
---|---|
To: | Michael Paquier <michael(dot)paquier(at)gmail(dot)com> |
Cc: | Bruce Momjian <bruce(at)momjian(dot)us>, krystian(dot)bigaj(at)gmail(dot)com, PostgreSQL-development <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Re: Re: [BUGS] BUG #11805: Missing SetServiceStatus call during service shutdown in pg_ctl (Windows only) |
Date: | 2015-04-30 12:53:19 |
Message-ID: | CA+TgmoYTXywGXFngXXVtma9dY_KoiV2mzDgskb6oN7kOCDnBfQ@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-bugs pgsql-hackers |
On Sat, Mar 21, 2015 at 9:00 AM, Michael Paquier
<michael(dot)paquier(at)gmail(dot)com> wrote:
> On Fri, Mar 20, 2015 at 9:48 PM, Bruce Momjian <bruce(at)momjian(dot)us> wrote:
>> On Tue, Oct 28, 2014 at 07:02:41AM +0000, krystian(dot)bigaj(at)gmail(dot)com wrote:
>>> The following bug has been logged on the website:
>>>
>>> Bug reference: 11805
>>> Logged by: Krystian Bigaj
>>> Email address: krystian(dot)bigaj(at)gmail(dot)com
>>> PostgreSQL version: 9.3.5
>>> Operating system: Windows 7 Pro x64
>>> Description:
>>>
>>> pg_ctl on Windows during service start/shutdown should notify service
>>> manager about it's status by increment dwCheckPoint and call to
>>> SetServiceStatus/pgwin32_SetServiceStatus.
>>>
>>> However during shutdown there is a missing call to SetServiceStatus.
>>> See src\bin\pg_ctl\pg_ctl.c:
>>
>> [ thread moved to hackers ]
>>
>> Can a Windows person look into this issue?
>>
>> http://www.postgresql.org/message-id/20141028070241.2593.58180@wrigleys.postgresql.org
>>
>> The thread includes a patch. I need a second person to verify its
>> validity. Thanks.
>
> FWIW, it looks sane to me to do so, ServiceMain declaration is in
> charge to start the service, and to wait for the postmaster to stop,
> and indeed process may increment dwcheckpoint in -w mode, and it
> expects for process to wait for 12 times but this promise is broken.
> The extra calls to SetServiceStatus are also welcome to let the SCM
> know the current status in more details.
So, what's next here?
--
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company
From: | Michael Paquier <michael(dot)paquier(at)gmail(dot)com> |
---|---|
To: | Robert Haas <robertmhaas(at)gmail(dot)com> |
Cc: | Bruce Momjian <bruce(at)momjian(dot)us>, krystian(dot)bigaj(at)gmail(dot)com, PostgreSQL-development <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Re: Re: [BUGS] BUG #11805: Missing SetServiceStatus call during service shutdown in pg_ctl (Windows only) |
Date: | 2015-04-30 13:08:39 |
Message-ID: | CAB7nPqQqBR+3c98N8b8zwjfaRC7qYcNbFCAEEdtx8kikgBKoVA@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-bugs pgsql-hackers |
On Thu, Apr 30, 2015 at 9:53 PM, Robert Haas <robertmhaas(at)gmail(dot)com> wrote:
> On Sat, Mar 21, 2015 at 9:00 AM, Michael Paquier
> <michael(dot)paquier(at)gmail(dot)com> wrote:
>> On Fri, Mar 20, 2015 at 9:48 PM, Bruce Momjian <bruce(at)momjian(dot)us> wrote:
>>> On Tue, Oct 28, 2014 at 07:02:41AM +0000, krystian(dot)bigaj(at)gmail(dot)com wrote:
>>>> The following bug has been logged on the website:
>>>>
>>>> Bug reference: 11805
>>>> Logged by: Krystian Bigaj
>>>> Email address: krystian(dot)bigaj(at)gmail(dot)com
>>>> PostgreSQL version: 9.3.5
>>>> Operating system: Windows 7 Pro x64
>>>> Description:
>>>>
>>>> pg_ctl on Windows during service start/shutdown should notify service
>>>> manager about it's status by increment dwCheckPoint and call to
>>>> SetServiceStatus/pgwin32_SetServiceStatus.
>>>>
>>>> However during shutdown there is a missing call to SetServiceStatus.
>>>> See src\bin\pg_ctl\pg_ctl.c:
>>>
>>> [ thread moved to hackers ]
>>>
>>> Can a Windows person look into this issue?
>>>
>>> http://www.postgresql.org/message-id/20141028070241.2593.58180@wrigleys.postgresql.org
>>>
>>> The thread includes a patch. I need a second person to verify its
>>> validity. Thanks.
>>
>> FWIW, it looks sane to me to do so, ServiceMain declaration is in
>> charge to start the service, and to wait for the postmaster to stop,
>> and indeed process may increment dwcheckpoint in -w mode, and it
>> expects for process to wait for 12 times but this promise is broken.
>> The extra calls to SetServiceStatus are also welcome to let the SCM
>> know the current status in more details.
>
> So, what's next here?
I guess that a committer opinion would be welcome. IMO the current
behavior is a bug.
--
Michael
From: | Magnus Hagander <magnus(at)hagander(dot)net> |
---|---|
To: | Michael Paquier <michael(dot)paquier(at)gmail(dot)com> |
Cc: | Robert Haas <robertmhaas(at)gmail(dot)com>, Bruce Momjian <bruce(at)momjian(dot)us>, krystian(dot)bigaj(at)gmail(dot)com, PostgreSQL-development <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Re: Re: [BUGS] BUG #11805: Missing SetServiceStatus call during service shutdown in pg_ctl (Windows only) |
Date: | 2015-05-07 13:19:52 |
Message-ID: | CABUevExYGmiO9F-0HydTU7BKv+rj4yjYad3pD7q-TpQan-YHCQ@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-bugs pgsql-hackers |
On Thu, Apr 30, 2015 at 3:08 PM, Michael Paquier <michael(dot)paquier(at)gmail(dot)com>
wrote:
> On Thu, Apr 30, 2015 at 9:53 PM, Robert Haas <robertmhaas(at)gmail(dot)com>
> wrote:
> > On Sat, Mar 21, 2015 at 9:00 AM, Michael Paquier
> > <michael(dot)paquier(at)gmail(dot)com> wrote:
> >> On Fri, Mar 20, 2015 at 9:48 PM, Bruce Momjian <bruce(at)momjian(dot)us>
> wrote:
> >>> On Tue, Oct 28, 2014 at 07:02:41AM +0000, krystian(dot)bigaj(at)gmail(dot)com
> wrote:
> >>>> The following bug has been logged on the website:
> >>>>
> >>>> Bug reference: 11805
> >>>> Logged by: Krystian Bigaj
> >>>> Email address: krystian(dot)bigaj(at)gmail(dot)com
> >>>> PostgreSQL version: 9.3.5
> >>>> Operating system: Windows 7 Pro x64
> >>>> Description:
> >>>>
> >>>> pg_ctl on Windows during service start/shutdown should notify service
> >>>> manager about it's status by increment dwCheckPoint and call to
> >>>> SetServiceStatus/pgwin32_SetServiceStatus.
> >>>>
> >>>> However during shutdown there is a missing call to SetServiceStatus.
> >>>> See src\bin\pg_ctl\pg_ctl.c:
> >>>
> >>> [ thread moved to hackers ]
> >>>
> >>> Can a Windows person look into this issue?
> >>>
> >>>
> http://www.postgresql.org/message-id/20141028070241.2593.58180@wrigleys.postgresql.org
> >>>
> >>> The thread includes a patch. I need a second person to verify its
> >>> validity. Thanks.
> >>
> >> FWIW, it looks sane to me to do so, ServiceMain declaration is in
> >> charge to start the service, and to wait for the postmaster to stop,
> >> and indeed process may increment dwcheckpoint in -w mode, and it
> >> expects for process to wait for 12 times but this promise is broken.
> >> The extra calls to SetServiceStatus are also welcome to let the SCM
> >> know the current status in more details.
> >
> > So, what's next here?
>
> I guess that a committer opinion would be welcome. IMO the current
> behavior is a bug.
>
Agreed, it pretty clearly is.
I've applied this patch (with a minor stylistic change), and backpatched.
--
Magnus Hagander
Me: http://www.hagander.net/
Work: http://www.redpill-linpro.com/