From 79f6708165c83c39b3e1bf785539bee84a28f650 Mon Sep 17 00:00:00 2001 From: Peter Geoghegan Date: Sun, 11 Mar 2018 12:18:25 -0700 Subject: [PATCH] Fix corruption of backend REINDEX processing state. When parallel index builds within the PG_TRY/PG_CATCH block in reindex_relation() raised any error, reindex_index() jumped out to the reindex_relation() catch block. ResetReindexPending() was called from there, without being prepared for the possibility that the backend is still in parallel mode due to being in an error/cleanup path. By raising an error before the backend's state could be reset, the state could never get reset. Reindexing could continually fail within an affected backend. To fix, make ResetReindexPending() take the same approach as ResetReindexProcessing(), and simply don't enforce that we cannot be in parallel mode. Author: Peter Geoghegan Reported-By: David Rowley Discussion: https://postgr.es/m/CAKJS1f91kq1wfYR8rnRRfKtxyhU2woEA+=whd640UxMyU+O0EQ@mail.gmail.com --- src/backend/catalog/index.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/backend/catalog/index.c b/src/backend/catalog/index.c index 564f206..0da37d9 100644 --- a/src/backend/catalog/index.c +++ b/src/backend/catalog/index.c @@ -4054,8 +4054,7 @@ RemoveReindexPending(Oid indexOid) static void ResetReindexPending(void) { - if (IsInParallelMode()) - elog(ERROR, "cannot modify reindex state during a parallel operation"); + /* This may be called in leader error path */ pendingReindexedIndexes = NIL; } -- 2.7.4