Browse Source

[REST] give an appropriate response in warmup phase

0.10
Jonas Schnelli 10 years ago
parent
commit
78bdc8103f
  1. 4
      src/rest.cpp
  2. 1
      src/rpcprotocol.h
  3. 8
      src/rpcserver.cpp
  4. 3
      src/rpcserver.h

4
src/rest.cpp

@ -188,6 +188,10 @@ bool HTTPReq_REST(AcceptedConnection *conn,
bool fRun) bool fRun)
{ {
try { try {
std::string statusmessage;
if(RPCIsInWarmup(&statusmessage))
throw RESTERR(HTTP_SERVICE_UNAVAILABLE, "Service temporarily unavailable: "+statusmessage);
for (unsigned int i = 0; i < ARRAYLEN(uri_prefixes); i++) { for (unsigned int i = 0; i < ARRAYLEN(uri_prefixes); i++) {
unsigned int plen = strlen(uri_prefixes[i].prefix); unsigned int plen = strlen(uri_prefixes[i].prefix);
if (strURI.substr(0, plen) == uri_prefixes[i].prefix) { if (strURI.substr(0, plen) == uri_prefixes[i].prefix) {

1
src/rpcprotocol.h

@ -28,6 +28,7 @@ enum HTTPStatusCode
HTTP_FORBIDDEN = 403, HTTP_FORBIDDEN = 403,
HTTP_NOT_FOUND = 404, HTTP_NOT_FOUND = 404,
HTTP_INTERNAL_SERVER_ERROR = 500, HTTP_INTERNAL_SERVER_ERROR = 500,
HTTP_SERVICE_UNAVAILABLE = 503,
}; };
//! Bitcoin RPC error codes //! Bitcoin RPC error codes

8
src/rpcserver.cpp

@ -756,6 +756,14 @@ void SetRPCWarmupFinished()
fRPCInWarmup = false; fRPCInWarmup = false;
} }
bool RPCIsInWarmup(std::string *outStatus)
{
LOCK(cs_rpcWarmup);
if (outStatus)
*outStatus = rpcWarmupStatus;
return fRPCInWarmup;
}
void RPCRunHandler(const boost::system::error_code& err, boost::function<void(void)> func) void RPCRunHandler(const boost::system::error_code& err, boost::function<void(void)> func)
{ {
if (!err) if (!err)

3
src/rpcserver.h

@ -53,6 +53,9 @@ void SetRPCWarmupStatus(const std::string& newStatus);
/* Mark warmup as done. RPC calls will be processed from now on. */ /* Mark warmup as done. RPC calls will be processed from now on. */
void SetRPCWarmupFinished(); void SetRPCWarmupFinished();
/* returns the current warmup state. */
bool RPCIsInWarmup(std::string *statusOut);
/** /**
* Type-check arguments; throws JSONRPCError if wrong type given. Does not check that * Type-check arguments; throws JSONRPCError if wrong type given. Does not check that
* the right number of arguments are passed, just that any passed are the correct type. * the right number of arguments are passed, just that any passed are the correct type.

Loading…
Cancel
Save