Description

The permissions module has two reload RPC commands, permissions.addressReload which reloads the address table, and permissions.trustedReload, which reloads the trusted table.

The module parameter reload_delta exists to prevent concurrent reloading of a single table:

3.25. reload_delta (int)

The number of seconds that have to be waited before executing a new RPC reload. By default there is a rate limiting of maximum one reload in five seconds.

If set to 0, no rate limit is configured. Note carefully: use this configuration only in tests environments because executing two RPC reloads of the same table at the same time can cause to kamailio to crash.

If one of the reload rpc commands is issues (i.e. permissions.addressReload), then the OTHER reload command (permissions.trustedReload) will be blocked, despite acting against two separate tables.

Troubleshooting

Reproduced the issue.

Reproduction

(DB config for permissions module omitted for brevity)

loadmodule "rtimer.so"
loadmodule "permissions.so"
loadmodule "jsonrpcs"

modparamx("rtimer", "timer", "name=permissions_reload;mode=0;interval=300")
modparam("rtimer", "exec", "timer=permissions_reload;route=RELOAD_PERMISSIONS")


route[RELOAD_PERMISSIONS] {
    xnotice("Reloading trusted records\n");
    jsonrpc_exec('{"jsonrpc": "2.0", "method": "permissions.trustedReload", "id": 1}');
    xalert("jsonrpc response code: $jsonrpl(code) - the body is: $jsonrpl(body)\n");

    xnotice("Reloading addresses\n");
    jsonrpc_exec('{"jsonrpc": "2.0", "method": "permissions.addressReload", "id": 1}');
    xalert("jsonrpc response code: $jsonrpl(code) - the body is: $jsonrpl(body)\n");

}

Debugging Data

The above config yields output like this:

2(8) NOTICE: <script>: Reloading trusted records
2(8) ALERT: <script>: jsonrpc response code: 200 - the body is: {
    "jsonrpc":      "2.0",
    "result":       "Reload OK",
    "id":   1
}
2(8) NOTICE: <script>: Reloading addresses
2(8) ERROR: permissions [rpc.c:42]: rpc_check_reload(): ongoing reload
2(8) ALERT: <script>: jsonrpc response code: 500 - the body is: {
    "jsonrpc":      "2.0",
    "error":        {
        "code": 500,
        "message":      "ongoing reload"
    },
    "id":   1
}

Possible Solutions

Ideally each reload would be tracked separately. This could possibly involve separate reload_delta parameters for each table (although it seems excessive to change the interface).

It's also possible that this behavior is by design, in which case, clarification of the documentation for the reload_delta parameter would be nice.

Additional Information

Problem occurs in kamailio 5.6.2. Likely within all version since the reload_delta parameter was added.

Tested in Alpine, but OS seems irrelevant.


Reply to this email directly, view it on GitHub, or unsubscribe.
You are receiving this because you are subscribed to this thread.Message ID: <kamailio/kamailio/issues/3318@github.com>