Browse Source

rpc: Split option -rpctimeout into -rpcservertimeout and -rpcclienttimeout

The two timeouts for the server and client, are essentially different:

- In the case of the server it should be a lower value to avoid clients
clogging up connection slots

- In the case of the client it should be a high value to accomedate slow
  responses from the server, for example for slow queries or when the
  lock is contended

Split the options into `-rpcservertimeout` and `-rpcclienttimeout` with
respective defaults of 30 and 900.
0.13
Wladimir J. van der Laan 9 years ago
parent
commit
2190ea6c4e
  1. 2
      contrib/debian/examples/bitcoin.conf
  2. 5
      src/bitcoin-cli.cpp
  3. 2
      src/httpserver.cpp
  4. 2
      src/httpserver.h
  5. 2
      src/init.cpp

2
contrib/debian/examples/bitcoin.conf vendored

@ -73,7 +73,7 @@
# How many seconds bitcoin will wait for a complete RPC HTTP request. # How many seconds bitcoin will wait for a complete RPC HTTP request.
# after the HTTP connection is established. # after the HTTP connection is established.
#rpctimeout=30 #rpcclienttimeout=30
# By default, only RPC connections from localhost are allowed. # By default, only RPC connections from localhost are allowed.
# Specify as many rpcallowip= settings as you like to allow connections from other hosts, # Specify as many rpcallowip= settings as you like to allow connections from other hosts,

5
src/bitcoin-cli.cpp

@ -22,6 +22,8 @@
using namespace std; using namespace std;
static const int DEFAULT_HTTP_CLIENT_TIMEOUT=900;
std::string HelpMessageCli() std::string HelpMessageCli()
{ {
string strUsage; string strUsage;
@ -37,6 +39,7 @@ std::string HelpMessageCli()
strUsage += HelpMessageOpt("-rpcwait", _("Wait for RPC server to start")); strUsage += HelpMessageOpt("-rpcwait", _("Wait for RPC server to start"));
strUsage += HelpMessageOpt("-rpcuser=<user>", _("Username for JSON-RPC connections")); strUsage += HelpMessageOpt("-rpcuser=<user>", _("Username for JSON-RPC connections"));
strUsage += HelpMessageOpt("-rpcpassword=<pw>", _("Password for JSON-RPC connections")); strUsage += HelpMessageOpt("-rpcpassword=<pw>", _("Password for JSON-RPC connections"));
strUsage += HelpMessageOpt("-rpcclienttimeout=<n>", strprintf(_("Timeout during HTTP requests (default: %d)"), DEFAULT_HTTP_CLIENT_TIMEOUT));
return strUsage; return strUsage;
} }
@ -150,7 +153,7 @@ UniValue CallRPC(const string& strMethod, const UniValue& params)
struct evhttp_connection *evcon = evhttp_connection_base_new(base, NULL, host.c_str(), port); // TODO RAII struct evhttp_connection *evcon = evhttp_connection_base_new(base, NULL, host.c_str(), port); // TODO RAII
if (evcon == NULL) if (evcon == NULL)
throw runtime_error("create connection failed"); throw runtime_error("create connection failed");
evhttp_connection_set_timeout(evcon, GetArg("-rpctimeout", 30)); evhttp_connection_set_timeout(evcon, GetArg("-rpcclienttimeout", DEFAULT_HTTP_CLIENT_TIMEOUT));
HTTPReply response; HTTPReply response;
struct evhttp_request *req = evhttp_request_new(http_request_done, (void*)&response); // TODO RAII struct evhttp_request *req = evhttp_request_new(http_request_done, (void*)&response); // TODO RAII

2
src/httpserver.cpp

@ -374,7 +374,7 @@ bool InitHTTPServer()
return false; return false;
} }
evhttp_set_timeout(http, GetArg("-rpctimeout", DEFAULT_HTTP_TIMEOUT)); evhttp_set_timeout(http, GetArg("-rpcservertimeout", DEFAULT_HTTP_SERVER_TIMEOUT));
evhttp_set_max_body_size(http, MAX_SIZE); evhttp_set_max_body_size(http, MAX_SIZE);
evhttp_set_gencb(http, http_request_cb, NULL); evhttp_set_gencb(http, http_request_cb, NULL);

2
src/httpserver.h

@ -13,7 +13,7 @@
static const int DEFAULT_HTTP_THREADS=4; static const int DEFAULT_HTTP_THREADS=4;
static const int DEFAULT_HTTP_WORKQUEUE=16; static const int DEFAULT_HTTP_WORKQUEUE=16;
static const int DEFAULT_HTTP_TIMEOUT=30; static const int DEFAULT_HTTP_SERVER_TIMEOUT=30;
struct evhttp_request; struct evhttp_request;
struct event_base; struct event_base;

2
src/init.cpp

@ -440,7 +440,7 @@ std::string HelpMessage(HelpMessageMode mode)
strUsage += HelpMessageOpt("-rpcthreads=<n>", strprintf(_("Set the number of threads to service RPC calls (default: %d)"), DEFAULT_HTTP_THREADS)); strUsage += HelpMessageOpt("-rpcthreads=<n>", strprintf(_("Set the number of threads to service RPC calls (default: %d)"), DEFAULT_HTTP_THREADS));
if (showDebug) { if (showDebug) {
strUsage += HelpMessageOpt("-rpcworkqueue=<n>", strprintf("Set the depth of the work queue to service RPC calls (default: %d)", DEFAULT_HTTP_WORKQUEUE)); strUsage += HelpMessageOpt("-rpcworkqueue=<n>", strprintf("Set the depth of the work queue to service RPC calls (default: %d)", DEFAULT_HTTP_WORKQUEUE));
strUsage += HelpMessageOpt("-rpctimeout=<n>", strprintf("Timeout during HTTP requests (default: %d)", DEFAULT_HTTP_TIMEOUT)); strUsage += HelpMessageOpt("-rpcservertimeout=<n>", strprintf("Timeout during HTTP requests (default: %d)", DEFAULT_HTTP_SERVER_TIMEOUT));
} }
if (mode == HMM_BITCOIN_QT) if (mode == HMM_BITCOIN_QT)

Loading…
Cancel
Save