nbtree: refine _bt_readnextpage contract comments.
authorPeter Geoghegan <pg@bowt.ie>
Fri, 7 Mar 2025 23:35:13 +0000 (18:35 -0500)
committerPeter Geoghegan <pg@bowt.ie>
Fri, 7 Mar 2025 23:35:13 +0000 (18:35 -0500)
Another minor follow-up commit for commit 1bd4bc85, which changed the
_bt_readnextpage contract.

src/backend/access/nbtree/nbtsearch.c

index 472ce06f1908ee0c8dec4e38470ba971d27d4943..6b2f464aa04816d822cdd32fa9e5b1d420d03ab1 100644 (file)
@@ -2183,7 +2183,9 @@ _bt_readfirstpage(IndexScanDesc scan, OffsetNumber offnum, ScanDirection dir)
  * scan.  A seized=false caller's blkno can never be assumed to be the page
  * that must be read next during a parallel scan, though.  We must figure that
  * part out for ourselves by seizing the scan (the correct page to read might
- * already be beyond the seized=false caller's blkno during a parallel scan).
+ * already be beyond the seized=false caller's blkno during a parallel scan,
+ * unless blkno/so->currPos.nextPage/so->currPos.prevPage is already P_NONE,
+ * or unless so->currPos.moreRight/so->currPos.moreLeft is already unset).
  *
  * On success exit, so->currPos is updated to contain data from the next
  * interesting page, and we return true.  We hold a pin on the buffer on
@@ -2204,6 +2206,7 @@ _bt_readnextpage(IndexScanDesc scan, BlockNumber blkno,
    BTScanOpaque so = (BTScanOpaque) scan->opaque;
 
    Assert(so->currPos.currPage == lastcurrblkno || seized);
+   Assert(!(blkno == P_NONE && seized));
    Assert(!BTScanPosIsPinned(so->currPos));
 
    /*