Release 3.5.6

Release Date: 2017-03-17

A.65.1. Bug fixes

  • Add "Wants=network.target" to pgpool.service file. ( bug 294 ) (Bo Peng)

  • Fix pcp_promote_node bug that fails promoting node 0. (Yugo Nagata)

    The master node could not be promoted by pcp_promote_node with the following error;

         FATAL: invalid pgpool mode for process recovery request
         DETAIL: specified node is already primary node, can't promote node id 0
        

    In streaming replication mode, there is a case that Pgpool-II regards the status of primary node as "standby" for some reasons, for example, when pg_ctl promote is executed manually during Pgpool-II is running, in which case, it seems to Pgpool-II that the primary node doesn't exist.

    This status mismatch should be fixe by pcp_promote_node, but when the node is the master node (the first alive node), it fails as mentioned above.

    The reason is as following. before changing the status, pcp_promote_node checks if the specified node is already primary or not by comparing the node id with PRIMARY_NODE_ID. However, if the primary doesn't exist from Pgpool-II's view, PRIMARY_NODE_ID is set to 0, which is same as MASTER_NODE_ID. Hence, when the master node is specified to be promoted, pcp_promote_node is confused that this node is already primary and doesn't have to be promoted, and it exits with the error.

    To fix this, pcp_promote_node should check the node id by using REAL_PRIMARY_NODE_ID, which is set -1 when the primary doesn't exist, rather than PRIMARY_NODE_ID.

  • Add the latest release note link to README file.(Bo Peng)

  • Pgpool-II should not perform ping test after bringing down the VIP. (Muhammad Usama)

    This issue was reported by the reporter of bug:[pgpool-II 0000249]: watchdog sometimes fails de-escalation

  • Fix to release shared memory segments when Pgpool-II exits. ( bug 272 ) (Tatsuo Ishii)

  • Fix for [pgpool-general: 5315] pg_terminate_backend (Muhammad Usama)

  • Adding the missing ExecStop and ExecReload commands to the systemd service configuration file. (Muhammad Usama)

  • Fix for 281: "segmentation fault" when execute pcp_attach_node . ( bug 281 ) (Muhammad Usama)

  • Fix load balancing bug in streaming replication mode. (Tatsuo Ishii)

    In an explicit transaction, any SELECT will be load balanced until write query is sent. After writing query is sent, any SELECT should be sent to the primary node. However if a SELECT is sent before a sync message is sent, this does not work since the treatment of writing query is done after ready for query message arrives.

    Solution is, the treatment for writing query is done in executing the writing query as well.

    The bug has been there since V3.5.

  • Fix yet another kind mismatch error in streaming replication mode. (Tatsuo Ishii)

  • Fix do_query() hangs after close message. (Tatsuo Ishii)

  • Fixing stack smashing detected. ( bug 280 ) (Muhammad Usama)

    It was a buffer overflow in wd_get_cmd function

  • Fixing the issue with the watchdog process restart. (Muhammad Usama)

    When the watchdog process gets abnormally terminated because of some problem (e.g. Segmentation fault) the new spawned watchdog process fails to start and produces an error "bind on ... failed with reason: Address already in use".

    Reason is the abnormally terminating watchdog process never gets the time to clean-up the socket it uses for IPC and the new process gets an error because the socket address is already occupied.

    Fix is, the Pgpool main process sets the flag in shared memory to mark the watchdog process was abnormally terminated and at startup when the watchdog process see that the flag is set, it performs the clean up of the socket file and also performs the de-escalation (If the watchdog process was crashed when it was master/coordinator node) if required before initializing itself.

  • Fix query cache bug reported in pgpool-general-jp:1441 . (Tatsuo Ishii)

    In streaming replication mode with query cache enabled, SELECT hangs in the following scenario:

         1) a SELECT hits query cache and returns rows from the query cache.
         2) following SELECT needs to search meta data and it hangs.
        

    In #1, while returning the cached result, it misses to call pool_unset_pending_response(), which leave the pending_response flag be set. In #2, do_query() checks the flag and tries to read pending response from backend. Since there's no pending data in backend, it hangs in reading data from backend.

    Fix is, just call pool_unset_pending_response() in #1 to reset the flag.

    Bug report and fix provided by Nobuyuki Nagai. New regression test item (068) added by me.

  • Remove elog/ereport calls from signal handlers. (Tatsuo Ishii)

    See [pgpool-hackers: 1950] for details.

  • Fix bug failed to create INET domain socket in FreeBSD if listen_addresses = '*'. ( bug 202 ) (Bo Peng)

  • Fix for 0000249: watchdog sometimes fails de-escalation. ( bug 249 ) (Muhammad Usama)

    The solution is to use the waitpid() system call without WNOHANG option.

  • Fix connection_life_time broken by authentication_timeout. (Yugo Nagata)

  • Fix authentication timeout that can occur right after client connecttions. (Yugo Nagata)