public inbox for [email protected]help / color / mirror / Atom feed
[PATCH] Dead code: REINDEX (CONCURRENTLY, TABLESPACE ..): c5b286047cd698021e57a527215b48865fd4ad4e 2+ messages / 2 participants [nested] [flat]
* [PATCH] Dead code: REINDEX (CONCURRENTLY, TABLESPACE ..): c5b286047cd698021e57a527215b48865fd4ad4e @ 2021-02-15 01:49 Justin Pryzby <[email protected]> 0 siblings, 0 replies; 2+ messages in thread From: Justin Pryzby @ 2021-02-15 01:49 UTC (permalink / raw) --- src/backend/commands/indexcmds.c | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 127ba7835d..c77a9b2563 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -3260,73 +3260,66 @@ ReindexRelationConcurrently(Oid relationOid, ReindexParams *params) { /* * In the case of a relation, find all its indexes including * toast indexes. */ Relation heapRelation; /* Save the list of relation OIDs in private context */ oldcontext = MemoryContextSwitchTo(private_context); /* Track this relation for session locks */ heapRelationIds = lappend_oid(heapRelationIds, relationOid); MemoryContextSwitchTo(oldcontext); if (IsCatalogRelationOid(relationOid)) ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("cannot reindex system catalogs concurrently"))); /* Open relation to get its indexes */ if ((params->options & REINDEXOPT_MISSING_OK) != 0) { heapRelation = try_table_open(relationOid, ShareUpdateExclusiveLock); /* leave if relation does not exist */ if (!heapRelation) break; } else heapRelation = table_open(relationOid, ShareUpdateExclusiveLock); - if (OidIsValid(params->tablespaceOid) && - IsSystemRelation(heapRelation)) - ereport(ERROR, - (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("cannot move system relation \"%s\"", - RelationGetRelationName(heapRelation)))); - /* Add all the valid indexes of relation to list */ foreach(lc, RelationGetIndexList(heapRelation)) { Oid cellOid = lfirst_oid(lc); Relation indexRelation = index_open(cellOid, ShareUpdateExclusiveLock); if (!indexRelation->rd_index->indisvalid) ereport(WARNING, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("cannot reindex invalid index \"%s.%s\" concurrently, skipping", get_namespace_name(get_rel_namespace(cellOid)), get_rel_name(cellOid)))); else if (indexRelation->rd_index->indisexclusion) ereport(WARNING, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("cannot reindex exclusion constraint index \"%s.%s\" concurrently, skipping", get_namespace_name(get_rel_namespace(cellOid)), get_rel_name(cellOid)))); else { ReindexIndexInfo *idx; /* Save the list of relation OIDs in private context */ oldcontext = MemoryContextSwitchTo(private_context); idx = palloc(sizeof(ReindexIndexInfo)); idx->indexId = cellOid; /* other fields set later */ indexIds = lappend(indexIds, idx); MemoryContextSwitchTo(oldcontext); @@ -3404,73 +3397,66 @@ ReindexRelationConcurrently(Oid relationOid, ReindexParams *params) ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("cannot reindex system catalogs concurrently"))); /* * Don't allow reindex for an invalid index on TOAST table, as * if rebuilt it would not be possible to drop it. Match * error message in reindex_index(). */ if (IsToastNamespace(get_rel_namespace(relationOid)) && !get_index_isvalid(relationOid)) ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("cannot reindex invalid index on TOAST table"))); /* * Check if parent relation can be locked and if it exists, * this needs to be done at this stage as the list of indexes * to rebuild is not complete yet, and REINDEXOPT_MISSING_OK * should not be used once all the session locks are taken. */ if ((params->options & REINDEXOPT_MISSING_OK) != 0) { heapRelation = try_table_open(heapId, ShareUpdateExclusiveLock); /* leave if relation does not exist */ if (!heapRelation) break; } else heapRelation = table_open(heapId, ShareUpdateExclusiveLock); - if (OidIsValid(params->tablespaceOid) && - IsSystemRelation(heapRelation)) - ereport(ERROR, - (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("cannot move system relation \"%s\"", - get_rel_name(relationOid)))); - table_close(heapRelation, NoLock); /* Save the list of relation OIDs in private context */ oldcontext = MemoryContextSwitchTo(private_context); /* Track the heap relation of this index for session locks */ heapRelationIds = list_make1_oid(heapId); /* * Save the list of relation OIDs in private context. Note * that invalid indexes are allowed here. */ idx = palloc(sizeof(ReindexIndexInfo)); idx->indexId = relationOid; indexIds = lappend(indexIds, idx); /* other fields set later */ MemoryContextSwitchTo(oldcontext); break; } case RELKIND_PARTITIONED_TABLE: case RELKIND_PARTITIONED_INDEX: default: /* Return error if type of relation is not supported */ ereport(ERROR, (errcode(ERRCODE_WRONG_OBJECT_TYPE), errmsg("cannot reindex this type of relation concurrently"))); break; } /* * Definitely no indexes, so leave. Any checks based on -- 2.17.0 --azLHFNyN32YCQGCU-- ^ permalink raw reply [nested|flat] 2+ messages in thread
* Re: Adding facility for injection points (or probe points?) for more advanced tests @ 2023-12-11 09:44 Michael Paquier <[email protected]> 0 siblings, 0 replies; 2+ messages in thread From: Michael Paquier @ 2023-12-11 09:44 UTC (permalink / raw) To: Dilip Kumar <[email protected]>; +Cc: Ashutosh Bapat <[email protected]>; Postgres hackers <[email protected]> On Mon, Dec 11, 2023 at 11:09:45AM +0530, Dilip Kumar wrote: > I haven't specifically done a review or testing of this patch, but I > have used this for testing the CLOG group update code with my > SLRU-specific changes and I found it quite helpful to test some of the > concurrent areas where you need to stop processing somewhere in the > middle of the code and testing that area without this kind of > injection point framework is really difficult or may not be even > possible. We wanted to test the case of clog group update where we > can get multiple processes added to a single group and get the xid > status updated by the group leader, you can refer to my test in that > thread[1] (the last patch test_group_commit.patch is using this > framework for testing). Could you be more specific? test_group_commit.patch includes this line but there is nothing specific about this injection point getting used in a test or a callback assigned to it: ./test_group_commit.patch:+ INJECTION_POINT("ClogGroupCommit"); > Overall I feel this framework is quite useful > and easy to use as well. Cool, thanks. -- Michael Attachments: [application/pgp-signature] signature.asc (833B, ../../[email protected]/2-signature.asc) download ^ permalink raw reply [nested|flat] 2+ messages in thread
end of thread, other threads:[~2023-12-11 09:44 UTC | newest] Thread overview: 2+ messages (download: mbox mbox.gz follow: Atom feed) -- links below jump to the message on this page -- 2021-02-15 01:49 [PATCH] Dead code: REINDEX (CONCURRENTLY, TABLESPACE ..): c5b286047cd698021e57a527215b48865fd4ad4e Justin Pryzby <[email protected]> 2023-12-11 09:44 Re: Adding facility for injection points (or probe points?) for more advanced tests Michael Paquier <[email protected]>
This inbox is served by agora; see mirroring instructions for how to clone and mirror all data and code used for this inbox