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

Reply via email to