aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorThomas Munro <tmunro@postgresql.org>2020-02-05 12:21:03 +1300
committerThomas Munro <tmunro@postgresql.org>2020-02-05 12:30:06 +1300
commitc4a2041a43c92c566c42c7ae8029868be317f8d9 (patch)
tree3a4b4fe1a4f291f5a30c8645fa35d99a0e80d282 /src
parent842a23efa92ab5ac91e013968e7575782fc1ebf1 (diff)
downloadpostgresql-c4a2041a43c92c566c42c7ae8029868be317f8d9.tar.gz
postgresql-c4a2041a43c92c566c42c7ae8029868be317f8d9.zip
Handle lack of DSM slots in parallel btree build, take 2.
Commit 74618e77 added a new check intended to fix a bug, but put it in the wrong place so that parallel btree build was always disabled. Do the check after we've actually tried to create a DSM segment. Back-patch to 11, like the earlier commit. Reviewed-by: Peter Geoghegan Discussion: https://postgr.es/m/CAH2-WzmDABkJzrNnvf%2BOULK-_A_j9gkYg_Dz-H62jzNv4eKQTw%40mail.gmail.com
Diffstat (limited to 'src')
-rw-r--r--src/backend/access/nbtree/nbtsort.c18
1 files changed, 10 insertions, 8 deletions
diff --git a/src/backend/access/nbtree/nbtsort.c b/src/backend/access/nbtree/nbtsort.c
index bc00799b964..dab41ea298a 100644
--- a/src/backend/access/nbtree/nbtsort.c
+++ b/src/backend/access/nbtree/nbtsort.c
@@ -1257,14 +1257,6 @@ _bt_begin_parallel(BTBuildState *buildstate, bool isconcurrent, int request)
pcxt = CreateParallelContext("postgres", "_bt_parallel_build_main",
request, true);
- /* If no DSM segment was available, back out (do serial build) */
- if (pcxt->seg == NULL)
- {
- DestroyParallelContext(pcxt);
- ExitParallelMode();
- return;
- }
-
scantuplesortstates = leaderparticipates ? request + 1 : request;
/*
@@ -1308,6 +1300,16 @@ _bt_begin_parallel(BTBuildState *buildstate, bool isconcurrent, int request)
/* Everyone's had a chance to ask for space, so now create the DSM */
InitializeParallelDSM(pcxt);
+ /* If no DSM segment was available, back out (do serial build) */
+ if (pcxt->seg == NULL)
+ {
+ if (IsMVCCSnapshot(snapshot))
+ UnregisterSnapshot(snapshot);
+ DestroyParallelContext(pcxt);
+ ExitParallelMode();
+ return;
+ }
+
/* Store shared build state, for which we reserved space */
btshared = (BTShared *) shm_toc_allocate(pcxt->toc, estbtshared);
/* Initialize immutable state */