THIS IS AN AUTOMATED MESSAGE, DO NOT REPLY.
A new Flyspray task has been opened. Details are below.
User who did this - IƱaki Baz Castillo (ibc)
Attached to Project - sip-router
Summary - Kamailio/SIP-Router should return error (255) when cannot assign requested
address even in fork mode
Task Type - Improvement
Category - Core
Status - Assigned
Assigned To - Andrei Pelinescu-Onciul
Operating System - All
Severity - Low
Priority - Normal
Reported Version - Development
Due in Version - Undecided
Due Date - Undecided
Details - 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 fork=yes mode (of course) 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 :)
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.