mirror of
https://github.com/pgvector/pgvector.git
synced 2026-07-07 05:00:56 +08:00
Revert "Update neighbor tuples in-place for HNSW index build"
This reverts commit 270dd8189a.
This commit is contained in:
@@ -254,14 +254,17 @@ WriteNeighborTuples(HnswBuildState * buildstate)
|
|||||||
int m = buildstate->m;
|
int m = buildstate->m;
|
||||||
HnswElementPtr iter = buildstate->graph->head;
|
HnswElementPtr iter = buildstate->graph->head;
|
||||||
char *base = buildstate->hnswarea;
|
char *base = buildstate->hnswarea;
|
||||||
|
HnswNeighborTuple ntup;
|
||||||
|
|
||||||
|
/* Allocate once */
|
||||||
|
ntup = palloc0(BLCKSZ);
|
||||||
|
|
||||||
while (!HnswPtrIsNull(base, iter))
|
while (!HnswPtrIsNull(base, iter))
|
||||||
{
|
{
|
||||||
HnswElement e = HnswPtrAccess(base, iter);
|
HnswElement e = HnswPtrAccess(base, iter);
|
||||||
Buffer buf;
|
Buffer buf;
|
||||||
Page page;
|
Page page;
|
||||||
ItemId itemid;
|
Size ntupSize = HNSW_NEIGHBOR_TUPLE_SIZE(e->level, m);
|
||||||
HnswNeighborTuple ntup;
|
|
||||||
|
|
||||||
/* Update iterator */
|
/* Update iterator */
|
||||||
iter = e->next;
|
iter = e->next;
|
||||||
@@ -273,19 +276,18 @@ WriteNeighborTuples(HnswBuildState * buildstate)
|
|||||||
buf = ReadBufferExtended(index, forkNum, e->neighborPage, RBM_NORMAL, NULL);
|
buf = ReadBufferExtended(index, forkNum, e->neighborPage, RBM_NORMAL, NULL);
|
||||||
LockBuffer(buf, BUFFER_LOCK_EXCLUSIVE);
|
LockBuffer(buf, BUFFER_LOCK_EXCLUSIVE);
|
||||||
page = BufferGetPage(buf);
|
page = BufferGetPage(buf);
|
||||||
itemid = PageGetItemId(page, e->neighborOffno);
|
|
||||||
ntup = (HnswNeighborTuple) PageGetItem(page, itemid);
|
|
||||||
|
|
||||||
/* Check expected size */
|
|
||||||
Assert(ItemIdGetLength(itemid) == HNSW_NEIGHBOR_TUPLE_SIZE(e->level, m));
|
|
||||||
|
|
||||||
/* Update page in-place */
|
|
||||||
HnswSetNeighborTuple(base, ntup, e, m);
|
HnswSetNeighborTuple(base, ntup, e, m);
|
||||||
|
|
||||||
|
if (!PageIndexTupleOverwrite(page, e->neighborOffno, (Item) ntup, ntupSize))
|
||||||
|
elog(ERROR, "failed to add index item to \"%s\"", RelationGetRelationName(index));
|
||||||
|
|
||||||
/* Commit */
|
/* Commit */
|
||||||
MarkBufferDirty(buf);
|
MarkBufferDirty(buf);
|
||||||
UnlockReleaseBuffer(buf);
|
UnlockReleaseBuffer(buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pfree(ntup);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
Reference in New Issue
Block a user