From 81bba1f37e047bd35d6c92c200ff087d286e182f Mon Sep 17 00:00:00 2001 From: Andrew Kane Date: Wed, 2 Nov 2022 16:41:56 -0700 Subject: [PATCH] Improved order of insert operations --- src/ivfinsert.c | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/src/ivfinsert.c b/src/ivfinsert.c index e6158e1..a9583d2 100644 --- a/src/ivfinsert.c +++ b/src/ivfinsert.c @@ -113,23 +113,24 @@ InsertTuple(Relation rel, IndexTuple itup, Relation heapRel, Datum *values) newbuf = IvfflatNewBuffer(rel, MAIN_FORKNUM); newpage = GenericXLogRegisterBuffer(state, newbuf, GENERIC_XLOG_FULL_IMAGE); - insertPage = BufferGetBlockNumber(newbuf); - - /* Update previous buffer */ - IvfflatPageGetOpaque(page)->nextblkno = insertPage; - - /* Init page */ + /* Init new page */ IvfflatInitPage(newbuf, newpage); + /* Update previous buffer */ + insertPage = BufferGetBlockNumber(newbuf); + IvfflatPageGetOpaque(page)->nextblkno = insertPage; + /* Commit */ - MarkBufferDirty(buf); MarkBufferDirty(newbuf); + MarkBufferDirty(buf); GenericXLogFinish(state); - /* Unlock */ - UnlockReleaseBuffer(buf); - UnlockReleaseBuffer(newbuf); + /* Unlock extend relation lock as early as possible */ UnlockReleaseBuffer(metabuf); + + /* Unlock rest */ + UnlockReleaseBuffer(newbuf); + UnlockReleaseBuffer(buf); } }