Skip to content

Commit 3df92bb

Browse files
Rename nbtree split REDO routine variables.
Make the nbtree page split REDO routine variable names consistent with _bt_split() (which handles the original execution of page splits). These names make the code easier to follow by making the distinction between the original page and the left half of the split clear. (The left half of the split page is a temp page that REDO creates to replace the origpage contents.) Also reduce the elevel used when adding a new high key to the temp page from PANIC to ERROR to be consistent. We already only raise an ERROR when data item PageAddItem() temp page calls fail.
1 parent 199cec9 commit 3df92bb

File tree

1 file changed

+48
-48
lines changed

1 file changed

+48
-48
lines changed

src/backend/access/nbtree/nbtxlog.c

+48-48
Original file line numberDiff line numberDiff line change
@@ -256,20 +256,20 @@ btree_xlog_split(bool newitemonleft, XLogReaderState *record)
256256
XLogRecPtr lsn = record->EndRecPtr;
257257
xl_btree_split *xlrec = (xl_btree_split *) XLogRecGetData(record);
258258
bool isleaf = (xlrec->level == 0);
259-
Buffer lbuf;
259+
Buffer buf;
260260
Buffer rbuf;
261261
Page rpage;
262262
BTPageOpaque ropaque;
263263
char *datapos;
264264
Size datalen;
265-
BlockNumber leftsib;
266-
BlockNumber rightsib;
267-
BlockNumber rnext;
265+
BlockNumber origpagenumber;
266+
BlockNumber rightpagenumber;
267+
BlockNumber spagenumber;
268268

269-
XLogRecGetBlockTag(record, 0, NULL, NULL, &leftsib);
270-
XLogRecGetBlockTag(record, 1, NULL, NULL, &rightsib);
271-
if (!XLogRecGetBlockTag(record, 2, NULL, NULL, &rnext))
272-
rnext = P_NONE;
269+
XLogRecGetBlockTag(record, 0, NULL, NULL, &origpagenumber);
270+
XLogRecGetBlockTag(record, 1, NULL, NULL, &rightpagenumber);
271+
if (!XLogRecGetBlockTag(record, 2, NULL, NULL, &spagenumber))
272+
spagenumber = P_NONE;
273273

274274
/*
275275
* Clear the incomplete split flag on the left sibling of the child page
@@ -287,8 +287,8 @@ btree_xlog_split(bool newitemonleft, XLogReaderState *record)
287287
_bt_pageinit(rpage, BufferGetPageSize(rbuf));
288288
ropaque = (BTPageOpaque) PageGetSpecialPointer(rpage);
289289

290-
ropaque->btpo_prev = leftsib;
291-
ropaque->btpo_next = rnext;
290+
ropaque->btpo_prev = origpagenumber;
291+
ropaque->btpo_next = spagenumber;
292292
ropaque->btpo.level = xlrec->level;
293293
ropaque->btpo_flags = isleaf ? BTP_LEAF : 0;
294294
ropaque->btpo_cycleid = 0;
@@ -298,8 +298,8 @@ btree_xlog_split(bool newitemonleft, XLogReaderState *record)
298298
PageSetLSN(rpage, lsn);
299299
MarkBufferDirty(rbuf);
300300

301-
/* Now reconstruct left (original) sibling page */
302-
if (XLogReadBufferForRedo(record, 0, &lbuf) == BLK_NEEDS_REDO)
301+
/* Now reconstruct original page (left half of split) */
302+
if (XLogReadBufferForRedo(record, 0, &buf) == BLK_NEEDS_REDO)
303303
{
304304
/*
305305
* To retain the same physical order of the tuples that they had, we
@@ -309,15 +309,15 @@ btree_xlog_split(bool newitemonleft, XLogReaderState *record)
309309
* checking possible. See also _bt_restore_page(), which does the
310310
* same for the right page.
311311
*/
312-
Page lpage = (Page) BufferGetPage(lbuf);
313-
BTPageOpaque lopaque = (BTPageOpaque) PageGetSpecialPointer(lpage);
312+
Page origpage = (Page) BufferGetPage(buf);
313+
BTPageOpaque oopaque = (BTPageOpaque) PageGetSpecialPointer(origpage);
314314
OffsetNumber off;
315315
IndexTuple newitem = NULL,
316316
left_hikey = NULL,
317317
nposting = NULL;
318318
Size newitemsz = 0,
319319
left_hikeysz = 0;
320-
Page newlpage;
320+
Page leftpage;
321321
OffsetNumber leftoff,
322322
replacepostingoff = InvalidOffsetNumber;
323323

@@ -340,8 +340,8 @@ btree_xlog_split(bool newitemonleft, XLogReaderState *record)
340340

341341
/* Use mutable, aligned newitem copy in _bt_swap_posting() */
342342
newitem = CopyIndexTuple(newitem);
343-
itemid = PageGetItemId(lpage, replacepostingoff);
344-
oposting = (IndexTuple) PageGetItem(lpage, itemid);
343+
itemid = PageGetItemId(origpage, replacepostingoff);
344+
oposting = (IndexTuple) PageGetItem(origpage, itemid);
345345
nposting = _bt_swap_posting(newitem, oposting,
346346
xlrec->postingoff);
347347
}
@@ -359,16 +359,16 @@ btree_xlog_split(bool newitemonleft, XLogReaderState *record)
359359

360360
Assert(datalen == 0);
361361

362-
newlpage = PageGetTempPageCopySpecial(lpage);
362+
leftpage = PageGetTempPageCopySpecial(origpage);
363363

364-
/* Set high key */
364+
/* Add high key tuple from WAL record to temp page */
365365
leftoff = P_HIKEY;
366-
if (PageAddItem(newlpage, (Item) left_hikey, left_hikeysz,
367-
P_HIKEY, false, false) == InvalidOffsetNumber)
368-
elog(PANIC, "failed to add high key to left page after split");
366+
if (PageAddItem(leftpage, (Item) left_hikey, left_hikeysz, P_HIKEY,
367+
false, false) == InvalidOffsetNumber)
368+
elog(ERROR, "failed to add high key to left page after split");
369369
leftoff = OffsetNumberNext(leftoff);
370370

371-
for (off = P_FIRSTDATAKEY(lopaque); off < xlrec->firstrightoff; off++)
371+
for (off = P_FIRSTDATAKEY(oopaque); off < xlrec->firstrightoff; off++)
372372
{
373373
ItemId itemid;
374374
Size itemsz;
@@ -379,7 +379,7 @@ btree_xlog_split(bool newitemonleft, XLogReaderState *record)
379379
{
380380
Assert(newitemonleft ||
381381
xlrec->firstrightoff == xlrec->newitemoff);
382-
if (PageAddItem(newlpage, (Item) nposting,
382+
if (PageAddItem(leftpage, (Item) nposting,
383383
MAXALIGN(IndexTupleSize(nposting)), leftoff,
384384
false, false) == InvalidOffsetNumber)
385385
elog(ERROR, "failed to add new posting list item to left page after split");
@@ -390,16 +390,16 @@ btree_xlog_split(bool newitemonleft, XLogReaderState *record)
390390
/* add the new item if it was inserted on left page */
391391
else if (newitemonleft && off == xlrec->newitemoff)
392392
{
393-
if (PageAddItem(newlpage, (Item) newitem, newitemsz, leftoff,
393+
if (PageAddItem(leftpage, (Item) newitem, newitemsz, leftoff,
394394
false, false) == InvalidOffsetNumber)
395395
elog(ERROR, "failed to add new item to left page after split");
396396
leftoff = OffsetNumberNext(leftoff);
397397
}
398398

399-
itemid = PageGetItemId(lpage, off);
399+
itemid = PageGetItemId(origpage, off);
400400
itemsz = ItemIdGetLength(itemid);
401-
item = (IndexTuple) PageGetItem(lpage, itemid);
402-
if (PageAddItem(newlpage, (Item) item, itemsz, leftoff,
401+
item = (IndexTuple) PageGetItem(origpage, itemid);
402+
if (PageAddItem(leftpage, (Item) item, itemsz, leftoff,
403403
false, false) == InvalidOffsetNumber)
404404
elog(ERROR, "failed to add old item to left page after split");
405405
leftoff = OffsetNumberNext(leftoff);
@@ -408,31 +408,31 @@ btree_xlog_split(bool newitemonleft, XLogReaderState *record)
408408
/* cope with possibility that newitem goes at the end */
409409
if (newitemonleft && off == xlrec->newitemoff)
410410
{
411-
if (PageAddItem(newlpage, (Item) newitem, newitemsz, leftoff,
411+
if (PageAddItem(leftpage, (Item) newitem, newitemsz, leftoff,
412412
false, false) == InvalidOffsetNumber)
413413
elog(ERROR, "failed to add new item to left page after split");
414414
leftoff = OffsetNumberNext(leftoff);
415415
}
416416

417-
PageRestoreTempPage(newlpage, lpage);
417+
PageRestoreTempPage(leftpage, origpage);
418418

419419
/* Fix opaque fields */
420-
lopaque->btpo_flags = BTP_INCOMPLETE_SPLIT;
420+
oopaque->btpo_flags = BTP_INCOMPLETE_SPLIT;
421421
if (isleaf)
422-
lopaque->btpo_flags |= BTP_LEAF;
423-
lopaque->btpo_next = rightsib;
424-
lopaque->btpo_cycleid = 0;
422+
oopaque->btpo_flags |= BTP_LEAF;
423+
oopaque->btpo_next = rightpagenumber;
424+
oopaque->btpo_cycleid = 0;
425425

426-
PageSetLSN(lpage, lsn);
427-
MarkBufferDirty(lbuf);
426+
PageSetLSN(origpage, lsn);
427+
MarkBufferDirty(buf);
428428
}
429429

430430
/*
431431
* We no longer need the buffers. They must be released together, so that
432432
* readers cannot observe two inconsistent halves.
433433
*/
434-
if (BufferIsValid(lbuf))
435-
UnlockReleaseBuffer(lbuf);
434+
if (BufferIsValid(buf))
435+
UnlockReleaseBuffer(buf);
436436
UnlockReleaseBuffer(rbuf);
437437

438438
/*
@@ -443,22 +443,22 @@ btree_xlog_split(bool newitemonleft, XLogReaderState *record)
443443
* replay, because no other index update can be in progress, and readers
444444
* will cope properly when following an obsolete left-link.
445445
*/
446-
if (rnext != P_NONE)
446+
if (spagenumber != P_NONE)
447447
{
448-
Buffer buffer;
448+
Buffer sbuf;
449449

450-
if (XLogReadBufferForRedo(record, 2, &buffer) == BLK_NEEDS_REDO)
450+
if (XLogReadBufferForRedo(record, 2, &sbuf) == BLK_NEEDS_REDO)
451451
{
452-
Page page = (Page) BufferGetPage(buffer);
453-
BTPageOpaque pageop = (BTPageOpaque) PageGetSpecialPointer(page);
452+
Page spage = (Page) BufferGetPage(sbuf);
453+
BTPageOpaque spageop = (BTPageOpaque) PageGetSpecialPointer(spage);
454454

455-
pageop->btpo_prev = rightsib;
455+
spageop->btpo_prev = rightpagenumber;
456456

457-
PageSetLSN(page, lsn);
458-
MarkBufferDirty(buffer);
457+
PageSetLSN(spage, lsn);
458+
MarkBufferDirty(sbuf);
459459
}
460-
if (BufferIsValid(buffer))
461-
UnlockReleaseBuffer(buffer);
460+
if (BufferIsValid(sbuf))
461+
UnlockReleaseBuffer(sbuf);
462462
}
463463
}
464464

0 commit comments

Comments
 (0)