agora inbox for pgsql-hackers@postgresql.orghelp / color / mirror / Atom feed
[PATCH 3/5] WIP: Add SKIPVALID flag for more integration 158+ messages / 2 participants [nested] [flat]
* [PATCH 3/5] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 8f4eab22eb..e54314e9a4 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1637,40 +1637,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3094,6 +3087,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip valid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --dTy3Mrz/UPE2dbVg Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH 3/5] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 8f4eab22eb..e54314e9a4 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1637,40 +1637,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3094,6 +3087,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip valid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --dTy3Mrz/UPE2dbVg Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index d6567ec231..10d4da136f 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1628,40 +1628,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3085,6 +3078,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip invalid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --QTprm0S8XgL7H0Dt Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v13-0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index d6567ec231..10d4da136f 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1628,40 +1628,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3085,6 +3078,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip invalid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --QTprm0S8XgL7H0Dt Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v13-0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH 3/5] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 8f4eab22eb..e54314e9a4 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1637,40 +1637,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3094,6 +3087,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip valid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --dTy3Mrz/UPE2dbVg Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index d6567ec231..10d4da136f 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1628,40 +1628,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3085,6 +3078,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip invalid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --QTprm0S8XgL7H0Dt Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v13-0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH 3/5] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 8f4eab22eb..e54314e9a4 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1637,40 +1637,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3094,6 +3087,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip valid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --dTy3Mrz/UPE2dbVg Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index d6567ec231..10d4da136f 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1628,40 +1628,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3085,6 +3078,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip invalid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --QTprm0S8XgL7H0Dt Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v13-0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH 3/5] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 8f4eab22eb..e54314e9a4 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1637,40 +1637,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3094,6 +3087,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip valid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --dTy3Mrz/UPE2dbVg Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH 3/5] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 8f4eab22eb..e54314e9a4 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1637,40 +1637,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3094,6 +3087,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip valid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --dTy3Mrz/UPE2dbVg Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index d6567ec231..10d4da136f 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1628,40 +1628,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3085,6 +3078,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip invalid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --QTprm0S8XgL7H0Dt Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v13-0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index d6567ec231..10d4da136f 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1628,40 +1628,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3085,6 +3078,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip invalid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --QTprm0S8XgL7H0Dt Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v13-0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH 3/5] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 8f4eab22eb..e54314e9a4 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1637,40 +1637,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3094,6 +3087,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip valid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --dTy3Mrz/UPE2dbVg Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index d6567ec231..10d4da136f 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1628,40 +1628,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3085,6 +3078,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip invalid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --QTprm0S8XgL7H0Dt Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v13-0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH 3/5] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 8f4eab22eb..e54314e9a4 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1637,40 +1637,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3094,6 +3087,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip valid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --dTy3Mrz/UPE2dbVg Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index d6567ec231..10d4da136f 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1628,40 +1628,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3085,6 +3078,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip invalid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --QTprm0S8XgL7H0Dt Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v13-0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH 3/5] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 8f4eab22eb..e54314e9a4 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1637,40 +1637,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3094,6 +3087,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip valid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --dTy3Mrz/UPE2dbVg Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index d6567ec231..10d4da136f 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1628,40 +1628,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3085,6 +3078,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip invalid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --QTprm0S8XgL7H0Dt Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v13-0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH 3/5] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 8f4eab22eb..e54314e9a4 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1637,40 +1637,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3094,6 +3087,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip valid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --dTy3Mrz/UPE2dbVg Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index d6567ec231..10d4da136f 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1628,40 +1628,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3085,6 +3078,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip invalid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --QTprm0S8XgL7H0Dt Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v13-0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH 3/5] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 8f4eab22eb..e54314e9a4 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1637,40 +1637,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3094,6 +3087,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip valid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --dTy3Mrz/UPE2dbVg Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index d6567ec231..10d4da136f 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1628,40 +1628,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3085,6 +3078,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip invalid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --QTprm0S8XgL7H0Dt Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v13-0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH 3/5] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 8f4eab22eb..e54314e9a4 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1637,40 +1637,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3094,6 +3087,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip valid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --dTy3Mrz/UPE2dbVg Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index d6567ec231..10d4da136f 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1628,40 +1628,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3085,6 +3078,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip invalid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --QTprm0S8XgL7H0Dt Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v13-0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH 3/5] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 8f4eab22eb..e54314e9a4 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1637,40 +1637,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3094,6 +3087,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip valid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --dTy3Mrz/UPE2dbVg Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index d6567ec231..10d4da136f 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1628,40 +1628,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3085,6 +3078,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip invalid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --QTprm0S8XgL7H0Dt Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v13-0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH 3/5] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 8f4eab22eb..e54314e9a4 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1637,40 +1637,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3094,6 +3087,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip valid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --dTy3Mrz/UPE2dbVg Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index d6567ec231..10d4da136f 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1628,40 +1628,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3085,6 +3078,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip invalid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --QTprm0S8XgL7H0Dt Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v13-0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH 3/5] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 8f4eab22eb..e54314e9a4 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1637,40 +1637,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3094,6 +3087,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip valid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --dTy3Mrz/UPE2dbVg Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index d6567ec231..10d4da136f 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1628,40 +1628,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3085,6 +3078,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip invalid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --QTprm0S8XgL7H0Dt Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v13-0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH 3/5] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 8f4eab22eb..e54314e9a4 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1637,40 +1637,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3094,6 +3087,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip valid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --dTy3Mrz/UPE2dbVg Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH 3/5] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 8f4eab22eb..e54314e9a4 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1637,40 +1637,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3094,6 +3087,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip valid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --dTy3Mrz/UPE2dbVg Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index d6567ec231..10d4da136f 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1628,40 +1628,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3085,6 +3078,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip invalid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --QTprm0S8XgL7H0Dt Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v13-0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index d6567ec231..10d4da136f 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1628,40 +1628,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3085,6 +3078,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip invalid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --QTprm0S8XgL7H0Dt Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v13-0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH 3/5] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 8f4eab22eb..e54314e9a4 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1637,40 +1637,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3094,6 +3087,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip valid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --dTy3Mrz/UPE2dbVg Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH 3/5] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 8f4eab22eb..e54314e9a4 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1637,40 +1637,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3094,6 +3087,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip valid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --dTy3Mrz/UPE2dbVg Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH 3/5] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 8f4eab22eb..e54314e9a4 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1637,40 +1637,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3094,6 +3087,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip valid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --dTy3Mrz/UPE2dbVg Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index d6567ec231..10d4da136f 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1628,40 +1628,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3085,6 +3078,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip invalid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --QTprm0S8XgL7H0Dt Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v13-0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index d6567ec231..10d4da136f 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1628,40 +1628,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3085,6 +3078,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip invalid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --QTprm0S8XgL7H0Dt Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v13-0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH 3/5] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 8f4eab22eb..e54314e9a4 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1637,40 +1637,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3094,6 +3087,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip valid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --dTy3Mrz/UPE2dbVg Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index d6567ec231..10d4da136f 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1628,40 +1628,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3085,6 +3078,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip invalid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --QTprm0S8XgL7H0Dt Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v13-0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH 3/5] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 8f4eab22eb..e54314e9a4 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1637,40 +1637,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3094,6 +3087,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip valid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --dTy3Mrz/UPE2dbVg Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index d6567ec231..10d4da136f 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1628,40 +1628,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3085,6 +3078,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip invalid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --QTprm0S8XgL7H0Dt Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v13-0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH 3/5] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 8f4eab22eb..e54314e9a4 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1637,40 +1637,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3094,6 +3087,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip valid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --dTy3Mrz/UPE2dbVg Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index d6567ec231..10d4da136f 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1628,40 +1628,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3085,6 +3078,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip invalid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --QTprm0S8XgL7H0Dt Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v13-0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH 3/5] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 8f4eab22eb..e54314e9a4 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1637,40 +1637,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3094,6 +3087,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip valid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --dTy3Mrz/UPE2dbVg Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH 3/5] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 8f4eab22eb..e54314e9a4 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1637,40 +1637,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3094,6 +3087,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip valid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --dTy3Mrz/UPE2dbVg Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index d6567ec231..10d4da136f 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1628,40 +1628,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3085,6 +3078,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip invalid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --QTprm0S8XgL7H0Dt Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v13-0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH 3/5] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 8f4eab22eb..e54314e9a4 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1637,40 +1637,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3094,6 +3087,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip valid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --dTy3Mrz/UPE2dbVg Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index d6567ec231..10d4da136f 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1628,40 +1628,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3085,6 +3078,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip invalid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --QTprm0S8XgL7H0Dt Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v13-0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index d6567ec231..10d4da136f 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1628,40 +1628,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3085,6 +3078,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip invalid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --QTprm0S8XgL7H0Dt Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v13-0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH 3/5] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 8f4eab22eb..e54314e9a4 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1637,40 +1637,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3094,6 +3087,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip valid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --dTy3Mrz/UPE2dbVg Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH 3/5] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 8f4eab22eb..e54314e9a4 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1637,40 +1637,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3094,6 +3087,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip valid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --dTy3Mrz/UPE2dbVg Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index d6567ec231..10d4da136f 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1628,40 +1628,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3085,6 +3078,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip invalid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --QTprm0S8XgL7H0Dt Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v13-0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index d6567ec231..10d4da136f 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1628,40 +1628,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3085,6 +3078,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip invalid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --QTprm0S8XgL7H0Dt Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v13-0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH 3/5] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 8f4eab22eb..e54314e9a4 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1637,40 +1637,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3094,6 +3087,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip valid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --dTy3Mrz/UPE2dbVg Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index d6567ec231..10d4da136f 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1628,40 +1628,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3085,6 +3078,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip invalid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --QTprm0S8XgL7H0Dt Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v13-0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH 3/5] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 8f4eab22eb..e54314e9a4 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1637,40 +1637,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3094,6 +3087,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip valid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --dTy3Mrz/UPE2dbVg Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index d6567ec231..10d4da136f 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1628,40 +1628,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3085,6 +3078,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip invalid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --QTprm0S8XgL7H0Dt Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v13-0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH 3/5] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 8f4eab22eb..e54314e9a4 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1637,40 +1637,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3094,6 +3087,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip valid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --dTy3Mrz/UPE2dbVg Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index d6567ec231..10d4da136f 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1628,40 +1628,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3085,6 +3078,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip invalid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --QTprm0S8XgL7H0Dt Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v13-0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH 3/5] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 8f4eab22eb..e54314e9a4 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1637,40 +1637,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3094,6 +3087,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip valid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --dTy3Mrz/UPE2dbVg Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index d6567ec231..10d4da136f 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1628,40 +1628,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3085,6 +3078,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip invalid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --QTprm0S8XgL7H0Dt Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v13-0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH 3/5] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 8f4eab22eb..e54314e9a4 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1637,40 +1637,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3094,6 +3087,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip valid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --dTy3Mrz/UPE2dbVg Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index d6567ec231..10d4da136f 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1628,40 +1628,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3085,6 +3078,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip invalid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --QTprm0S8XgL7H0Dt Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v13-0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH 3/5] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 8f4eab22eb..e54314e9a4 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1637,40 +1637,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3094,6 +3087,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip valid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --dTy3Mrz/UPE2dbVg Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index d6567ec231..10d4da136f 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1628,40 +1628,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3085,6 +3078,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip invalid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --QTprm0S8XgL7H0Dt Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v13-0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH 3/5] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 8f4eab22eb..e54314e9a4 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1637,40 +1637,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3094,6 +3087,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip valid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --dTy3Mrz/UPE2dbVg Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index d6567ec231..10d4da136f 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1628,40 +1628,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3085,6 +3078,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip invalid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --QTprm0S8XgL7H0Dt Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v13-0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH 3/5] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 8f4eab22eb..e54314e9a4 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1637,40 +1637,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3094,6 +3087,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip valid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --dTy3Mrz/UPE2dbVg Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index d6567ec231..10d4da136f 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1628,40 +1628,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3085,6 +3078,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip invalid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --QTprm0S8XgL7H0Dt Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v13-0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH 3/5] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 8f4eab22eb..e54314e9a4 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1637,40 +1637,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3094,6 +3087,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip valid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --dTy3Mrz/UPE2dbVg Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index d6567ec231..10d4da136f 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1628,40 +1628,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3085,6 +3078,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip invalid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --QTprm0S8XgL7H0Dt Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v13-0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH 3/5] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 8f4eab22eb..e54314e9a4 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1637,40 +1637,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3094,6 +3087,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip valid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --dTy3Mrz/UPE2dbVg Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index d6567ec231..10d4da136f 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1628,40 +1628,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3085,6 +3078,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip invalid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --QTprm0S8XgL7H0Dt Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v13-0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH 3/5] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 8f4eab22eb..e54314e9a4 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1637,40 +1637,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3094,6 +3087,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip valid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --dTy3Mrz/UPE2dbVg Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index d6567ec231..10d4da136f 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1628,40 +1628,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3085,6 +3078,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip invalid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --QTprm0S8XgL7H0Dt Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v13-0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH 3/5] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 8f4eab22eb..e54314e9a4 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1637,40 +1637,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3094,6 +3087,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip valid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --dTy3Mrz/UPE2dbVg Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index d6567ec231..10d4da136f 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1628,40 +1628,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3085,6 +3078,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip invalid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --QTprm0S8XgL7H0Dt Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v13-0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH 3/5] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 8f4eab22eb..e54314e9a4 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1637,40 +1637,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3094,6 +3087,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip valid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --dTy3Mrz/UPE2dbVg Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index d6567ec231..10d4da136f 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1628,40 +1628,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3085,6 +3078,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip invalid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --QTprm0S8XgL7H0Dt Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v13-0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH 3/5] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 8f4eab22eb..e54314e9a4 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1637,40 +1637,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3094,6 +3087,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip valid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --dTy3Mrz/UPE2dbVg Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index d6567ec231..10d4da136f 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1628,40 +1628,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3085,6 +3078,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip invalid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --QTprm0S8XgL7H0Dt Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v13-0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH 3/5] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 8f4eab22eb..e54314e9a4 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1637,40 +1637,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3094,6 +3087,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip valid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --dTy3Mrz/UPE2dbVg Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index d6567ec231..10d4da136f 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1628,40 +1628,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3085,6 +3078,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip invalid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --QTprm0S8XgL7H0Dt Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v13-0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH 3/5] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 8f4eab22eb..e54314e9a4 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1637,40 +1637,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3094,6 +3087,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip valid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --dTy3Mrz/UPE2dbVg Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index d6567ec231..10d4da136f 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1628,40 +1628,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3085,6 +3078,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip invalid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --QTprm0S8XgL7H0Dt Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v13-0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH 3/5] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 8f4eab22eb..e54314e9a4 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1637,40 +1637,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3094,6 +3087,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip valid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --dTy3Mrz/UPE2dbVg Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index d6567ec231..10d4da136f 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1628,40 +1628,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3085,6 +3078,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip invalid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --QTprm0S8XgL7H0Dt Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v13-0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH 3/5] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 8f4eab22eb..e54314e9a4 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1637,40 +1637,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3094,6 +3087,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip valid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --dTy3Mrz/UPE2dbVg Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index d6567ec231..10d4da136f 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1628,40 +1628,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3085,6 +3078,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip invalid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --QTprm0S8XgL7H0Dt Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v13-0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH 3/5] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 8f4eab22eb..e54314e9a4 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1637,40 +1637,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3094,6 +3087,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip valid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --dTy3Mrz/UPE2dbVg Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index d6567ec231..10d4da136f 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1628,40 +1628,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3085,6 +3078,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip invalid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --QTprm0S8XgL7H0Dt Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v13-0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH 3/5] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 8f4eab22eb..e54314e9a4 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1637,40 +1637,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3094,6 +3087,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip valid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --dTy3Mrz/UPE2dbVg Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index d6567ec231..10d4da136f 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1628,40 +1628,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3085,6 +3078,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip invalid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --QTprm0S8XgL7H0Dt Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v13-0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH 3/5] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 8f4eab22eb..e54314e9a4 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1637,40 +1637,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3094,6 +3087,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip valid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --dTy3Mrz/UPE2dbVg Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index d6567ec231..10d4da136f 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1628,40 +1628,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3085,6 +3078,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip invalid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --QTprm0S8XgL7H0Dt Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v13-0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH 3/5] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 8f4eab22eb..e54314e9a4 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1637,40 +1637,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3094,6 +3087,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip valid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --dTy3Mrz/UPE2dbVg Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index d6567ec231..10d4da136f 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1628,40 +1628,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3085,6 +3078,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip invalid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --QTprm0S8XgL7H0Dt Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v13-0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH 3/5] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 8f4eab22eb..e54314e9a4 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1637,40 +1637,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3094,6 +3087,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip valid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --dTy3Mrz/UPE2dbVg Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index d6567ec231..10d4da136f 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1628,40 +1628,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3085,6 +3078,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip invalid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --QTprm0S8XgL7H0Dt Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v13-0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH 3/5] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 8f4eab22eb..e54314e9a4 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1637,40 +1637,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3094,6 +3087,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip valid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --dTy3Mrz/UPE2dbVg Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index d6567ec231..10d4da136f 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1628,40 +1628,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3085,6 +3078,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip invalid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --QTprm0S8XgL7H0Dt Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v13-0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH 3/5] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 8f4eab22eb..e54314e9a4 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1637,40 +1637,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3094,6 +3087,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip valid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --dTy3Mrz/UPE2dbVg Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index d6567ec231..10d4da136f 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1628,40 +1628,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3085,6 +3078,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip invalid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --QTprm0S8XgL7H0Dt Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v13-0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH 3/5] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 8f4eab22eb..e54314e9a4 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1637,40 +1637,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3094,6 +3087,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip valid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --dTy3Mrz/UPE2dbVg Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index d6567ec231..10d4da136f 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1628,40 +1628,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3085,6 +3078,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip invalid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --QTprm0S8XgL7H0Dt Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v13-0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH 3/5] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 8f4eab22eb..e54314e9a4 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1637,40 +1637,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3094,6 +3087,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip valid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --dTy3Mrz/UPE2dbVg Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index d6567ec231..10d4da136f 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1628,40 +1628,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3085,6 +3078,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip invalid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --QTprm0S8XgL7H0Dt Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v13-0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH 3/5] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 8f4eab22eb..e54314e9a4 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1637,40 +1637,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3094,6 +3087,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip valid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --dTy3Mrz/UPE2dbVg Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index d6567ec231..10d4da136f 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1628,40 +1628,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3085,6 +3078,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip invalid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --QTprm0S8XgL7H0Dt Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v13-0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH 3/5] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 8f4eab22eb..e54314e9a4 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1637,40 +1637,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3094,6 +3087,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip valid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --dTy3Mrz/UPE2dbVg Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index d6567ec231..10d4da136f 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1628,40 +1628,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3085,6 +3078,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip invalid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --QTprm0S8XgL7H0Dt Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v13-0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH 3/5] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 8f4eab22eb..e54314e9a4 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1637,40 +1637,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3094,6 +3087,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip valid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --dTy3Mrz/UPE2dbVg Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index d6567ec231..10d4da136f 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1628,40 +1628,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3085,6 +3078,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip invalid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --QTprm0S8XgL7H0Dt Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v13-0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH 3/5] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 8f4eab22eb..e54314e9a4 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1637,40 +1637,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3094,6 +3087,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip valid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --dTy3Mrz/UPE2dbVg Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index d6567ec231..10d4da136f 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1628,40 +1628,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3085,6 +3078,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip invalid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --QTprm0S8XgL7H0Dt Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v13-0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH 3/5] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 8f4eab22eb..e54314e9a4 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1637,40 +1637,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3094,6 +3087,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip valid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --dTy3Mrz/UPE2dbVg Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index d6567ec231..10d4da136f 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1628,40 +1628,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3085,6 +3078,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip invalid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --QTprm0S8XgL7H0Dt Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v13-0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH 3/5] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 8f4eab22eb..e54314e9a4 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1637,40 +1637,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3094,6 +3087,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip valid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --dTy3Mrz/UPE2dbVg Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index d6567ec231..10d4da136f 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1628,40 +1628,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3085,6 +3078,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip invalid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --QTprm0S8XgL7H0Dt Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v13-0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH 3/5] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 8f4eab22eb..e54314e9a4 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1637,40 +1637,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3094,6 +3087,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip valid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --dTy3Mrz/UPE2dbVg Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index d6567ec231..10d4da136f 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1628,40 +1628,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3085,6 +3078,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip invalid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --QTprm0S8XgL7H0Dt Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v13-0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH 3/5] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 8f4eab22eb..e54314e9a4 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1637,40 +1637,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3094,6 +3087,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip valid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --dTy3Mrz/UPE2dbVg Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index d6567ec231..10d4da136f 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1628,40 +1628,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3085,6 +3078,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip invalid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --QTprm0S8XgL7H0Dt Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v13-0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH 3/5] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 8f4eab22eb..e54314e9a4 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1637,40 +1637,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3094,6 +3087,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip valid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --dTy3Mrz/UPE2dbVg Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index d6567ec231..10d4da136f 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1628,40 +1628,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3085,6 +3078,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip invalid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --QTprm0S8XgL7H0Dt Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v13-0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH 3/5] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 8f4eab22eb..e54314e9a4 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1637,40 +1637,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3094,6 +3087,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip valid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --dTy3Mrz/UPE2dbVg Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index d6567ec231..10d4da136f 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1628,40 +1628,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3085,6 +3078,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip invalid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --QTprm0S8XgL7H0Dt Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v13-0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH 3/5] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 8f4eab22eb..e54314e9a4 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1637,40 +1637,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3094,6 +3087,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip valid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --dTy3Mrz/UPE2dbVg Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index d6567ec231..10d4da136f 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1628,40 +1628,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3085,6 +3078,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip invalid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --QTprm0S8XgL7H0Dt Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v13-0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH 3/5] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 8f4eab22eb..e54314e9a4 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1637,40 +1637,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3094,6 +3087,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip valid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --dTy3Mrz/UPE2dbVg Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index d6567ec231..10d4da136f 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1628,40 +1628,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3085,6 +3078,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip invalid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --QTprm0S8XgL7H0Dt Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v13-0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH 3/5] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 8f4eab22eb..e54314e9a4 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1637,40 +1637,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3094,6 +3087,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip valid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --dTy3Mrz/UPE2dbVg Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index d6567ec231..10d4da136f 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1628,40 +1628,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3085,6 +3078,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip invalid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --QTprm0S8XgL7H0Dt Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v13-0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH 3/5] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 8f4eab22eb..e54314e9a4 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1637,40 +1637,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3094,6 +3087,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip valid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --dTy3Mrz/UPE2dbVg Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index d6567ec231..10d4da136f 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1628,40 +1628,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3085,6 +3078,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip invalid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --QTprm0S8XgL7H0Dt Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v13-0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH 3/5] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 8f4eab22eb..e54314e9a4 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1637,40 +1637,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3094,6 +3087,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip valid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --dTy3Mrz/UPE2dbVg Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index d6567ec231..10d4da136f 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1628,40 +1628,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3085,6 +3078,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip invalid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --QTprm0S8XgL7H0Dt Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v13-0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH 3/5] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 8f4eab22eb..e54314e9a4 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1637,40 +1637,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3094,6 +3087,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip valid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --dTy3Mrz/UPE2dbVg Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index d6567ec231..10d4da136f 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1628,40 +1628,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3085,6 +3078,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip invalid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --QTprm0S8XgL7H0Dt Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v13-0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH 3/5] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 8f4eab22eb..e54314e9a4 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1637,40 +1637,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3094,6 +3087,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip valid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --dTy3Mrz/UPE2dbVg Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index d6567ec231..10d4da136f 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1628,40 +1628,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3085,6 +3078,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip invalid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --QTprm0S8XgL7H0Dt Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v13-0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH 3/5] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 8f4eab22eb..e54314e9a4 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1637,40 +1637,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3094,6 +3087,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip valid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --dTy3Mrz/UPE2dbVg Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index d6567ec231..10d4da136f 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1628,40 +1628,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3085,6 +3078,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip invalid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --QTprm0S8XgL7H0Dt Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v13-0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH 3/5] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 8f4eab22eb..e54314e9a4 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1637,40 +1637,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3094,6 +3087,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip valid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --dTy3Mrz/UPE2dbVg Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index d6567ec231..10d4da136f 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1628,40 +1628,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3085,6 +3078,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip invalid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --QTprm0S8XgL7H0Dt Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v13-0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH 3/5] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 8f4eab22eb..e54314e9a4 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1637,40 +1637,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3094,6 +3087,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip valid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --dTy3Mrz/UPE2dbVg Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index d6567ec231..10d4da136f 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1628,40 +1628,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3085,6 +3078,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip invalid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --QTprm0S8XgL7H0Dt Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v13-0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH 3/5] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 8f4eab22eb..e54314e9a4 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1637,40 +1637,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3094,6 +3087,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip valid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --dTy3Mrz/UPE2dbVg Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index d6567ec231..10d4da136f 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1628,40 +1628,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3085,6 +3078,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip invalid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --QTprm0S8XgL7H0Dt Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v13-0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH 3/5] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 8f4eab22eb..e54314e9a4 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1637,40 +1637,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3094,6 +3087,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip valid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --dTy3Mrz/UPE2dbVg Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index d6567ec231..10d4da136f 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1628,40 +1628,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3085,6 +3078,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip invalid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --QTprm0S8XgL7H0Dt Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v13-0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH 3/5] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 8f4eab22eb..e54314e9a4 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1637,40 +1637,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3094,6 +3087,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip valid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --dTy3Mrz/UPE2dbVg Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index d6567ec231..10d4da136f 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1628,40 +1628,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3085,6 +3078,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip invalid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --QTprm0S8XgL7H0Dt Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v13-0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH 3/5] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 8f4eab22eb..e54314e9a4 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1637,40 +1637,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3094,6 +3087,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip valid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --dTy3Mrz/UPE2dbVg Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration @ 2020-10-30 21:23 Justin Pryzby <pryzbyj@telsasoft.com> 0 siblings, 0 replies; 158+ messages in thread From: Justin Pryzby @ 2020-10-30 21:23 UTC (permalink / raw) XXX: this breaks progress reporting? --- src/backend/commands/indexcmds.c | 36 +++++++++++++++----------------- src/include/catalog/index.h | 1 + 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index d6567ec231..10d4da136f 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -1628,40 +1628,33 @@ DefineIndex(Oid relationId, return address; } -/* Reindex invalid child indexes created earlier */ +/* + * Reindex invalid child indexes created earlier thereby validating + * the parent index. + */ static void reindex_invalid_child_indexes(Oid indexRelationId) { - ListCell *lc; - int npart = 0; ReindexParams params = { - .options = REINDEXOPT_CONCURRENTLY + .options = REINDEXOPT_CONCURRENTLY | REINDEXOPT_SKIPVALID }; - PreventInTransactionBlock(true, "REINDEX INDEX"); - - foreach (lc, find_inheritance_children(indexRelationId, ShareLock)) - { - Oid partoid = lfirst_oid(lc); - - if (!get_index_isvalid(partoid) && - RELKIND_HAS_STORAGE(get_rel_relkind(partoid))) - ReindexRelationConcurrently(partoid, ¶ms); - - pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITIONS_DONE, - npart++); - } - /* * CIC needs to mark a partitioned index as VALID, which itself * requires setting READY, which is unset for CIC (even though * it's meaningless for an index without storage). * This must be done only while holding a lock which precludes adding * partitions. - * See also: validatePartitionedIndex(). */ CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY); + + /* + * Process each partition listed in a separate transaction. Note that + * this commits and then starts a new transaction immediately. + */ + ReindexPartitions(indexRelationId, ¶ms, true); + CommandCounterIncrement(); index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID); } @@ -3085,6 +3078,11 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel) if (!RELKIND_HAS_STORAGE(partkind)) continue; + /* Skip invalid indexes, if requested */ + if ((params->options & REINDEXOPT_SKIPVALID) != 0 && + get_index_isvalid(partoid)) + continue; + Assert(partkind == RELKIND_INDEX || partkind == RELKIND_RELATION); diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index e22d506436..994fe94fa1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -42,6 +42,7 @@ typedef struct ReindexParams #define REINDEXOPT_REPORT_PROGRESS 0x02 /* report pgstat progress */ #define REINDEXOPT_MISSING_OK 0x04 /* skip missing relations */ #define REINDEXOPT_CONCURRENTLY 0x08 /* concurrent mode */ +#define REINDEXOPT_SKIPVALID 0x10 /* skip valid indexes */ /* state info for validate_index bulkdelete callback */ typedef struct ValidateIndexState -- 2.17.0 --QTprm0S8XgL7H0Dt Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v13-0004-ReindexPartitions-to-set-indisvalid.patch" ^ permalink raw reply [nested|flat] 158+ messages in thread
* [PATCH v2 4/4] tests: Don't fail due to high default timeout in postmaster/003_start_stop @ 2025-03-07 14:44 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 158+ messages in thread From: Andres Freund @ 2025-03-07 14:44 UTC (permalink / raw) Some BF animals use very high timeouts due to their slowness. Unfortunately postmaster/003_start_stop fails if a high timeout is configured, due to authentication_timeout having a fairly low max. As this test is reasonably fast, the easiest fix seems to be to cap the timeout to 600. Per buildfarm animal skink. Reviewed-by: Heikki Linnakangas <hlinnaka@iki.fi> Discussion: https://postgr.es/m/ggflhkciwdyotpoie323chu2c2idpjk5qimrn462encwx2io7s@thmcxl7i6dpw --- src/test/postmaster/t/003_start_stop.pl | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/test/postmaster/t/003_start_stop.pl b/src/test/postmaster/t/003_start_stop.pl index 036b296f72b..4dc394139d9 100644 --- a/src/test/postmaster/t/003_start_stop.pl +++ b/src/test/postmaster/t/003_start_stop.pl @@ -20,6 +20,10 @@ use Test::More; # "pg_ctl stop" will error out before the authentication timeout kicks # in and cleans up the dead-end backends. my $authentication_timeout = $PostgreSQL::Test::Utils::timeout_default; + +# Don't fail due to hitting the max value allowed for authentication_timeout. +$authentication_timeout = 600 unless $authentication_timeout < 600; + my $stop_timeout = $authentication_timeout / 2; # Initialize the server with low connection limits, to test dead-end backends -- 2.48.1.76.g4e746b1a31.dirty --q4d36jgrlhdhudrc-- ^ permalink raw reply [nested|flat] 158+ messages in thread
end of thread, other threads:[~2025-03-07 14:44 UTC | newest] Thread overview: 158+ messages (download: mbox mbox.gz follow: Atom feed) -- links below jump to the message on this page -- 2020-10-30 21:23 [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH 3/5] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH 3/5] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH 3/5] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH 3/5] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH 3/5] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH 3/5] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH 3/5] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH 3/5] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH 3/5] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH 3/5] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH 3/5] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH 3/5] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH 3/5] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH 3/5] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH 3/5] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH 3/5] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH 3/5] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH 3/5] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH 3/5] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH 3/5] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH 3/5] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH 3/5] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH 3/5] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH 3/5] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH 3/5] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH 3/5] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH 3/5] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH 3/5] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH 3/5] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH 3/5] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH 3/5] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH 3/5] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH 3/5] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH 3/5] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH 3/5] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH 3/5] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH 3/5] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH 3/5] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH 3/5] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH 3/5] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH 3/5] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH 3/5] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH 3/5] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH 3/5] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH 3/5] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH 3/5] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH 3/5] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH 3/5] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH 3/5] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH 3/5] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH 3/5] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH 3/5] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH 3/5] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH 3/5] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH 3/5] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH 3/5] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH 3/5] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH 3/5] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH 3/5] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH 3/5] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH 3/5] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH 3/5] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH 3/5] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH 3/5] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH 3/5] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH 3/5] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH 3/5] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH 3/5] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH 3/5] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH 3/5] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH 3/5] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH 3/5] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH 3/5] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH 3/5] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH 3/5] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH 3/5] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH v13 03/18] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH 3/5] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH 3/5] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2020-10-30 21:23 [PATCH 3/5] WIP: Add SKIPVALID flag for more integration Justin Pryzby <pryzbyj@telsasoft.com> 2025-03-07 14:44 [PATCH v2 4/4] tests: Don't fail due to high default timeout in postmaster/003_start_stop Andres Freund <andres@anarazel.de>
This inbox is served by agora; see mirroring instructions for how to clone and mirror all data and code used for this inbox