Thread

  1. A small problem when rehashing catalog cache

    cca5507 <cca5507@qq.com> — 2025-12-16T11:16:20Z

    Hi,
    
    When we search catalog cache, we move the searched tuple to the front of the list:
    
    ```
    		/*
    		 * We found a match in the cache.  Move it to the front of the list
    		 * for its hashbucket, in order to speed subsequent searches.  (The
    		 * most frequently accessed elements in any hashbucket will tend to be
    		 * near the front of the hashbucket's list.)
    		 */
    		dlist_move_head(bucket, &ct->cache_elem);
    ```
    
    If I understand correctly, we reverse the list in RehashCatCache() and RehashCatCacheLists():
    
    ```
    	/* Move all entries from old hash table to new. */
    	for (i = 0; i < cp->cc_nbuckets; i++)
    	{
    		dlist_mutable_iter iter;
    
    		dlist_foreach_modify(iter, &cp->cc_bucket[i])
    		{
    			CatCTup    *ct = dlist_container(CatCTup, cache_elem, iter.cur);
    			int			hashIndex = HASH_INDEX(ct->hash_value, newnbuckets);
    
    			dlist_delete(iter.cur);
    			dlist_push_head(&newbucket[hashIndex], &ct->cache_elem);
    		}
    	}
    ```
    
    Maybe "dlist_push_head" -> "dlist_push_tail"? Thoughts?
    
    --
    Regards,
    ChangAo Chen