Обсуждение: The function of lock file named ".s.PGSQL..lock" on Linux?
When the psql server is started under Linux platform, in /tmp directory there is a lock files named ".s.PGSQL.<port>.lock". So I want to know what is the function of this lock file? And does the server work well without this lock file? Additionally, I know that the file ".s.PGSQL.<port>" is used as the unix domain socket file. But the file ".s.PGSQL.<port>.lock" makes me still pazzled. Could you explain that? Thanks. Best wishes.
"xsun" <xu2002261@163.com> writes: > When the psql server is started under Linux platform, in /tmp directory > there is a lock files named ".s.PGSQL.<port>.lock". So I want to know what > is the function of this lock file? It prevents multiple postmasters from trying to use the same socket file. > And does the server work well without > this lock file? No. (Well, it will run, but you have no protection against accidentally starting another postmaster on the same port number.) > Additionally, I know that the file ".s.PGSQL.<port>" is used as the unix > domain socket file. But the file ".s.PGSQL.<port>.lock" makes me still > pazzled. Could you explain that? Thanks. We can't portably lock the socket file itself, so we make a separate ordinary file for locking purposes. regards, tom lane
Tom Lane wrote: > We can't portably lock the socket file itself, so we make a separate > ordinary file for locking purposes. > It looks to me like the fact that the .lock file is created is only documented in src/backend/utils/init/miscinit.c , and even there the reason why (what you wrote above) isn't mentioned. Seems like noting this file is created in the unix_socket_directory entry of the docs, and the rationale for why in the source code, would make a useful improvement. Anybody want to write a little documentation patch? -- Greg Smith 2ndQuadrant US Baltimore, MD PostgreSQL Training, Services and Support greg@2ndQuadrant.com www.2ndQuadrant.us
Greg Smith <greg@2ndquadrant.com> writes: > Tom Lane wrote: >> We can't portably lock the socket file itself, so we make a separate >> ordinary file for locking purposes. > It looks to me like the fact that the .lock file is created is only > documented in src/backend/utils/init/miscinit.c , and even there the > reason why (what you wrote above) isn't mentioned. Seems like noting > this file is created in the unix_socket_directory entry of the docs, and > the rationale for why in the source code, would make a useful > improvement. Anybody want to write a little documentation patch? FWIW, the discussion about that was here: http://archives.postgresql.org/pgsql-hackers/2000-11/msg01306.php and the subsequent commit was 2000-11-29 15:59 tgl * configure, configure.in, src/backend/libpq/pqcomm.c, src/backend/postmaster/postmaster.c, src/backend/tcop/postgres.c, src/backend/utils/init/miscinit.c, src/backend/utils/misc/guc.c, src/bin/pg_ctl/pg_ctl.sh, src/include/config.h.in, src/include/miscadmin.h: Get rid of not-very-portable fcntl(F_SETLK) mechanism for locking the Unix socket file, in favor of having an ordinary lockfile beside the socket file. Clean up a few robustness problems in the lockfile code. If postmaster is going to reject a connection request based on database state, it will now tell you so before authentication exchange not after. (Of course, a failure after is still possible if conditions change meanwhile, but this makes life easier for a yet-to-be-written pg_ping utility.) (The pgsql-committers messages were pretty useless back then, so I won't point you to that archive.) regards, tom lane
Greg Smith <greg@2ndquadrant.com> writes: >> It looks to me like the fact that the .lock file is created is only >> documented in src/backend/utils/init/miscinit.c , and even there the >> reason why (what you wrote above) isn't mentioned. Seems like noting >> this file is created in the unix_socket_directory entry of the docs, and >> the rationale for why in the source code, would make a useful >> improvement. Anybody want to write a little documentation patch? Done. regards, tom lane