Skip to content

Commit f9e5bae

Browse files
author
Artur Zakirov
committed
Fixes for rumInsertCleanup
1 parent 14a6bce commit f9e5bae

File tree

2 files changed

+10
-33
lines changed

2 files changed

+10
-33
lines changed

rumbtree.c

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -426,9 +426,7 @@ rumInsertValue(Relation index, RumBtree btree, RumBtreeStack *stack,
426426
state = GenericXLogStart(index);
427427

428428
page = GenericXLogRegisterBuffer(state, stack->buffer, 0);
429-
430429
lpage = GenericXLogRegisterBuffer(state, lbuffer, 0);
431-
432430
rpage = GenericXLogRegisterBuffer(state, rbuffer, 0);
433431

434432
RumPageGetOpaque(rpage)->rightlink = InvalidBlockNumber;
@@ -468,7 +466,6 @@ rumInsertValue(Relation index, RumBtree btree, RumBtreeStack *stack,
468466
state = GenericXLogStart(index);
469467

470468
lpage = GenericXLogRegisterBuffer(state, stack->buffer, 0);
471-
472469
rpage = GenericXLogRegisterBuffer(state, rbuffer, 0);
473470

474471
RumPageGetOpaque(rpage)->rightlink = savedRightLink;

rumfast.c

Lines changed: 10 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -519,8 +519,6 @@ shiftList(Relation index, Buffer metabuffer, BlockNumber newHead,
519519
Buffer buffers[RUM_NDELETE_AT_ONCE];
520520
GenericXLogState *state;
521521

522-
state = GenericXLogStart(index);
523-
524522
data.node = index->rd_node;
525523

526524
data.ndeleted = 0;
@@ -530,13 +528,12 @@ shiftList(Relation index, Buffer metabuffer, BlockNumber newHead,
530528
buffers[data.ndeleted] = ReadBuffer(index, blknoToDelete);
531529
LockBuffer(buffers[data.ndeleted], RUM_EXCLUSIVE);
532530

533-
page = GenericXLogRegisterBuffer(state, buffers[data.ndeleted], 0);
531+
page = BufferGetPage(buffers[data.ndeleted]);
534532

535533
data.ndeleted++;
536534

537535
if (RumPageIsDeleted(page))
538536
{
539-
GenericXLogAbort(state);
540537
GenericXLogAbort(metastate);
541538
/* concurrent cleanup process is detected */
542539
for (i = 0; i < data.ndeleted; i++)
@@ -552,8 +549,6 @@ shiftList(Relation index, Buffer metabuffer, BlockNumber newHead,
552549
if (stats)
553550
stats->pages_deleted += data.ndeleted;
554551

555-
START_CRIT_SECTION();
556-
557552
metadata->head = blknoToDelete;
558553

559554
Assert(metadata->nPendingPages >= data.ndeleted);
@@ -573,18 +568,15 @@ shiftList(Relation index, Buffer metabuffer, BlockNumber newHead,
573568

574569
for (i = 0; i < data.ndeleted; i++)
575570
{
571+
state = GenericXLogStart(index);
576572
page = GenericXLogRegisterBuffer(state, buffers[i], 0);
577573

578574
RumPageGetOpaque(page)->flags = RUM_DELETED;
579-
MarkBufferDirty(buffers[i]);
575+
GenericXLogFinish(state);
580576
}
581577

582-
GenericXLogFinish(state);
583-
584578
for (i = 0; i < data.ndeleted; i++)
585579
UnlockReleaseBuffer(buffers[i]);
586-
587-
END_CRIT_SECTION();
588580
} while (blknoToDelete != newHead);
589581

590582
GenericXLogFinish(metastate);
@@ -743,20 +735,16 @@ rumInsertCleanup(RumState *rumstate,
743735
BuildAccumulator accum;
744736
KeyArray datums;
745737
BlockNumber blkno;
746-
GenericXLogState *metastate;
747-
748-
metastate = GenericXLogStart(rumstate->index);
749738

750739
metabuffer = ReadBuffer(index, RUM_METAPAGE_BLKNO);
751740
LockBuffer(metabuffer, RUM_SHARE);
752741

753-
metapage = GenericXLogRegisterBuffer(metastate, metabuffer, 0);
742+
metapage = BufferGetPage(metabuffer);
754743
metadata = RumPageGetMeta(metapage);
755744

756745
if (metadata->head == InvalidBlockNumber)
757746
{
758747
/* Nothing to do */
759-
GenericXLogAbort(metastate);
760748
UnlockReleaseBuffer(metabuffer);
761749
return;
762750
}
@@ -765,6 +753,9 @@ rumInsertCleanup(RumState *rumstate,
765753
* Read and lock head of pending list
766754
*/
767755
blkno = metadata->head;
756+
buffer = ReadBuffer(index, blkno);
757+
LockBuffer(buffer, RUM_SHARE);
758+
page = BufferGetPage(buffer);
768759

769760
LockBuffer(metabuffer, RUM_UNLOCK);
770761

@@ -790,18 +781,9 @@ rumInsertCleanup(RumState *rumstate,
790781
*/
791782
for (;;)
792783
{
793-
GenericXLogState *state;
794-
795-
state = GenericXLogStart(index);
796-
797-
buffer = ReadBuffer(index, blkno);
798-
LockBuffer(buffer, RUM_SHARE);
799-
page = GenericXLogRegisterBuffer(state, buffer, 0);
800-
801784
if (RumPageIsDeleted(page))
802785
{
803786
/* another cleanup process is running concurrently */
804-
GenericXLogAbort(state);
805787
UnlockReleaseBuffer(buffer);
806788
break;
807789
}
@@ -874,7 +856,6 @@ rumInsertCleanup(RumState *rumstate,
874856
if (RumPageIsDeleted(page))
875857
{
876858
/* another cleanup process is running concurrently */
877-
GenericXLogAbort(state);
878859
UnlockReleaseBuffer(buffer);
879860
LockBuffer(metabuffer, RUM_UNLOCK);
880861
break;
@@ -918,7 +899,6 @@ rumInsertCleanup(RumState *rumstate,
918899
* Remember next page - it will become the new list head
919900
*/
920901
blkno = RumPageGetOpaque(page)->rightlink;
921-
GenericXLogFinish(state);
922902
UnlockReleaseBuffer(buffer); /* shiftList will do exclusive
923903
* locking */
924904

@@ -952,18 +932,18 @@ rumInsertCleanup(RumState *rumstate,
952932
else
953933
{
954934
blkno = RumPageGetOpaque(page)->rightlink;
955-
GenericXLogFinish(state);
956935
UnlockReleaseBuffer(buffer);
957936
}
958937

959938
/*
960939
* Read next page in pending list
961940
*/
962941
vacuum_delay_point();
942+
buffer = ReadBuffer(index, blkno);
943+
LockBuffer(buffer, RUM_SHARE);
944+
page = BufferGetPage(buffer);
963945
}
964946

965-
GenericXLogFinish(metastate);
966-
967947
ReleaseBuffer(metabuffer);
968948

969949
/* Clean up temporary space */

0 commit comments

Comments
 (0)