On Mon, Aug 11, 2014 at 1:26 PM, Fujii Masao <masao.fu...@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