[pgpool-hackers: 4258] Fixing query cache bugs

Tatsuo Ishii ishii at sraoss.co.jp
Mon Jan 9 10:50:43 JST 2023


I have found multiple query cache bugs.

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

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 cyle but better to fix.

Attached is a proposed fix (along with assorted comment fixes).

Best reagards,
Tatsuo Ishii
English: http://www.sraoss.co.jp/index_en/
-------------- next part --------------
A non-text attachment was scrubbed...
Name: fix_query_cache.patch
Type: text/x-patch
Size: 2909 bytes
Desc: not available
URL: <http://www.pgpool.net/pipermail/pgpool-hackers/attachments/20230109/c108dcaf/attachment.bin>

More information about the pgpool-hackers mailing list