Give a warning if -s switch is used with a non-custom pgbench test.
authorTom Lane <tgl@sss.pgh.pa.us>
Fri, 9 May 2008 15:53:07 +0000 (15:53 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Fri, 9 May 2008 15:53:07 +0000 (15:53 +0000)
Also, clean up the code that assigned the scale into :scale variables.
Greg Smith and Tom Lane

contrib/pgbench/pgbench.c

index 41312e88c64bb10ccc652992f797bac4d2395d05..cfa6c5fb89b70beacba8fcfc876ded65e9596af0 100644 (file)
@@ -4,7 +4,7 @@
  * A simple benchmark program for PostgreSQL
  * Originally written by Tatsuo Ishii and enhanced by many contributors.
  *
- * $PostgreSQL: pgsql/contrib/pgbench/pgbench.c,v 1.79 2008/03/19 03:33:21 ishii Exp $
+ * $PostgreSQL: pgsql/contrib/pgbench/pgbench.c,v 1.80 2008/05/09 15:53:07 tgl Exp $
  * Copyright (c) 2000-2008, PostgreSQL Global Development Group
  * ALL RIGHTS RESERVED;
  *
@@ -1449,6 +1449,7 @@ main(int argc, char **argv)
    int         ttype = 0;      /* transaction type. 0: TPC-B, 1: SELECT only,
                                 * 2: skip update of branches and tellers */
    char       *filename = NULL;
+   bool        scale_given = false;
 
    CState     *state;          /* status of clients */
 
@@ -1552,6 +1553,7 @@ main(int argc, char **argv)
                is_connect = 1;
                break;
            case 's':
+               scale_given = true;
                scale = atoi(optarg);
                if (scale <= 0)
                {
@@ -1647,16 +1649,6 @@ main(int argc, char **argv)
 
    remains = nclients;
 
-   if (getVariable(&state[0], "scale") == NULL)
-   {
-       snprintf(val, sizeof(val), "%d", scale);
-       if (putVariable(&state[0], "scale", val) == false)
-       {
-           fprintf(stderr, "Couldn't allocate memory for variable\n");
-           exit(1);
-       }
-   }
-
    if (nclients > 1)
    {
        state = (CState *) realloc(state, sizeof(CState) * nclients);
@@ -1668,8 +1660,7 @@ main(int argc, char **argv)
 
        memset(state + 1, 0, sizeof(*state) * (nclients - 1));
 
-       snprintf(val, sizeof(val), "%d", scale);
-
+       /* copy any -D switch values to all clients */
        for (i = 1; i < nclients; i++)
        {
            int         j;
@@ -1682,12 +1673,6 @@ main(int argc, char **argv)
                    exit(1);
                }
            }
-
-           if (putVariable(&state[i], "scale", val) == false)
-           {
-               fprintf(stderr, "Couldn't allocate memory for variable\n");
-               exit(1);
-           }
        }
    }
 
@@ -1743,22 +1728,26 @@ main(int argc, char **argv)
        }
        PQclear(res);
 
-       snprintf(val, sizeof(val), "%d", scale);
-       if (putVariable(&state[0], "scale", val) == false)
-       {
-           fprintf(stderr, "Couldn't allocate memory for variable\n");
-           exit(1);
-       }
+       /* warn if we override user-given -s switch */
+       if (scale_given)
+           fprintf(stderr,
+                   "Scale option ignored, using branches table count = %d\n",
+                   scale);
+   }
 
-       if (nclients > 1)
+   /*
+    * :scale variables normally get -s or database scale, but don't override
+    * an explicit -D switch
+    */
+   if (getVariable(&state[0], "scale") == NULL)
+   {
+       snprintf(val, sizeof(val), "%d", scale);
+       for (i = 0; i < nclients; i++)
        {
-           for (i = 1; i < nclients; i++)
+           if (putVariable(&state[i], "scale", val) == false)
            {
-               if (putVariable(&state[i], "scale", val) == false)
-               {
-                   fprintf(stderr, "Couldn't allocate memory for variable\n");
-                   exit(1);
-               }
+               fprintf(stderr, "Couldn't allocate memory for variable\n");
+               exit(1);
            }
        }
    }