Hello, While testing replication for 9.5, we found that repl-master can ignore wal_sender_timeout and seemingly waits for TCP retransmission timeout for the case of sudden power-off of a standby.
My investigation told me that the immediate cause could be that secure_write() is called with *blocking mode* (that is, port->noblock = false) under *pq_putmessage_noblock* macro called from XLogSendPhysical(). libpq.h of 9.5 and newer defines it as the following, > #define pq_putmessage(msgtype, s, len) \ > (PqCommMethods->putmessage(msgtype, s, len)) > #define pq_putmessage_noblock(msgtype, s, len) \ > (PqCommMethods->putmessage(msgtype, s, len)) which is apparently should be the following. > #define pq_putmessage_noblock(msgtype, s, len) \ > (PqCommMethods->putmessage_noblock(msgtype, s, len)) The attached patch fixes it. regards, -- Kyotaro Horiguchi NTT Open Source Software Center
>From b15db80734215b7e3b4bbae849cf89ffd990e8be Mon Sep 17 00:00:00 2001 From: Kyotaro Horiguchi <horiguchi.kyot...@lab.ntt.co.jp> Date: Thu, 28 Jul 2016 18:28:57 +0900 Subject: [PATCH] Fix the defeinition of pq_putmessage_noblock macro. pq_putmessage_noblock marcro is mistakenly defined as the same with pg_putmessage. Fix it. --- src/include/libpq/libpq.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/include/libpq/libpq.h b/src/include/libpq/libpq.h index 547d3b8..18052cb 100644 --- a/src/include/libpq/libpq.h +++ b/src/include/libpq/libpq.h @@ -43,7 +43,7 @@ extern PGDLLIMPORT PQcommMethods *PqCommMethods; #define pq_putmessage(msgtype, s, len) \ (PqCommMethods->putmessage(msgtype, s, len)) #define pq_putmessage_noblock(msgtype, s, len) \ - (PqCommMethods->putmessage(msgtype, s, len)) + (PqCommMethods->putmessage_noblock(msgtype, s, len)) #define pq_startcopyout() (PqCommMethods->startcopyout()) #define pq_endcopyout(errorAbort) (PqCommMethods->endcopyout(errorAbort)) -- 1.8.3.1
-- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers