]> granicus.if.org Git - postgresql/commitdiff
Don't duplicate parallel seqscan shmem sizing logic in nbtree.
authorAndres Freund <andres@anarazel.de>
Tue, 15 Jan 2019 20:19:21 +0000 (12:19 -0800)
committerAndres Freund <andres@anarazel.de>
Tue, 15 Jan 2019 20:19:21 +0000 (12:19 -0800)
This is architecturally mildly problematic, which becomes more
pronounced with the upcoming introduction of pluggable storage.

To fix, teach heap_parallelscan_estimate() to deal with SnapshotAny
snapshots, and then use it from _bt_parallel_estimate_shared().

Author: Andres Freund
Discussion: https://postgr.es/m/20180703070645.wchpu5muyto5n647@alap3.anarazel.de

src/backend/access/heap/heapam.c
src/backend/access/nbtree/nbtsort.c

index f7b08ffdd13c82d62fd4247632e69920ffe61266..9afbc8228de18d7907570040bdf90e7f4e0749f5 100644 (file)
@@ -1615,8 +1615,14 @@ heap_endscan(HeapScanDesc scan)
 Size
 heap_parallelscan_estimate(Snapshot snapshot)
 {
-       return add_size(offsetof(ParallelHeapScanDescData, phs_snapshot_data),
-                                       EstimateSnapshotSpace(snapshot));
+       Size            sz = offsetof(ParallelHeapScanDescData, phs_snapshot_data);
+
+       if (IsMVCCSnapshot(snapshot))
+               sz = add_size(sz, EstimateSnapshotSpace(snapshot));
+       else
+               Assert(snapshot == SnapshotAny);
+
+       return sz;
 }
 
 /* ----------------
index 83966dc4d414fdb257a08991f63d649c8bc16b0a..5cc3cf57e22ce6bbc7299431f9ca6f10779335c7 100644 (file)
@@ -158,7 +158,7 @@ typedef struct BTShared
        /*
         * This variable-sized field must come last.
         *
-        * See _bt_parallel_estimate_shared().
+        * See _bt_parallel_estimate_shared() and heap_parallelscan_estimate().
         */
        ParallelHeapScanDescData heapdesc;
 } BTShared;
@@ -1405,15 +1405,8 @@ _bt_end_parallel(BTLeader *btleader)
 static Size
 _bt_parallel_estimate_shared(Snapshot snapshot)
 {
-       if (!IsMVCCSnapshot(snapshot))
-       {
-               Assert(snapshot == SnapshotAny);
-               return sizeof(BTShared);
-       }
-
-       return add_size(offsetof(BTShared, heapdesc) +
-                                       offsetof(ParallelHeapScanDescData, phs_snapshot_data),
-                                       EstimateSnapshotSpace(snapshot));
+       return add_size(offsetof(BTShared, heapdesc),
+                                       heap_parallelscan_estimate(snapshot));
 }
 
 /*