[PATCH]: unlink legacy unix socket when unit starts
lei shan
shanlei at asiainfo.com
Sat May 7 06:57:56 UTC 2022
Hello, after discussion, I change the patch below, store the socket when
the main process creates it, then delete it in runtime_exit.
# HG changeset patch
# User stdanley <shanlei at asiainfo.com>
# Date 1651904970 -28800
# Sat May 07 14:29:30 2022 +0800
# Node ID c6aa8691ca3c7f92b5645547c8a182f34503a758
# Parent df887748fffb281302ef02aef1d13037355d749c
clean unit socket file before leave
diff -r df887748fffb -r c6aa8691ca3c src/nxt_main_process.c
--- a/src/nxt_main_process.c Wed Dec 15 12:18:59 2021 +0100
+++ b/src/nxt_main_process.c Sat May 07 14:29:30 2022 +0800
@@ -1070,6 +1070,7 @@
type = NXT_PORT_MSG_RPC_READY_LAST | NXT_PORT_MSG_CLOSE_FD;
+ nxt_runtime_listen_socket_add(task->thread->runtime,sa);
} else {
size = ls.end - ls.start;
diff -r df887748fffb -r c6aa8691ca3c src/nxt_runtime.c
--- a/src/nxt_runtime.c Wed Dec 15 12:18:59 2021 +0100
+++ b/src/nxt_runtime.c Sat May 07 14:29:30 2022 +0800
# HG changeset patch
# User stdanley <shanlei at asiainfo.com>
# Date 1651904970 -28800
# Sat May 07 14:29:30 2022 +0800
# Node ID c6aa8691ca3c7f92b5645547c8a182f34503a758
# Parent df887748fffb281302ef02aef1d13037355d749c
clean unit socket file before leave
diff -r df887748fffb -r c6aa8691ca3c src/nxt_main_process.c
--- a/src/nxt_main_process.c Wed Dec 15 12:18:59 2021 +0100
+++ b/src/nxt_main_process.c Sat May 07 14:29:30 2022 +0800
@@ -1070,6 +1070,7 @@
type = NXT_PORT_MSG_RPC_READY_LAST | NXT_PORT_MSG_CLOSE_FD;
+ nxt_runtime_listen_socket_add(task->thread->runtime,sa);
} else {
size = ls.end - ls.start;
diff -r df887748fffb -r c6aa8691ca3c src/nxt_runtime.c
--- a/src/nxt_runtime.c Wed Dec 15 12:18:59 2021 +0100
+++ b/src/nxt_runtime.c Sat May 07 14:29:30 2022 +0800
+
+ curr = rt->listen_sockets->elts;
+ ncurr = rt->listen_sockets->nelts;
+ for ( c=0;c<ncurr; c++) {
+ sa= curr[c].sockaddr;
+ if (sa->u.sockaddr.sa_family == AF_UNIX) {
+ name = (nxt_file_name_t *) sa->u.sockaddr_un.sun_path;
+ (void) nxt_file_delete(name);
+ }
+ }
}
#endif
}
On Fri, Apr 29, 2022 at 4:37 PM lei shan <shanlei at asiainfo.com> wrote:
>
> ---------- Forwarded message ---------
> From: lei shan <shanlei at asiainfo.com>
> Date: Fri, 29 Apr 2022, 16:36
> Subject: Re: [PATCH]: unlink legacy unix socket when unit starts
> To: Александр Поволоцкий <tarkhil at over.ru>
>
>
> I am working on it, just as control socket did.
> The idea is when the main process create the pipe, it stores the socket in
> runtime' listening_conntions, then remove it in runtime_exit of the main
> process.
>
> The cleaning can't be done by router is :
> The Unix socket owned by root user
>
>
>
>
> On Fri, 29 Apr 2022, 14:09 Александр Поволоцкий, <tarkhil at over.ru> wrote:
>
>> No patch will remove pipe on kill -9. We need to implement the logic used
>> for control socket.
>> On 29.04.2022 8:34, lei shan wrote:
>>
>> Hello guys,
>>
>> The process may crash, or other may misconfig and cause the file
>> confliction.
>> But at least, unit should remove the pipe file on exit,as it already
>> does to the control pipe.
>>
>> So a patch should remove the Unix pipe on stop , instead of on startup.
>>
>> Can we agree on this?
>>
>> Thanks & Best Regards
>>
>>
>> On Wed, 27 Apr 2022, 05:45 Oleg A. Mamontov, <oleg at mamontov.net> wrote:
>>
>>> On Wed, Apr 27, 2022 at 05:11:26AM +1000, Scott van Kalken wrote:
>>> >This will work well for cases where unit shuts down gracefully. If unit
>>> does
>>> >not shut down gracefully, then i think you will have the same startup
>>> problem.
>>> >
>>> >It’s a good point about the TCP socket.
>>>
>>> It seems the key point is the way to check on startup whether the unix
>>> socket is stale or currently in use and then to decide remove it and
>>> re-create or just fail the start, isn't it?
>>>
>>> >On Tue, 26 Apr 2022 at 11:50 am, <shanlei at asiainfo.com> wrote:
>>> >
>>> > I have reconsided the situation:
>>> > compare to TCP sockets, if a TCP bind fails, we know other programs
>>> are
>>> > using the socket ,the ops team then fix the mis-configured port
>>> number,
>>> > change unit or other programs.
>>> > the unix socket should behave similarly.
>>> > the diffrence is when a tcp server is done, the socket is recycled
>>> by
>>> > system, while the unix socket file is left in disk, which block
>>> "unit"'s
>>> > next boot.
>>> > may the idea patch is to unlink the unix socket file on shutdown,
>>> > instead of startup?
>>> >
>>> >
>>> > On 2022-04-25 14:38,Scott van Kalken wrote:
>>> > > What if it were a command line option to delete on start? This
>>> way you
>>> > > preserve the existing behaviour while introducing the desired
>>> > > behaviour. It’s up to the user / admin to decide if they want to
>>> > > “force delete” as an example.
>>> > >
>>> > > On Mon, 25 Apr 2022 at 4:33 pm, <shanlei at asiainfo.com> wrote:
>>> > >
>>> > >> I know the concern, that if we misconfigure the socket file,
>>> other
>>> > >> file
>>> > >> may be deleted accidentally.
>>> > >> But if the program wont delete the file, bind will fail , that
>>> means
>>> > >> we
>>> > >> have to delete the file manually before every start. that not a
>>> good
>>> > >>
>>> > >> option to maintain a system.
>>> > >>
>>> > >> 在 2022-04-24 18:05,Александр Поволоцкий
>>> > >> wrote:
>>> > >>> Unlink socket that can be in use? I think it's not a good idea.
>>> > >>>
>>> > >>> On 24.04.2022 12:25, shanlei at asiainfo.com wrote:
>>> > >>>>
>>> > >>>> hello,guys,
>>> > >>>>
>>> > >>>> We found if we add a unix socket listener, the file was left in
>>> > >> disk
>>> > >>>> when unit got shutdown.
>>> > >>>> If the unit starts again and load configuration from its state
>>> > >> folder,
>>> > >>>> it would fail with error msg "file exists",
>>> > >>>> so We think the proper process is to "delete the legacy unix
>>> > >> socket
>>> > >>>> before start", and we present following patch:
>>> > >>>>
>>> > >>>>
>>> > >>>> # HG changeset patch
>>> > >>>> # User stdanley <shanlei at asiainfo.com>
>>> > >>>> # Date 1650792235 -28800
>>> > >>>> # Sun Apr 24 17:23:55 2022 +0800
>>> > >>>> # Node ID 29738840c393f12c7d7aa8f3959ed1655b39cd4d
>>> > >>>> # Parent 8e06a879600e83af11345d023c53c2ca445cf82c
>>> > >>>> unlink legacy unix socket file before binding.
>>> > >>>>
>>> > >>>> diff -r 8e06a879600e -r 29738840c393 src/nxt_main_process.c
>>> > >>>> --- a/src/nxt_main_process.c Tue Apr 12 04:16:00 2022 +0100
>>> > >>>> +++ b/src/nxt_main_process.c Sun Apr 24 17:23:55 2022 +0800
>>> > >>>> @@ -1142,6 +1142,15 @@
>>> > >>>> }
>>> > >>>>
>>> > >>>> #endif
>>> > >>>> +#if (NXT_HAVE_UNIX_DOMAIN)
>>> > >>>> +
>>> > >>>> + if (sa->u.sockaddr.sa_family == AF_UNIX
>>> > >>>> + && sa->type == SOCK_STREAM
>>> > >>>> + && sa->u.sockaddr_un.sun_path[0] != '\0') {
>>> > >>>> +
>>> > >>>> + (void) unlink(sa->u.sockaddr_un.sun_path);
>>> > >>>> +}
>>> > >>>> +#endif
>>> > >>>>
>>> > >>>> if (bind(s, &sa->u.sockaddr, sa->socklen) != 0) {
>>> > >>>> err = nxt_errno;
>>> > >>>> _______________________________________________
>>> > >>>> unit mailing list -- unit at nginx.org
>>> > >>>> To unsubscribe send an email to unit-leave at nginx.org
>>> > >>> _______________________________________________
>>> > >>> unit mailing list -- unit at nginx.org
>>> > >>> To unsubscribe send an email to unit-leave at nginx.org
>>> > >> _______________________________________________
>>> > >> unit mailing list -- unit at nginx.org
>>> > >> To unsubscribe send an email to unit-leave at nginx.org
>>> > > _______________________________________________
>>> > > unit mailing list -- unit at nginx.org
>>> > > To unsubscribe send an email to unit-leave at nginx.org
>>> >
>>>
>>> >_______________________________________________
>>> >unit mailing list -- unit at nginx.org
>>> >To unsubscribe send an email to unit-leave at nginx.org
>>>
>>>
>>> --
>>> Cheers,
>>> Oleg A. Mamontov
>>>
>>> mailto: oleg at mamontov.net
>>>
>>> skype: lonerr11
>>> cell: +7 (903) 798-1352
>>> _______________________________________________
>>> unit mailing list -- unit at nginx.org
>>> To unsubscribe send an email to unit-leave at nginx.org
>>>
>>
>> _______________________________________________
>> unit mailing list -- unit at nginx.org
>> To unsubscribe send an email to unit-leave at nginx.org
>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.nginx.org/pipermail/unit/attachments/20220507/87f19336/attachment.htm>
More information about the unit
mailing list