Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 34f13cc

Browse filesBrowse files
committed
pgbench: cleanup use of a "logfile" parameter
There is no reason to have the per-thread logfile file pointer as a separate parameter in various functions: it's much simpler to put it in the per-thread state struct instead, which is already being passed to all functions that need the log file anyway. Change the callsites in which it was used as a boolean to test whether logging is active, so that they use the use_log global variable instead. No backpatch, even though this exists since commit a887c48 of March 2010, because this is just for cleanliness' sake and the surrounding code has been modified a lot recently anyway.
1 parent db94419 commit 34f13cc
Copy full SHA for 34f13cc

File tree

Expand file treeCollapse file tree

1 file changed

+25
-19
lines changed
Filter options
Expand file treeCollapse file tree

1 file changed

+25
-19
lines changed

‎src/bin/pgbench/pgbench.c

Copy file name to clipboardExpand all lines: src/bin/pgbench/pgbench.c
+25-19Lines changed: 25 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -256,6 +256,7 @@ typedef struct
256256
int nstate; /* length of state[] */
257257
unsigned short random_state[3]; /* separate randomness for each thread */
258258
int64 throttle_trigger; /* previous/next throttling (us) */
259+
FILE *logfile; /* where to log, or NULL */
259260

260261
/* per thread collected stats */
261262
instr_time start_time; /* thread start time */
@@ -366,8 +367,8 @@ static void setalarm(int seconds);
366367
static void *threadRun(void *arg);
367368

368369
static void processXactStats(TState *thread, CState *st, instr_time *now,
369-
bool skipped, FILE *logfile, StatsData *agg);
370-
static void doLog(TState *thread, CState *st, FILE *logfile, instr_time *now,
370+
bool skipped, StatsData *agg);
371+
static void doLog(TState *thread, CState *st, instr_time *now,
371372
StatsData *agg, bool skipped, double latency, double lag);
372373

373374

@@ -1246,7 +1247,7 @@ chooseScript(TState *thread)
12461247

12471248
/* return false iff client should be disconnected */
12481249
static bool
1249-
doCustom(TState *thread, CState *st, FILE *logfile, StatsData *agg)
1250+
doCustom(TState *thread, CState *st, StatsData *agg)
12501251
{
12511252
PGresult *res;
12521253
Command **commands;
@@ -1300,7 +1301,7 @@ doCustom(TState *thread, CState *st, FILE *logfile, StatsData *agg)
13001301
now_us = INSTR_TIME_GET_MICROSEC(now);
13011302
while (thread->throttle_trigger < now_us - latency_limit)
13021303
{
1303-
processXactStats(thread, st, &now, true, logfile, agg);
1304+
processXactStats(thread, st, &now, true, agg);
13041305
/* next rendez-vous */
13051306
wait = getPoissonRand(thread, throttle_delay);
13061307
thread->throttle_trigger += wait;
@@ -1361,8 +1362,8 @@ doCustom(TState *thread, CState *st, FILE *logfile, StatsData *agg)
13611362
if (commands[st->state + 1] == NULL)
13621363
{
13631364
if (progress || throttle_delay || latency_limit ||
1364-
per_script_stats || logfile)
1365-
processXactStats(thread, st, &now, false, logfile, agg);
1365+
per_script_stats || use_log)
1366+
processXactStats(thread, st, &now, false, agg);
13661367
else
13671368
thread->stats.cnt++;
13681369
}
@@ -1454,7 +1455,8 @@ doCustom(TState *thread, CState *st, FILE *logfile, StatsData *agg)
14541455
}
14551456

14561457
/* Record transaction start time under logging, progress or throttling */
1457-
if ((logfile || progress || throttle_delay || latency_limit || per_script_stats) && st->state == 0)
1458+
if ((use_log || progress || throttle_delay || latency_limit ||
1459+
per_script_stats) && st->state == 0)
14581460
{
14591461
INSTR_TIME_SET_CURRENT(st->txn_begin);
14601462

@@ -1794,9 +1796,13 @@ doCustom(TState *thread, CState *st, FILE *logfile, StatsData *agg)
17941796
* print log entry after completing one transaction.
17951797
*/
17961798
static void
1797-
doLog(TState *thread, CState *st, FILE *logfile, instr_time *now,
1799+
doLog(TState *thread, CState *st, instr_time *now,
17981800
StatsData *agg, bool skipped, double latency, double lag)
17991801
{
1802+
FILE *logfile = thread->logfile;
1803+
1804+
Assert(use_log);
1805+
18001806
/*
18011807
* Skip the log entry if sampling is enabled and this row doesn't belong
18021808
* to the random sample.
@@ -1879,7 +1885,7 @@ doLog(TState *thread, CState *st, FILE *logfile, instr_time *now,
18791885
*/
18801886
static void
18811887
processXactStats(TState *thread, CState *st, instr_time *now,
1882-
bool skipped, FILE *logfile, StatsData *agg)
1888+
bool skipped, StatsData *agg)
18831889
{
18841890
double latency = 0.0,
18851891
lag = 0.0;
@@ -1906,7 +1912,7 @@ processXactStats(TState *thread, CState *st, instr_time *now,
19061912
thread->stats.cnt++;
19071913

19081914
if (use_log)
1909-
doLog(thread, st, logfile, now, agg, skipped, latency, lag);
1915+
doLog(thread, st, now, agg, skipped, latency, lag);
19101916

19111917
/* XXX could use a mutex here, but we choose not to */
19121918
if (per_script_stats)
@@ -3289,7 +3295,7 @@ main(int argc, char **argv)
32893295
exit(1);
32903296
}
32913297

3292-
/* --sampling-rate may must not be used with --aggregate-interval */
3298+
/* --sampling-rate may not be used with --aggregate-interval */
32933299
if (sample_rate > 0.0 && agg_interval > 0)
32943300
{
32953301
fprintf(stderr, "log sampling (--sampling-rate) and aggregation (--aggregate-interval) cannot be used at the same time\n");
@@ -3460,6 +3466,7 @@ main(int argc, char **argv)
34603466
thread->random_state[0] = random();
34613467
thread->random_state[1] = random();
34623468
thread->random_state[2] = random();
3469+
thread->logfile = NULL; /* filled in later */
34633470
thread->latency_late = 0;
34643471
initStats(&thread->stats, 0.0);
34653472

@@ -3555,7 +3562,6 @@ threadRun(void *arg)
35553562
{
35563563
TState *thread = (TState *) arg;
35573564
CState *state = thread->state;
3558-
FILE *logfile = NULL; /* per-thread log file */
35593565
instr_time start,
35603566
end;
35613567
int nstate = thread->nstate;
@@ -3589,9 +3595,9 @@ threadRun(void *arg)
35893595
snprintf(logpath, sizeof(logpath), "pgbench_log.%d", main_pid);
35903596
else
35913597
snprintf(logpath, sizeof(logpath), "pgbench_log.%d.%d", main_pid, thread->tid);
3592-
logfile = fopen(logpath, "w");
3598+
thread->logfile = fopen(logpath, "w");
35933599

3594-
if (logfile == NULL)
3600+
if (thread->logfile == NULL)
35953601
{
35963602
fprintf(stderr, "could not open logfile \"%s\": %s\n",
35973603
logpath, strerror(errno));
@@ -3628,7 +3634,7 @@ threadRun(void *arg)
36283634
if (debug)
36293635
fprintf(stderr, "client %d executing script \"%s\"\n", st->id,
36303636
sql_script[st->use_file].name);
3631-
if (!doCustom(thread, st, logfile, &aggs))
3637+
if (!doCustom(thread, st, &aggs))
36323638
remains--; /* I've aborted */
36333639

36343640
if (st->ecnt > prev_ecnt && commands[st->state]->type == META_COMMAND)
@@ -3767,7 +3773,7 @@ threadRun(void *arg)
37673773
if (st->con && (FD_ISSET(PQsocket(st->con), &input_mask)
37683774
|| commands[st->state]->type == META_COMMAND))
37693775
{
3770-
if (!doCustom(thread, st, logfile, &aggs))
3776+
if (!doCustom(thread, st, &aggs))
37713777
remains--; /* I've aborted */
37723778
}
37733779

@@ -3871,14 +3877,14 @@ threadRun(void *arg)
38713877
disconnect_all(state, nstate);
38723878
INSTR_TIME_SET_CURRENT(end);
38733879
INSTR_TIME_ACCUM_DIFF(thread->conn_time, end, start);
3874-
if (logfile)
3880+
if (thread->logfile)
38753881
{
38763882
if (agg_interval)
38773883
{
38783884
/* log aggregated but not yet reported transactions */
3879-
doLog(thread, state, logfile, &end, &aggs, false, 0, 0);
3885+
doLog(thread, state, &end, &aggs, false, 0, 0);
38803886
}
3881-
fclose(logfile);
3887+
fclose(thread->logfile);
38823888
}
38833889
return NULL;
38843890
}

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.