A small problem when rehashing catalog cache - Mailing list pgsql-hackers

From cca5507
Subject A small problem when rehashing catalog cache
Date
Msg-id tencent_9EA10D8512B5FE29E7323F780A0749768708@qq.com
Whole thread Raw
List pgsql-hackers
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

pgsql-hackers by date:

Previous
From: Nitin Jadhav
Date:
Subject: Change checkpoint‑record‑missing PANIC to FATAL
Next
From: Dagfinn Ilmari Mannsåker
Date:
Subject: Re: [PATCH]Remove the redundant assignment