On 03/07/2011 09:02 AM, Heikki Linnakangas wrote:
On 07.03.2011 15:30, Andrew Dunstan wrote:
Previously, Simon said:

Truly "synchronous" requires two-phase commit, which this never was.

So I too am confused about how it's now become "truly synchronous". Are
we saying this give the same or better guarantees than a 2PC setup?

The guarantee we have now with synchronous_replication=on is that when the server acknowledges a commit to the client (ie. when COMMIT command returns), the transaction is safely flushed to disk on the master and at least one synchronous standby server.

What you don't get is a guarantee on what happens to transactions that were not acknowledged to the client. For example, if you pull the power plug, the transaction that was just being committed might be committed on the master, but not yet on the standby.

For me, that's enough to call it "synchronous replication". It provides a useful guarantee to the client. But you could argue for an even stricter definition, requiring atomicity so that if a transaction is not successfully replicated for any reason, including crash, it is rolled back in the master too. That would require 2PC.


My worry is that the stricter definition is what many people will expect, without reading the fine print.

cheers

andrew

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to