aboutsummaryrefslogtreecommitdiff
path: root/src/backend/storage/file/fd.c
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2019-09-11 11:43:01 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2019-09-11 11:43:01 -0400
commit9a86f03b4e8c8f16eca7faebcb4a46330e431102 (patch)
tree062ebf0c7edf2c6d4c420184da709618211f2223 /src/backend/storage/file/fd.c
parent75f46eaee20c38b2a04f569e8a5fed4f63091bd3 (diff)
downloadpostgresql-9a86f03b4e8c8f16eca7faebcb4a46330e431102.tar.gz
postgresql-9a86f03b4e8c8f16eca7faebcb4a46330e431102.zip
Rearrange postmaster's startup sequence for better syslogger results.
This is a second try at what commit 57431a911 tried to do, namely, launch the syslogger before we open postmaster sockets so that our messages about the sockets end up in the syslogger files. That commit fell foul of a bunch of subtle issues caused by trying to launch a postmaster child process before creating shared memory. Rather than messing with that interaction, let's postpone opening the sockets till after we launch the syslogger. This would not have been terribly safe before commit 7de19fbc0, because we relied on socket opening to detect whether any competing postmasters were using the same port number. But now that we choose IPC keys without regard to the port number, there's no interaction to worry about. Also delay creation of the external PID file (if requested) till after the sockets are open, since external code could plausibly be relying on that ordering of events. And postpone most of the work of RemovePgTempFiles() so that that potentially-slow processing still happens after we make the external PID file. We have to be a bit careful about that last though: as noted in the discussion subsequent to bug #15804, EXEC_BACKEND builds still have to clear the parameter-file temp dir before launching the syslogger. Patch by me; thanks to Michael Paquier for review/testing. Discussion: https://postgr.es/m/15804-3721117bf40fb654@postgresql.org
Diffstat (limited to 'src/backend/storage/file/fd.c')
-rw-r--r--src/backend/storage/file/fd.c11
1 files changed, 4 insertions, 7 deletions
diff --git a/src/backend/storage/file/fd.c b/src/backend/storage/file/fd.c
index 2de21051052..25107e8a290 100644
--- a/src/backend/storage/file/fd.c
+++ b/src/backend/storage/file/fd.c
@@ -307,8 +307,6 @@ static int FreeDesc(AllocateDesc *desc);
static void AtProcExit_Files(int code, Datum arg);
static void CleanupTempFiles(bool isCommit, bool isProcExit);
-static void RemovePgTempFilesInDir(const char *tmpdirname, bool missing_ok,
- bool unlink_all);
static void RemovePgTempRelationFiles(const char *tsdirname);
static void RemovePgTempRelationFilesInDbspace(const char *dbspacedirname);
@@ -2919,11 +2917,10 @@ RemovePgTempFiles(void)
/*
* In EXEC_BACKEND case there is a pgsql_tmp directory at the top level of
- * DataDir as well.
+ * DataDir as well. However, that is *not* cleaned here because doing so
+ * would create a race condition. It's done separately, earlier in
+ * postmaster startup.
*/
-#ifdef EXEC_BACKEND
- RemovePgTempFilesInDir(PG_TEMP_FILES_DIR, true, false);
-#endif
}
/*
@@ -2941,7 +2938,7 @@ RemovePgTempFiles(void)
* (These two flags could be replaced by one, but it seems clearer to keep
* them separate.)
*/
-static void
+void
RemovePgTempFilesInDir(const char *tmpdirname, bool missing_ok, bool unlink_all)
{
DIR *temp_dir;