Re: Sync Rep: First Thoughts on Code

From: Simon Riggs <simon(at)2ndQuadrant(dot)com>
To: Heikki Linnakangas <heikki(dot)linnakangas(at)enterprisedb(dot)com>
Cc: Fujii Masao <masao(dot)fujii(at)gmail(dot)com>, PostgreSQL-development <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: Sync Rep: First Thoughts on Code
Date: 2008-12-10 19:55:15
Message-ID: 1228938915.20796.909.camel@hp_dx2400_1
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers


On Wed, 2008-12-10 at 20:52 +0200, Heikki Linnakangas wrote:
> Simon Riggs wrote:
> > On Wed, 2008-12-10 at 14:39 +0200, Heikki Linnakangas wrote:
> >
> >> For a solution that doesn't depend on the file-based log shipping, I
> >> think we'll need a way for the standby to request a certain starting
> >> point for the streaming when it connects. When the standby starts, it
> >> would first recover all the log segments it can obtain using
> >> recovery_command, and then connect to the primary and request to
> >> start
> >> streaming from where recovery_command stopped.
> >
> > That was already suggested and rejected because it introduces a
> > potentially unacceptable delay in the start of synch replication - for
> > large databases this could be hours. (I should add it was suggested by
> > me and I now accept that it should be rejected.)
>
> I don't understand that argument. If the standby is missing say 100 log
> files, it's not up-to-date with the primary until it has somehow
> obtained and replayed all those log file. It doesn't make any difference
> whether it obtains them over the wire via walreceiver, or via an
> archive. Until it has obtained and replayed all those files, it's not
> up-to-date, and a failover would lead to data loss.
>
> Or did I misunderstand what "start of synch replication" means? Got a
> pointer to the previous discussion?

I think you just went down the same path I did before. (That's a good
sign).

When the WAL starts streaming the *primary* can immediately perform
synchronous replication, i.e. commit waits for transfer. The *standby*
has an initial lag before it catches up, whatever we do (as you say).

I suggested that way initially because it simplifies the mode change.
The mode change isn't really that complex, so I agreed we should change
it.

The two ways of doing this are/were:

1. (Initial suggestion)
* allow standby to catchup
* then connect and allow sync rep

2. Preferred Choice
* connect to primary and allow sync rep
* catch up

--
Simon Riggs www.2ndQuadrant.com
PostgreSQL Training, Services and Support

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Simon Riggs 2008-12-10 20:04:17 Re: Sync Rep: First Thoughts on Code
Previous Message Jeff Davis 2008-12-10 19:52:16 Re: Sync Rep: First Thoughts on Code