Commit feffa0e0 authored by Tom Lane's avatar Tom Lane

Fix pgbench's --progress-timestamp option to print Unix-epoch timestamps.

As a consequence of commit 1d63f7d2, on platforms with CLOCK_MONOTONIC,
you got some random timescale or other instead of standard Unix timestamps
as expected.  I'd attempted to fix pgbench for that change in commits
74baa1e3 and 67a87535, but missed this place.  Fix in the same way as
those previous commits, ie, just eat the cost of an extra gettimeofday();
one extra syscall per progress report isn't worth sweating over.  Per
report from Jeff Janes.

In passing, use snprintf not sprintf for this purpose.  I don't think
there's any chance of actual buffer overrun, but it just looks safer.

Discussion: https://postgr.es/m/CAMkU=1zrQaPwBN+NcBd3pWCb=vWaiL=mmWfJjDJjh-a7eVr-Og@mail.gmail.com
parent a6940bdc
......@@ -4652,10 +4652,21 @@ threadRun(void *arg)
(cur.cnt - last.cnt);
if (progress_timestamp)
sprintf(tbuf, "%.03f s",
INSTR_TIME_GET_MILLISEC(now_time) / 1000.0);
{
/*
* On some platforms the current system timestamp is
* available in now_time, but rather than get entangled
* with that, we just eat the cost of an extra syscall in
* all cases.
*/
struct timeval tv;
gettimeofday(&tv, NULL);
snprintf(tbuf, sizeof(tbuf), "%ld.%03ld s",
(long) tv.tv_sec, (long) (tv.tv_usec / 1000));
}
else
sprintf(tbuf, "%.1f s", total_run);
snprintf(tbuf, sizeof(tbuf), "%.1f s", total_run);
fprintf(stderr,
"progress: %s, %.1f tps, lat %.3f ms stddev %.3f",
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment