mirror of
https://github.com/postgres/postgres.git
synced 2025-06-16 06:01:02 +03:00
Fix pgbench's --progress-timestamp option to print Unix-epoch timestamps.
As a consequence of commit1d63f7d2d
, 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 commits74baa1e3b
and67a875355
, 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
This commit is contained in:
@ -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",
|
||||
|
Reference in New Issue
Block a user