From: | Simon Riggs <simon(at)2ndQuadrant(dot)com> |
---|---|
To: | Hiroyuki Yamada <yamada(at)kokolink(dot)net> |
Cc: | pgsql-hackers(at)postgresql(dot)org |
Subject: | Re: An example of bugs for Hot Standby |
Date: | 2010-01-19 10:46:24 |
Message-ID: | 1263897984.31061.118.camel@ebony |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
On Tue, 2009-12-15 at 20:11 +0900, Hiroyuki Yamada wrote:
> Hot Standby node can freeze when startup process calls LockBufferForCleanup().
> This bug can be reproduced by the following procedure.
>
> 0. start Hot Standby, with one active node(node A) and one standby node(node B)
> 1. create table X and table Y in node A
> 2. insert several rows in table X in node A
> 3. delete one row from table X in node A
> 4. begin xact 1 in node A, execute following commands, and leave xact 1 open
> 4.1 LOCK table Y IN ACCESS EXCLUSIVE MODE
> 5. wait until WAL's for above actions are applied in node B
> 6. begin xact 2 in node B, and execute following commands
> 6.1 DECLARE CURSOR test_cursor FOR SELECT * FROM table X;
> 6.2 FETCH test_cursor;
> 6.3 SELECT * FROM table Y;
> 7. execute VACUUM FREEZE table A in node A
> 8. commit xact 1 in node A
>
> ...then in node B occurs following "deadlock" situation, which is not detected by deadlock check.
> * startup process waits for xact 2 to release buffers in table X (in LockBufferForCleanup())
> * xact 2 waits for startup process to release ACCESS EXCLUSIVE lock in table Y
Deadlock bug was prevented by stop-gap measure in December commit.
Full resolution patch attached for Startup process waits on buffer pins.
Startup process sets SIGALRM when waiting on a buffer pin. If woken by
alarm we send SIGUSR1 to all backends requesting that they check to see
if they are blocking Startup process. If so, they throw ERROR/FATAL as
for other conflict resolutions. Deadlock stop gap removed.
max_standby_delay = -1 option removed to prevent deadlock.
Reviews welcome, otherwise commit at end of week.
--
Simon Riggs www.2ndQuadrant.com
Attachment | Content-Type | Size |
---|---|---|
startup_sigalrm.patch | text/x-patch | 30.0 KB |
From | Date | Subject | |
---|---|---|---|
Next Message | Arnaud Betremieux | 2010-01-19 10:54:08 | Re: Listen / Notify - what to do when the queue is full |
Previous Message | Joachim Wieland | 2010-01-19 09:58:33 | Re: Listen / Notify - what to do when the queue is full |