Enlarge assertion in bloom_init() for false_positive_rate
authorMichael Paquier <[email protected]>
Wed, 8 Nov 2023 05:06:36 +0000 (14:06 +0900)
committerMichael Paquier <[email protected]>
Wed, 8 Nov 2023 05:06:36 +0000 (14:06 +0900)
false_positive_rate is a parameter that can be set with the bloom
opclass in BRIN, and setting it to a value of exactly 0.25 would trigger
an assertion in the first INSERT done on the index with value set.

The assertion changed here relied on BLOOM_{MIN|MAX}_FALSE_POSITIVE_RATE
that are somewhat arbitrary values, and specifying an out-of-range value
would also trigger a failure when defining such an index.  So, as-is,
the assertion was just doubling on the min-max check of the reloption.
This is now enlarged to check that it is a correct percentage value,
instead, based on a suggestion by Tom Lane.

Author: Alexander Lakhin
Reviewed-by: Tom Lane, Shihao Zhong
Discussion: https://postgr.es/m/17969-a6c54de48026d694@postgresql.org
Backpatch-through: 14

src/backend/access/brin/brin_bloom.c

index e4953a9d37b834fc0a67c8eb302179326c30d6a6..1ed0d8a3b8045a512eba7ec2298c146f075d3d0e 100644 (file)
@@ -279,8 +279,7 @@ bloom_init(int ndistinct, double false_positive_rate)
    double      k;              /* number of hash functions */
 
    Assert(ndistinct > 0);
-   Assert((false_positive_rate >= BLOOM_MIN_FALSE_POSITIVE_RATE) &&
-          (false_positive_rate < BLOOM_MAX_FALSE_POSITIVE_RATE));
+   Assert(false_positive_rate > 0 && false_positive_rate < 1);
 
    /* sizing bloom filter: -(n * ln(p)) / (ln(2))^2 */
    nbits = ceil(-(ndistinct * log(false_positive_rate)) / pow(log(2.0), 2));