0001-Move-the-current_logfiles-file-into-log_directory.patch
application/octet-stream
Filename: 0001-Move-the-current_logfiles-file-into-log_directory.patch
Type: application/octet-stream
Part: 0
Patch
Format: format-patch
Series: patch 0001
Subject: Move the current_logfiles file into log_directory
| File | + | − |
|---|---|---|
| src/backend/postmaster/postmaster.c | 2 | 6 |
| src/backend/postmaster/syslogger.c | 38 | 8 |
| src/backend/replication/basebackup.c | 0 | 3 |
| src/backend/utils/adt/misc.c | 10 | 4 |
| src/include/postmaster/syslogger.h | 1 | 0 |
From 99370364437b98912e47120ff493c50e7e6cbc19 Mon Sep 17 00:00:00 2001
From: Hari Babu <kommi.haribabu@gmail.com>
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