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
This commit is contained in:
parent
7622422b72
commit
c68a183990
@ -5,7 +5,8 @@ PGFILEDESC = "basic_archive - basic archive module"
|
|||||||
|
|
||||||
REGRESS = basic_archive
|
REGRESS = basic_archive
|
||||||
REGRESS_OPTS = --temp-config $(top_srcdir)/contrib/basic_archive/basic_archive.conf
|
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
|
NO_INSTALLCHECK = 1
|
||||||
|
|
||||||
ifdef USE_PGXS
|
ifdef USE_PGXS
|
||||||
|
@ -218,7 +218,7 @@ basic_archive_file_internal(const char *file, const char *path)
|
|||||||
char temp[MAXPGPATH + 256];
|
char temp[MAXPGPATH + 256];
|
||||||
struct stat st;
|
struct stat st;
|
||||||
struct timeval tv;
|
struct timeval tv;
|
||||||
uint64 epoch;
|
uint64 epoch; /* milliseconds */
|
||||||
|
|
||||||
ereport(DEBUG3,
|
ereport(DEBUG3,
|
||||||
(errmsg("archiving \"%s\" via basic_archive", file)));
|
(errmsg("archiving \"%s\" via basic_archive", file)));
|
||||||
@ -265,7 +265,7 @@ basic_archive_file_internal(const char *file, const char *path)
|
|||||||
*/
|
*/
|
||||||
gettimeofday(&tv, NULL);
|
gettimeofday(&tv, NULL);
|
||||||
if (pg_mul_u64_overflow((uint64) 1000, (uint64) tv.tv_sec, &epoch) ||
|
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");
|
elog(ERROR, "could not generate temporary file name for archiving");
|
||||||
|
|
||||||
snprintf(temp, sizeof(temp), "%s/%s.%s.%d." UINT64_FORMAT,
|
snprintf(temp, sizeof(temp), "%s/%s.%s.%d." UINT64_FORMAT,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user