[pgpool-committers: 9178] pgpool: Fix multiple query cache bug.

Tatsuo Ishii ishii at sraoss.co.jp
Sun Feb 5 21:21:14 JST 2023


Fix multiple query cache bug.

1) pool_add_item_shmem_cache() calls pool_init_cache_block() when
   there's no free cache item hash table entry. But this is
   unnecessary since pool_reuse_block() is already called from
   pool_add_item_shmem_cache(). This is actually harmless because the
   second pool_init_cache_block() call just set the same data as the
   first call of pool_init_cache_block(). It's just a waste of CPU
   cycle.

2) The cache blocks are supposed to be initialized while Pgpool-II
   starts up but actually not. Each cache block has the free space
   length in the block header after initialization. Since the free
   space length is not set, pool_get_block() fails to find a cache
   block which has enough free space, and it calls pool_reuse_block(),
   which is actually unnecessary (you will see something like
   "pool_reuse_block: blockid: 0" in pgpool log). Since
   pool_reuse_block() returns a free block anyway, this is just a
   waste of CPU cycle but better to fix.

Discussion: https://www.pgpool.net/pipermail/pgpool-hackers/2023-January/004259.html
Backpatch-through: 4.0

Branch
------
V4_4_STABLE

Details
-------
https://git.postgresql.org/gitweb?p=pgpool2.git;a=commitdiff;h=33655c327e4fe65a7fe4affad776d837647d5a5b

Modified Files
--------------
src/include/query_cache/pool_memqcache.h |  2 ++
src/main/pgpool_main.c                   |  4 +++-
src/query_cache/pool_memqcache.c         | 27 ++++++++++++++++++++-------
3 files changed, 25 insertions(+), 8 deletions(-)



More information about the pgpool-committers mailing list