THIS IS AN AUTOMATED MESSAGE, DO NOT REPLY.
The following task has been changed. The changes are listed below. For full information
about what has changed, visit the URL and click the History tab.
FS#66 - In daemonize mode parent process should exit with error (-1) if main process fails
to start
User who did this: IƱaki Baz Castillo (ibc)
Summary: Kamailio/SIP-Router should return error (255) when cannot assign requested
address even in fork mode -> In daemonize mode parent process should exit with error
(-1) if main process fails to start
Task details edited:
-------
Hi, there is an issue which prevents SR/Kamailio to being managed by software as HeartBeat
(which mostly relies on init script return codes):
Let's suppose we configure SR to work in daemonize mode and to bind into a wrong
address (i.e. a virtual address which for some reason is down in the server). When running
it an error would be logged:
ERROR:core:udp_init: bind(6, 0x813f414, 16) on 1.2.3.4: Cannot assign requested address
However the command returns 0. This is ugly as it would indicate that the server has
started correctly while in fact it's not running.
This occurs because the sockets are initialized after daemonizing so the SR main process
is forked before detecting such address error. Then the parent process (that we started by
executing the command) knows nothing about the failure and just returns 0.
Ok, so how to improve it? I asked for the same feature for Unicorn http server (a very
robust http server writen in Ruby which is used by Github along with other sites):
http://unicorn.bogomips.org/
The author implemented this feature, and the same could be implemented in SR. The
mechanism is as follows (very simple and robust):
* The parent process (launched from a controlling terminal or script) shares a pipe with
the SR master process. The parent process reads in the pipe and the master process will
write into it.
* The parent process will wait until the master process is ready before returning. It
will listen into the pipe until it received data from the master process, or until the
pipe is closed by the master process:
* If the master process determines the server can run (no errors) it will communicate
it to the parent process via the shared pipe. Then the parent process exits with 0 (OK).
* If instead the master process fails to start (i.e. "Cannot assign requested
address") it will close the shared pipe. The parent process would detect such error
(as the 'read' function would exit with error) and then it would exit with -1
(error).
I will try to implement it by myself, but would prefer to hear your opinions first :)
-------
Percent Complete: 0% -> 50%
More information can be found at the following URL:
http://sip-router.org/tracker/index.php?do=details&task_id=66
You are receiving this message because you have requested it from the Flyspray bugtracking
system. If you did not expect this message or don't want to receive mails in future,
you can change your notification settings at the URL shown above.