Thread

  1. XMin Hot Standby Feedback patch

    Daniel Farina <daniel@heroku.com> — 2011-02-12T22:11:21Z

    This is another bit of the syncrep patch split out.
    
    I will revisit the replication timeout one Real Soon, I promise -- but
    I have a couple things to do today that may delay that until the
    evening.
    
    https://github.com/fdr/postgres/commit/ad3ce9ac62f0e128d7d1fd20d47184f867056af1
    
    Context diff supplied here.
    
    Note that this information is not exposed via catalog in the original
    syncrep patch, and is not here. Do we want that kind of reporting?
    
    -- 
    fdr
    
  2. Re: XMin Hot Standby Feedback patch

    Simon Riggs <simon@2ndquadrant.com> — 2011-02-15T16:42:42Z

    On Sat, 2011-02-12 at 14:11 -0800, Daniel Farina wrote:
    > This is another bit of the syncrep patch split out.
    > 
    > I will revisit the replication timeout one Real Soon, I promise -- but
    > I have a couple things to do today that may delay that until the
    > evening.
    > 
    > https://github.com/fdr/postgres/commit/ad3ce9ac62f0e128d7d1fd20d47184f867056af1
    > 
    > Context diff supplied here.
    
    Greg just tipped me off to this thread a few hours ago. I saw your other
    work on timeouts which looks good.
    
    I've reworked this feature myself, and its roughly the same thing you
    have posted, so I will just add on to this thread. The major change from
    my earlier patch is that the logic around setting xmin on the master is
    considerably tighter, and correctly uses locking.
    
    Patch attached, no docs yet, but the patch is clear.
    
    I'm looking to commit this in next 24 hours barring objections and/or
    test failures.
    
    > Note that this information is not exposed via catalog in the original
    > syncrep patch, and is not here. Do we want that kind of reporting?
    
    Probably, but its a small change and will conflict with other work for
    now.
    
    -- 
     Simon Riggs           http://www.2ndQuadrant.com/books/
     PostgreSQL Development, 24x7 Support, Training and Services
     
    
  3. Re: XMin Hot Standby Feedback patch

    Heikki Linnakangas <heikki.linnakangas@enterprisedb.com> — 2011-02-15T16:49:48Z

    On 15.02.2011 18:42, Simon Riggs wrote:
    > On Sat, 2011-02-12 at 14:11 -0800, Daniel Farina wrote:
    >> This is another bit of the syncrep patch split out.
    >>
    >> I will revisit the replication timeout one Real Soon, I promise -- but
    >> I have a couple things to do today that may delay that until the
    >> evening.
    >>
    >> https://github.com/fdr/postgres/commit/ad3ce9ac62f0e128d7d1fd20d47184f867056af1
    >>
    >> Context diff supplied here.
    >
    > Greg just tipped me off to this thread a few hours ago. I saw your other
    > work on timeouts which looks good.
    >
    > I've reworked this feature myself, and its roughly the same thing you
    > have posted, so I will just add on to this thread. The major change from
    > my earlier patch is that the logic around setting xmin on the master is
    > considerably tighter, and correctly uses locking.
    
    It would be wise to also transmit the epoch in addition to xmin, to 
    avoid confusion if the standby is > 2 billion transactions behind.
    
    -- 
       Heikki Linnakangas
       EnterpriseDB   http://www.enterprisedb.com
    
    
  4. Re: XMin Hot Standby Feedback patch

    Robert Haas <robertmhaas@gmail.com> — 2011-02-15T16:52:18Z

    On Tue, Feb 15, 2011 at 11:49 AM, Heikki Linnakangas
    <heikki.linnakangas@enterprisedb.com> wrote:
    > On 15.02.2011 18:42, Simon Riggs wrote:
    >>
    >> On Sat, 2011-02-12 at 14:11 -0800, Daniel Farina wrote:
    >>>
    >>> This is another bit of the syncrep patch split out.
    >>>
    >>> I will revisit the replication timeout one Real Soon, I promise -- but
    >>> I have a couple things to do today that may delay that until the
    >>> evening.
    >>>
    >>>
    >>> https://github.com/fdr/postgres/commit/ad3ce9ac62f0e128d7d1fd20d47184f867056af1
    >>>
    >>> Context diff supplied here.
    >>
    >> Greg just tipped me off to this thread a few hours ago. I saw your other
    >> work on timeouts which looks good.
    >>
    >> I've reworked this feature myself, and its roughly the same thing you
    >> have posted, so I will just add on to this thread. The major change from
    >> my earlier patch is that the logic around setting xmin on the master is
    >> considerably tighter, and correctly uses locking.
    >
    > It would be wise to also transmit the epoch in addition to xmin, to avoid
    > confusion if the standby is > 2 billion transactions behind.
    
    That case is probably hopelessly broken anyway.
    
    -- 
    Robert Haas
    EnterpriseDB: http://www.enterprisedb.com
    The Enterprise PostgreSQL Company
    
    
  5. Re: XMin Hot Standby Feedback patch

    Heikki Linnakangas <heikki.linnakangas@enterprisedb.com> — 2011-02-15T16:54:22Z

    On 15.02.2011 18:52, Robert Haas wrote:
    > On Tue, Feb 15, 2011 at 11:49 AM, Heikki Linnakangas
    > <heikki.linnakangas@enterprisedb.com>  wrote:
    >> It would be wise to also transmit the epoch in addition to xmin, to avoid
    >> confusion if the standby is>  2 billion transactions behind.
    >
    > That case is probably hopelessly broken anyway.
    
    I don't expect the feedback to do anything too useful in case of xid 
    wraparound, but at least the master would recognize the situation and 
    know to ignore the bogus xmin from that standby.
    
    -- 
       Heikki Linnakangas
       EnterpriseDB   http://www.enterprisedb.com
    
    
  6. Re: XMin Hot Standby Feedback patch

    Simon Riggs <simon@2ndquadrant.com> — 2011-02-15T16:59:35Z

    On Tue, 2011-02-15 at 18:49 +0200, Heikki Linnakangas wrote:
    
    > It would be wise to also transmit the epoch in addition to xmin, to 
    > avoid confusion if the standby is > 2 billion transactions behind.
    
    Yes, good idea, thanks.
    
    That has to be the record for the fastest patch review. ;-)
    
    -- 
     Simon Riggs           http://www.2ndQuadrant.com/books/
     PostgreSQL Development, 24x7 Support, Training and Services
     
    
    
    
  7. Re: XMin Hot Standby Feedback patch

    Robert Haas <robertmhaas@gmail.com> — 2011-02-15T17:15:44Z

    On Tue, Feb 15, 2011 at 11:42 AM, Simon Riggs <simon@2ndquadrant.com> wrote:
    > Patch attached, no docs yet, but the patch is clear.
    >
    > I'm looking to commit this in next 24 hours barring objections and/or
    > test failures.
    
    Looks pretty good to me, though I haven't tested it.  I like some of
    the safety valves you put in there, but I don't understand this part:
    
    +                       /*
    +                        * Feedback from standby should move us
    forwards, but not too far.
    +                        * Avoid grabbing XidGenLock here in case of
    waits, so use
    +                        * a heuristic instead.
    +                        */
    
    What's XIDGenLock got to do with it?
    
    On another disk, I think that those warning messages are a bad idea.
    That could fill up someone's disk really quickly.
    
    -- 
    Robert Haas
    EnterpriseDB: http://www.enterprisedb.com
    The Enterprise PostgreSQL Company
    
    
  8. Re: XMin Hot Standby Feedback patch

    Robert Haas <robertmhaas@gmail.com> — 2011-02-15T17:20:16Z

    On Tue, Feb 15, 2011 at 12:15 PM, Robert Haas <robertmhaas@gmail.com> wrote:
    > On another disk, I think that those warning messages are a bad idea.
    > That could fill up someone's disk really quickly.
    
    On another disk?  What the heck am I talking about?
    
    On another point?  On another note?  Anyway, you get the idea... hopefully.
    
    -- 
    Robert Haas
    EnterpriseDB: http://www.enterprisedb.com
    The Enterprise PostgreSQL Company
    
    
  9. Re: XMin Hot Standby Feedback patch

    Simon Riggs <simon@2ndquadrant.com> — 2011-02-15T17:52:14Z

    On Tue, 2011-02-15 at 12:20 -0500, Robert Haas wrote:
    > On Tue, Feb 15, 2011 at 12:15 PM, Robert Haas <robertmhaas@gmail.com> wrote:
    > > On another disk, I think that those warning messages are a bad idea.
    > > That could fill up someone's disk really quickly.
    > 
    > On another disk?  What the heck am I talking about?
    > 
    > On another point?  On another note?  Anyway, you get the idea... hopefully.
    
    Yeh. I quite liked it as a metaphorical turn of phrase.
    
    -- 
     Simon Riggs           http://www.2ndQuadrant.com/books/
     PostgreSQL Development, 24x7 Support, Training and Services
     
    
    
    
  10. Re: XMin Hot Standby Feedback patch

    Simon Riggs <simon@2ndquadrant.com> — 2011-02-15T21:15:18Z

    On Tue, 2011-02-15 at 12:15 -0500, Robert Haas wrote:
    > Looks pretty good to me, though I haven't tested it.  I like some of
    > the safety valves you put in there, but I don't understand this part
    
    Reworked logic covering all feedback, plus tests, plus docs.
    
    Last comments before commit please.
    
    -- 
     Simon Riggs           http://www.2ndQuadrant.com/books/
     PostgreSQL Development, 24x7 Support, Training and Services
     
    
  11. Re: XMin Hot Standby Feedback patch

    Robert Haas <robertmhaas@gmail.com> — 2011-02-15T22:46:09Z

    On Tue, Feb 15, 2011 at 4:15 PM, Simon Riggs <simon@2ndquadrant.com> wrote:
    > On Tue, 2011-02-15 at 12:15 -0500, Robert Haas wrote:
    >> Looks pretty good to me, though I haven't tested it.  I like some of
    >> the safety valves you put in there, but I don't understand this part
    >
    > Reworked logic covering all feedback, plus tests, plus docs.
    >
    > Last comments before commit please.
    
    What happens if someone has hot_standby_feedback on and then turns it
    off?  I think in XLogWalRcvSendReply() you need
    
    if (hot_standby_feedback)
    {
     stuff
    }
    else
    {
        reply_message.xmin = InvaidXID;
        reply_message.epoch = 0;  /* or something */
    }
    
    Also this part looks kludgy to me:
    
    +		GetNextXidAndEpoch(&nextXid, &nextEpoch);
    +		if (nextXid < reply_message.xmin)
    +			nextEpoch--;
    
    How about introducing a GetOldestXminAndEpoch function instead?
    
    Would it make sense to avoid grabbing the ProcArrayLock except when we
    truly need to update MyProc->xmin?  ProcessStandbyReplyMessage gets
    called a lot...
    
    -- 
    Robert Haas
    EnterpriseDB: http://www.enterprisedb.com
    The Enterprise PostgreSQL Company
    
    
  12. Re: XMin Hot Standby Feedback patch

    Fujii Masao <masao.fujii@gmail.com> — 2011-02-16T02:25:30Z

    On Wed, Feb 16, 2011 at 6:15 AM, Simon Riggs <simon@2ndquadrant.com> wrote:
    > On Tue, 2011-02-15 at 12:15 -0500, Robert Haas wrote:
    >> Looks pretty good to me, though I haven't tested it.  I like some of
    >> the safety valves you put in there, but I don't understand this part
    >
    > Reworked logic covering all feedback, plus tests, plus docs.
    >
    > Last comments before commit please.
    
    When I started the standby with hot_standby = off and hot_standby_feedback = on,
    I got the following assertion error.
    
    -----------------
    sby LOG:  streaming replication successfully connected to primary
    TRAP: FailedAssertion("!(((result) >= ((TransactionId) 3)))", File:
    "procarray.c", Line: 1027)
    act LOG:  unexpected EOF on standby connection
    sby LOG:  WAL receiver process (PID 17572) was terminated by signal 6: Aborted
    sby LOG:  terminating any other active server processes
    -----------------
    
    vacuum_defer_cleanup_age on the *standby* should not affect the
    feedback xid.
    
    VACUUM TABLE on the *primary* doesn't use the feedback xid at all.
    Is this intentional?
    
    Regards,
    
    -- 
    Fujii Masao
    NIPPON TELEGRAPH AND TELEPHONE CORPORATION
    NTT Open Source Software Center
    
    
  13. Re: XMin Hot Standby Feedback patch

    Simon Riggs <simon@2ndquadrant.com> — 2011-02-16T07:27:59Z

    On Wed, 2011-02-16 at 11:25 +0900, Fujii Masao wrote:
    > On Wed, Feb 16, 2011 at 6:15 AM, Simon Riggs <simon@2ndquadrant.com> wrote:
    > > On Tue, 2011-02-15 at 12:15 -0500, Robert Haas wrote:
    > >> Looks pretty good to me, though I haven't tested it.  I like some of
    > >> the safety valves you put in there, but I don't understand this part
    > >
    > > Reworked logic covering all feedback, plus tests, plus docs.
    > >
    > > Last comments before commit please.
    > 
    > When I started the standby with hot_standby = off and hot_standby_feedback = on,
    > I got the following assertion error.
    > 
    > -----------------
    > sby LOG:  streaming replication successfully connected to primary
    > TRAP: FailedAssertion("!(((result) >= ((TransactionId) 3)))", File:
    > "procarray.c", Line: 1027)
    > act LOG:  unexpected EOF on standby connection
    > sby LOG:  WAL receiver process (PID 17572) was terminated by signal 6: Aborted
    > sby LOG:  terminating any other active server processes
    > -----------------
    
    Thanks
    
    > vacuum_defer_cleanup_age on the *standby* should not affect the
    > feedback xid.
    
    Not sure, will think some more.
    
    > VACUUM TABLE on the *primary* doesn't use the feedback xid at all.
    > Is this intentional?
    
    Yes, I was in the middle of fixing that.
    
    -- 
     Simon Riggs           http://www.2ndQuadrant.com/books/
     PostgreSQL Development, 24x7 Support, Training and Services