]> granicus.if.org Git - postgresql/commitdiff
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);