From 43e0b3d9d415477af0e312c3e1b5d4b1162890f2 Mon Sep 17 00:00:00 2001 From: Andrew Kane Date: Wed, 20 Dec 2023 16:16:25 -0500 Subject: [PATCH] Mark buffer contents as dirty when not logging --- src/hnswbuild.c | 4 ++++ src/hnswinsert.c | 24 ++++++++++++++++++++---- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/src/hnswbuild.c b/src/hnswbuild.c index bcf4ca2..2acb80f 100644 --- a/src/hnswbuild.c +++ b/src/hnswbuild.c @@ -88,6 +88,7 @@ CreateMetaPage(HnswBuildState * buildstate) ((PageHeader) page)->pd_lower = ((char *) metap + sizeof(HnswMetaPageData)) - (char *) page; + MarkBufferDirty(buf); UnlockReleaseBuffer(buf); } @@ -104,6 +105,7 @@ HnswBuildAppendPage(Relation index, Buffer *buf, Page *page, ForkNumber forkNum) HnswPageGetOpaque(*page)->nextblkno = BufferGetBlockNumber(newbuf); /* Commit */ + MarkBufferDirty(*buf); UnlockReleaseBuffer(*buf); /* Can take a while, so ensure we can interrupt */ @@ -205,6 +207,7 @@ CreateElementPages(HnswBuildState * buildstate) insertPage = BufferGetBlockNumber(buf); /* Commit */ + MarkBufferDirty(buf); UnlockReleaseBuffer(buf); HnswUpdateMetaPage(index, HNSW_UPDATE_ENTRY_ALWAYS, buildstate->entryPoint, insertPage, forkNum, true); @@ -249,6 +252,7 @@ CreateNeighborPages(HnswBuildState * buildstate) elog(ERROR, "failed to add index item to \"%s\"", RelationGetRelationName(index)); /* Commit */ + MarkBufferDirty(buf); UnlockReleaseBuffer(buf); } diff --git a/src/hnswinsert.c b/src/hnswinsert.c index bcb3b5c..b5a0fb8 100644 --- a/src/hnswinsert.c +++ b/src/hnswinsert.c @@ -219,7 +219,13 @@ WriteNewElementPages(Relation index, HnswElement e, int m, BlockNumber insertPag HnswInsertAppendPage(index, &newbuf, &newpage, state, page, building); /* Commit */ - if (!building) + if (building) + { + MarkBufferDirty(buf); + if (nbuf != buf) + MarkBufferDirty(nbuf); + } + else GenericXLogFinish(state); /* Unlock previous buffer */ @@ -294,7 +300,13 @@ WriteNewElementPages(Relation index, HnswElement e, int m, BlockNumber insertPag } /* Commit */ - if (!building) + if (building) + { + MarkBufferDirty(buf); + if (nbuf != buf) + MarkBufferDirty(nbuf); + } + else GenericXLogFinish(state); UnlockReleaseBuffer(buf); if (nbuf != buf) @@ -421,7 +433,9 @@ HnswUpdateNeighborPages(Relation index, FmgrInfo *procinfo, Oid collation, HnswE elog(ERROR, "failed to add index item to \"%s\"", RelationGetRelationName(index)); /* Commit */ - if (!building) + if (building) + MarkBufferDirty(buf); + else GenericXLogFinish(state); } else if (!building) @@ -487,7 +501,9 @@ HnswAddDuplicate(Relation index, HnswElement element, HnswElement dup, bool buil elog(ERROR, "failed to add index item to \"%s\"", RelationGetRelationName(index)); /* Commit */ - if (!building) + if (building) + MarkBufferDirty(buf); + else GenericXLogFinish(state); UnlockReleaseBuffer(buf);