aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/bin/pgbench/pgbench.c31
-rw-r--r--src/bin/pgbench/t/002_pgbench_no_server.pl3
2 files changed, 24 insertions, 10 deletions
diff --git a/src/bin/pgbench/pgbench.c b/src/bin/pgbench/pgbench.c
index 8529e7dc475..fd1856837a2 100644
--- a/src/bin/pgbench/pgbench.c
+++ b/src/bin/pgbench/pgbench.c
@@ -4669,8 +4669,8 @@ printResults(TState *threads, StatsData *total, instr_time total_time,
}
/* call srandom based on some seed. NULL triggers the default behavior. */
-static void
-set_random_seed(const char *seed, const char *origin)
+static bool
+set_random_seed(const char *seed)
{
/* srandom expects an unsigned int */
unsigned int iseed;
@@ -4685,10 +4685,14 @@ set_random_seed(const char *seed, const char *origin)
else if (strcmp(seed, "rand") == 0)
{
/* use some "strong" random source */
+#ifdef HAVE_STRONG_RANDOM
if (!pg_strong_random(&iseed, sizeof(iseed)))
+#endif
{
- fprintf(stderr, "cannot seed random from a strong source\n");
- exit(1);
+ fprintf(stderr,
+ "cannot seed random from a strong source, none available: "
+ "use \"time\" or an unsigned integer value.\n");
+ return false;
}
}
else
@@ -4698,9 +4702,9 @@ set_random_seed(const char *seed, const char *origin)
if (sscanf(seed, "%u%c", &iseed, &garbage) != 1)
{
fprintf(stderr,
- "error while scanning '%s' from %s, expecting an unsigned integer, 'time' or 'rand'\n",
- seed, origin);
- exit(1);
+ "unrecognized random seed option \"%s\": expecting an unsigned integer, \"time\" or \"rand\"\n",
+ seed);
+ return false;
}
}
@@ -4709,6 +4713,7 @@ set_random_seed(const char *seed, const char *origin)
srandom(iseed);
/* no precision loss: 32 bit unsigned int cast to 64 bit int */
random_seed = iseed;
+ return true;
}
@@ -4823,7 +4828,11 @@ main(int argc, char **argv)
memset(state, 0, sizeof(CState));
/* set random seed early, because it may be used while parsing scripts. */
- set_random_seed(getenv("PGBENCH_RANDOM_SEED"), "PGBENCH_RANDOM_SEED environment variable");
+ if (!set_random_seed(getenv("PGBENCH_RANDOM_SEED")))
+ {
+ fprintf(stderr, "error while setting random seed from PGBENCH_RANDOM_SEED environment variable\n");
+ exit(1);
+ }
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)
{
@@ -5099,7 +5108,11 @@ main(int argc, char **argv)
break;
case 9: /* random-seed */
benchmarking_option_set = true;
- set_random_seed(optarg, "--random-seed option");
+ if (!set_random_seed(optarg))
+ {
+ fprintf(stderr, "error while setting random seed from --random-seed option\n");
+ exit(1);
+ }
break;
default:
fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname);
diff --git a/src/bin/pgbench/t/002_pgbench_no_server.pl b/src/bin/pgbench/t/002_pgbench_no_server.pl
index 682bc2280d6..af21f046496 100644
--- a/src/bin/pgbench/t/002_pgbench_no_server.pl
+++ b/src/bin/pgbench/t/002_pgbench_no_server.pl
@@ -111,7 +111,8 @@ my @options = (
[qr{unrecognized initialization step},
qr{allowed steps are} ] ],
[ 'bad random seed', '--random-seed=one',
- [qr{error while scanning 'one' from --random-seed option, expecting an unsigned integer} ] ],
+ [qr{unrecognized random seed option "one": expecting an unsigned integer, "time" or "rand"},
+ qr{error while setting random seed from --random-seed option} ] ],
# loging sub-options
[ 'sampling => log', '--sampling-rate=0.01',