Skip to content

Commit 27bc34b

Browse files
committed
WAL need in overwrite mode - restored in new way
(without PageManagetSetMode -:)) Safe shuffle mode behaviour retained.
1 parent b58c041 commit 27bc34b

File tree

1 file changed

+26
-3
lines changed

1 file changed

+26
-3
lines changed

src/backend/storage/page/bufpage.c

+26-3
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*
99
*
1010
* IDENTIFICATION
11-
* $Header: /cvsroot/pgsql/src/backend/storage/page/bufpage.c,v 1.31 2000/07/21 06:42:33 tgl Exp $
11+
* $Header: /cvsroot/pgsql/src/backend/storage/page/bufpage.c,v 1.32 2000/10/20 11:28:39 vadim Exp $
1212
*
1313
*-------------------------------------------------------------------------
1414
*/
@@ -80,6 +80,9 @@ PageAddItem(Page page,
8080
ItemId itemId;
8181
OffsetNumber limit;
8282
bool needshuffle = false;
83+
bool overwritemode = flags & OverwritePageMode;
84+
85+
flags &= ~OverwritePageMode;
8386

8487
/*
8588
* Find first unallocated offsetNumber
@@ -89,8 +92,28 @@ PageAddItem(Page page,
8992
/* was offsetNumber passed in? */
9093
if (OffsetNumberIsValid(offsetNumber))
9194
{
92-
needshuffle = true; /* need to increase "lower" */
93-
/* don't actually do the shuffle till we've checked free space! */
95+
if (overwritemode)
96+
{
97+
if (offsetNumber > limit)
98+
{
99+
elog(NOTICE, "PageAddItem: tried overwrite after maxoff");
100+
return InvalidOffsetNumber;
101+
}
102+
itemId = &((PageHeader) page)->pd_linp[offsetNumber - 1];
103+
if (((*itemId).lp_flags & LP_USED) ||
104+
((*itemId).lp_len != 0))
105+
{
106+
elog(NOTICE, "PageAddItem: tried overwrite of used ItemId");
107+
return InvalidOffsetNumber;
108+
}
109+
}
110+
else
111+
{
112+
/*
113+
* Don't actually do the shuffle till we've checked free space!
114+
*/
115+
needshuffle = true; /* need to increase "lower" */
116+
}
94117
}
95118
else
96119
{

0 commit comments

Comments
 (0)