From 352ec5be29a5e9f1b00ed28f124dcc3b5cee8fe9 Mon Sep 17 00:00:00 2001 From: lychen0613 Date: Tue, 14 Apr 2026 17:57:40 +0800 Subject: [PATCH] fix: correctly use reservoir_get_next_S when building ivfflat --- src/ivfbuild.c | 5 ++++- src/ivfflat.h | 1 + 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/ivfbuild.c b/src/ivfbuild.c index d3f3c24..dc31edf 100644 --- a/src/ivfbuild.c +++ b/src/ivfbuild.c @@ -81,7 +81,7 @@ AddSample(Datum *values, IvfflatBuildState * buildstate) else { if (buildstate->rowstoskip < 0) - buildstate->rowstoskip = reservoir_get_next_S(&buildstate->rstate, samples->length, targsamples); + buildstate->rowstoskip = reservoir_get_next_S(&buildstate->rstate, buildstate->samplerows, targsamples); if (buildstate->rowstoskip <= 0) { @@ -97,6 +97,8 @@ AddSample(Datum *values, IvfflatBuildState * buildstate) buildstate->rowstoskip -= 1; } + + buildstate->samplerows += 1; } /* @@ -133,6 +135,7 @@ SampleRows(IvfflatBuildState * buildstate) int targsamples = buildstate->samples->maxlen; BlockNumber totalblocks = RelationGetNumberOfBlocks(buildstate->heap); + buildstate->samplerows = 0; buildstate->rowstoskip = -1; BlockSampler_Init(&buildstate->bs, totalblocks, targsamples, RandomInt()); diff --git a/src/ivfflat.h b/src/ivfflat.h index 0d9601e..f18d34d 100644 --- a/src/ivfflat.h +++ b/src/ivfflat.h @@ -213,6 +213,7 @@ typedef struct IvfflatBuildState /* Sampling */ BlockSamplerData bs; ReservoirStateData rstate; + double samplerows; int rowstoskip; /* Sorting */