Skip to content

Commit 5635c7a

Browse files
committed
Fix portability and translatability issues in commit 64f8589.
Compilation failed for lack of an #ifdef on builds without pg_strong_random(). Also fix relevant error messages to meet project style guidelines. Fabien Coelho, further adjusted by me Discussion: https://postgr.es/m/32390.1522464534@sss.pgh.pa.us
1 parent b0c90c8 commit 5635c7a

File tree

2 files changed

+24
-10
lines changed

2 files changed

+24
-10
lines changed

src/bin/pgbench/pgbench.c

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4669,8 +4669,8 @@ printResults(TState *threads, StatsData *total, instr_time total_time,
46694669
}
46704670

46714671
/* call srandom based on some seed. NULL triggers the default behavior. */
4672-
static void
4673-
set_random_seed(const char *seed, const char *origin)
4672+
static bool
4673+
set_random_seed(const char *seed)
46744674
{
46754675
/* srandom expects an unsigned int */
46764676
unsigned int iseed;
@@ -4685,10 +4685,14 @@ set_random_seed(const char *seed, const char *origin)
46854685
else if (strcmp(seed, "rand") == 0)
46864686
{
46874687
/* use some "strong" random source */
4688+
#ifdef HAVE_STRONG_RANDOM
46884689
if (!pg_strong_random(&iseed, sizeof(iseed)))
4690+
#endif
46894691
{
4690-
fprintf(stderr, "cannot seed random from a strong source\n");
4691-
exit(1);
4692+
fprintf(stderr,
4693+
"cannot seed random from a strong source, none available: "
4694+
"use \"time\" or an unsigned integer value.\n");
4695+
return false;
46924696
}
46934697
}
46944698
else
@@ -4698,9 +4702,9 @@ set_random_seed(const char *seed, const char *origin)
46984702
if (sscanf(seed, "%u%c", &iseed, &garbage) != 1)
46994703
{
47004704
fprintf(stderr,
4701-
"error while scanning '%s' from %s, expecting an unsigned integer, 'time' or 'rand'\n",
4702-
seed, origin);
4703-
exit(1);
4705+
"unrecognized random seed option \"%s\": expecting an unsigned integer, \"time\" or \"rand\"\n",
4706+
seed);
4707+
return false;
47044708
}
47054709
}
47064710

@@ -4709,6 +4713,7 @@ set_random_seed(const char *seed, const char *origin)
47094713
srandom(iseed);
47104714
/* no precision loss: 32 bit unsigned int cast to 64 bit int */
47114715
random_seed = iseed;
4716+
return true;
47124717
}
47134718

47144719

@@ -4823,7 +4828,11 @@ main(int argc, char **argv)
48234828
memset(state, 0, sizeof(CState));
48244829

48254830
/* set random seed early, because it may be used while parsing scripts. */
4826-
set_random_seed(getenv("PGBENCH_RANDOM_SEED"), "PGBENCH_RANDOM_SEED environment variable");
4831+
if (!set_random_seed(getenv("PGBENCH_RANDOM_SEED")))
4832+
{
4833+
fprintf(stderr, "error while setting random seed from PGBENCH_RANDOM_SEED environment variable\n");
4834+
exit(1);
4835+
}
48274836

48284837
while ((c = getopt_long(argc, argv, "iI:h:nvp:dqb:SNc:j:Crs:t:T:U:lf:D:F:M:P:R:L:", long_options, &optindex)) != -1)
48294838
{
@@ -5099,7 +5108,11 @@ main(int argc, char **argv)
50995108
break;
51005109
case 9: /* random-seed */
51015110
benchmarking_option_set = true;
5102-
set_random_seed(optarg, "--random-seed option");
5111+
if (!set_random_seed(optarg))
5112+
{
5113+
fprintf(stderr, "error while setting random seed from --random-seed option\n");
5114+
exit(1);
5115+
}
51035116
break;
51045117
default:
51055118
fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname);

src/bin/pgbench/t/002_pgbench_no_server.pl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,8 @@ sub pgbench_scripts
111111
[qr{unrecognized initialization step},
112112
qr{allowed steps are} ] ],
113113
[ 'bad random seed', '--random-seed=one',
114-
[qr{error while scanning 'one' from --random-seed option, expecting an unsigned integer} ] ],
114+
[qr{unrecognized random seed option "one": expecting an unsigned integer, "time" or "rand"},
115+
qr{error while setting random seed from --random-seed option} ] ],
115116

116117
# loging sub-options
117118
[ 'sampling => log', '--sampling-rate=0.01',

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy