Commit e9e441c9 authored by Teodor Sigaev's avatar Teodor Sigaev

Prevent mark as deleted and as 'has free space' page in bloom module

Vacuum might put page into list of pages with some free space and mark as
deleted at the same time.
parent 80afb62d
......@@ -108,7 +108,12 @@ blbulkdelete(IndexVacuumInfo *info, IndexBulkDeleteResult *stats,
Assert(itupPtr == BloomPageGetTuple(&state, page,
OffsetNumberNext(BloomPageGetMaxOffset(page))));
if (BloomPageGetFreeSpace(&state, page) > state.sizeOfBloomTuple &&
/*
* Add page to notFullPage list if we will not mark page as deleted and
* there is a free space on it
*/
if (BloomPageGetMaxOffset(page) == 0 &&
BloomPageGetFreeSpace(&state, page) > state.sizeOfBloomTuple &&
countPage < BloomMetaBlockN)
notFullPage[countPage++] = blkno;
......@@ -116,7 +121,7 @@ blbulkdelete(IndexVacuumInfo *info, IndexBulkDeleteResult *stats,
if (itupPtr != itup)
{
/* Is it empty page now? */
if (itupPtr == BloomPageGetData(page))
if (BloomPageGetMaxOffset(page) == 0)
BloomPageSetDeleted(page);
/* Adjust pg_lower */
((PageHeader) page)->pd_lower = (Pointer) itupPtr - page;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment