Skip to content

Commit 7d363c4

Browse files
committed
MUST update (in-memory) data page BEFORE XLogInsert to log
NEW page content if WAL will decide to backup page.
1 parent b05b981 commit 7d363c4

File tree

2 files changed

+15
-17
lines changed

2 files changed

+15
-17
lines changed

src/backend/access/nbtree/nbtinsert.c

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*
99
*
1010
* IDENTIFICATION
11-
* $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtinsert.c,v 1.71 2000/12/28 13:00:07 vadim Exp $
11+
* $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtinsert.c,v 1.72 2000/12/29 20:47:16 vadim Exp $
1212
*
1313
*-------------------------------------------------------------------------
1414
*/
@@ -518,12 +518,17 @@ _bt_insertonpg(Relation rel,
518518
}
519519
else
520520
{
521+
START_CRIT_CODE;
522+
_bt_pgaddtup(rel, page, itemsz, btitem, newitemoff, "page");
523+
itup_off = newitemoff;
524+
itup_blkno = BufferGetBlockNumber(buf);
521525
/* XLOG stuff */
522526
{
523527
xl_btree_insert xlrec;
524528
uint8 flag = XLOG_BTREE_INSERT;
525529
XLogRecPtr recptr;
526530
XLogRecData rdata[2];
531+
BTItemData truncitem;
527532

528533
xlrec.target.node = rel->rd_node;
529534
ItemPointerSet(&(xlrec.target.tid), BufferGetBlockNumber(buf), newitemoff);
@@ -535,8 +540,7 @@ _bt_insertonpg(Relation rel,
535540
/* Read comments in _bt_pgaddtup */
536541
if (!(P_ISLEAF(lpageop)) && newitemoff == P_FIRSTDATAKEY(lpageop))
537542
{
538-
BTItemData truncitem = *btitem;
539-
543+
truncitem = *btitem;
540544
truncitem.bti_itup.t_info = sizeof(BTItemData);
541545
rdata[1].data = (char*)&truncitem;
542546
rdata[1].len = sizeof(BTItemData);
@@ -559,9 +563,7 @@ _bt_insertonpg(Relation rel,
559563
PageSetSUI(page, ThisStartUpID);
560564
}
561565

562-
_bt_pgaddtup(rel, page, itemsz, btitem, newitemoff, "page");
563-
itup_off = newitemoff;
564-
itup_blkno = BufferGetBlockNumber(buf);
566+
END_CRIT_CODE;
565567
/* Write out the updated page and release pin/lock */
566568
_bt_wrtbuf(rel, buf);
567569
}
@@ -600,7 +602,6 @@ _bt_split(Relation rel, Buffer buf, OffsetNumber firstright,
600602
oopaque;
601603
Buffer sbuf = 0;
602604
Page spage = 0;
603-
BTPageOpaque sopaque;
604605
Size itemsz;
605606
ItemId itemid;
606607
BTItem item;
@@ -821,6 +822,9 @@ _bt_split(Relation rel, Buffer buf, OffsetNumber firstright,
821822

822823
if (!P_RIGHTMOST(ropaque))
823824
{
825+
BTPageOpaque sopaque = (BTPageOpaque) PageGetSpecialPointer(spage);
826+
sopaque->btpo_prev = BufferGetBlockNumber(rbuf);
827+
824828
rdata[2].next = &(rdata[3]);
825829
rdata[3].buffer = sbuf;
826830
rdata[3].data = NULL;
@@ -856,14 +860,9 @@ _bt_split(Relation rel, Buffer buf, OffsetNumber firstright,
856860

857861
PageRestoreTempPage(leftpage, origpage);
858862

863+
/* write and release the old right sibling */
859864
if (!P_RIGHTMOST(ropaque))
860-
{
861-
sopaque = (BTPageOpaque) PageGetSpecialPointer(spage);
862-
sopaque->btpo_prev = BufferGetBlockNumber(rbuf);
863-
864-
/* write and release the old right sibling */
865865
_bt_wrtbuf(rel, sbuf);
866-
}
867866
END_CRIT_CODE;
868867

869868
/* split's done */

src/backend/access/nbtree/nbtpage.c

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
*
1010
*
1111
* IDENTIFICATION
12-
* $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtpage.c,v 1.44 2000/12/28 13:00:07 vadim Exp $
12+
* $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtpage.c,v 1.45 2000/12/29 20:47:17 vadim Exp $
1313
*
1414
* NOTES
1515
* Postgres btree pages look like ordinary relation pages. The opaque
@@ -410,8 +410,9 @@ _bt_pagedel(Relation rel, ItemPointer tid)
410410
buf = _bt_getbuf(rel, blkno, BT_WRITE);
411411
page = BufferGetPage(buf);
412412

413-
/* XLOG stuff */
414413
START_CRIT_CODE;
414+
PageIndexTupleDelete(page, offno);
415+
/* XLOG stuff */
415416
{
416417
xl_btree_delete xlrec;
417418
XLogRecPtr recptr;
@@ -434,8 +435,6 @@ _bt_pagedel(Relation rel, ItemPointer tid)
434435
PageSetLSN(page, recptr);
435436
PageSetSUI(page, ThisStartUpID);
436437
}
437-
438-
PageIndexTupleDelete(page, offno);
439438
END_CRIT_CODE;
440439

441440
/* write the buffer and release the lock */

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy