Fixed order in IvfflatAppendPage

This commit is contained in:
Andrew Kane
2022-07-31 21:03:57 -07:00
parent 51fe8aff02
commit ba2fb6ad8c

View File

@@ -135,17 +135,29 @@ IvfflatCommitBuffer(Buffer buf, GenericXLogState *state)
void void
IvfflatAppendPage(Relation index, Buffer *buf, Page *page, GenericXLogState **state, ForkNumber forkNum) IvfflatAppendPage(Relation index, Buffer *buf, Page *page, GenericXLogState **state, ForkNumber forkNum)
{ {
Buffer prevbuf = *buf;
/* Get new buffer */ /* Get new buffer */
*buf = IvfflatNewBuffer(index, forkNum); Buffer newbuf = IvfflatNewBuffer(index, forkNum);
Page newpage = GenericXLogRegisterBuffer(*state, newbuf, GENERIC_XLOG_FULL_IMAGE);
/* Update and commit previous buffer */ /* Update the previous buffer */
IvfflatPageGetOpaque(*page)->nextblkno = BufferGetBlockNumber(*buf); IvfflatPageGetOpaque(*page)->nextblkno = BufferGetBlockNumber(newbuf);
IvfflatCommitBuffer(prevbuf, *state);
/* Init new page */ /* Init new page */
IvfflatInitPage(index, buf, page, state); PageInit(newpage, BufferGetPageSize(newbuf), sizeof(IvfflatPageOpaqueData));
IvfflatPageGetOpaque(newpage)->nextblkno = InvalidBlockNumber;
IvfflatPageGetOpaque(newpage)->page_id = IVFFLAT_PAGE_ID;
/* Commit */
MarkBufferDirty(*buf);
MarkBufferDirty(newbuf);
GenericXLogFinish(*state);
/* Unlock */
UnlockReleaseBuffer(*buf);
*state = GenericXLogStart(index);
*page = GenericXLogRegisterBuffer(*state, newbuf, GENERIC_XLOG_FULL_IMAGE);
*buf = newbuf;
} }
/* /*