Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Change BitmapAdjustPrefetchIterator to accept BlockNumber
authorTomas Vondra <tomas.vondra@postgresql.org>
Sat, 6 Apr 2024 23:25:03 +0000 (01:25 +0200)
committerTomas Vondra <tomas.vondra@postgresql.org>
Sat, 6 Apr 2024 23:25:15 +0000 (01:25 +0200)
BitmapAdjustPrefetchIterator() only used the blockno member of the
passed in TBMIterateResult to ensure that the prefetch iterator and
regular iterator stay in sync. Pass it the BlockNumber only, so that we
can move away from using the TBMIterateResult outside of table AM
specific code.

Author: Melanie Plageman
Reviewed-by: Tomas Vondra, Andres Freund, Heikki Linnakangas
Discussion: https://postgr.es/m/CAAKRu_ZwCwWFeL_H3ia26bP2e7HiKLWt0ZmGXPVwPO6uXq0vaA%40mail.gmail.com

src/backend/executor/nodeBitmapHeapscan.c

index 6f843908032564c986c7e7de60c195ee627308a8..6b48a6d8350fb09e5ef70341ecbd6c8de9066e49 100644 (file)
@@ -52,7 +52,7 @@
 static TupleTableSlot *BitmapHeapNext(BitmapHeapScanState *node);
 static inline void BitmapDoneInitializingSharedState(ParallelBitmapHeapState *pstate);
 static inline void BitmapAdjustPrefetchIterator(BitmapHeapScanState *node,
-                                               TBMIterateResult *tbmres);
+                                               BlockNumber blockno);
 static inline void BitmapAdjustPrefetchTarget(BitmapHeapScanState *node);
 static inline void BitmapPrefetch(BitmapHeapScanState *node,
                                  TableScanDesc scan);
@@ -231,7 +231,7 @@ BitmapHeapNext(BitmapHeapScanState *node)
                break;
            }
 
-           BitmapAdjustPrefetchIterator(node, tbmres);
+           BitmapAdjustPrefetchIterator(node, tbmres->blockno);
 
            valid_block = table_scan_bitmap_next_block(scan, tbmres);
 
@@ -342,7 +342,7 @@ BitmapDoneInitializingSharedState(ParallelBitmapHeapState *pstate)
  */
 static inline void
 BitmapAdjustPrefetchIterator(BitmapHeapScanState *node,
-                            TBMIterateResult *tbmres)
+                            BlockNumber blockno)
 {
 #ifdef USE_PREFETCH
    ParallelBitmapHeapState *pstate = node->pstate;
@@ -361,7 +361,7 @@ BitmapAdjustPrefetchIterator(BitmapHeapScanState *node,
            /* Do not let the prefetch iterator get behind the main one */
            TBMIterateResult *tbmpre = tbm_iterate(prefetch_iterator);
 
-           if (tbmpre == NULL || tbmpre->blockno != tbmres->blockno)
+           if (tbmpre == NULL || tbmpre->blockno != blockno)
                elog(ERROR, "prefetch and main iterators are out of sync");
        }
        return;