Re: Support for N synchronous standby servers - Mailing list pgsql-hackers

From Michael Paquier
Subject Re: Support for N synchronous standby servers
Date
Msg-id CAB7nPqR10j_2c3w+=XJmAokkkLSzMCsvgb2Kkx4XwVUgPmDDog@mail.gmail.com
Whole thread Raw
In response to Re: Support for N synchronous standby servers  (Fujii Masao <masao.fujii@gmail.com>)
Responses Re: Support for N synchronous standby servers
List pgsql-hackers


On Mon, Aug 11, 2014 at 1:26 PM, Fujii Masao <masao.fujii@gmail.com> wrote:
> Thanks for updating the patch! Again I tested the feature and found something
> wrong. I set synchronous_standby_num to 2 and started three standbys. Two of
> them are included in synchronous_standby_names, i.e., they are synchronous
> standbys. That is, the other one standby is always asynchronous. When
> I shutdown one of synchronous standbys and executed the write transaction,
> the transaction was successfully completed. So the transaction doesn't wait for
> two sync standbys in that case. Probably this is a bug.
Well, that's working in my case :)
Please see below with 4 nodes: 1 master and 3 standbys on same host. Master listens to 5432, other nodes to 5433, 5434 and 5435. Each standby's application_name is node_$PORT
=# show synchronous_standby_names ;
 synchronous_standby_names
---------------------------
 node_5433,node_5434
(1 row)
=# show synchronous_standby_num ;
 synchronous_standby_num
-------------------------
 2
(1 row)
=# SELECT application_name,
    pg_xlog_location_diff(sent_location, flush_location) AS replay_delta,
    sync_priority,
    sync_state
FROM pg_stat_replication ORDER BY replay_delta ASC, application_name;
 application_name | replay_delta | sync_priority | sync_state
------------------+--------------+---------------+------------
 node_5433        |            0 |             1 | sync
 node_5434        |            0 |             2 | sync
 node_5435        |            0 |             0 | async
(3 rows)
=# create table aa (a int);
CREATE TABLE
[...]
-- Stopped node with port 5433:
[...]
=# SELECT application_name,
    pg_xlog_location_diff(sent_location, flush_location) AS replay_delta,
    sync_priority,
    sync_state
FROM pg_stat_replication ORDER BY replay_delta ASC, application_name;
 application_name | replay_delta | sync_priority | sync_state
------------------+--------------+---------------+------------
 node_5434        |            0 |             2 | sync
 node_5435        |            0 |             0 | async
(2 rows)
=# create table ab (a int);
^CCancel request sent
WARNING:  01000: canceling wait for synchronous replication due to user request
DETAIL:  The transaction has already committed locally, but might not have been replicated to the standby(s).
LOCATION:  SyncRepWaitForLSN, syncrep.c:227
CREATE TABLE

Regards,
--
Michael

pgsql-hackers by date:

Previous
From: Amit Kapila
Date:
Subject: Re: TODO : Allow parallel cores to be used by vacuumdb [ WIP ]
Next
From: Andres Freund
Date:
Subject: Re: Function to know last log write timestamp