Skip to content

Commit

Permalink
Fix calculation related to temporary WAL segment name in basic_archive
Browse files Browse the repository at this point in the history
The file name used for its temporary destination, before renaming it to
the real deal, has been using a microseconds in a timestamp aimed to be
originally in milli-seconds.  This is harmless as this is aimed at being
a safeguard against name collisions (note MyProcPid in the name), but
let's be correct with the maths.

While on it, add a note in the module's makefile to document why
installcheck is not supported.

Author: Nathan Bossart
Reviewed-by: Bharath Rupireddy
Discussion: https://postgr.es/m/20221014044106.GA1673343@nathanxps13
Backpatch-through: 15
  • Loading branch information
michaelpq committed Oct 17, 2022
1 parent d4abb0b commit 9ebcb5f
Show file tree
Hide file tree
Showing 2 changed files with 4 additions and 3 deletions.
3 changes: 2 additions & 1 deletion contrib/basic_archive/Makefile
Expand Up @@ -5,7 +5,8 @@ PGFILEDESC = "basic_archive - basic archive module"

REGRESS = basic_archive
REGRESS_OPTS = --temp-config $(top_srcdir)/contrib/basic_archive/basic_archive.conf

# Disabled because these tests require "shared_preload_libraries=basic_archive",
# which typical installcheck users do not have (e.g. buildfarm clients).
NO_INSTALLCHECK = 1

ifdef USE_PGXS
Expand Down
4 changes: 2 additions & 2 deletions contrib/basic_archive/basic_archive.c
Expand Up @@ -221,7 +221,7 @@ basic_archive_file_internal(const char *file, const char *path)
char temp[MAXPGPATH + 256];
struct stat st;
struct timeval tv;
uint64 epoch;
uint64 epoch; /* milliseconds */

ereport(DEBUG3,
(errmsg("archiving \"%s\" via basic_archive", file)));
Expand Down Expand Up @@ -268,7 +268,7 @@ basic_archive_file_internal(const char *file, const char *path)
*/
gettimeofday(&tv, NULL);
if (pg_mul_u64_overflow((uint64) 1000, (uint64) tv.tv_sec, &epoch) ||
pg_add_u64_overflow(epoch, (uint64) tv.tv_usec, &epoch))
pg_add_u64_overflow(epoch, (uint64) (tv.tv_usec / 1000), &epoch))
elog(ERROR, "could not generate temporary file name for archiving");

snprintf(temp, sizeof(temp), "%s/%s.%s.%d." UINT64_FORMAT,
Expand Down

0 comments on commit 9ebcb5f

Please sign in to comment.