Обсуждение: The function of lock file named ".s.PGSQL..lock" on Linux?

Поиск
Список
Период
Сортировка

The function of lock file named ".s.PGSQL..lock" on Linux?

От
"xsun"
Дата:
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.



Re: The function of lock file named ".s.PGSQL..lock" on Linux?

От
Tom Lane
Дата:
"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

Re: The function of lock file named ".s.PGSQL..lock" on Linux?

От
Greg Smith
Дата:
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


Re: The function of lock file named ".s.PGSQL..lock" on Linux?

От
Tom Lane
Дата:
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

Re: The function of lock file named ".s.PGSQL..lock" on Linux?

От
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