summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAmit Kapila2020-09-17 09:46:46 +0000
committerAmit Kapila2020-09-17 09:46:46 +0000
commit0abd9cd2f3a1cad201ca28767aa0a720cc341179 (patch)
tree0cb0d46b7ad1e334dd27d3a6f4174c7ffe1842f1
parentbfb12cd2b59da2ce51a9c86bf2c468202d8f96ee (diff)
Update parallel BTree scan state when the scan keys can't be satisfied.
For parallel btree scan to work for array of scan keys, it should reach BTPARALLEL_DONE state once for every distinct combination of array keys. This is required to ensure that the parallel workers don't try to seize blocks at the same time for different scan keys. We missed to update this state when we discovered that the scan keys can't be satisfied. Author: James Hunter Reviewed-by: Amit Kapila Tested-by: Justin Pryzby Backpatch-through: 10, where it was introduced Discussion: https://postgr.es/m/4248CABC-25E3-4809-B4D0-128E1BAABC3C@amazon.com
-rw-r--r--src/backend/access/nbtree/nbtsearch.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/src/backend/access/nbtree/nbtsearch.c b/src/backend/access/nbtree/nbtsearch.c
index 45342248128..4de452357c1 100644
--- a/src/backend/access/nbtree/nbtsearch.c
+++ b/src/backend/access/nbtree/nbtsearch.c
@@ -884,7 +884,11 @@ _bt_first(IndexScanDesc scan, ScanDirection dir)
* never be satisfied (eg, x == 1 AND x > 2).
*/
if (!so->qual_ok)
+ {
+ /* Notify any other workers that we're done with this scan key. */
+ _bt_parallel_done(scan);
return false;
+ }
/*
* For parallel scans, get the starting page from shared state. If the