Bug #11718
closedXMLRPC Client does not honor its default timeout value
100%
Description
I have traced an XMLRPC problem where I got a systematic mysterious error when starting a sync between my firewalls (on a dedicated crossover link) :
"A communications error occurred while attempting to call XMLRPC method host_firmware_version: @ 2021-03-19 16:30:45"
First, it turns out that the XMLRPC exception is not properly printed out which did not help to diagnose the problem. I made this simple change in xmlrpc_client.php :
- $this->error = "A communications error occurred while attempting to call XMLRPC method {$method}: " . $errormsg[1]; + $this->error = "A communications error occurred while attempting to call XMLRPC method {$method}: " . $e->getMessage();
With this patch things started to get more helpful, the error message turned into :
"A communications error occurred while attempting to call XMLRPC method restore_config_section: Request timed out due to default_socket_timeout php.ini setting"
It turns out that php.ini has no 'default_socket_timeout', and the internal default is 60s. As a quick test I added default_socket_timeout=240
in '/etc/rc.php_ini_setup' then restarted PHP-FPM. My sync finally worked, because it turned out that it took 107s to sync (I have 253 interfaces, maybe that's related).
I think that the XMLRPC client should at least call ini_set('default_socket_timeout', $timeout)
before invoking a remote method in order for it to honour its default 240s $timeout.