WAL need in overwrite mode - restored in new way

(without PageManagetSetMode -:))
Safe shuffle mode behaviour retained.
This commit is contained in:
Vadim B. Mikheev 2000-10-20 11:28:39 +00:00
parent b58c0411ba
commit 27bc34be55
1 changed files with 26 additions and 3 deletions

View File

@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/storage/page/bufpage.c,v 1.31 2000/07/21 06:42:33 tgl Exp $
* $Header: /cvsroot/pgsql/src/backend/storage/page/bufpage.c,v 1.32 2000/10/20 11:28:39 vadim Exp $
*
*-------------------------------------------------------------------------
*/
@ -80,6 +80,9 @@ PageAddItem(Page page,
ItemId itemId;
OffsetNumber limit;
bool needshuffle = false;
bool overwritemode = flags & OverwritePageMode;
flags &= ~OverwritePageMode;
/*
* Find first unallocated offsetNumber
@ -89,8 +92,28 @@ PageAddItem(Page page,
/* was offsetNumber passed in? */
if (OffsetNumberIsValid(offsetNumber))
{
needshuffle = true; /* need to increase "lower" */
/* don't actually do the shuffle till we've checked free space! */
if (overwritemode)
{
if (offsetNumber > limit)
{
elog(NOTICE, "PageAddItem: tried overwrite after maxoff");
return InvalidOffsetNumber;
}
itemId = &((PageHeader) page)->pd_linp[offsetNumber - 1];
if (((*itemId).lp_flags & LP_USED) ||
((*itemId).lp_len != 0))
{
elog(NOTICE, "PageAddItem: tried overwrite of used ItemId");
return InvalidOffsetNumber;
}
}
else
{
/*
* Don't actually do the shuffle till we've checked free space!
*/
needshuffle = true; /* need to increase "lower" */
}
}
else
{