mirror of
				https://github.com/postgres/postgres.git
				synced 2025-10-31 00:03:57 -04:00 
			
		
		
		
	Add macro for customizing an archiving WARNING message.
Presently, if an archive module's check_configured_cb callback returns false, a generic WARNING message is emitted, which unfortunately provides no actionable details about the reason why the module is not configured. This commit introduces a macro that archive module authors can use to add a DETAIL line to this WARNING message. Co-authored-by: Tung Nguyen Reviewed-by: Daniel Gustafsson, Álvaro Herrera Discussion: https://postgr.es/m/4109578306242a7cd5661171647e11b2%40oss.nttdata.com
This commit is contained in:
		
							parent
							
								
									e5bc9454e5
								
							
						
					
					
						commit
						2c29e7fc95
					
				| @ -161,7 +161,12 @@ check_archive_directory(char **newval, void **extra, GucSource source) | ||||
| static bool | ||||
| basic_archive_configured(ArchiveModuleState *state) | ||||
| { | ||||
| 	return archive_directory != NULL && archive_directory[0] != '\0'; | ||||
| 	if (archive_directory != NULL && archive_directory[0] != '\0') | ||||
| 		return true; | ||||
| 
 | ||||
| 	arch_module_check_errdetail("%s is not set.", | ||||
| 								"basic_archive.archive_directory"); | ||||
| 	return false; | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  | ||||
| @ -114,6 +114,18 @@ WARNING:  archive_mode enabled, yet archiving is not configured | ||||
|     In the latter case, the server will periodically call this function, and | ||||
|     archiving will proceed only when it returns <literal>true</literal>. | ||||
|    </para> | ||||
| 
 | ||||
|    <note> | ||||
|     <para> | ||||
|      When returning <literal>false</literal>, it may be useful to append some | ||||
|      additional information to the generic warning message.  To do that, provide | ||||
|      a message to the <function>arch_module_check_errdetail</function> macro | ||||
|      before returning <literal>false</literal>.  Like | ||||
|      <function>errdetail()</function>, this macro accepts a format string | ||||
|      followed by an optional list of arguments.  The resulting string will be | ||||
|      emitted as the <literal>DETAIL</literal> line of the warning message. | ||||
|     </para> | ||||
|    </note> | ||||
|   </sect2> | ||||
| 
 | ||||
|   <sect2 id="archive-module-archive"> | ||||
|  | ||||
| @ -45,7 +45,12 @@ shell_archive_init(void) | ||||
| static bool | ||||
| shell_archive_configured(ArchiveModuleState *state) | ||||
| { | ||||
| 	return XLogArchiveCommand[0] != '\0'; | ||||
| 	if (XLogArchiveCommand[0] != '\0') | ||||
| 		return true; | ||||
| 
 | ||||
| 	arch_module_check_errdetail("%s is not set.", | ||||
| 								"archive_command"); | ||||
| 	return false; | ||||
| } | ||||
| 
 | ||||
| static bool | ||||
|  | ||||
| @ -88,6 +88,7 @@ typedef struct PgArchData | ||||
| } PgArchData; | ||||
| 
 | ||||
| char	   *XLogArchiveLibrary = ""; | ||||
| char	   *arch_module_check_errdetail_string; | ||||
| 
 | ||||
| 
 | ||||
| /* ----------
 | ||||
| @ -401,12 +402,17 @@ pgarch_ArchiverCopyLoop(void) | ||||
| 			 */ | ||||
| 			HandlePgArchInterrupts(); | ||||
| 
 | ||||
| 			/* Reset variables that might be set by the callback */ | ||||
| 			arch_module_check_errdetail_string = NULL; | ||||
| 
 | ||||
| 			/* can't do anything if not configured ... */ | ||||
| 			if (ArchiveCallbacks->check_configured_cb != NULL && | ||||
| 				!ArchiveCallbacks->check_configured_cb(archive_module_state)) | ||||
| 			{ | ||||
| 				ereport(WARNING, | ||||
| 						(errmsg("archive_mode enabled, yet archiving is not configured"))); | ||||
| 						(errmsg("archive_mode enabled, yet archiving is not configured"), | ||||
| 						 arch_module_check_errdetail_string ? | ||||
| 						 errdetail_internal("%s", arch_module_check_errdetail_string) : 0)); | ||||
| 				return; | ||||
| 			} | ||||
| 
 | ||||
|  | ||||
| @ -56,4 +56,12 @@ typedef const ArchiveModuleCallbacks *(*ArchiveModuleInit) (void); | ||||
| 
 | ||||
| extern PGDLLEXPORT const ArchiveModuleCallbacks *_PG_archive_module_init(void); | ||||
| 
 | ||||
| /* Support for messages reported from archive module callbacks. */ | ||||
| 
 | ||||
| extern PGDLLIMPORT char *arch_module_check_errdetail_string; | ||||
| 
 | ||||
| #define arch_module_check_errdetail \ | ||||
| 	pre_format_elog_string(errno, TEXTDOMAIN), \ | ||||
| 	arch_module_check_errdetail_string = format_elog_string | ||||
| 
 | ||||
| #endif							/* _ARCHIVE_MODULE_H */ | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user