<div dir="auto"><div dir="auto">Thank you for your explanation Tatsuo.<div dir="auto"><div dir="auto"><br></div><div dir="auto">I also reproduced the issue with a script that executes "select 1" via psql 10 times a second (please find attached it).</div><div dir="auto">Besides, when I have pgadmin4 tool connected to the VIP, I can observe how pgadmin4 is disconnected.</div><div dir="auto"><br></div><div dir="auto">I'm working in a workaround that consists in set DISALLOW_FAILOVER in backend1 to change it to ALLOW_FAILOVER in the failover script (via sed command) and reload the pgpool configuration during failover. I don't like it but I need to avoid client disconnection.</div><div dir="auto"><br></div><div dir="auto">Do you think we should report it as a pgpool bug to work on it in future releases?</div><div dir="auto"><br></div><div dir="auto">Thanks in advance.</div><div dir="auto"><br></div><div dir="auto">Best,</div><div dir="auto">Jesús </div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">El mar, 11 abr 2023 8:49, Tatsuo Ishii <<a href="mailto:ishii@sraoss.co.jp" rel="noreferrer noreferrer" target="_blank">ishii@sraoss.co.jp</a>> escribió:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Ok, I think I have found the cause of the issue. Unfortunately I am<br>
not able to find any solution for this at the moment. Let me explain.<br>
<br>
First of all, I was able to reproduce the issue by using pgbench and<br>
pgpool_setup (a test tool coming with pgpool to create pgbench +<br>
PostgreSQL cluster).<br>
<br>
$ pgpool_setup<br>
$ echo "load_balance_mode = off" >> etc/pgpool.conf<br>
$ echo "failover_on_backend_error = off" >> etc/pgpool.conf<br>
$ ./startall<br>
$ pgbench -p 11000 -n -c 1 -T 300 test<br>
<br>
At this point I hoped a standby node shutdown does not affect pgbench,<br>
because load balance mode is off, pgpool should only access to primary<br>
node.<br>
<br>
So I entered:<br>
$ pg_ctl -D data1 stop<br>
<br>
Then pgbench aborted shortly:<br>
<br>
pgbench: error: client 0 aborted in command 5 (SQL) of script 0; perhaps the backend died while processing<br>
[snip]<br>
<br>
After debugging pgpool using gdb, I got stack trace.<br>
<br>
#6  0x000056538ef05fc4 in child_exit (code=code@entry=1) at protocol/child.c:1336<br>
#7  0x000056538ef2ba6a in pool_virtual_main_db_node_id () at context/pool_query_context.c:341<br>
#8  0x000056538ef0e42b in read_packets_and_process (frontend=frontend@entry=0x5653900cb4c8, backend=backend@entry=0x7f732f21fcd8, reset_request=reset_request@entry=0, <br>
    state=state@entry=0x7ffcef518b6c, num_fields=num_fields@entry=0x7ffcef518b6a, cont=cont@entry=0x7ffcef518b74 "\001V") at protocol/pool_process_query.c:5098<br>
#9  0x000056538ef0f1e3 in pool_process_query (frontend=0x5653900cb4c8, backend=0x7f732f21fcd8, reset_request=reset_request@entry=0)<br>
    at protocol/pool_process_query.c:298<br>
#10 0x000056538ef0734a in do_child (fds=fds@entry=0x565390107ba0) at protocol/child.c:455<br>
#11 0x000056538eedb906 in fork_a_child (fds=0x565390107ba0, id=26) at main/pgpool_main.c:842<br>
#12 0x000056538eee3e2a in PgpoolMain (discard_status=<optimized out>, clear_memcache_oidmaps=<optimized out>) at main/pgpool_main.c:541<br>
#13 0x000056538eed9826 in main (argc=<optimized out>, argv=<optimized out>) at main/main.c:365<br>
<br>
As the child process exits and the socket connection closed, and<br>
pgbench complains it. Why pgpool exited? Pgpool maintains information<br>
including, which node is primary, which node is up or<br>
down. pool_virtual_main_db_node_id() returns such that<br>
information. Unfortunately the information is changing while<br>
failover. If pgpool process uses unstable information, it would cause<br>
bad results including segfaults (that actually happend in the<br>
past. See mantis bug track no. 481 and 482). Thus if<br>
pool_virtual_main_db_node_id() finds that failover is ongoing, it<br>
exits the process and session is disconnected. One solution for this<br>
is, locking the information by pgpool process. However, this is not<br>
only hard to implement, but could result in dead lock. So I hesitate<br>
to employ it.<br>
<br>
BTW, the reson why the issue happens in pgbench, and does not happen<br>
in psql is, I think pgbench produces extremely busy transactions which<br>
increases the chance to reproduce the problem.<br>
<br>
Best reagards,<br>
--<br>
Tatsuo Ishii<br>
SRA OSS LLC<br>
English: <a href="http://www.sraoss.co.jp/index_en/" rel="noreferrer noreferrer noreferrer noreferrer" target="_blank">http://www.sraoss.co.jp/index_en/</a><br>
Japanese:<a href="http://www.sraoss.co.jp" rel="noreferrer noreferrer noreferrer noreferrer" target="_blank">http://www.sraoss.co.jp</a><br>
<br>
> Hi,<br>
> <br>
> Thanks. I will looking into this.<br>
> <br>
> Best reagards,<br>
> --<br>
> Tatsuo Ishii<br>
> SRA OSS LLC<br>
> English: <a href="http://www.sraoss.co.jp/index_en/" rel="noreferrer noreferrer noreferrer noreferrer" target="_blank">http://www.sraoss.co.jp/index_en/</a><br>
> Japanese:<a href="http://www.sraoss.co.jp" rel="noreferrer noreferrer noreferrer noreferrer" target="_blank">http://www.sraoss.co.jp</a><br>
> <br>
>> Hi,<br>
>> <br>
>> Please find attached logs.<br>
>> <br>
>> Thank you.<br>
>> <br>
>> Best,<br>
>> Jesús<br>
>> <br>
>> El lun, 3 abr 2023 11:06, Tatsuo Ishii <<a href="mailto:ishii@sraoss.co.jp" rel="noreferrer noreferrer noreferrer" target="_blank">ishii@sraoss.co.jp</a>> escribió:<br>
>> <br>
>>> Hi,<br>
>>><br>
>>> Can you share pgpool log?<br>
>>><br>
>>> > Hi Tatsuo,<br>
>>> ><br>
>>> > Should I test anything else to try to solve my problem?<br>
>>> ><br>
>>> > Thank you.<br>
>>> ><br>
>>> > Best,<br>
>>> > Jesús<br>
>>> ><br>
>>> > El vie, 31 mar 2023 12:10, Jesús Campoy <<a href="mailto:jesuscampoy@gmail.com" rel="noreferrer noreferrer noreferrer" target="_blank">jesuscampoy@gmail.com</a>><br>
>>> escribió:<br>
>>> ><br>
>>> >> Hi,<br>
>>> >><br>
>>> >> I just performed the same tests with auto_failback to off but the<br>
>>> >> behaviour is the same (clients are disconnected).<br>
>>> >><br>
>>> >> Thank you Tatsuo.<br>
>>> >><br>
>>> >> Best,<br>
>>> >> Jesús<br>
>>> >><br>
>>> >> El vie, 31 mar 2023 2:31, Tatsuo Ishii <<a href="mailto:ishii@sraoss.co.jp" rel="noreferrer noreferrer noreferrer" target="_blank">ishii@sraoss.co.jp</a>> escribió:<br>
>>> >><br>
>>> >>> Hi Jesús,<br>
>>> >>><br>
>>> >>> Can you try again after setting "auto_failback = off"? I suspect<br>
>>> >>> auto_failback confuses pgpool.<br>
>>> >>><br>
>>> >>> Best reagards,<br>
>>> >>> --<br>
>>> >>> Tatsuo Ishii<br>
>>> >>> SRA OSS LLC<br>
>>> >>> English: <a href="http://www.sraoss.co.jp/index_en/" rel="noreferrer noreferrer noreferrer noreferrer" target="_blank">http://www.sraoss.co.jp/index_en/</a><br>
>>> >>> Japanese:<a href="http://www.sraoss.co.jp" rel="noreferrer noreferrer noreferrer noreferrer" target="_blank">http://www.sraoss.co.jp</a><br>
>>> >>><br>
>>> >>> > Hi Tatsuo,<br>
>>> >>> ><br>
>>> >>> > When I connect to pgpool with psql this session is not disconnected.<br>
>>> >>> > However, I've performed a test with pgbench inserting data with 30<br>
>>> >>> clients<br>
>>> >>> > in the database and when I shutdown server2 some clients of pgbench<br>
>>> are<br>
>>> >>> > disconnected.<br>
>>> >>> > Please find attached a zip file with pgpool logs, pgbench log and<br>
>>> >>> > configurations of pgpool and postgres.<br>
>>> >>> ><br>
>>> >>> > Thank you for your assistance in this matter.<br>
>>> >>> ><br>
>>> >>> > Best,<br>
>>> >>> > Jesús<br>
>>> >>> ><br>
>>> >>> > El mié, 22 mar 2023 a las 2:05, Tatsuo Ishii (<<a href="mailto:ishii@sraoss.co.jp" rel="noreferrer noreferrer noreferrer" target="_blank">ishii@sraoss.co.jp</a>>)<br>
>>> >>> > escribió:<br>
>>> >>> ><br>
>>> >>> >> > Please find attached my pgpool config and a log file when the<br>
>>> standby<br>
>>> >>> >> > (server2) is powered off.<br>
>>> >>> >> > Thank you for your help.<br>
>>> >>> >><br>
>>> >>> >> I assume server2 = host B.<br>
>>> >>> >><br>
>>> >>> >> I have looked into the log file but failed to find log lines related<br>
>>> >>> >> to user sessions which were diconnected. I was looking for such log<br>
>>> >>> >> lines because you said:<br>
>>> >>> >><br>
>>> >>> >> > Sometimes I have to power off the host B and then, the clients<br>
>>> >>> connected<br>
>>> >>> >><br>
>>> >>> >> If such an event occurs, there should be such log lines.<br>
>>> >>> >> Many log lines like:<br>
>>> >>> >><br>
>>> >>> >> 2023-03-20 10:59:27.725: [unknown] pid 31499: LOG:  failover or<br>
>>> >>> failback<br>
>>> >>> >> event detected<br>
>>> >>> >> 2023-03-20 10:59:27.725: [unknown] pid 31499: DETAIL:  restarting<br>
>>> >>> myself<br>
>>> >>> >> 2023-03-20 10:59:27.726: main pid 30237: LOG:  child process with<br>
>>> pid:<br>
>>> >>> >> 31499 exits with status 256<br>
>>> >>> >> 2023-03-20 10:59:27.727: main pid 30237: LOG:  fork a new child<br>
>>> process<br>
>>> >>> >> with pid: 29017<br>
>>> >>> >><br>
>>> >>> >> just show that process 31499 is not related to any client session<br>
>>> >>> >> ([unknown] indicates this) and even if the process exited, any<br>
>>> client<br>
>>> >>> >> will not be affected.<br>
>>> >>> >><br>
>>> >>> >> Can you connect to pgpool using psql and shutdown server2 so that<br>
>>> log<br>
>>> >>> >> lines I am expecting are recorded?<br>
>>> >>> >><br>
>>> >>> >> Best reagards,<br>
>>> >>> >> --<br>
>>> >>> >> Tatsuo Ishii<br>
>>> >>> >> SRA OSS LLC<br>
>>> >>> >> English: <a href="http://www.sraoss.co.jp/index_en/" rel="noreferrer noreferrer noreferrer noreferrer" target="_blank">http://www.sraoss.co.jp/index_en/</a><br>
>>> >>> >> Japanese:<a href="http://www.sraoss.co.jp" rel="noreferrer noreferrer noreferrer noreferrer" target="_blank">http://www.sraoss.co.jp</a><br>
>>> >>> >><br>
>>> >>> >><br>
>>> >>> >> > Best,<br>
>>> >>> >> > Jesús<br>
>>> >>> >> ><br>
>>> >>> >> > El vie, 17 mar 2023 a las 0:13, Tatsuo Ishii (<<a href="mailto:ishii@sraoss.co.jp" rel="noreferrer noreferrer noreferrer" target="_blank">ishii@sraoss.co.jp</a><br>
>>> >)<br>
>>> >>> >> > escribió:<br>
>>> >>> >> ><br>
>>> >>> >> >> > Ok, I will send you the log ASAP.<br>
>>> >>> >> >> > I forget to indicate that we are running two instances of<br>
>>> pgpool<br>
>>> >>> using<br>
>>> >>> >> >> > watchdog and VIP.<br>
>>> >>> >> >> ><br>
>>> >>> >> >> > I mean, in host A is running pgpool (active) and primary<br>
>>> >>> database. In<br>
>>> >>> >> >> host<br>
>>> >>> >> >> > B is running the other instance of pgpool and the standby<br>
>>> >>> database.<br>
>>> >>> >> >> > Sometimes I have to power off the host B and then, the clients<br>
>>> >>> >> connected<br>
>>> >>> >> >> to<br>
>>> >>> >> >> > pgpool in VIP are disconnected.<br>
>>> >>> >> >> ><br>
>>> >>> >> >> > I have the same pgpool.conf for both pgpool instances. Do you<br>
>>> >>> need It?<br>
>>> >>> >> >><br>
>>> >>> >> >> No, one pgpool.conf is enough.<br>
>>> >>> >> >><br>
>>> >>> >> >> > Thanks for your help!<br>
>>> >>> >> >><br>
>>> >>> >> >> You are welcome.<br>
>>> >>> >> >> --<br>
>>> >>> >> >> Tatsuo Ishii<br>
>>> >>> >> >> SRA OSS LLC<br>
>>> >>> >> >> English: <a href="http://www.sraoss.co.jp/index_en/" rel="noreferrer noreferrer noreferrer noreferrer" target="_blank">http://www.sraoss.co.jp/index_en/</a><br>
>>> >>> >> >> Japanese:<a href="http://www.sraoss.co.jp" rel="noreferrer noreferrer noreferrer noreferrer" target="_blank">http://www.sraoss.co.jp</a><br>
>>> >>> >> >><br>
>>> >>> >><br>
>>> >>><br>
>>> >><br>
>>><br>
> _______________________________________________<br>
> pgpool-general mailing list<br>
> <a href="mailto:pgpool-general@pgpool.net" rel="noreferrer noreferrer noreferrer" target="_blank">pgpool-general@pgpool.net</a><br>
> <a href="http://www.pgpool.net/mailman/listinfo/pgpool-general" rel="noreferrer noreferrer noreferrer noreferrer" target="_blank">http://www.pgpool.net/mailman/listinfo/pgpool-general</a><br>
</blockquote></div></div>