Fabien,
> I have not tested, but the patch looks ok in principle.
Thanks for the review. I have registered it to Aug Commit fest.
https://commitfest.postgresql.org/action/patch_view?id=1532
> I'm not sure of the variable name "is_non_init_parameter_set". I would
> suggest "benchmarking_option_set"?
Ok, I will replace the variable name as you suggested.
> Also, to be consistent, maybe it should check that no initialization-specific
> option are set when benchmarking.
Good suggesition. Here is the v2 patch.
Best regards,
--
Tatsuo Ishii
SRA OSS, Inc. Japan
English: http://www.sraoss.co.jp/index_en.php
Japanese:http://www.sraoss.co.jp
diff --git a/contrib/pgbench/pgbench.c b/contrib/pgbench/pgbench.c
index c0e5e24..67d7960 100644
--- a/contrib/pgbench/pgbench.c
+++ b/contrib/pgbench/pgbench.c
@@ -2520,6 +2520,9 @@ main(int argc, char **argv)
char *filename = NULL;
bool scale_given = false;
+ bool benchmarking_option_set = false;
+ bool initializing_option_set = false;
+
CState *state; /* status of clients */
TState *threads; /* array of thread */
@@ -2599,12 +2602,14 @@ main(int argc, char **argv)
break;
case 'S':
ttype = 1;
+ benchmarking_option_set = true;
break;
case 'N':
ttype = 2;
+ benchmarking_option_set = true;
break;
case 'c':
- nclients = atoi(optarg);
+ benchmarking_option_set = true;
if (nclients <= 0 || nclients > MAXCLIENTS)
{
fprintf(stderr, "invalid number of clients: %d\n", nclients);
@@ -2629,6 +2634,7 @@ main(int argc, char **argv)
#endif /* HAVE_GETRLIMIT */
break;
case 'j': /* jobs */
+ benchmarking_option_set = true;
nthreads = atoi(optarg);
if (nthreads <= 0)
{
@@ -2637,9 +2643,11 @@ main(int argc, char **argv)
}
break;
case 'C':
+ benchmarking_option_set = true;
is_connect = true;
break;
case 'r':
+ benchmarking_option_set = true;
is_latencies = true;
break;
case 's':
@@ -2652,6 +2660,7 @@ main(int argc, char **argv)
}
break;
case 't':
+ benchmarking_option_set = true;
if (duration > 0)
{
fprintf(stderr, "specify either a number of transactions (-t) or a duration (-T), not both.\n");
@@ -2665,6 +2674,7 @@ main(int argc, char **argv)
}
break;
case 'T':
+ benchmarking_option_set = true;
if (nxacts > 0)
{
fprintf(stderr, "specify either a number of transactions (-t) or a duration (-T), not both.\n");
@@ -2681,12 +2691,14 @@ main(int argc, char **argv)
login = pg_strdup(optarg);
break;
case 'l':
+ benchmarking_option_set = true;
use_log = true;
break;
case 'q':
use_quiet = true;
break;
case 'f':
+ benchmarking_option_set = true;
ttype = 3;
filename = pg_strdup(optarg);
if (process_file(filename) == false || *sql_files[num_files - 1] == NULL)
@@ -2696,6 +2708,8 @@ main(int argc, char **argv)
{
char *p;
+ benchmarking_option_set = true;
+
if ((p = strchr(optarg, '=')) == NULL || p == optarg || *(p + 1) == '\0')
{
fprintf(stderr, "invalid variable definition: %s\n", optarg);
@@ -2708,6 +2722,7 @@ main(int argc, char **argv)
}
break;
case 'F':
+ initializing_option_set = true;
fillfactor = atoi(optarg);
if ((fillfactor < 10) || (fillfactor > 100))
{
@@ -2716,6 +2731,7 @@ main(int argc, char **argv)
}
break;
case 'M':
+ benchmarking_option_set = true;
if (num_files > 0)
{
fprintf(stderr, "query mode (-M) should be specifiled before transaction scripts (-f)\n");
@@ -2731,6 +2747,7 @@ main(int argc, char **argv)
}
break;
case 'P':
+ benchmarking_option_set = true;
progress = atoi(optarg);
if (progress <= 0)
{
@@ -2745,6 +2762,8 @@ main(int argc, char **argv)
/* get a double from the beginning of option value */
double throttle_value = atof(optarg);
+ benchmarking_option_set = true;
+
if (throttle_value <= 0.0)
{
fprintf(stderr, "invalid rate limit: %s\n", optarg);
@@ -2756,14 +2775,19 @@ main(int argc, char **argv)
break;
case 0:
/* This covers long options which take no argument. */
+ if (foreign_keys || unlogged_tables)
+ initializing_option_set = true;
break;
case 2: /* tablespace */
+ initializing_option_set = true;
tablespace = pg_strdup(optarg);
break;
case 3: /* index-tablespace */
+ initializing_option_set = true;
index_tablespace = pg_strdup(optarg);
break;
case 4:
+ benchmarking_option_set = true;
sample_rate = atof(optarg);
if (sample_rate <= 0.0 || sample_rate > 1.0)
{
@@ -2776,6 +2800,7 @@ main(int argc, char **argv)
fprintf(stderr, "--aggregate-interval is not currently supported on Windows");
exit(1);
#else
+ benchmarking_option_set = true;
agg_interval = atoi(optarg);
if (agg_interval <= 0)
{
@@ -2808,9 +2833,23 @@ main(int argc, char **argv)
if (is_init_mode)
{
+ if (benchmarking_option_set)
+ {
+ fprintf(stderr, "some parameters cannot be used in initializing mode\n");
+ exit(1);
+ }
+
init(is_no_vacuum);
exit(0);
}
+ else
+ {
+ if (initializing_option_set)
+ {
+ fprintf(stderr, "some parameters cannot be used in benchmarking mode\n");
+ exit(1);
+ }
+ }
/* Use DEFAULT_NXACTS if neither nxacts nor duration is specified. */
if (nxacts <= 0 && duration <= 0)
--
Sent via pgsql-hackers mailing list ([email protected])
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers