]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: sample: make the rand() sample fetch function use the statistical_prng
authorWilly Tarreau <w@1wt.eu>
Thu, 24 Nov 2022 13:54:29 +0000 (14:54 +0100)
committerWilly Tarreau <w@1wt.eu>
Thu, 24 Nov 2022 14:04:13 +0000 (15:04 +0100)
Emeric noticed that producing many randoms to fill a stick table was
saturating on the rand_lock. Since 2.4 we have the statistical PRNG
for low-quality randoms like this one, there is no point in using the
one that was originally implemented for the purpose of creating safe
UUIDs, since the doc itself clearly states that these randoms are not
secure and they have not been in the past either. With this change,
locking contention is completely gone.

src/sample.c

index a3acfef143cb42707cee4abb22b5cc86494c717f..62a372b81c56767d40c2d3a489a5eba6603376c3 100644 (file)
@@ -4096,7 +4096,7 @@ smp_fetch_thread(const struct arg *args, struct sample *smp, const char *kw, voi
 static int
 smp_fetch_rand(const struct arg *args, struct sample *smp, const char *kw, void *private)
 {
-       smp->data.u.sint = ha_random32();
+       smp->data.u.sint = statistical_prng();
 
        /* reduce if needed. Don't do a modulo, use all bits! */
        if (args[0].type == ARGT_SINT)