pgbench: Allow the transaction log file prefix to be changed.
authorRobert Haas
Wed, 9 Nov 2016 21:26:32 +0000 (16:26 -0500)
committerRobert Haas
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  options  dbname
       
      
 
+     
+      
+      
+       
+        Set the filename prefix for the transaction log file created by
+        
+       
+      
+     
+
     
    
 
@@ -1121,15 +1131,17 @@ END;
    With the ,
    pgbench writes the time taken by each transaction
    to a log file.  The log file will be named
-   pgbench_log.nnn, where
-   nnn is the PID of the pgbench process.
-   If the 
-   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.
+   prefix.nnn,
+   where prefix defaults to pgbench_log, and
+   nnn is the PID of the
+   pgbench process. If the 
+   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
-   pgbench_log.nnn.mmm,
+   pgbench_log.nnn.mmm,
    where mmm is a sequential number for each worker starting
-   with 1.
+   with 1.  The prefix can be changed by using the 
+   option.
   
 
   
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)