Skip to content

Commit d7d92b4

Browse files
author
Artur Zakirov
committed
Fixes
1 parent 7dabdca commit d7d92b4

File tree

4 files changed

+34
-33
lines changed

4 files changed

+34
-33
lines changed

rumbtree.c

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -380,8 +380,7 @@ rumInsertValue(Relation index, RumBtree btree, RumBtreeStack *stack,
380380
btree->placeToPage(btree, stack->buffer, stack->off, &rdata);
381381

382382
state = GenericXLogStart(index);
383-
page = GenericXLogRegisterBuffer(state, stack->buffer,
384-
GENERIC_XLOG_FULL_IMAGE);
383+
page = GenericXLogRegisterBuffer(state, stack->buffer, 0);
385384
GenericXLogFinish(state);
386385

387386
LockBuffer(stack->buffer, RUM_UNLOCK);
@@ -426,14 +425,11 @@ rumInsertValue(Relation index, RumBtree btree, RumBtreeStack *stack,
426425

427426
state = GenericXLogStart(index);
428427

429-
page = GenericXLogRegisterBuffer(state, stack->buffer,
430-
GENERIC_XLOG_FULL_IMAGE);
428+
page = GenericXLogRegisterBuffer(state, stack->buffer, 0);
431429

432-
lpage = GenericXLogRegisterBuffer(state, lbuffer,
433-
GENERIC_XLOG_FULL_IMAGE);
430+
lpage = GenericXLogRegisterBuffer(state, lbuffer, 0);
434431

435-
rpage = GenericXLogRegisterBuffer(state, rbuffer,
436-
GENERIC_XLOG_FULL_IMAGE);
432+
rpage = GenericXLogRegisterBuffer(state, rbuffer, 0);
437433

438434

439435
RumPageGetOpaque(rpage)->rightlink = InvalidBlockNumber;
@@ -472,11 +468,9 @@ rumInsertValue(Relation index, RumBtree btree, RumBtreeStack *stack,
472468

473469
state = GenericXLogStart(index);
474470

475-
lpage = GenericXLogRegisterBuffer(state, stack->buffer,
476-
GENERIC_XLOG_FULL_IMAGE);
471+
lpage = GenericXLogRegisterBuffer(state, stack->buffer, 0);
477472

478-
rpage = GenericXLogRegisterBuffer(state, rbuffer,
479-
GENERIC_XLOG_FULL_IMAGE);
473+
rpage = GenericXLogRegisterBuffer(state, rbuffer, 0);
480474

481475
RumPageGetOpaque(rpage)->rightlink = savedRightLink;
482476
RumPageGetOpaque(newlpage)->rightlink = BufferGetBlockNumber(rbuffer);

rumfast.c

Lines changed: 25 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -221,8 +221,7 @@ rumHeapTupleFastInsert(RumState *rumstate, RumTupleCollector *collector)
221221

222222
state = GenericXLogStart(rumstate->index);
223223
metabuffer = ReadBuffer(index, RUM_METAPAGE_BLKNO);
224-
metapage = GenericXLogRegisterBuffer(state, metabuffer,
225-
GENERIC_XLOG_FULL_IMAGE);
224+
metapage = GenericXLogRegisterBuffer(state, metabuffer, 0);
226225

227226
if (collector->sumsize + collector->ntuples * sizeof(ItemIdData) > RumListPageSize)
228227
{
@@ -290,8 +289,7 @@ rumHeapTupleFastInsert(RumState *rumstate, RumTupleCollector *collector)
290289

291290
buffer = ReadBuffer(index, metadata->tail);
292291
LockBuffer(buffer, RUM_EXCLUSIVE);
293-
page = GenericXLogRegisterBuffer(state, buffer,
294-
GENERIC_XLOG_FULL_IMAGE);
292+
page = GenericXLogRegisterBuffer(state, buffer, 0);
295293

296294
rdata[0].next = rdata + 1;
297295

@@ -329,8 +327,7 @@ rumHeapTupleFastInsert(RumState *rumstate, RumTupleCollector *collector)
329327

330328
buffer = ReadBuffer(index, metadata->tail);
331329
LockBuffer(buffer, RUM_EXCLUSIVE);
332-
page = GenericXLogRegisterBuffer(state, buffer,
333-
GENERIC_XLOG_FULL_IMAGE);
330+
page = GenericXLogRegisterBuffer(state, buffer, 0);
334331

335332
off = (PageIsEmpty(page)) ? FirstOffsetNumber :
336333
OffsetNumberNext(PageGetMaxOffsetNumber(page));
@@ -597,8 +594,7 @@ shiftList(Relation index, Buffer metabuffer, BlockNumber newHead,
597594
buffers[data.ndeleted] = ReadBuffer(index, blknoToDelete);
598595
LockBuffer(buffers[data.ndeleted], RUM_EXCLUSIVE);
599596

600-
page = GenericXLogRegisterBuffer(state, buffers[data.ndeleted],
601-
GENERIC_XLOG_FULL_IMAGE);
597+
page = GenericXLogRegisterBuffer(state, buffers[data.ndeleted], 0);
602598

603599
data.ndeleted++;
604600

@@ -641,8 +637,7 @@ shiftList(Relation index, Buffer metabuffer, BlockNumber newHead,
641637

642638
for (i = 0; i < data.ndeleted; i++)
643639
{
644-
page = GenericXLogRegisterBuffer(state, buffers[i],
645-
GENERIC_XLOG_FULL_IMAGE);
640+
page = GenericXLogRegisterBuffer(state, buffers[i], 0);
646641

647642
RumPageGetOpaque(page)->flags = RUM_DELETED;
648643
MarkBufferDirty(buffers[i]);
@@ -812,15 +807,20 @@ rumInsertCleanup(RumState *rumstate,
812807
BuildAccumulator accum;
813808
KeyArray datums;
814809
BlockNumber blkno;
810+
GenericXLogState *metastate;
811+
812+
metastate = GenericXLogStart(rumstate->index);
815813

816814
metabuffer = ReadBuffer(index, RUM_METAPAGE_BLKNO);
817815
LockBuffer(metabuffer, RUM_SHARE);
818-
metapage = BufferGetPage(metabuffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
816+
817+
metapage = GenericXLogRegisterBuffer(metastate, metabuffer, 0);
819818
metadata = RumPageGetMeta(metapage);
820819

821820
if (metadata->head == InvalidBlockNumber)
822821
{
823822
/* Nothing to do */
823+
GenericXLogAbort(metastate);
824824
UnlockReleaseBuffer(metabuffer);
825825
return;
826826
}
@@ -829,9 +829,6 @@ rumInsertCleanup(RumState *rumstate,
829829
* Read and lock head of pending list
830830
*/
831831
blkno = metadata->head;
832-
buffer = ReadBuffer(index, blkno);
833-
LockBuffer(buffer, RUM_SHARE);
834-
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
835832

836833
LockBuffer(metabuffer, RUM_UNLOCK);
837834

@@ -857,9 +854,18 @@ rumInsertCleanup(RumState *rumstate,
857854
*/
858855
for (;;)
859856
{
857+
GenericXLogState *state;
858+
859+
state = GenericXLogStart(index);
860+
861+
buffer = ReadBuffer(index, blkno);
862+
LockBuffer(buffer, RUM_SHARE);
863+
page = GenericXLogRegisterBuffer(state, buffer, 0);
864+
860865
if (RumPageIsDeleted(page))
861866
{
862867
/* another cleanup process is running concurrently */
868+
GenericXLogAbort(state);
863869
UnlockReleaseBuffer(buffer);
864870
break;
865871
}
@@ -932,6 +938,7 @@ rumInsertCleanup(RumState *rumstate,
932938
if (RumPageIsDeleted(page))
933939
{
934940
/* another cleanup process is running concurrently */
941+
GenericXLogAbort(state);
935942
UnlockReleaseBuffer(buffer);
936943
LockBuffer(metabuffer, RUM_UNLOCK);
937944
break;
@@ -975,6 +982,7 @@ rumInsertCleanup(RumState *rumstate,
975982
* Remember next page - it will become the new list head
976983
*/
977984
blkno = RumPageGetOpaque(page)->rightlink;
985+
GenericXLogFinish(state);
978986
UnlockReleaseBuffer(buffer); /* shiftList will do exclusive
979987
* locking */
980988

@@ -1008,18 +1016,18 @@ rumInsertCleanup(RumState *rumstate,
10081016
else
10091017
{
10101018
blkno = RumPageGetOpaque(page)->rightlink;
1019+
GenericXLogFinish(state);
10111020
UnlockReleaseBuffer(buffer);
10121021
}
10131022

10141023
/*
10151024
* Read next page in pending list
10161025
*/
10171026
vacuum_delay_point();
1018-
buffer = ReadBuffer(index, blkno);
1019-
LockBuffer(buffer, RUM_SHARE);
1020-
page = BufferGetPage(buffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST);
10211027
}
10221028

1029+
GenericXLogFinish(metastate);
1030+
10231031
ReleaseBuffer(metabuffer);
10241032

10251033
/* Clean up temporary space */

rumutil.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -759,8 +759,7 @@ rumUpdateStats(Relation index, const GinStatsData *stats)
759759

760760
metabuffer = ReadBuffer(index, RUM_METAPAGE_BLKNO);
761761
LockBuffer(metabuffer, RUM_EXCLUSIVE);
762-
metapage = GenericXLogRegisterBuffer(state, metabuffer,
763-
GENERIC_XLOG_FULL_IMAGE);
762+
metapage = GenericXLogRegisterBuffer(state, metabuffer, 0);
764763
metadata = RumPageGetMeta(metapage);
765764

766765
START_CRIT_SECTION();

rumvacuum.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,7 @@ xlogVacuumPage(Relation index, Buffer buffer, OffsetNumber attrnum, RumState *ru
218218
return;
219219

220220
state = GenericXLogStart(index);
221-
page = GenericXLogRegisterBuffer(state, buffer, GENERIC_XLOG_FULL_IMAGE);
221+
page = GenericXLogRegisterBuffer(state, buffer, 0);
222222

223223
Assert(RumPageIsLeaf(page));
224224

@@ -392,7 +392,7 @@ rumDeletePage(RumVacuumState *gvs, BlockNumber deleteBlkno, BlockNumber leftBlkn
392392
#endif
393393
RumPageDeletePostingItem(parentPage, myoff);
394394

395-
page = GenericXLogRegisterBuffer(state, dBuffer, GENERIC_XLOG_FULL_IMAGE);
395+
page = GenericXLogRegisterBuffer(state, dBuffer, 0);
396396

397397
/*
398398
* we shouldn't change rightlink field to save workability of running

0 commit comments

Comments
 (0)