diff --git a/CHANGELOG.md b/CHANGELOG.md index 21c9866..dc3589d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ ## 0.5.2 (unreleased) - Added support for on-disk parallel index builds for HNSW +- Fixed `invalid memory alloc request size` error with HNSW ## 0.5.1 (2023-10-10) diff --git a/src/hnswbuild.c b/src/hnswbuild.c index ea7b889..8f4e0c7 100644 --- a/src/hnswbuild.c +++ b/src/hnswbuild.c @@ -56,6 +56,8 @@ #define PARALLEL_KEY_HNSW_SHARED UINT64CONST(0xA000000000000001) #define PARALLEL_KEY_QUERY_TEXT UINT64CONST(0xA000000000000002) +#define LIST_MAX_LENGTH ((1 << 26) - 1) + /* * Create the metapage */ @@ -381,7 +383,7 @@ BuildCallback(Relation index, CALLBACK_ITEM_POINTER, Datum *values, if (isnull[0]) return; - if (buildstate->memoryLeft <= 0) + if (buildstate->memoryLeft <= 0 || list_length(buildstate->elements) == LIST_MAX_LENGTH) { if (!buildstate->flushed) {