git.postgresql.org Git - postgresql.git/commitdiff

git projects / postgresql.git / commitdiff
? search:
summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 9a85860)
Handle lack of DSM slots in parallel btree build, take 2.
Tue, 4 Feb 2020 23:21:03 +0000 (12:21 +1300)
Tue, 4 Feb 2020 23:28:33 +0000 (12:28 +1300)
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


diff --git a/src/backend/access/nbtree/nbtsort.c b/src/backend/access/nbtree/nbtsort.c
index 0b941ae12ca441b5e75a3b6fb9a8561f21f8923c..edc4a82b02f718d97b644adc52e6411dbabe80ea 100644 (file)
--- a/src/backend/access/nbtree/nbtsort.c
+++ b/src/backend/access/nbtree/nbtsort.c
@@ -1353,14 +1353,6 @@ _bt_begin_parallel(BTBuildState *buildstate, bool isconcurrent, int request)
pcxt = CreateParallelContext("postgres", "_bt_parallel_build_main",
request);
- /* If no DSM segment was available, back out (do serial build) */
- if (pcxt->seg == NULL)
- {
- DestroyParallelContext(pcxt);
- ExitParallelMode();
- return;
- }
-
scantuplesortstates = leaderparticipates ? request + 1 : request;
/*
@@ -1404,6 +1396,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 */
This is the main PostgreSQL git repository.
RSS Atom

AltStyle によって変換されたページ (->オリジナル) /