Fix main process exiting while performing finding primary node.
authorTatsuo Ishii <ishii@sraoss.co.jp>
Fri, 4 Mar 2022 11:00:41 +0000 (20:00 +0900)
committerTatsuo Ishii <ishii@sraoss.co.jp>
Fri, 4 Mar 2022 11:12:27 +0000 (20:12 +0900)
commitcbf10da7ce18859c42d2b628ebca9e4756c4b3b5
treefdf4fca074180540f8b660d3993f0d1cb225fda8
parentbede3423ed5a837bb7bd5737409b0e0fad16a52f
Fix main process exiting while performing finding primary node.

Pgpool-II main process tries to find primary node whenever the cluster
status is changed by failover/failback. While doing it, if a backend
is failing or shutting down, socket write to the backend could
fail. Unfortunately in the case do_query() throws FATAL error, which
makes the Pgpool-II main process die like this.

2022-03-04 18:13:12.711: main pid 795826: WARNING:  write on backend 1 failed with error :"Broken pipe"
2022-03-04 18:13:12.711: main pid 795826: DETAIL:  while trying to write data from offset: 0 wlen: 32
2022-03-04 18:13:12.711: main pid 795826: LOG:  notice_backend_error: called from pgpool main. ignored.
2022-03-04 18:13:12.711: main pid 795826: LOG:  unable to flush data to backend
2022-03-04 18:13:12.711: main pid 795826: DETAIL:  do not failover because I am the main process
2022-03-04 18:13:12.711: main pid 795826: FATAL:  Backend throw an error message
2022-03-04 18:13:12.711: main pid 795826: DETAIL:  Exiting current session because of an error from backend
2022-03-04 18:13:12.711: main pid 795826: HINT:  BACKEND Error: "terminating connection due to administrator command"
2022-03-04 18:13:12.715: main pid 795826: LOG:  shutting down

To prevent it, change ereport(FATAL) to ereport(ERROR) in do_query().
src/protocol/pool_process_query.c