Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Remove obsolete nbtree split REDO routine comment.
authorPeter Geoghegan <pg@bowt.ie>
Wed, 8 May 2019 19:47:20 +0000 (12:47 -0700)
committerPeter Geoghegan <pg@bowt.ie>
Wed, 8 May 2019 19:47:20 +0000 (12:47 -0700)
Commit dd299df8189, which added suffix truncation to nbtree, simplified
the WAL record format used by page splits.  It became necessary to
explicitly WAL-log the new high key for the left half of a split in all
cases, which relieved the REDO routine from having to reconstruct a new
high key for the left page by copying the first item from the right
page.  Remove a comment that referred to the previous practice.

src/backend/access/nbtree/nbtxlog.c

index 0a85d8b535a52dae96ddf387c5fd75c61ad0a206..6532a25d3d437ce0319d8e1e347edb910feca05d 100644 (file)
@@ -248,8 +248,6 @@ btree_xlog_split(bool onleft, XLogReaderState *record)
    PageSetLSN(rpage, lsn);
    MarkBufferDirty(rbuf);
 
-   /* don't release the buffer yet; we touch right page's first item below */
-
    /* Now reconstruct left (original) sibling page */
    if (XLogReadBufferForRedo(record, 0, &lbuf) == BLK_NEEDS_REDO)
    {
@@ -257,10 +255,9 @@ btree_xlog_split(bool onleft, XLogReaderState *record)
         * To retain the same physical order of the tuples that they had, we
         * initialize a temporary empty page for the left page and add all the
         * items to that in item number order.  This mirrors how _bt_split()
-        * works.  It's not strictly required to retain the same physical
-        * order, as long as the items are in the correct item number order,
-        * but it helps debugging.  See also _bt_restore_page(), which does
-        * the same for the right page.
+        * works.  Retaining the same physical order makes WAL consistency
+        * checking possible.  See also _bt_restore_page(), which does the
+        * same for the right page.
         */
        Page        lpage = (Page) BufferGetPage(lbuf);
        BTPageOpaque lopaque = (BTPageOpaque) PageGetSpecialPointer(lpage);
@@ -345,7 +342,10 @@ btree_xlog_split(bool onleft, XLogReaderState *record)
        MarkBufferDirty(lbuf);
    }
 
-   /* We no longer need the buffers */
+   /*
+    * We no longer need the buffers.  They must be released together, so that
+    * readers cannot observe two inconsistent halves.
+    */
    if (BufferIsValid(lbuf))
        UnlockReleaseBuffer(lbuf);
    UnlockReleaseBuffer(rbuf);