1
0
mirror of https://github.com/OpenNebula/one.git synced 2025-03-16 22:50:10 +03:00

F #2147: Better timeouts for xml-rpc clients. Updated oned.conf with default

XML-RPC timeout.
This commit is contained in:
Ruben S. Montero 2018-06-02 12:53:02 +02:00
parent c85af8fc54
commit 53fe56a991
2 changed files with 28 additions and 10 deletions

View File

@ -161,7 +161,7 @@ RAFT = [
LOG_PURGE_TIMEOUT = 600,
ELECTION_TIMEOUT_MS = 2500,
BROADCAST_TIMEOUT_MS = 500,
XMLRPC_TIMEOUT_MS = 0
XMLRPC_TIMEOUT_MS = 450
]
# Executed when a server transits from follower->leader

View File

@ -240,32 +240,50 @@ int Client::call(const std::string& endpoint, const std::string& method,
const xmlrpc_c::paramList& plist, unsigned int _timeout,
xmlrpc_c::value * const result, std::string& error)
{
xmlrpc_c::clientXmlTransport_curl transport(
xmlrpc_c::clientXmlTransport_curl::constrOpt().timeout(_timeout));
// Transport timeouts are not reliably implemented, interrupt flag and async
// client performs better.
// xmlrpc_c::clientXmlTransport_curl transport(
// xmlrpc_c::clientXmlTransport_curl::constrOpt().timeout(_timeout));
xmlrpc_c::clientXmlTransport_curl transport;
xmlrpc_c::carriageParm_curl0 carriage(endpoint);
xmlrpc_c::client_xml client(&transport);
xmlrpc_c::rpcPtr rpc_client(method, plist);
int xml_rc = 0;
int xml_rc = 0;
int int_flag = 0;
try
{
rpc_client->start(&client, &carriage);
client.finishAsync(xmlrpc_c::timeout());
client.setInterrupt(&int_flag);
if ( rpc_client->isSuccessful() )
client.finishAsync(_timeout);
if ( rpc_client->isFinished() )
{
*result = rpc_client->getResult();
if ( rpc_client->isSuccessful() )
{
*result = rpc_client->getResult();
}
else //RPC failed
{
xmlrpc_c::fault failure = rpc_client->getFault();
error = failure.getDescription();
xml_rc = -1;
}
}
else //RPC failed
else //rpc not finished. Interrupt it
{
xmlrpc_c::fault failure = rpc_client->getFault();
int_flag = 1;
error = failure.getDescription();
error = "RPC call timed out and aborted";
xml_rc = -1;
client.finishAsync(xmlrpc_c::timeout());
}
}
catch (exception const& e)