diff options
author | Alexander Korotkov <akorotkov@postgresql.org> | 2024-04-11 15:54:25 +0300 |
---|---|---|
committer | Alexander Korotkov <akorotkov@postgresql.org> | 2024-04-11 16:02:49 +0300 |
commit | 922c4c461d213a422ee7eb6c38e399607539210a (patch) | |
tree | dcd17814810d1637851b2012acd5bf12c018d463 | |
parent | 8dd0bb84da7d56a9e41241b26bfbf6b79644d574 (diff) | |
download | postgresql-922c4c461d213a422ee7eb6c38e399607539210a.tar.gz postgresql-922c4c461d213a422ee7eb6c38e399607539210a.zip |
Revert: Allow table AM to store complex data structures in rd_amcache
This commit reverts 02eb07ea89 per review by Andres Freund.
Discussion: https://postgr.es/m/20240410165236.rwyrny7ihi4ddxw4%40awork3.anarazel.de
-rw-r--r-- | src/backend/access/heap/heapam_handler.c | 1 | ||||
-rw-r--r-- | src/backend/utils/cache/relcache.c | 11 | ||||
-rw-r--r-- | src/include/access/tableam.h | 34 | ||||
-rw-r--r-- | src/include/utils/rel.h | 10 |
4 files changed, 12 insertions, 44 deletions
diff --git a/src/backend/access/heap/heapam_handler.c b/src/backend/access/heap/heapam_handler.c index c019d96a162..3428d80817c 100644 --- a/src/backend/access/heap/heapam_handler.c +++ b/src/backend/access/heap/heapam_handler.c @@ -2656,7 +2656,6 @@ static const TableAmRoutine heapam_methods = { .index_validate_scan = heapam_index_validate_scan, .relation_analyze = heapam_analyze, - .free_rd_amcache = NULL, .relation_size = table_block_relation_size, .relation_needs_toast_table = heapam_relation_needs_toast_table, .relation_toast_am = heapam_relation_toast_am, diff --git a/src/backend/utils/cache/relcache.c b/src/backend/utils/cache/relcache.c index 3fe74dabd00..262c9878dd3 100644 --- a/src/backend/utils/cache/relcache.c +++ b/src/backend/utils/cache/relcache.c @@ -2269,7 +2269,9 @@ RelationReloadIndexInfo(Relation relation) RelationCloseSmgr(relation); /* Must free any AM cached data upon relcache flush */ - table_free_rd_amcache(relation); + if (relation->rd_amcache) + pfree(relation->rd_amcache); + relation->rd_amcache = NULL; /* * If it's a shared index, we might be called before backend startup has @@ -2489,7 +2491,8 @@ RelationDestroyRelation(Relation relation, bool remember_tupdesc) pfree(relation->rd_options); if (relation->rd_indextuple) pfree(relation->rd_indextuple); - table_free_rd_amcache(relation); + if (relation->rd_amcache) + pfree(relation->rd_amcache); if (relation->rd_fdwroutine) pfree(relation->rd_fdwroutine); if (relation->rd_indexcxt) @@ -2551,7 +2554,9 @@ RelationClearRelation(Relation relation, bool rebuild) RelationCloseSmgr(relation); /* Free AM cached data, if any */ - table_free_rd_amcache(relation); + if (relation->rd_amcache) + pfree(relation->rd_amcache); + relation->rd_amcache = NULL; /* * Treat nailed-in system relations separately, they always need to be diff --git a/src/include/access/tableam.h b/src/include/access/tableam.h index ac24c999453..1cc395317e5 100644 --- a/src/include/access/tableam.h +++ b/src/include/access/tableam.h @@ -688,14 +688,6 @@ typedef struct TableAmRoutine */ /* - * This callback frees relation private cache data stored in rd_amcache. - * After the call all memory related to rd_amcache must be freed, - * rd_amcache must be set to NULL. If this callback is not provided, - * rd_amcache is assumed to point to a single memory chunk. - */ - void (*free_rd_amcache) (Relation rel); - - /* * See table_relation_size(). * * Note that currently a few callers use the MAIN_FORKNUM size to figure @@ -1817,32 +1809,6 @@ table_relation_analyze(Relation relation, AcquireSampleRowsFunc *func, */ /* - * Frees relation private cache data stored in rd_amcache. Uses - * free_rd_amcache method if provided. Assumes rd_amcache to point to single - * memory chunk otherwise. - */ -static inline void -table_free_rd_amcache(Relation rel) -{ - if (rel->rd_tableam && rel->rd_tableam->free_rd_amcache) - { - rel->rd_tableam->free_rd_amcache(rel); - - /* - * We are assuming free_rd_amcache() did clear the cache and left NULL - * in rd_amcache. - */ - Assert(rel->rd_amcache == NULL); - } - else - { - if (rel->rd_amcache) - pfree(rel->rd_amcache); - rel->rd_amcache = NULL; - } -} - -/* * Return the current size of `rel` in bytes. If `forkNumber` is * InvalidForkNumber, return the relation's overall size, otherwise the size * for the indicated fork. diff --git a/src/include/utils/rel.h b/src/include/utils/rel.h index f25f769af2b..87002049538 100644 --- a/src/include/utils/rel.h +++ b/src/include/utils/rel.h @@ -221,12 +221,10 @@ typedef struct RelationData * rd_amcache is available for index and table AMs to cache private data * about the relation. This must be just a cache since it may get reset * at any time (in particular, it will get reset by a relcache inval - * message for the relation). If used for table AM it must point to a - * single memory chunk palloc'd in CacheMemoryContext, or more complex - * data structure in that memory context to be freed by free_rd_amcache - * method. If used for index AM it must point to a single memory chunk - * palloc'd in rd_indexcxt memory context. A relcache reset will include - * freeing that chunk and setting rd_amcache = NULL. + * message for the relation). If used, it must point to a single memory + * chunk palloc'd in CacheMemoryContext, or in rd_indexcxt for an index + * relation. A relcache reset will include freeing that chunk and setting + * rd_amcache = NULL. */ void *rd_amcache; /* available for use by index/table AM */ |