]> granicus.if.org Git - postgresql/commitdiff
Allow total number of transactions in pgbench to exceed INT_MAX.
authorTom Lane <tgl@sss.pgh.pa.us>
Sun, 25 May 2014 20:33:29 +0000 (16:33 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Sun, 25 May 2014 20:33:29 +0000 (16:33 -0400)
Change the total-transactions counters from int32 to int64 to accommodate
cases where we do more than 2^31 transactions during a run.  This patch
does not change the INT_MAX limit on explicit "-t" parameters, but it
does allow the product of the -t and -c parameters to exceed INT_MAX, or
allow a -T limit that is large enough that more than 2^31 transactions
can be completed.  While pgbench did not actually fail in such cases,
it did print an incorrect total-transactions count, and some of the
derived numbers such as TPS would have been wrong as well.

Tomas Vondra

contrib/pgbench/pgbench.c

index 6cc06d79e0fe66c73b1817719c40305b9acb0e1e..4aa8a5031a09bda403447eb1ac76c1906cb64894 100644 (file)
@@ -239,7 +239,7 @@ typedef struct
 typedef struct
 {
        instr_time      conn_time;
-       int                     xacts;
+       int64           xacts;
        int64           latencies;
        int64           sqlats;
        int64           throttle_lag;
@@ -2180,7 +2180,7 @@ process_builtin(char *tb)
 
 /* print out results */
 static void
-printResults(int ttype, int normal_xacts, int nclients,
+printResults(int ttype, int64 normal_xacts, int nclients,
                         TState *threads, int nthreads,
                         instr_time total_time, instr_time conn_total_time,
                         int64 total_latencies, int64 total_sqlats,
@@ -2213,13 +2213,13 @@ printResults(int ttype, int normal_xacts, int nclients,
        if (duration <= 0)
        {
                printf("number of transactions per client: %d\n", nxacts);
-               printf("number of transactions actually processed: %d/%d\n",
-                          normal_xacts, nxacts * nclients);
+               printf("number of transactions actually processed: " INT64_FORMAT "/" INT64_FORMAT "\n",
+                          normal_xacts, (int64) nxacts * nclients);
        }
        else
        {
                printf("duration: %d s\n", duration);
-               printf("number of transactions actually processed: %d\n",
+               printf("number of transactions actually processed: " INT64_FORMAT "\n",
                           normal_xacts);
        }
 
@@ -2359,7 +2359,7 @@ main(int argc, char **argv)
        instr_time      start_time;             /* start up time */
        instr_time      total_time;
        instr_time      conn_total_time;
-       int                     total_xacts = 0;
+       int64           total_xacts = 0;
        int64           total_latencies = 0;
        int64           total_sqlats = 0;
        int64           throttle_lag = 0;