[sr-dev] question on RPC script reload: how is it invoked in the workers?

Anthony Alba ascanio.alba7 at gmail.com
Wed Feb 21 00:45:31 CET 2018


On Tue, Feb 20, 2018 at 04:35:01PM +0100, Daniel-Constantin Mierla wrote:
> the script reload mechanism relies on a counter (version number) stored
> in shared memory. It is set to 0 when kamailio start and increased with
> each RPC reload command.
> 
> Each worker process has a copy of the value in a local variable.
> 
> When a worker process is executing a script, it checks if the local
> value matches the one from shared memory. If different, then it should
> reload the script before executing it.

Hi, I cannot see the reload taking effect in the workers, only in the child of rank -2

I have a test script that prints out a "version" number. When I increment
the version number and use kamcmd app_python.reload I can see it reloaded in
one child (rank -2, RPC server?). The other workers don't seem to check the version number and
reload themselves.

# Start: version == 9
# this from master: 9 is version
INFO: <core> [core/kemi.c:91]: sr_kemi_core_info(): 9 /usr/local/etc/kamailio/handler.py is loaded

# this from each child, 9 is version, last digit is rank of child
INFO: <core> [core/kemi.c:91]: sr_kemi_core_info(): 9 child is launched 0
INFO: <core> [core/kemi.c:91]: sr_kemi_core_info(): 9 child is launched 1
INFO: <core> [core/kemi.c:91]: sr_kemi_core_info(): 9 child is launched 2

# process some SIP... print version:rank and From: header
# it seems that the SIP workers are ranks 1,2 not -2
INFO: <core> [core/kemi.c:91]: sr_kemi_core_info(): 9:1 <sip:testing at example.com>;tag=5aecee01-7109-481d-9b20-4beab44f0928
# repeat until all workers have at least run the script once
 
# Update: version == 10, reload script...

INFO: app_python3 [apy_kemi.c:1204]: app_python_rpc_reload(): marking for reload js script file: /usr/local/etc/kamailio/handler.py (0 => 0)
INFO: <core> [core/kemi.c:91]: sr_kemi_core_info(): 10 /usr/local/etc/kamailio/handler.py is loaded
INFO: <core> [core/kemi.c:91]: sr_kemi_core_info(): 10 child is launched -2

I see that the child of rank -2 has reloaded and prints 10 (the new version)
However workers of rank 1, 2 use old script (the RPC reload command is not propagated)
# from worker 2
INFO: <core> [core/kemi.c:91]: sr_kemi_core_info(): 9:2 <sip:testing at example.com>;tag=8eb80965-879d-4cef-bcc0-76e45e485821

The script version is checked in apy_reload_script(); this seems to be run directly in the RPC server(?)(rank: -2) but
I can't see where it schedules apy_reload_script() in the other workers.

Anthony




More information about the sr-dev mailing list