summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Paquier2022-10-17 02:40:14 +0000
committerMichael Paquier2022-10-17 02:40:14 +0000
commitc68a1839902daeb42cf1ebc89edfdd91c00e5091 (patch)
tree202349fe9735a7d696dc268cc286529aa7c61629
parent7622422b725eb4b7403c33a9e4986e0ed9826cbd (diff)
Fix calculation related to temporary WAL segment name in basic_archive
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
-rw-r--r--contrib/basic_archive/Makefile3
-rw-r--r--contrib/basic_archive/basic_archive.c4
2 files changed, 4 insertions, 3 deletions
diff --git a/contrib/basic_archive/Makefile b/contrib/basic_archive/Makefile
index 14d036e1c4..55d299d650 100644
--- a/contrib/basic_archive/Makefile
+++ b/contrib/basic_archive/Makefile
@@ -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
diff --git a/contrib/basic_archive/basic_archive.c b/contrib/basic_archive/basic_archive.c
index 776a386e35..9f221816bb 100644
--- a/contrib/basic_archive/basic_archive.c
+++ b/contrib/basic_archive/basic_archive.c
@@ -218,7 +218,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)));
@@ -265,7 +265,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,