Using exit_request was wrong and caused a bug. 4th patch needed - health_check_timer_expired is global now so it can be verified if it was set to 1 outside of main.c<br><br>Kind regards,<br>Stevo.<br><br><div class="gmail_quote">
2012/1/19 Stevo Slaviĉ <span dir="ltr">&lt;<a href="mailto:sslavic@gmail.com">sslavic@gmail.com</a>&gt;</span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Using exit_code was not wise. Tested and encountered a case where this results in a bug. Have to work on it more. Main issue is how in pool_connection_pool.c connect_inet_domain_socket_by_port function to know that health check timer has expired (set to 1). Any ideas?<br>

<br>Kind regards,<br>Stevo.<div class="HOEnZb"><div class="h5"><br><br><div class="gmail_quote">2012/1/19 Stevo Slaviĉ <span dir="ltr">&lt;<a href="mailto:sslavic@gmail.com" target="_blank">sslavic@gmail.com</a>&gt;</span><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Tatsuo,<br><br>Here are the patches which should be applied to current pgpool head for fixing this issue:<br><br>Fixes-health-check-timeout.patch<br>Fixes-health-check-retrying-after-failover.patch<br>Fixes-clearing-exitrequest-flag.patch<br>


<br>Quirk I noticed in logs was resolved as well - after failover pgpool would perform healthcheck and report it is doing (max retries + 1) th health check which was confusing. Rather I&#39;ve adjusted that it does and reports it&#39;s doing a new health check cycle after failover.<br>


<br>I&#39;ve tested and it works well - when in raw mode, backends set to disallow failover, failover on backend failure disabled, and health checks configured with retries (30sec interval, 5sec timeout, 2 retries, 10sec delay between retries).<br>


<br>Please test, and if confirmed ok include in next release.<br><br>Kind regards,<div><div><br>Stevo.<br><br><br><div class="gmail_quote">2012/1/16 Stevo Slaviĉ <span dir="ltr">&lt;<a href="mailto:sslavic@gmail.com" target="_blank">sslavic@gmail.com</a>&gt;</span><br>


<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Here is pgpool.log, strace.out, and pgpool.conf when I tested with my latest patch for health check timeout applied. It works well, except for single quirk, after failover completed in log files it was reported that 3rd health check retry was done (even though just 2 are configured, see pgpool.conf) and that backend has returned to healthy state. That interesting part from log file follows:<br>



<br>Jan 16 01:31:45 sslavic pgpool[1163]: 2012-01-16 01:31:45 DEBUG: pid 1163: retrying 3 th health checking<br>Jan 16 01:31:45 sslavic pgpool[1163]: 2012-01-16 01:31:45 DEBUG: pid 1163: health_check: 0 th DB node status: 3<br>



Jan 16 01:31:45 sslavic pgpool[1163]: 2012-01-16 01:31:45 LOG:   pid 1163: after some retrying backend returned to healthy state<br>Jan 16 01:32:15 sslavic pgpool[1163]: 2012-01-16 01:32:15 DEBUG: pid 1163: starting health checking<br>



Jan 16 01:32:15 sslavic pgpool[1163]: 2012-01-16 01:32:15 DEBUG: pid 1163: health_check: 0 th DB node status: 3<br><br><br>As can be seen in pgpool.conf, there is only one backend configured. pgpool did failover well after health check max retries has been reached  (pgpool just degraded that single backend to 3, and restarted child processes).<br>



<br>After this quirk has been logged, next health check logs were as expected. Except those couple weird log entries, everything seems to be ok. Maybe that quirk was caused by single backend only configuration corner case. Will try tomorrow if it occurs on dual backend configuration.<br>



<br>Regards,<br>Stevo.<div><div><br><br><div class="gmail_quote">2012/1/16 Stevo Slaviĉ <span dir="ltr">&lt;<a href="mailto:sslavic@gmail.com" target="_blank">sslavic@gmail.com</a>&gt;</span><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hello Tatsuo,<br><br>Unfortunately, with your patch when A is on (pool_config-&gt;health_check_period &gt; 0) and B is on, when retry count is over, failover will be disallowed because of B being on.<br><br>Nenad&#39;s patch allows failover to be triggered only by health check. Here is the patch which includes Nenad&#39;s fix but also fixes issue with health check timeout not being respected.<br>




<br>Key points in fix for health check timeout being respected are:<br>- in pool_connection_pool.c connect_inet_domain_socket_by_port function, before trying to connect, file descriptor is set to non-blocking mode, and also non-blocking mode error codes are handled, EINPROGRESS and EALREADY (please verify changes here, especially regarding closing fd)<br>




- in main.c health_check_timer_handler has been changed to signal exit_request to health check initiated connect_inet_domain_socket_by_port function call (please verify this, maybe there is a better way to check from connect_inet_domain_socket_by_port if in health_check_timer_expired has been set to 1)<br>




<br>These changes will practically make connect attempt to be non-blocking and repeated until:<br>- connection is made, or<br>- unhandled connection error condition is reached, or<br>- health check timer alarm has been raised, or<br>




- some other exit request (shutdown) has been issued.<div><div><br><br>Kind regards,<br>Stevo.<br><br><div class="gmail_quote">2012/1/15 Tatsuo Ishii <span dir="ltr">&lt;<a href="mailto:ishii@postgresql.org" target="_blank">ishii@postgresql.org</a>&gt;</span><br>




<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Ok, let me clarify use cases regarding failover.<br>
<br>
Currently there are three parameters:<br>
a) health_check<br>
b) DISALLOW_TO_FAILOVER<br>
c) fail_over_on_backend_error<br>
<br>
Source of errors which can trigger failover are 1)health check 2)write<br>
to backend socket 3)read backend from socket. I represent each 1) as<br>
A, 2) as B, 3) as C.<br>
<br>
1) trigger failover if A or B or C is error<br>
a = on, b = off, c = on<br>
<br>
2) trigger failover only when B or C is error<br>
a = off, b = off, c = on<br>
<br>
3) trigger failover only when B is error<br>
Impossible. Because C error always triggers failover.<br>
<br>
4) trigger failover only when C is error<br>
a = off, b = off, c = off<br>
<br>
5) trigger failover only when A is error(Stevo wants this)<br>
Impossible. Because C error always triggers failover.<br>
<br>
6) never trigger failover<br>
Impossible. Because C error always triggers failover.<br>
<br>
As you can see, C is the problem here (look at #3, #5 and #6)<br>
<br>
If we implemented this:<br>
<div>&gt;&gt; However I think we should disable failover if DISALLOW_TO_FAILOVER set<br>
&gt;&gt; in case of reading data from backend. This should have been done when<br>
&gt;&gt; DISALLOW_TO_FAILOVER was introduced because this is exactly what<br>
&gt;&gt; DISALLOW_TO_FAILOVER tries to accomplish. What do you think?<br>
<br>
</div>1) trigger failover if A or B or C is error<br>
a = on, b = off, c = on<br>
<br>
2) trigger failover only when B or C is error<br>
a = off, b = off, c = on<br>
<br>
3) trigger failover only when B is error<br>
a = off, b = on, c = on<br>
<br>
4) trigger failover only when C is error<br>
a = off, b = off, c = off<br>
<br>
5) trigger failover only when A is error(Stevo wants this)<br>
a = on, b = on, c = off<br>
<br>
6) never trigger failover<br>
a = off, b = on, c = off<br>
<br>
So it seems my patch will solve all the problems including yours.<br>
(timeout while retrying is another issue of course).<br>
<div><div>--<br>
Tatsuo Ishii<br>
SRA OSS, Inc. Japan<br>
English: <a href="http://www.sraoss.co.jp/index_en.php" target="_blank">http://www.sraoss.co.jp/index_en.php</a><br>
Japanese: <a href="http://www.sraoss.co.jp" target="_blank">http://www.sraoss.co.jp</a><br>
<br>
&gt; I agree, fail_over_on_backend_error isn&#39;t useful, just adds confusion by<br>
&gt; overlapping with DISALLOW_TO_FAILOVER.<br>
&gt;<br>
&gt; With your patch or without it, it is not possible to failover only on<br>
&gt; health check (max retries) failure. With Nenad&#39;s patch, that part works ok<br>
&gt; and I think that patch is semantically ok - failover occurs even though<br>
&gt; DISALLOW_TO_FAILOVER is set for backend but only when health check is<br>
&gt; configured too. Configuring health check without failover on failed health<br>
&gt; check has no purpose. Also health check configured with allowed failover on<br>
&gt; any condition other than health check (max retries) failure has no purpose.<br>
&gt;<br>
&gt; Kind regards,<br>
&gt; Stevo.<br>
&gt;<br>
&gt; 2012/1/15 Tatsuo Ishii &lt;<a href="mailto:ishii@postgresql.org" target="_blank">ishii@postgresql.org</a>&gt;<br>
&gt;<br>
&gt;&gt; fail_over_on_backend_error has different meaning from<br>
&gt;&gt; DISALLOW_TO_FAILOVER. From the doc:<br>
&gt;&gt;<br>
&gt;&gt;  If true, and an error occurs when writing to the backend<br>
&gt;&gt;  communication, pgpool-II will trigger the fail over procedure . This<br>
&gt;&gt;  is the same behavior as of pgpool-II 2.2.x or earlier. If set to<br>
&gt;&gt;  false, pgpool will report an error and disconnect the session.<br>
&gt;&gt;<br>
&gt;&gt; This means that if pgpool failed to read from backend, it will trigger<br>
&gt;&gt; failover even if fail_over_on_backend_error to off. So unconditionaly<br>
&gt;&gt; disabling failover will lead backward imcompatibilty.<br>
&gt;&gt;<br>
&gt;&gt; However I think we should disable failover if DISALLOW_TO_FAILOVER set<br>
&gt;&gt; in case of reading data from backend. This should have been done when<br>
&gt;&gt; DISALLOW_TO_FAILOVER was introduced because this is exactly what<br>
&gt;&gt; DISALLOW_TO_FAILOVER tries to accomplish. What do you think?<br>
&gt;&gt; --<br>
&gt;&gt; Tatsuo Ishii<br>
&gt;&gt; SRA OSS, Inc. Japan<br>
&gt;&gt; English: <a href="http://www.sraoss.co.jp/index_en.php" target="_blank">http://www.sraoss.co.jp/index_en.php</a><br>
&gt;&gt; Japanese: <a href="http://www.sraoss.co.jp" target="_blank">http://www.sraoss.co.jp</a><br>
&gt;&gt;<br>
&gt;&gt; &gt; For a moment I thought we could have set fail_over_on_backend_error to<br>
&gt;&gt; off,<br>
&gt;&gt; &gt; and have backends set with ALLOW_TO_FAILOVER flag. But then I looked in<br>
&gt;&gt; &gt; code.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; In child.c there is a loop child process goes through in its lifetime.<br>
&gt;&gt; When<br>
&gt;&gt; &gt; fatal error condition occurs before child process exits it will call<br>
&gt;&gt; &gt; notice_backend_error which will call degenerate_backend_set which will<br>
&gt;&gt; not<br>
&gt;&gt; &gt; take into account fail_over_on_backend_error is set to off, causing<br>
&gt;&gt; backend<br>
&gt;&gt; &gt; to be degenerated and failover to occur. That&#39;s why we have backends set<br>
&gt;&gt; &gt; with DISALLOW_TO_FAILOVER but with our patch applied, health check could<br>
&gt;&gt; &gt; cause failover to occur as expected.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Maybe it would be enough just to modify degenerate_backend_set, to take<br>
&gt;&gt; &gt; fail_over_on_backend_error into account just like it already takes<br>
&gt;&gt; &gt; DISALLOW_TO_FAILOVER into account.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Kind regards,<br>
&gt;&gt; &gt; Stevo.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; 2012/1/15 Stevo Slaviĉ &lt;<a href="mailto:sslavic@gmail.com" target="_blank">sslavic@gmail.com</a>&gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; Yes and that behaviour which you describe as expected, is not what we<br>
&gt;&gt; &gt;&gt; want. We want pgpool to degrade backend0 and failover when configured<br>
&gt;&gt; max<br>
&gt;&gt; &gt;&gt; health check retries have failed, and to failover only in that case, so<br>
&gt;&gt; not<br>
&gt;&gt; &gt;&gt; sooner e.g. connection/child error condition, but as soon as max health<br>
&gt;&gt; &gt;&gt; check retries have been attempted.<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; Maybe examples will be more clear.<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; Imagine two nodes (node 1 and node 2). On each node a single pgpool and<br>
&gt;&gt; a<br>
&gt;&gt; &gt;&gt; single backend. Apps/clients access db through pgpool on their own node.<br>
&gt;&gt; &gt;&gt; Two backends are configured in postgres native streaming replication.<br>
&gt;&gt; &gt;&gt; pgpools are used in raw mode. Both pgpools have same backend as<br>
&gt;&gt; backend0,<br>
&gt;&gt; &gt;&gt; and same backend as backend1.<br>
&gt;&gt; &gt;&gt; initial state: both backends are up and pgpool can access them, clients<br>
&gt;&gt; &gt;&gt; connect to their pgpool and do their work on master backend, backend0.<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; 1st case: unmodified/non-patched pgpool 3.1.1 is used, backends are<br>
&gt;&gt; &gt;&gt; configured with ALLOW_TO_FAILOVER flag<br>
&gt;&gt; &gt;&gt; - temporary network outage happens between pgpool on node 2 and backend0<br>
&gt;&gt; &gt;&gt; - error condition is reported by child process, and since<br>
&gt;&gt; &gt;&gt; ALLOW_TO_FAILOVER is set, pgpool performs failover without giving<br>
&gt;&gt; chance to<br>
&gt;&gt; &gt;&gt; pgpool health check retries to control whether backend is just<br>
&gt;&gt; temporarily<br>
&gt;&gt; &gt;&gt; inaccessible<br>
&gt;&gt; &gt;&gt; - failover command on node 2 promotes standby backend to a new master -<br>
&gt;&gt; &gt;&gt; split brain occurs, with two masters<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; 2nd case: unmodified/non-patched pgpool 3.1.1 is used, backends are<br>
&gt;&gt; &gt;&gt; configured with DISALLOW_TO_FAILOVER<br>
&gt;&gt; &gt;&gt; - temporary network outage happens between pgpool on node 2 and backend0<br>
&gt;&gt; &gt;&gt; - error condition is reported by child process, and since<br>
&gt;&gt; &gt;&gt; DISALLOW_TO_FAILOVER is set, pgpool does not perform failover<br>
&gt;&gt; &gt;&gt; - health check gets a chance to check backend0 condition, determines<br>
&gt;&gt; that<br>
&gt;&gt; &gt;&gt; it&#39;s not accessible, there will be no health check retries because<br>
&gt;&gt; &gt;&gt; DISALLOW_TO_FAILOVER is set, no failover occurs ever<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; 3rd case, pgpool 3.1.1 + patch you&#39;ve sent applied, and backends<br>
&gt;&gt; &gt;&gt; configured with DISALLOW_TO_FAILOVER<br>
&gt;&gt; &gt;&gt; - temporary network outage happens between pgpool on node 2 and backend0<br>
&gt;&gt; &gt;&gt; - error condition is reported by child process, and since<br>
&gt;&gt; &gt;&gt; DISALLOW_TO_FAILOVER is set, pgpool does not perform failover<br>
&gt;&gt; &gt;&gt; - health check gets a chance to check backend0 condition, determines<br>
&gt;&gt; that<br>
&gt;&gt; &gt;&gt; it&#39;s not accessible, health check retries happen, and even after max<br>
&gt;&gt; &gt;&gt; retries, no failover happens since failover is disallowed<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; 4th expected behaviour, pgpool 3.1.1 + patch we sent, and backends<br>
&gt;&gt; &gt;&gt; configured with DISALLOW_TO_FAILOVER<br>
&gt;&gt; &gt;&gt; - temporary network outage happens between pgpool on node 2 and backend0<br>
&gt;&gt; &gt;&gt; - error condition is reported by child process, and since<br>
&gt;&gt; &gt;&gt; DISALLOW_TO_FAILOVER is set, pgpool does not perform failover<br>
&gt;&gt; &gt;&gt; - health check gets a chance to check backend0 condition, determines<br>
&gt;&gt; that<br>
&gt;&gt; &gt;&gt; it&#39;s not accessible, health check retries happen, before a max retry<br>
&gt;&gt; &gt;&gt; network condition is cleared, retry happens, and backend0 remains to be<br>
&gt;&gt; &gt;&gt; master, no failover occurs, temporary network issue did not cause split<br>
&gt;&gt; &gt;&gt; brain<br>
&gt;&gt; &gt;&gt; - after some time, temporary network outage happens again between pgpool<br>
&gt;&gt; &gt;&gt; on node 2 and backend0<br>
&gt;&gt; &gt;&gt; - error condition is reported by child process, and since<br>
&gt;&gt; &gt;&gt; DISALLOW_TO_FAILOVER is set, pgpool does not perform failover<br>
&gt;&gt; &gt;&gt; - health check gets a chance to check backend0 condition, determines<br>
&gt;&gt; that<br>
&gt;&gt; &gt;&gt; it&#39;s not accessible, health check retries happen, after max retries<br>
&gt;&gt; &gt;&gt; backend0 is still not accessible, failover happens, standby is new<br>
&gt;&gt; master<br>
&gt;&gt; &gt;&gt; and backend0 is degraded<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; Kind regards,<br>
&gt;&gt; &gt;&gt; Stevo.<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; 2012/1/15 Tatsuo Ishii &lt;<a href="mailto:ishii@postgresql.org" target="_blank">ishii@postgresql.org</a>&gt;<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; In my test evironment, the patch works as expected. I have two<br>
&gt;&gt; &gt;&gt;&gt; backends. Health check retry conf is as follows:<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; health_check_max_retries = 3<br>
&gt;&gt; &gt;&gt;&gt; health_check_retry_delay = 1<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; 5 09:17:20 LOG:   pid 21411: Backend status file /home/t-ishii/work/<br>
&gt;&gt; &gt;&gt;&gt; <a href="http://git.postgresql.org/test/log/pgpool_status" target="_blank">git.postgresql.org/test/log/pgpool_status</a> discarded<br>
&gt;&gt; &gt;&gt;&gt; 2012-01-15 09:17:20 LOG:   pid 21411: pgpool-II successfully started.<br>
&gt;&gt; &gt;&gt;&gt; version 3.2alpha1 (hatsuiboshi)<br>
&gt;&gt; &gt;&gt;&gt; 2012-01-15 09:17:20 LOG:   pid 21411: find_primary_node: primary node<br>
&gt;&gt; id<br>
&gt;&gt; &gt;&gt;&gt; is 0<br>
&gt;&gt; &gt;&gt;&gt; -- backend1 was shutdown<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; 2012-01-15 09:17:50 ERROR: pid 21445:<br>
&gt;&gt; connect_unix_domain_socket_by_port:<br>
&gt;&gt; &gt;&gt;&gt; connect() failed to /tmp/.s.PGSQL.11001: No such file or directory<br>
&gt;&gt; &gt;&gt;&gt; 2012-01-15 09:17:50 ERROR: pid 21445: make_persistent_db_connection:<br>
&gt;&gt; &gt;&gt;&gt; connection to /tmp(11001) failed<br>
&gt;&gt; &gt;&gt;&gt; 2012-01-15 09:17:50 ERROR: pid 21445: check_replication_time_lag: could<br>
&gt;&gt; &gt;&gt;&gt; not connect to DB node 1, check sr_check_user and sr_check_password<br>
&gt;&gt; &gt;&gt;&gt; 2012-01-15 09:17:50 ERROR: pid 21411:<br>
&gt;&gt; connect_unix_domain_socket_by_port:<br>
&gt;&gt; &gt;&gt;&gt; connect() failed to /tmp/.s.PGSQL.11001: No such file or directory<br>
&gt;&gt; &gt;&gt;&gt; 2012-01-15 09:17:50 ERROR: pid 21411: make_persistent_db_connection:<br>
&gt;&gt; &gt;&gt;&gt; connection to /tmp(11001) failed<br>
&gt;&gt; &gt;&gt;&gt; 2012-01-15 09:17:50 ERROR: pid 21411:<br>
&gt;&gt; connect_unix_domain_socket_by_port:<br>
&gt;&gt; &gt;&gt;&gt; connect() failed to /tmp/.s.PGSQL.11001: No such file or directory<br>
&gt;&gt; &gt;&gt;&gt; 2012-01-15 09:17:50 ERROR: pid 21411: make_persistent_db_connection:<br>
&gt;&gt; &gt;&gt;&gt; connection to /tmp(11001) failed<br>
&gt;&gt; &gt;&gt;&gt; -- health check failed<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; 2012-01-15 09:17:50 ERROR: pid 21411: health check failed. 1 th host<br>
&gt;&gt; /tmp<br>
&gt;&gt; &gt;&gt;&gt; at port 11001 is down<br>
&gt;&gt; &gt;&gt;&gt; -- start retrying<br>
&gt;&gt; &gt;&gt;&gt; 2012-01-15 09:17:50 LOG:   pid 21411: health check retry sleep time: 1<br>
&gt;&gt; &gt;&gt;&gt; second(s)<br>
&gt;&gt; &gt;&gt;&gt; 2012-01-15 09:17:51 ERROR: pid 21411:<br>
&gt;&gt; connect_unix_domain_socket_by_port:<br>
&gt;&gt; &gt;&gt;&gt; connect() failed to /tmp/.s.PGSQL.11001: No such file or directory<br>
&gt;&gt; &gt;&gt;&gt; 2012-01-15 09:17:51 ERROR: pid 21411: make_persistent_db_connection:<br>
&gt;&gt; &gt;&gt;&gt; connection to /tmp(11001) failed<br>
&gt;&gt; &gt;&gt;&gt; 2012-01-15 09:17:51 ERROR: pid 21411: health check failed. 1 th host<br>
&gt;&gt; /tmp<br>
&gt;&gt; &gt;&gt;&gt; at port 11001 is down<br>
&gt;&gt; &gt;&gt;&gt; 2012-01-15 09:17:51 LOG:   pid 21411: health check retry sleep time: 1<br>
&gt;&gt; &gt;&gt;&gt; second(s)<br>
&gt;&gt; &gt;&gt;&gt; 2012-01-15 09:17:52 ERROR: pid 21411:<br>
&gt;&gt; connect_unix_domain_socket_by_port:<br>
&gt;&gt; &gt;&gt;&gt; connect() failed to /tmp/.s.PGSQL.11001: No such file or directory<br>
&gt;&gt; &gt;&gt;&gt; 2012-01-15 09:17:52 ERROR: pid 21411: make_persistent_db_connection:<br>
&gt;&gt; &gt;&gt;&gt; connection to /tmp(11001) failed<br>
&gt;&gt; &gt;&gt;&gt; 2012-01-15 09:17:52 ERROR: pid 21411: health check failed. 1 th host<br>
&gt;&gt; /tmp<br>
&gt;&gt; &gt;&gt;&gt; at port 11001 is down<br>
&gt;&gt; &gt;&gt;&gt; 2012-01-15 09:17:52 LOG:   pid 21411: health check retry sleep time: 1<br>
&gt;&gt; &gt;&gt;&gt; second(s)<br>
&gt;&gt; &gt;&gt;&gt; 2012-01-15 09:17:53 ERROR: pid 21411:<br>
&gt;&gt; connect_unix_domain_socket_by_port:<br>
&gt;&gt; &gt;&gt;&gt; connect() failed to /tmp/.s.PGSQL.11001: No such file or directory<br>
&gt;&gt; &gt;&gt;&gt; 2012-01-15 09:17:53 ERROR: pid 21411: make_persistent_db_connection:<br>
&gt;&gt; &gt;&gt;&gt; connection to /tmp(11001) failed<br>
&gt;&gt; &gt;&gt;&gt; 2012-01-15 09:17:53 ERROR: pid 21411: health check failed. 1 th host<br>
&gt;&gt; /tmp<br>
&gt;&gt; &gt;&gt;&gt; at port 11001 is down<br>
&gt;&gt; &gt;&gt;&gt; 2012-01-15 09:17:53 LOG:   pid 21411: health_check: 1 failover is<br>
&gt;&gt; canceld<br>
&gt;&gt; &gt;&gt;&gt; because failover is disallowed<br>
&gt;&gt; &gt;&gt;&gt; -- after 3 retries, pgpool wanted to failover, but gave up because<br>
&gt;&gt; &gt;&gt;&gt; DISALLOW_TO_FAILOVER is set for backend1<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; 2012-01-15 09:18:00 ERROR: pid 21445:<br>
&gt;&gt; connect_unix_domain_socket_by_port:<br>
&gt;&gt; &gt;&gt;&gt; connect() failed to /tmp/.s.PGSQL.11001: No such file or directory<br>
&gt;&gt; &gt;&gt;&gt; 2012-01-15 09:18:00 ERROR: pid 21445: make_persistent_db_connection:<br>
&gt;&gt; &gt;&gt;&gt; connection to /tmp(11001) failed<br>
&gt;&gt; &gt;&gt;&gt; 2012-01-15 09:18:00 ERROR: pid 21445: check_replication_time_lag: could<br>
&gt;&gt; &gt;&gt;&gt; not connect to DB node 1, check sr_check_user and sr_check_password<br>
&gt;&gt; &gt;&gt;&gt; 2012-01-15 09:18:03 ERROR: pid 21411:<br>
&gt;&gt; connect_unix_domain_socket_by_port:<br>
&gt;&gt; &gt;&gt;&gt; connect() failed to /tmp/.s.PGSQL.11001: No such file or directory<br>
&gt;&gt; &gt;&gt;&gt; 2012-01-15 09:18:03 ERROR: pid 21411: make_persistent_db_connection:<br>
&gt;&gt; &gt;&gt;&gt; connection to /tmp(11001) failed<br>
&gt;&gt; &gt;&gt;&gt; 2012-01-15 09:18:03 ERROR: pid 21411: health check failed. 1 th host<br>
&gt;&gt; /tmp<br>
&gt;&gt; &gt;&gt;&gt; at port 11001 is down<br>
&gt;&gt; &gt;&gt;&gt; 2012-01-15 09:18:03 LOG:   pid 21411: health check retry sleep time: 1<br>
&gt;&gt; &gt;&gt;&gt; second(s)<br>
&gt;&gt; &gt;&gt;&gt; 2012-01-15 09:18:04 ERROR: pid 21411:<br>
&gt;&gt; connect_unix_domain_socket_by_port:<br>
&gt;&gt; &gt;&gt;&gt; connect() failed to /tmp/.s.PGSQL.11001: No such file or directory<br>
&gt;&gt; &gt;&gt;&gt; 2012-01-15 09:18:04 ERROR: pid 21411: make_persistent_db_connection:<br>
&gt;&gt; &gt;&gt;&gt; connection to /tmp(11001) failed<br>
&gt;&gt; &gt;&gt;&gt; 2012-01-15 09:18:04 ERROR: pid 21411: health check failed. 1 th host<br>
&gt;&gt; /tmp<br>
&gt;&gt; &gt;&gt;&gt; at port 11001 is down<br>
&gt;&gt; &gt;&gt;&gt; 2012-01-15 09:18:04 LOG:   pid 21411: health check retry sleep time: 1<br>
&gt;&gt; &gt;&gt;&gt; second(s)<br>
&gt;&gt; &gt;&gt;&gt; 2012-01-15 09:18:05 LOG:   pid 21411: after some retrying backend<br>
&gt;&gt; &gt;&gt;&gt; returned to healthy state<br>
&gt;&gt; &gt;&gt;&gt; -- started backend1 and pgpool succeeded in health checking. Resumed<br>
&gt;&gt; &gt;&gt;&gt; using backend1<br>
&gt;&gt; &gt;&gt;&gt; --<br>
&gt;&gt; &gt;&gt;&gt; Tatsuo Ishii<br>
&gt;&gt; &gt;&gt;&gt; SRA OSS, Inc. Japan<br>
&gt;&gt; &gt;&gt;&gt; English: <a href="http://www.sraoss.co.jp/index_en.php" target="_blank">http://www.sraoss.co.jp/index_en.php</a><br>
&gt;&gt; &gt;&gt;&gt; Japanese: <a href="http://www.sraoss.co.jp" target="_blank">http://www.sraoss.co.jp</a><br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt; Hello Tatsuo,<br>
&gt;&gt; &gt;&gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt; Thank you for the patch and effort, but unfortunately this change<br>
&gt;&gt; won&#39;t<br>
&gt;&gt; &gt;&gt;&gt; &gt; work for us. We need to set disallow failover to prevent failover on<br>
&gt;&gt; &gt;&gt;&gt; child<br>
&gt;&gt; &gt;&gt;&gt; &gt; reported connection errors (it&#39;s ok if few clients lose their<br>
&gt;&gt; &gt;&gt;&gt; connection or<br>
&gt;&gt; &gt;&gt;&gt; &gt; can not connect), and still have pgpool perform failover but only on<br>
&gt;&gt; &gt;&gt;&gt; failed<br>
&gt;&gt; &gt;&gt;&gt; &gt; health check (if configured, after max retries threshold has been<br>
&gt;&gt; &gt;&gt;&gt; reached).<br>
&gt;&gt; &gt;&gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt; Maybe it would be best to add an extra value for backend_flag -<br>
&gt;&gt; &gt;&gt;&gt; &gt; ALLOW_TO_FAILOVER_ON_HEALTH_CHECK or<br>
&gt;&gt; &gt;&gt;&gt; DISALLOW_TO_FAILOVER_ON_CHILD_ERROR.<br>
&gt;&gt; &gt;&gt;&gt; &gt; It should behave same as DISALLOW_TO_FAILOVER is set, with only<br>
&gt;&gt; &gt;&gt;&gt; difference<br>
&gt;&gt; &gt;&gt;&gt; &gt; in behaviour when health check (if set, max retries) has failed -<br>
&gt;&gt; unlike<br>
&gt;&gt; &gt;&gt;&gt; &gt; DISALLOW_TO_FAILOVER, this new flag should allow failover in this<br>
&gt;&gt; case<br>
&gt;&gt; &gt;&gt;&gt; only.<br>
&gt;&gt; &gt;&gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt; Without this change health check (especially health check retries)<br>
&gt;&gt; &gt;&gt;&gt; doesn&#39;t<br>
&gt;&gt; &gt;&gt;&gt; &gt; make much sense - child error is more likely to occur on (temporary)<br>
&gt;&gt; &gt;&gt;&gt; &gt; backend failure then health check and will or will not cause<br>
&gt;&gt; failover to<br>
&gt;&gt; &gt;&gt;&gt; &gt; occur depending on backend flag, without giving health check retries<br>
&gt;&gt; a<br>
&gt;&gt; &gt;&gt;&gt; &gt; chance to determine if failure was temporary or not, risking split<br>
&gt;&gt; brain<br>
&gt;&gt; &gt;&gt;&gt; &gt; situation with two masters just because of temporary network link<br>
&gt;&gt; &gt;&gt;&gt; hiccup.<br>
&gt;&gt; &gt;&gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt; Our main problem remains though with the health check timeout not<br>
&gt;&gt; being<br>
&gt;&gt; &gt;&gt;&gt; &gt; respected in these special conditions we have. Maybe Nenad can help<br>
&gt;&gt; you<br>
&gt;&gt; &gt;&gt;&gt; &gt; more to reproduce the issue on your environment.<br>
&gt;&gt; &gt;&gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt; Kind regards,<br>
&gt;&gt; &gt;&gt;&gt; &gt; Stevo.<br>
&gt;&gt; &gt;&gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt; 2012/1/13 Tatsuo Ishii &lt;<a href="mailto:ishii@postgresql.org" target="_blank">ishii@postgresql.org</a>&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; Thanks for pointing it out.<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; Yes, checking DISALLOW_TO_FAILOVER before retrying is wrong.<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; However, after retry count over, we should check<br>
&gt;&gt; DISALLOW_TO_FAILOVER I<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; think.<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; Attached is the patch attempt to fix it. Please try.<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; --<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; Tatsuo Ishii<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; SRA OSS, Inc. Japan<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; English: <a href="http://www.sraoss.co.jp/index_en.php" target="_blank">http://www.sraoss.co.jp/index_en.php</a><br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; Japanese: <a href="http://www.sraoss.co.jp" target="_blank">http://www.sraoss.co.jp</a><br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt; pgpool is being used in raw mode - just for (health check based)<br>
&gt;&gt; &gt;&gt;&gt; failover<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt; part, so applications are not required to restart when standby<br>
&gt;&gt; gets<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt; promoted to new master. Here is pgpool.conf file and a very small<br>
&gt;&gt; &gt;&gt;&gt; patch<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt; we&#39;re using applied to pgpool 3.1.1 release.<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt; We have to have DISALLOW_TO_FAILOVER set for the backend since any<br>
&gt;&gt; &gt;&gt;&gt; child<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt; process that detects condition that master/backend0 is not<br>
&gt;&gt; &gt;&gt;&gt; available, if<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt; DISALLOW_TO_FAILOVER was not set, will degenerate backend without<br>
&gt;&gt; &gt;&gt;&gt; giving<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt; health check a chance to retry. We need health check with retries<br>
&gt;&gt; &gt;&gt;&gt; because<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt; condition that backend0 is not available could be temporary<br>
&gt;&gt; (network<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt; glitches to the remote site where master is, or deliberate<br>
&gt;&gt; failover<br>
&gt;&gt; &gt;&gt;&gt; of<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt; master postgres service from one node to the other on remote site<br>
&gt;&gt; -<br>
&gt;&gt; &gt;&gt;&gt; in<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; both<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt; cases remote means remote to the pgpool that is going to perform<br>
&gt;&gt; &gt;&gt;&gt; health<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt; checks and ultimately the failover) and we don&#39;t want standby to<br>
&gt;&gt; be<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt; promoted as easily to a new master, to prevent temporary network<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; conditions<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt; which could occur frequently to frequently cause split brain with<br>
&gt;&gt; two<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt; masters.<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt; But then, with DISALLOW_TO_FAILOVER set, without the patch health<br>
&gt;&gt; &gt;&gt;&gt; check<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt; will not retry and will thus give only one chance to backend (if<br>
&gt;&gt; &gt;&gt;&gt; health<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt; check ever occurs before child process failure to connect to the<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; backend),<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt; rendering retry settings effectively to be ignored. That&#39;s where<br>
&gt;&gt; this<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; patch<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt; comes into action - enables health check retries while child<br>
&gt;&gt; &gt;&gt;&gt; processes<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; are<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt; prevented to degenerate backend.<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt; I don&#39;t think, but I could be wrong, that this patch influences<br>
&gt;&gt; the<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt; behavior we&#39;re seeing with unwanted health check attempt delays.<br>
&gt;&gt; &gt;&gt;&gt; Also,<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt; knowing this, maybe pgpool could be patched or some other support<br>
&gt;&gt; be<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; built<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt; into it to cover this use case.<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt; Regards,<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt; Stevo.<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt; 2012/1/12 Tatsuo Ishii &lt;<a href="mailto:ishii@postgresql.org" target="_blank">ishii@postgresql.org</a>&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; I have accepted the moderation request. Your post should be sent<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; shortly.<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; Also I have raised the post size limit to 1MB.<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; I will look into this...<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; --<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; Tatsuo Ishii<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; SRA OSS, Inc. Japan<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; English: <a href="http://www.sraoss.co.jp/index_en.php" target="_blank">http://www.sraoss.co.jp/index_en.php</a><br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; Japanese: <a href="http://www.sraoss.co.jp" target="_blank">http://www.sraoss.co.jp</a><br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt; Here is the log file and strace output file (this time in an<br>
&gt;&gt; &gt;&gt;&gt; archive,<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt; didn&#39;t know about 200KB constraint on post size which requires<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; moderator<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt; approval). Timings configured are 30sec health check interval,<br>
&gt;&gt; &gt;&gt;&gt; 5sec<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt; timeout, and 2 retries with 10sec retry delay.<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt; It takes a lot more than 5sec from started health check to<br>
&gt;&gt; &gt;&gt;&gt; sleeping<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; 10sec<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt; for first retry.<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt; Seen in code (main.x, health_check() function), within (retry)<br>
&gt;&gt; &gt;&gt;&gt; attempt<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt; there is inner retry (first with postgres database then with<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; template1)<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; and<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt; that part doesn&#39;t seem to be interrupted by alarm.<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt; Regards,<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt; Stevo.<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt; 2012/1/12 Stevo Slaviĉ &lt;<a href="mailto:sslavic@gmail.com" target="_blank">sslavic@gmail.com</a>&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; Here is the log file and strace output file. Timings<br>
&gt;&gt; configured<br>
&gt;&gt; &gt;&gt;&gt; are<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; 30sec<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; health check interval, 5sec timeout, and 2 retries with 10sec<br>
&gt;&gt; &gt;&gt;&gt; retry<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; delay.<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; It takes a lot more than 5sec from started health check to<br>
&gt;&gt; &gt;&gt;&gt; sleeping<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; 10sec<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; for first retry.<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; Seen in code (main.x, health_check() function), within (retry)<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; attempt<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; there is inner retry (first with postgres database then with<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; template1)<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; and<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; that part doesn&#39;t seem to be interrupted by alarm.<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; Regards,<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; Stevo.<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; 2012/1/11 Tatsuo Ishii &lt;<a href="mailto:ishii@postgresql.org" target="_blank">ishii@postgresql.org</a>&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; Ok, I will do it. In the mean time you could use &quot;strace -tt<br>
&gt;&gt; -p<br>
&gt;&gt; &gt;&gt;&gt; PID&quot;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; to see which system call is blocked.<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; --<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; Tatsuo Ishii<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; SRA OSS, Inc. Japan<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; English: <a href="http://www.sraoss.co.jp/index_en.php" target="_blank">http://www.sraoss.co.jp/index_en.php</a><br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; Japanese: <a href="http://www.sraoss.co.jp" target="_blank">http://www.sraoss.co.jp</a><br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt; OK, got the info - key point is that ip forwarding is<br>
&gt;&gt; &gt;&gt;&gt; disabled for<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; security<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt; reasons. Rules in iptables are not important, iptables can<br>
&gt;&gt; be<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; stopped,<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; or<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt; previously added rules removed.<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt; Here are the steps to reproduce (kudos to my colleague<br>
&gt;&gt; Nenad<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; Bulatovic<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; for<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt; providing this):<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt; 1.) make sure that ip forwarding is off:<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;     echo 0 &gt; /proc/sys/net/ipv4/ip_forward<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt; 2.) create IP alias on some interface (and have postgres<br>
&gt;&gt; &gt;&gt;&gt; listen on<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; it):<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;     ip addr add x.x.x.x/yy dev ethz<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt; 3.) set backend_hostname0 to aforementioned IP<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt; 4.) start pgpool and monitor health checks<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt; 5.) remove IP alias:<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;     ip addr del x.x.x.x/yy dev ethz<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt; Here is the interesting part in pgpool log after this:<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt; 2012-01-11 17:38:04 DEBUG: pid 24358: starting health<br>
&gt;&gt; checking<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt; 2012-01-11 17:38:04 DEBUG: pid 24358: health_check: 0 th DB<br>
&gt;&gt; &gt;&gt;&gt; node<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; status: 2<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt; 2012-01-11 17:38:04 DEBUG: pid 24358: health_check: 1 th DB<br>
&gt;&gt; &gt;&gt;&gt; node<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; status: 1<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt; 2012-01-11 17:38:34 DEBUG: pid 24358: starting health<br>
&gt;&gt; checking<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt; 2012-01-11 17:38:34 DEBUG: pid 24358: health_check: 0 th DB<br>
&gt;&gt; &gt;&gt;&gt; node<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; status: 2<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt; 2012-01-11 17:41:43 DEBUG: pid 24358: health_check: 0 th DB<br>
&gt;&gt; &gt;&gt;&gt; node<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; status: 2<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt; 2012-01-11 17:41:46 ERROR: pid 24358: health check failed.<br>
&gt;&gt; 0<br>
&gt;&gt; &gt;&gt;&gt; th<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; host<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt; 192.168.2.27 at port 5432 is down<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt; 2012-01-11 17:41:46 LOG:   pid 24358: health check retry<br>
&gt;&gt; sleep<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; time:<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; 10<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt; second(s)<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt; That pgpool was configured with health check interval of<br>
&gt;&gt; &gt;&gt;&gt; 30sec,<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; 5sec<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt; timeout, and 10sec retry delay with 2 max retries.<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt; Making use of libpq instead for connecting to db in health<br>
&gt;&gt; &gt;&gt;&gt; checks<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; IMO<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt; should resolve it, but you&#39;ll best determine which call<br>
&gt;&gt; &gt;&gt;&gt; exactly<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; gets<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt; blocked waiting. Btw, psql with PGCONNECT_TIMEOUT env var<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; configured<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt; respects that env var timeout.<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt; Regards,<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt; Stevo.<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt; On Wed, Jan 11, 2012 at 11:15 AM, Stevo Slaviĉ &lt;<br>
&gt;&gt; &gt;&gt;&gt; <a href="mailto:sslavic@gmail.com" target="_blank">sslavic@gmail.com</a><br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; wrote:<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt; Tatsuo,<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt; Did you restart iptables after adding rule?<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt; Regards,<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt; Stevo.<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt; On Wed, Jan 11, 2012 at 11:12 AM, Stevo Slaviĉ &lt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; <a href="mailto:sslavic@gmail.com" target="_blank">sslavic@gmail.com</a>&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; wrote:<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; Looking into this to verify if these are all necessary<br>
&gt;&gt; &gt;&gt;&gt; changes<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; to<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; have<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; port unreachable message silently rejected (suspecting<br>
&gt;&gt; some<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; kernel<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; parameter tuning is needed).<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; Just to clarify it&#39;s not a problem that host is being<br>
&gt;&gt; &gt;&gt;&gt; detected<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; by<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; pgpool<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; to be down, but the timing when that happens. On<br>
&gt;&gt; environment<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; where<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; issue is<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; reproduced pgpool as part of health check attempt tries<br>
&gt;&gt; to<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; connect<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; to<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; backend and hangs for tcp timeout instead of being<br>
&gt;&gt; &gt;&gt;&gt; interrupted<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; by<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; timeout<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; alarm. Can you verify/confirm please the health check<br>
&gt;&gt; retry<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; timings<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; are not<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; delayed?<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; Regards,<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; Stevo.<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt; On Wed, Jan 11, 2012 at 10:50 AM, Tatsuo Ishii &lt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; <a href="mailto:ishii@postgresql.org" target="_blank">ishii@postgresql.org</a><br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;wrote:<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; Ok, I did:<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; # iptables -A FORWARD -j REJECT --reject-with<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; icmp-port-unreachable<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; on the host where pgpoo is running. And pull network<br>
&gt;&gt; cable<br>
&gt;&gt; &gt;&gt;&gt; from<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; backend0 host network interface. Pgpool detected the<br>
&gt;&gt; host<br>
&gt;&gt; &gt;&gt;&gt; being<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; down<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; as expected...<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; --<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; Tatsuo Ishii<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; SRA OSS, Inc. Japan<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; English: <a href="http://www.sraoss.co.jp/index_en.php" target="_blank">http://www.sraoss.co.jp/index_en.php</a><br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; Japanese: <a href="http://www.sraoss.co.jp" target="_blank">http://www.sraoss.co.jp</a><br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt; Backend is not destination of this message, pgpool<br>
&gt;&gt; host<br>
&gt;&gt; &gt;&gt;&gt; is,<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; and<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; we<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; don&#39;t<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt; want it to ever get it. With command I&#39;ve sent you<br>
&gt;&gt; rule<br>
&gt;&gt; &gt;&gt;&gt; will<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; be<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; created for<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt; any source and destination.<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt; Regards,<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt; Stevo.<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt; On Wed, Jan 11, 2012 at 10:38 AM, Tatsuo Ishii &lt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; <a href="mailto:ishii@postgresql.org" target="_blank">ishii@postgresql.org</a>&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; wrote:<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; I did following:<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; Do following on the host where pgpool is running on:<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; # iptables -A FORWARD -j REJECT --reject-with<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; icmp-port-unreachable -d<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; 133.137.177.124<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; (133.137.177.124 is the host where backend is running<br>
&gt;&gt; &gt;&gt;&gt; on)<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; Pull network cable from backend0 host network<br>
&gt;&gt; interface.<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; Pgpool<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; detected the host being down as expected. Am I<br>
&gt;&gt; missing<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; something?<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; --<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; Tatsuo Ishii<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; SRA OSS, Inc. Japan<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; English: <a href="http://www.sraoss.co.jp/index_en.php" target="_blank">http://www.sraoss.co.jp/index_en.php</a><br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; Japanese: <a href="http://www.sraoss.co.jp" target="_blank">http://www.sraoss.co.jp</a><br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt; Hello Tatsuo,<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt; With backend0 on one host just configure following<br>
&gt;&gt; &gt;&gt;&gt; rule on<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; other<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; host<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; where<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt; pgpool is:<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt; iptables -A FORWARD -j REJECT --reject-with<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; icmp-port-unreachable<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt; and then have pgpool startup with health checking<br>
&gt;&gt; and<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; retrying<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; configured,<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt; and then pull network cable from backend0 host<br>
&gt;&gt; network<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; interface.<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt; Regards,<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt; Stevo.<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt; On Wed, Jan 11, 2012 at 6:27 AM, Tatsuo Ishii &lt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; <a href="mailto:ishii@postgresql.org" target="_blank">ishii@postgresql.org</a><br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; wrote:<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; I want to try to test the situation you descrived:<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; When system is configured for security<br>
&gt;&gt; reasons<br>
&gt;&gt; &gt;&gt;&gt; not<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; to<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; return<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; destination<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; host unreachable messages, even though<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; health_check_timeout is<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; But I don&#39;t know how to do it. I pulled out the<br>
&gt;&gt; &gt;&gt;&gt; network<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; cable<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; and<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; pgpool detected it as expected. Also I configured<br>
&gt;&gt; the<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; server<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; which<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; PostgreSQL is running on to disable the 5432<br>
&gt;&gt; port. In<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; this<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; case<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; connect(2) returned EHOSTUNREACH (No route to<br>
&gt;&gt; host)<br>
&gt;&gt; &gt;&gt;&gt; so<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; pgpool<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; detected<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; the error as expected.<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; Could you please instruct me?<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; --<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; Tatsuo Ishii<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; SRA OSS, Inc. Japan<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; English: <a href="http://www.sraoss.co.jp/index_en.php" target="_blank">http://www.sraoss.co.jp/index_en.php</a><br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; Japanese: <a href="http://www.sraoss.co.jp" target="_blank">http://www.sraoss.co.jp</a><br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt; Hello Tatsuo,<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt; Thank you for replying!<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt; I&#39;m not sure what exactly is blocking, just by<br>
&gt;&gt; &gt;&gt;&gt; pgpool<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; code<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; analysis I<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt; suspect it is the part where a connection is<br>
&gt;&gt; made<br>
&gt;&gt; &gt;&gt;&gt; to<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; the<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; db<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; and<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; it<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; doesn&#39;t<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt; seem to get interrupted by alarm. Tested<br>
&gt;&gt; thoroughly<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; health<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; check<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; behaviour,<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt; it works really well when host/ip is there and<br>
&gt;&gt; just<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; backend/postgres<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; is<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt; down, but not when backend host/ip is down. I<br>
&gt;&gt; could<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; see in<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; log<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; that<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; initial<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt; health check and each retry got delayed when<br>
&gt;&gt; &gt;&gt;&gt; host/ip is<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; not<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; reachable,<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt; while when just backend is not listening (is<br>
&gt;&gt; down)<br>
&gt;&gt; &gt;&gt;&gt; on<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; the<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; reachable<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; host/ip<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt; then initial health check and all retries are<br>
&gt;&gt; &gt;&gt;&gt; exact to<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; the<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; settings in<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt; pgpool.conf.<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt; PGCONNECT_TIMEOUT is listed as one of the libpq<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; environment<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; variables<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; in<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt; the docs (see<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; <a href="http://www.postgresql.org/docs/9.1/static/libpq-envars.html" target="_blank">http://www.postgresql.org/docs/9.1/static/libpq-envars.html</a>)<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt; There is equivalent parameter in libpq<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; PGconnectdbParams (<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; see<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; <a href="http://www.postgresql.org/docs/9.1/static/libpq-connect.html#LIBPQ-CONNECT-CONNECT-TIMEOUT" target="_blank">http://www.postgresql.org/docs/9.1/static/libpq-connect.html#LIBPQ-CONNECT-CONNECT-TIMEOUT</a><br>





&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; )<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt; At the beginning of that same page there are<br>
&gt;&gt; some<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; important<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; infos on<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; using<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt; these functions.<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt; psql respects PGCONNECT_TIMEOUT.<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt; Regards,<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt; Stevo.<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt; On Wed, Jan 11, 2012 at 12:13 AM, Tatsuo Ishii &lt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; <a href="mailto:ishii@postgresql.org" target="_blank">ishii@postgresql.org</a>&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; wrote:<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; Hello pgpool community,<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; When system is configured for security<br>
&gt;&gt; reasons<br>
&gt;&gt; &gt;&gt;&gt; not<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; to<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; return<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; destination<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; host unreachable messages, even though<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; health_check_timeout is<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; configured,<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; socket call will block and alarm will not get<br>
&gt;&gt; &gt;&gt;&gt; raised<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; until TCP<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; timeout<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; occurs.<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; Interesting. So are you saying that read(2)<br>
&gt;&gt; &gt;&gt;&gt; cannot be<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; interrupted by<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; alarm signal if the system is configured not to<br>
&gt;&gt; &gt;&gt;&gt; return<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; destination<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; host unreachable message? Could you please<br>
&gt;&gt; guide<br>
&gt;&gt; &gt;&gt;&gt; me<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; where I<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; can<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; get<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; such that info? (I&#39;m not a network expert).<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; Not a C programmer, found some info that<br>
&gt;&gt; select<br>
&gt;&gt; &gt;&gt;&gt; call<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; could be<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; replace<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; with<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; select/pselect calls. Maybe it would be best<br>
&gt;&gt; if<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; PGCONNECT_TIMEOUT<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; value<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; could be used here for connection timeout.<br>
&gt;&gt; &gt;&gt;&gt; pgpool<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; has<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; libpq as<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; dependency,<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; why isn&#39;t it using libpq for the healthcheck<br>
&gt;&gt; db<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; connect<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; calls, then<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; &gt; PGCONNECT_TIMEOUT would be applied?<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; I don&#39;t think libpq uses select/pselect for<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; establishing<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; connection,<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; but using libpq instead of homebrew code seems<br>
&gt;&gt; to<br>
&gt;&gt; &gt;&gt;&gt; be<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; an<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; idea.<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; Let me<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; think about it.<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; One question. Are you sure that libpq can deal<br>
&gt;&gt; &gt;&gt;&gt; with<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; the<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; case<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; (not to<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; return destination host unreachable messages)<br>
&gt;&gt; by<br>
&gt;&gt; &gt;&gt;&gt; using<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; PGCONNECT_TIMEOUT?<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; --<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; Tatsuo Ishii<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; SRA OSS, Inc. Japan<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; English: <a href="http://www.sraoss.co.jp/index_en.php" target="_blank">http://www.sraoss.co.jp/index_en.php</a><br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; Japanese: <a href="http://www.sraoss.co.jp" target="_blank">http://www.sraoss.co.jp</a><br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt;<br>
</div></div></blockquote></div><br>
</div></div></blockquote></div><br>
</div></div></blockquote></div><br>
</div></div></blockquote></div><br>
</div></div></blockquote></div><br>