From 99370364437b98912e47120ff493c50e7e6cbc19 Mon Sep 17 00:00:00 2001 From: Hari Babu Date: Tue, 26 Feb 2019 12:22:26 +1100 Subject: [PATCH] Move the current_logfiles file into log_directory --- src/backend/postmaster/postmaster.c | 8 ++--- src/backend/postmaster/syslogger.c | 46 +++++++++++++++++++++++----- src/backend/replication/basebackup.c | 3 -- src/backend/utils/adt/misc.c | 14 ++++++--- src/include/postmaster/syslogger.h | 1 + 5 files changed, 51 insertions(+), 21 deletions(-) diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c index ccea231e98..22d1980075 100644 --- a/src/backend/postmaster/postmaster.c +++ b/src/backend/postmaster/postmaster.c @@ -1021,12 +1021,8 @@ PostmasterMain(int argc, char *argv[]) /* Do the same for logrotate signal file */ RemoveLogrotateSignalFiles(); - /* Remove any outdated file holding the current log filenames. */ - if (unlink(LOG_METAINFO_DATAFILE) < 0 && errno != ENOENT) - ereport(LOG, - (errcode_for_file_access(), - errmsg("could not remove file \"%s\": %m", - LOG_METAINFO_DATAFILE))); + /* Remove the outdated current_logfiles */ + RemoveCurrentLogFile(); /* * If enabled, start up syslogger collection subprocess diff --git a/src/backend/postmaster/syslogger.c b/src/backend/postmaster/syslogger.c index d1ea46deb8..a82a55027e 100644 --- a/src/backend/postmaster/syslogger.c +++ b/src/backend/postmaster/syslogger.c @@ -1453,24 +1453,34 @@ static void update_metainfo_datafile(void) { FILE *fh; + char filename[MAXPGPATH]; + char tmp_filename[MAXPGPATH]; + int len; + + snprintf(filename, MAXPGPATH, "%s/", Log_directory); + snprintf(tmp_filename, MAXPGPATH, "%s/", Log_directory); + + len = strlen(filename); + strlcpy(filename + len, LOG_METAINFO_DATAFILE, MAXPGPATH - len); + strlcpy(tmp_filename + len, LOG_METAINFO_DATAFILE_TMP, MAXPGPATH - len); if (!(Log_destination & LOG_DESTINATION_STDERR) && !(Log_destination & LOG_DESTINATION_CSVLOG)) { - if (unlink(LOG_METAINFO_DATAFILE) < 0 && errno != ENOENT) + if (unlink(filename) < 0 && errno != ENOENT) ereport(LOG, (errcode_for_file_access(), errmsg("could not remove file \"%s\": %m", - LOG_METAINFO_DATAFILE))); + filename))); return; } - if ((fh = logfile_open(LOG_METAINFO_DATAFILE_TMP, "w", true)) == NULL) + if ((fh = logfile_open(tmp_filename, "w", true)) == NULL) { ereport(LOG, (errcode_for_file_access(), errmsg("could not open file \"%s\": %m", - LOG_METAINFO_DATAFILE_TMP))); + tmp_filename))); return; } @@ -1481,7 +1491,7 @@ update_metainfo_datafile(void) ereport(LOG, (errcode_for_file_access(), errmsg("could not write file \"%s\": %m", - LOG_METAINFO_DATAFILE_TMP))); + tmp_filename))); fclose(fh); return; } @@ -1494,18 +1504,38 @@ update_metainfo_datafile(void) ereport(LOG, (errcode_for_file_access(), errmsg("could not write file \"%s\": %m", - LOG_METAINFO_DATAFILE_TMP))); + tmp_filename))); fclose(fh); return; } } fclose(fh); - if (rename(LOG_METAINFO_DATAFILE_TMP, LOG_METAINFO_DATAFILE) != 0) + if (rename(tmp_filename, filename) != 0) ereport(LOG, (errcode_for_file_access(), errmsg("could not rename file \"%s\" to \"%s\": %m", - LOG_METAINFO_DATAFILE_TMP, LOG_METAINFO_DATAFILE))); + tmp_filename, filename))); +} + +/* + * Remove any out dated file holding the current log filenames. + */ +void +RemoveCurrentLogFile(void) +{ + char filename[MAXPGPATH]; + int len; + + snprintf(filename, MAXPGPATH, "%s/", Log_directory); + len = strlen(filename); + strlcpy(filename + len, LOG_METAINFO_DATAFILE, MAXPGPATH - len); + + if (unlink(filename) < 0 && errno != ENOENT) + ereport(LOG, + (errcode_for_file_access(), + errmsg("could not remove file \"%s\": %m", + filename))); } /* -------------------------------- diff --git a/src/backend/replication/basebackup.c b/src/backend/replication/basebackup.c index def6c03dd0..0f35604435 100644 --- a/src/backend/replication/basebackup.c +++ b/src/backend/replication/basebackup.c @@ -165,9 +165,6 @@ static const char *excludeFiles[] = /* Skip auto conf temporary file. */ PG_AUTOCONF_FILENAME ".tmp", - /* Skip current log file temporary file */ - LOG_METAINFO_DATAFILE_TMP, - /* Skip relation cache because it is rebuilt on startup */ RELCACHE_INIT_FILENAME, diff --git a/src/backend/utils/adt/misc.c b/src/backend/utils/adt/misc.c index d330a88e3c..e86a84d727 100644 --- a/src/backend/utils/adt/misc.c +++ b/src/backend/utils/adt/misc.c @@ -729,6 +729,8 @@ pg_current_logfile(PG_FUNCTION_ARGS) char *log_filepath; char *log_format = lbuffer; char *nlpos; + char filename[MAXPGPATH]; + int len; /* The log format parameter is optional */ if (PG_NARGS() == 0 || PG_ARGISNULL(0)) @@ -744,14 +746,18 @@ pg_current_logfile(PG_FUNCTION_ARGS) errhint("The supported log formats are \"stderr\" and \"csvlog\"."))); } - fd = AllocateFile(LOG_METAINFO_DATAFILE, "r"); + snprintf(filename, MAXPGPATH, "%s/", Log_directory); + len = strlen(filename); + strlcpy(filename + len, LOG_METAINFO_DATAFILE, MAXPGPATH - len); + + fd = AllocateFile(filename, "r"); if (fd == NULL) { if (errno != ENOENT) ereport(ERROR, (errcode_for_file_access(), errmsg("could not read file \"%s\": %m", - LOG_METAINFO_DATAFILE))); + filename))); PG_RETURN_NULL(); } @@ -770,7 +776,7 @@ pg_current_logfile(PG_FUNCTION_ARGS) { /* Uh oh. No space found, so file content is corrupted. */ elog(ERROR, - "missing space character in \"%s\"", LOG_METAINFO_DATAFILE); + "missing space character in \"%s\"", filename); break; } @@ -781,7 +787,7 @@ pg_current_logfile(PG_FUNCTION_ARGS) { /* Uh oh. No newline found, so file content is corrupted. */ elog(ERROR, - "missing newline character in \"%s\"", LOG_METAINFO_DATAFILE); + "missing newline character in \"%s\"", filename); break; } *nlpos = '\0'; diff --git a/src/include/postmaster/syslogger.h b/src/include/postmaster/syslogger.h index 3a61104573..f12e592e83 100644 --- a/src/include/postmaster/syslogger.h +++ b/src/include/postmaster/syslogger.h @@ -89,6 +89,7 @@ extern void SysLoggerMain(int argc, char *argv[]) pg_attribute_noreturn(); extern bool CheckLogrotateSignal(void); extern void RemoveLogrotateSignalFiles(void); +extern void RemoveCurrentLogFile(void); /* * Name of files saving meta-data information about the log -- 2.20.1.windows.1