Re: type cache cleanup improvements
Alexander Korotkov <aekorotkov@gmail.com>
Commits
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Maintain RelIdToTypeIdCacheHash in TypeCacheOpcCallback()
- bb78e4267817 18.0 landed
-
Fix concurrrently in typcache_rel_type_cache.sql
- aa1e898dea66 18.0 landed
-
Avoid looping over all type cache entries in TypeCacheRelCallback()
- b85a9d046efd 18.0 landed
- c14d4acb8134 18.0 landed
-
Update header comment for lookup_type_cache()
- c1500a1ba7e1 18.0 landed
-
Revert: Avoid looping over all type cache entries in TypeCacheRelCallback()
- 8daa62a10c91 18.0 landed
-
Introduce hash_search_with_hash_value() function
- d0f020037e19 18.0 landed
-
Optimize InvalidateAttoptCacheCallback() and TypeCacheTypCallback()
- 40064a8ee1b3 18.0 landed
-
Refactor initial hash lookup in dynahash.c
- cc5ef90edd80 17.0 landed
-
Rationalize and improve error messages for some jsonpath items
- 92d2ab7554f9 17.0 cited
-
Avoid race in RelationBuildDesc() affecting CREATE INDEX CONCURRENTLY.
- fdd965d074d4 15.0 cited
-
Represent Lists as expansible arrays, not chains of cons-cells.
- 1cff1b95ab6d 13.0 cited
Attachments
- v11-0001-Update-header-comment-for-lookup_type_cache.patch (application/x-patch) patch v11-0001
- v11-0002-Avoid-looping-over-all-type-cache-entries-in-Typ.patch (application/x-patch) patch v11-0002
On Sat, Aug 31, 2024 at 10:33 PM Andrei Lepikhov <lepihov@gmail.com> wrote: > On 29/8/2024 11:01, Alexander Korotkov wrote: > > On Mon, Aug 26, 2024 at 11:26 AM Alexander Korotkov > >> Secondly, I'm not terribly happy with current state of type cache. > >> The caller of lookup_type_cache() might get already invalidated data. > >> This probably OK, because caller probably hold locks on dependent > >> objects to guarantee that relevant properties of type actually > >> persists. At very least this should be documented, but it doesn't > >> seem so. Setting of tupdesc is sensitive to its order of execution. > >> That feels quite fragile to me, and not documented either. I think > >> this area needs improvements before we push additional functionality > >> there. > > > > I see fdd965d074 added a proper handling for concurrent invalidation > > for relation cache. If a concurrent invalidation occurs, we retry > > building a relation descriptor. Thus, we end up with returning of a > > valid relation descriptor to caller. I wonder if we can take the same > > approach to type cache. That would make the whole type cache more > > consistent and less fragile. Also, this patch will be simpler. > I think I understand the solution from the commit fdd965d074. > Just for the record, you mentioned invalidation inside the > lookup_type_cache above. Passing through the code, I found the only > place for such a case - the call of the GetDefaultOpClass, which > triggers the opening of the relation pg_opclass, which can cause an > AcceptInvalidationMessages call. Did you mean this case, or does a wider > field of cases exist here? I've tried to implement handling of concurrent invalidation similar to commit fdd965d074. However that appears to be more difficult that I thought, because for some datatypes like arrays, ranges etc we might need fill the element type and reference it. So, I decided to continue with the current approach but borrowing some ideas from fdd965d074. The revised patchset attached. 0001 - adds comment about concurrent invalidation handling 0002 - revised c14d4acb8. Now we track type oids, whose TypeCacheEntry's filing is in-progress. Add entry to RelIdToTypeIdCacheHash at the end of lookup_type_cache() or on the transaction abort. During invalidation don't assert RelIdToTypeIdCacheHash to be here if TypeCacheEntry is in-progress. ------ Regards, Alexander Korotkov Supabase