fix: correctly use reservoir_get_next_S when building ivfflat

This commit is contained in:
lychen0613
2026-04-14 17:57:40 +08:00
parent 17916cad00
commit 352ec5be29
2 changed files with 5 additions and 1 deletions

View File

@@ -81,7 +81,7 @@ AddSample(Datum *values, IvfflatBuildState * buildstate)
else else
{ {
if (buildstate->rowstoskip < 0) 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) if (buildstate->rowstoskip <= 0)
{ {
@@ -97,6 +97,8 @@ AddSample(Datum *values, IvfflatBuildState * buildstate)
buildstate->rowstoskip -= 1; buildstate->rowstoskip -= 1;
} }
buildstate->samplerows += 1;
} }
/* /*
@@ -133,6 +135,7 @@ SampleRows(IvfflatBuildState * buildstate)
int targsamples = buildstate->samples->maxlen; int targsamples = buildstate->samples->maxlen;
BlockNumber totalblocks = RelationGetNumberOfBlocks(buildstate->heap); BlockNumber totalblocks = RelationGetNumberOfBlocks(buildstate->heap);
buildstate->samplerows = 0;
buildstate->rowstoskip = -1; buildstate->rowstoskip = -1;
BlockSampler_Init(&buildstate->bs, totalblocks, targsamples, RandomInt()); BlockSampler_Init(&buildstate->bs, totalblocks, targsamples, RandomInt());

View File

@@ -213,6 +213,7 @@ typedef struct IvfflatBuildState
/* Sampling */ /* Sampling */
BlockSamplerData bs; BlockSamplerData bs;
ReservoirStateData rstate; ReservoirStateData rstate;
double samplerows;
int rowstoskip; int rowstoskip;
/* Sorting */ /* Sorting */