Fix query cache bug reported in pgpool-general-jp:1441.
authorTatsuo Ishii <ishii@postgresql.org>
Wed, 18 Jan 2017 23:24:34 +0000 (08:24 +0900)
committerTatsuo Ishii <ishii@postgresql.org>
Wed, 18 Jan 2017 23:38:33 +0000 (08:38 +0900)
commit170ee46ffe46b78af613a2c14cf692f52571e81a
treea21b687aefa8588c8ee61815453267a57e3a23de
parent075297a96a2c8390fd937684365fa17b4bf84c27
Fix query cache bug reported in pgpool-general-jp:1441.

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.
src/protocol/pool_proto_modules.c
src/test/regression/tests/068.memqcache_bug/Sample.java [new file with mode: 0644]
src/test/regression/tests/068.memqcache_bug/test.sh [new file with mode: 0755]