Re: Recovering from detoast-related catcache invalidations
Heikki Linnakangas <hlinnaka@iki.fi>
From: Heikki Linnakangas <hlinnaka@iki.fi>
To: Noah Misch <noah@leadboat.com>
Cc: Tom Lane <tgl@sss.pgh.pa.us>, Xiaoran Wang <fanfuxiaoran@gmail.com>,
pgsql-hackers@lists.postgresql.org, Andres Freund <andres@anarazel.de>
Date: 2025-01-14T13:13:21Z
Lists: pgsql-hackers
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Fix catcache invalidation of a list entry that's being built
- f217c410553d 13.19 landed
- 91fc447c21d3 16.7 landed
- 96e61b2792a5 17.3 landed
- fce17c3a53d6 14.16 landed
- ce7c406f0f8d 15.11 landed
- af8cd1639ab2 18.0 landed
-
Cope with inplace update making catcache stale during TOAST fetch.
- 7a21306aee0a 13.16 landed
- 11f3815d6af8 12.20 landed
- af73e37fa181 14.13 landed
- b08a4b6163eb 15.8 landed
- e4afd7153bd8 16.4 landed
- f9f47f0d93d1 17.0 landed
-
Add previous commit to .git-blame-ignore-revs.
- 36578fa04942 17.0 landed
-
Re-pgindent catcache.c after previous commit.
- d41358f4bbc8 15.6 landed
- d29a4fbacfb7 12.18 landed
- 96c019ffa3f8 17.0 landed
- 7ceeb57baddd 14.11 landed
- 56dcd71decb7 16.2 landed
- 475b3ea3c06b 13.14 landed
-
Cope with catcache entries becoming stale during detoasting.
- db122d426a2d 14.11 landed
- ad98fb14226a 17.0 landed
- 98e03f957436 13.14 landed
- 7e2561e1a258 16.2 landed
- 3b4d85cf159c 12.18 landed
- 2a46a0df4793 15.6 landed
On 12/01/2025 03:26, Noah Misch wrote:
> On Thu, Jan 09, 2025 at 11:39:53AM +0200, Heikki Linnakangas wrote:
>> On 07/01/2025 23:56, Noah Misch wrote:
>> @@ -697,9 +725,14 @@ CreateCacheMemoryContext(void)
>> *
>> * This is not very efficient if the target cache is nearly empty.
>> * However, it shouldn't need to be efficient; we don't invoke it often.
>> + *
>> + * If 'debug_discard' is true, we are being called as part of
>> + * debug_discard_caches. In that case, the cache not reset for correctness,
>
> s/cache not/cache is not/ or similar
fixed
>> + PG_TRY();
>> {
>> - matches = equalTuple(before, ntp);
>> - heap_freetuple(before);
>> + dtp = toast_flatten_tuple(ntp, cache->cc_tupdesc);
>> }
>> - if (!matches || !systable_recheck_tuple(scandesc, ntp))
>> + PG_FINALLY();
>> {
>> - heap_freetuple(dtp);
>
> Is this an intentional removal of the heap_freetuple(dtp) before return NULL?
No, that was a mistake. Fixed.
>> - return NULL;
>> + Assert(catcache_in_progress_stack == &in_progress_ent);
>> + catcache_in_progress_stack = save_in_progress;
>> }
>> + PG_END_TRY();
>> +
>> + if (in_progress_ent.dead)
>> + return NULL;
> ...
>> +$node->append_conf(
>> + 'postgresql.conf', qq{
>> +debug_discard_caches=1
>> +});
>
> I'd drop this debug_discard_caches. debug_discard_caches buildfarm runs will
> still test it, so let's have normal runs test the normal case.
Ah yes, I didn't mean to include that; removed.
Committed with those fixes. Thanks for the review!
--
Heikki Linnakangas
Neon (https://neon.tech)