pgbench -M option can be specified more than once

Поиск
Список
Период
Сортировка
От Tatsuo Ishii
Тема pgbench -M option can be specified more than once
Дата
Msg-id 20181103.094440.939100274647388383.t-ishii@sraoss.co.jp
обсуждение исходный текст
Ответы Re: pgbench -M option can be specified more than once  (Tom Lane <tgl@sss.pgh.pa.us>)
Re: pgbench -M option can be specified more than once  (Fabien COELHO <coelho@cri.ensmp.fr>)
Список pgsql-hackers
While playing with pgbench, I found multiple "-M query_mode" can be
set more than once. For example,

$ pgbench -p 11002 -M extended -S -M prepared test
starting vacuum...end.
transaction type: <builtin: select only>
scaling factor: 1
query mode: prepared
number of clients: 1
number of threads: 1
number of transactions per client: 10
number of transactions actually processed: 10/10
latency average = 0.490 ms
tps = 2040.372858 (including connections establishing)
tps = 3920.541599 (excluding connections establishing)

In this case the last "-M prepared" was chosen as the query mode. This
is sloppy because we cannot actually choose different -M at the same
time.

Attached is a patch to detect such an error.

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/src/bin/pgbench/pgbench.c b/src/bin/pgbench/pgbench.c
index 81bc6d8a6e..d69478b8dd 100644
--- a/src/bin/pgbench/pgbench.c
+++ b/src/bin/pgbench/pgbench.c
@@ -464,6 +464,7 @@ typedef enum QueryMode
 
 static QueryMode querymode = QUERY_SIMPLE;
 static const char *QUERYMODE[] = {"simple", "extended", "prepared"};
+bool    query_mode_already_set = false;
 
 typedef struct
 {
@@ -5149,6 +5150,12 @@ main(int argc, char **argv)
                 }
                 break;
             case 'M':
+                if (query_mode_already_set)
+                {
+                    fprintf(stderr, "query mode (-M) already set\n");
+                    exit(1);
+                }
+                query_mode_already_set = true;
                 benchmarking_option_set = true;
                 for (querymode = 0; querymode < NUM_QUERYMODE; querymode++)
                     if (strcmp(optarg, QUERYMODE[querymode]) == 0)

В списке pgsql-hackers по дате отправления:

Предыдущее
От: Tom Lane
Дата:
Сообщение: First-draft release notes for back-branch releases
Следующее
От: Tom Lane
Дата:
Сообщение: Re: pgbench -M option can be specified more than once