On Wed, Jun 10, 2015 at 8:07 AM, Andres Freund <and...@anarazel.de> wrote:

> On 2015-06-10 08:00:28 -0700, Gurjeet Singh wrote:
>
> > pg_create_logical_replication_slot() prevents LSN from being
> > recycled that by looping (worst case 2 times) until there's no
> > conflict with the checkpointer recycling the segment. So I have used
> > the same approach.
>
> There's no need to change anything for logical slots? Or do you just
> mean that you moved the existing code?
>

Yes, I turned the code from logical replication into a function and used it
from logical and physical replication.


> >
> >  /*
> > + * Grab and save an LSN value to prevent WAL recycling past that point.
> > + */
> > +void
> > +ReplicationSlotRegisterRestartLSN()
> > +{

...

> > +             /*
> > +              * Let's start with enough information if we can, so log a
> standby
> > +              * snapshot and start decoding at exactly that position.
> > +              */
> > +             if (!RecoveryInProgress())
> > +             {
> > +                     XLogRecPtr      flushptr;
> > +
> > +                     /* start at current insert position */
> > +                     slot->data.restart_lsn = GetXLogInsertRecPtr();
> > +
> > +                     /* make sure we have enough information to start */
> > +                     flushptr = LogStandbySnapshot();
> > +
> > +                     /* and make sure it's fsynced to disk */
> > +                     XLogFlush(flushptr);
> > +             }
> > +             else
> > +                     slot->data.restart_lsn = GetRedoRecPtr();
> > +
>


> That doesn't look right to me. Why is this code logging a standby
> snapshot for physical slots?
>

This is the new function I referred to above. The logging of the snapshot
is in 'not RecoveryInProgress()' case, meaning it's running in primary and
not in a standby.

Best regards,
-- 
Gurjeet Singh http://gurjeet.singh.im/

Reply via email to