mirror of
https://github.com/pgvector/pgvector.git
synced 2026-07-13 08:06:54 +08:00
Fixed order in IvfflatAppendPage
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
Reference in New Issue
Block a user