Re: Server crash in pg_replication_slot_advance function - Mailing list pgsql-hackers

From amul sul
Subject Re: Server crash in pg_replication_slot_advance function
Date
Msg-id CAAJ_b9721pXZST4tGs+NPbjRxXF7gmrEomVhTW_Pa2QFD7Lr1A@mail.gmail.com
Whole thread Raw
In response to Re: Server crash in pg_replication_slot_advance function  (amul sul <sulamul@gmail.com>)
Responses Re: Server crash in pg_replication_slot_advance function
Re: Server crash in pg_replication_slot_advance function
Re: Server crash in pg_replication_slot_advance function
List pgsql-hackers
On Fri, Feb 16, 2018 at 3:06 PM, amul sul <sulamul@gmail.com> wrote:
> On Fri, Feb 16, 2018 at 1:44 PM, tushar <tushar.ahuja@enterprisedb.com> wrote:
>> Hi,
> [....]
>> postgres=# SELECT end_lsn FROM
>> pg_replication_slot_advance('regression_slot1', '0/2000071');
>> server closed the connection unexpectedly
>> This probably means the server terminated abnormally
>>  before or while processing the request.
>> !>
>>
>
> I am able to reproduce this on the latest master head, the problem is in the
> following hunk of pg_replication_slot_advance() where oldest LSN value
> is accessed after releasing replication slot:
>
>
> 476     if (moveto < startlsn)
> 477     {
> 478         ReplicationSlotRelease();
> 479         ereport(ERROR,
> 480                 (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
> 481                  errmsg("cannot move slot to %X/%X, minimum is %X/%X",
> 482                         (uint32) (moveto >> 32), (uint32) moveto,
> 483                         (uint32)
> (MyReplicationSlot->data.confirmed_flush >> 32),
> 484                         (uint32)
> (MyReplicationSlot->data.confirmed_flush))));
> 485     }
> 486
>

 Attached patch proposes a required fix.


Regards,
Amul

Attachment

pgsql-hackers by date:

Previous
From: tushar
Date:
Subject: After an error - pg_replication_slot is dropped
Next
From: tushar
Date:
Subject: Re: Server crash in pg_replication_slot_advance function