diff --git a/src/hnsw.h b/src/hnsw.h index cfba560..be45098 100644 --- a/src/hnsw.h +++ b/src/hnsw.h @@ -57,6 +57,8 @@ /* PROGRESS_CREATEIDX_SUBPHASE_INITIALIZE is 1 */ #define PROGRESS_HNSW_PHASE_LOAD 2 +#define HNSW_MAX_SIZE (BLCKSZ - MAXALIGN(SizeOfPageHeaderData) - MAXALIGN(sizeof(HnswPageOpaqueData)) - sizeof(ItemIdData)) + #define HNSW_ELEMENT_TUPLE_SIZE(_dim) MAXALIGN(offsetof(HnswElementTupleData, vec) + VECTOR_SIZE(_dim)) #define HNSW_NEIGHBOR_TUPLE_SIZE(level, m) MAXALIGN(offsetof(HnswNeighborTupleData, indextids) + ((level) + 2) * (m) * sizeof(ItemPointerData)) diff --git a/src/hnswbuild.c b/src/hnswbuild.c index 2f3d9d8..18959d5 100644 --- a/src/hnswbuild.c +++ b/src/hnswbuild.c @@ -117,7 +117,7 @@ CreateElementPages(HnswBuildState * buildstate) ListCell *lc; /* Calculate sizes */ - maxSize = BLCKSZ - MAXALIGN(SizeOfPageHeaderData) - MAXALIGN(sizeof(HnswPageOpaqueData)) - sizeof(ItemIdData); + maxSize = HNSW_MAX_SIZE; etupSize = HNSW_ELEMENT_TUPLE_SIZE(dimensions); /* Allocate once */ diff --git a/src/hnswinsert.c b/src/hnswinsert.c index 996c021..f7cd51f 100644 --- a/src/hnswinsert.c +++ b/src/hnswinsert.c @@ -135,7 +135,7 @@ WriteNewElementPages(Relation index, HnswElement e, int m, BlockNumber insertPag etupSize = HNSW_ELEMENT_TUPLE_SIZE(dimensions); ntupSize = HNSW_NEIGHBOR_TUPLE_SIZE(e->level, m); combinedSize = etupSize + ntupSize + sizeof(ItemIdData); - maxSize = BLCKSZ - MAXALIGN(SizeOfPageHeaderData) - MAXALIGN(sizeof(HnswPageOpaqueData)) - sizeof(ItemIdData); + maxSize = HNSW_MAX_SIZE; minCombinedSize = etupSize + HNSW_NEIGHBOR_TUPLE_SIZE(0, m) + sizeof(ItemIdData); /* Prepare element tuple */