pgbench: Allow the transaction log file prefix to be changed.
authorRobert Haas <[email protected]>
Wed, 9 Nov 2016 21:26:32 +0000 (16:26 -0500)
committerRobert Haas <[email protected]>
Wed, 9 Nov 2016 21:28:43 +0000 (16:28 -0500)
Masahiko Sawada, reviewed by Fabien Coelho and Beena Emerson, with
some a bit of wordsmithing and cosmetic adjustment by me.

doc/src/sgml/ref/pgbench.sgml
src/bin/pgbench/pgbench.c

index 285608d508ab773fc20ea37acf72e00c9042c169..3a65729bf3592f7ed149b5ae222b62336387f559 100644 (file)
@@ -614,6 +614,16 @@ pgbench <optional> <replaceable>options</> </optional> <replaceable>dbname</>
       </listitem>
      </varlistentry>
 
+     <varlistentry>
+      <term><option>--log-prefix=<replaceable>prefix</></option></term>
+      <listitem>
+       <para>
+        Set the filename prefix for the transaction log file created by
+        <option>--log</>.  The default is <replaceable>pgbench_log</>.
+       </para>
+      </listitem>
+     </varlistentry>
+
     </variablelist>
    </para>
 
@@ -1121,15 +1131,17 @@ END;
    With the <option>-l</> option but without the <option>--aggregate-interval</option>,
    <application>pgbench</> writes the time taken by each transaction
    to a log file.  The log file will be named
-   <filename>pgbench_log.<replaceable>nnn</></filename>, where
-   <replaceable>nnn</> is the PID of the <application>pgbench</application> process.
-   If the <option>-j</> option is 2 or higher, creating multiple worker
-   threads, each will have its own log file. The first worker will use the
-   same name for its log file as in the standard single worker case.
+   <filename><replaceable>prefix</>.<replaceable>nnn</></filename>,
+   where <replaceable>prefix</> defaults to <literal>pgbench_log</>, and
+   <replaceable>nnn</> is the PID of the
+   <application>pgbench</application> process. If the <option>-j</> option is 2 or higher,
+   creating multiple worker threads, each will have its own log file. The first worker will
+   use the same name for its log file as in the standard single worker case.
    The additional log files for the other workers will be named
-   <filename>pgbench_log.<replaceable>nnn</>.<replaceable>mmm</></filename>,
+   <filename><replaceable>pgbench_log</>.<replaceable>nnn</>.<replaceable>mmm</></filename>,
    where <replaceable>mmm</> is a sequential number for each worker starting
-   with 1.
+   with 1.  The prefix can be changed by using the <option>--log-prefix</>
+   option.
   </para>
 
   <para>
index d44cfdab49bfe55eea4bca8470e34055765cbf92..a7fdd8ac940b01f028d7213e3e8630ce5986a572 100644 (file)
@@ -180,6 +180,7 @@ char       *pghost = "";
 char      *pgport = "";
 char      *login = NULL;
 char      *dbName;
+char      *logfile_prefix = NULL;
 const char *progname;
 
 #define WSEP '@'               /* weight separator */
@@ -511,6 +512,8 @@ usage(void)
           "  --aggregate-interval=NUM aggregate data over NUM seconds\n"
        "  --progress-timestamp     use Unix epoch timestamps for progress\n"
           "  --sampling-rate=NUM      fraction of transactions to log (e.g., 0.01 for 1%%)\n"
+          "  --log-prefix=PREFIX      prefix for transaction time log file\n"
+          "                           (default: \"pgbench_log\")\n"
           "\nCommon options:\n"
           "  -d, --debug              print debugging output\n"
      "  -h, --host=HOSTNAME      database server host or socket directory\n"
@@ -3643,6 +3646,7 @@ main(int argc, char **argv)
        {"sampling-rate", required_argument, NULL, 4},
        {"aggregate-interval", required_argument, NULL, 5},
        {"progress-timestamp", no_argument, NULL, 6},
+       {"log-prefix", required_argument, NULL, 7},
        {NULL, 0, NULL, 0}
    };
 
@@ -3990,6 +3994,10 @@ main(int argc, char **argv)
                progress_timestamp = true;
                benchmarking_option_set = true;
                break;
+           case 7:
+               benchmarking_option_set = true;
+               logfile_prefix = pg_strdup(optarg);
+               break;
            default:
                fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname);
                exit(1);
@@ -4087,6 +4095,12 @@ main(int argc, char **argv)
        exit(1);
    }
 
+   if (!use_log && logfile_prefix)
+   {
+       fprintf(stderr, "log file prefix (--log-prefix) is allowed only when logging transactions (-l)\n");
+       exit(1);
+   }
+
    if (duration > 0 && agg_interval > duration)
    {
        fprintf(stderr, "number of seconds for aggregation (%d) must not be higher than test duration (%d)\n", agg_interval, duration);
@@ -4388,11 +4402,13 @@ threadRun(void *arg)
    if (use_log)
    {
        char        logpath[64];
+       char        *prefix = logfile_prefix ? logfile_prefix : "pgbench_log";
 
        if (thread->tid == 0)
-           snprintf(logpath, sizeof(logpath), "pgbench_log.%d", main_pid);
+           snprintf(logpath, sizeof(logpath), "%s.%d", prefix, main_pid);
        else
-           snprintf(logpath, sizeof(logpath), "pgbench_log.%d.%d", main_pid, thread->tid);
+           snprintf(logpath, sizeof(logpath), "%s.%d.%d", prefix, main_pid, thread->tid);
+
        thread->logfile = fopen(logpath, "w");
 
        if (thread->logfile == NULL)