mirror of
				https://github.com/postgres/postgres.git
				synced 2025-10-29 22:49:41 +03:00 
			
		
		
		
	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:
		| @@ -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, | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user