pgpool2.git / summary / log / commit / refs
commit ef0f03201407eecfe21ac72b1e24f5139525c2c1
Author: Tatsuo Ishii <ishii@postgresql.org>
Date: Sun Apr 08 22:51:07 2012 +0000
Fix pool_reuse_block(). Remove item hash entry before re-initialize
target block.
Enhance error message when memqcache_total_size and
memqcache_cache_block_size are not appropreate. Also add some log
message.
pool_memqcache.c | 30 +++++++++++++++++++++++++++---
1 file changed, 27 insertions(+), 3 deletions(-)
diff --git a/pool_memqcache.c b/pool_memqcache.c
index 084201306..4480b5864 100644
--- a/pool_memqcache.c
+++ b/pool_memqcache.c
@@ -1342,11 +1342,13 @@ size_t pool_shared_memory_cache_size(void)
pool_config->memqcache_cache_block_size;
if (num_blocks == 0)
{
- pool_error("pool_shared_memory_cache_size: wrong memqcache_total_size %d or memqcache_cache_block_size %d",
+ pool_error("pool_shared_memory_cache_size: memqcache_total_size %d should be greater or equal to memqcache_cache_block_size %d",
pool_config->memqcache_total_size, pool_config->memqcache_cache_block_size);
return 0;
}
+ pool_log("pool_shared_memory_cache_size: number of blocks: %d", num_blocks);
+
/* Remenber # of blocks */
pool_set_memqcache_blocks(num_blocks);
size = pool_config->memqcache_cache_block_size * num_blocks;
@@ -1445,7 +1447,7 @@ static void *pool_fsmm_address(void)
}
/*
- * Clock algorythm shared query cache management modules.
+ * Clock algorithm shared query cache management modules.
*/
/*
@@ -1472,9 +1474,25 @@ static POOL_CACHE_BLOCKID pool_reuse_block(void)
char *block = block_address(*pool_fsmm_clock_hand);
POOL_CACHE_BLOCK_HEADER *bh = (POOL_CACHE_BLOCK_HEADER *)block;
POOL_CACHE_BLOCKID reused_block;
+ POOL_CACHE_ITEM_POINTER *cip;
+ char *p;
+ int i;
bh->flags = 0;
reused_block = *pool_fsmm_clock_hand;
+ p = block_address(reused_block);
+
+ for (i=0;i<bh->num_items;i++)
+ {
+ cip = item_pointer(p, i);
+
+ if (!(POOL_ITEM_DELETED & cip->flags))
+ {
+ pool_hash_delete(&cip->query_hash);
+ pool_debug("pool_reuse_block: blockid: %d item: %d", reused_block, i);
+ }
+ }
+
pool_init_cache_block(reused_block);
pool_update_fsmm(reused_block, POOL_MAX_FREE_SPACE);
@@ -1482,7 +1500,7 @@ static POOL_CACHE_BLOCKID pool_reuse_block(void)
if (*pool_fsmm_clock_hand >= maxblock)
*pool_fsmm_clock_hand = 0;
- pool_debug("pool_reuse_block: blockid: %d", reused_block);
+ pool_log("pool_reuse_block: blockid: %d", reused_block);
return reused_block;
}
@@ -1660,6 +1678,10 @@ static POOL_CACHEID *pool_add_item_shmem_cache(POOL_QUERY_HASH *query_hash, char
}
}
+ /*
+ * We disable packing for now.
+ * Revisit and remove following code fragment later.
+ */
need_pack = false;
if (need_pack)
@@ -1811,6 +1833,8 @@ static POOL_CACHEID *pool_add_item_shmem_cache(POOL_QUERY_HASH *query_hash, char
return NULL;
}
+ pool_debug("pool_add_item_shmem_cache: block: %d item: %d", cacheid.blockid, cacheid.itemid);
+
#ifdef SHMEMCACHE_DEBUG
dump_shmem_cache(blockid);
#endif
[parent: e0f373e2957d]