diff options
author | Wladimir J. van der Laan <laanwj@gmail.com> | 2014-11-04 16:14:50 +0100 |
---|---|---|
committer | Wladimir J. van der Laan <laanwj@gmail.com> | 2014-11-04 16:18:15 +0100 |
commit | 06037f3f46463e65ab74e0f34ba5f7a869d053fd (patch) | |
tree | 398bb1aa204787adab42b54dc5ccfe982d5c6419 /src/rpcserver.cpp | |
parent | 70d80cc7bf89211a5aa157cb624fff3b7097c48e (diff) | |
parent | af82884ab7c485c8b4c5ac93c308127c39c196be (diff) |
Merge pull request #5007
af82884 Add "warmup mode" for RPC server. (Daniel Kraft)
Diffstat (limited to 'src/rpcserver.cpp')
-rw-r--r-- | src/rpcserver.cpp | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/src/rpcserver.cpp b/src/rpcserver.cpp index 08ed73f6de..cc80887ba4 100644 --- a/src/rpcserver.cpp +++ b/src/rpcserver.cpp @@ -34,6 +34,10 @@ using namespace std; static std::string strRPCUserColonPass; static bool fRPCRunning = false; +static bool fRPCInWarmup = true; +static std::string rpcWarmupStatus("RPC server started"); +static CCriticalSection cs_rpcWarmup; + //! These are created by StartRPCThreads, destroyed in StopRPCThreads static asio::io_service* rpc_io_service = NULL; static map<string, boost::shared_ptr<deadline_timer> > deadlineTimers; @@ -744,6 +748,19 @@ bool IsRPCRunning() return fRPCRunning; } +void SetRPCWarmupStatus(const std::string& newStatus) +{ + LOCK(cs_rpcWarmup); + rpcWarmupStatus = newStatus; +} + +void SetRPCWarmupFinished() +{ + LOCK(cs_rpcWarmup); + assert(fRPCInWarmup); + fRPCInWarmup = false; +} + void RPCRunHandler(const boost::system::error_code& err, boost::function<void(void)> func) { if (!err) @@ -870,6 +887,13 @@ static bool HTTPReq_JSONRPC(AcceptedConnection *conn, if (!read_string(strRequest, valRequest)) throw JSONRPCError(RPC_PARSE_ERROR, "Parse error"); + // Return immediately if in warmup + { + LOCK(cs_rpcWarmup); + if (fRPCInWarmup) + throw JSONRPCError(RPC_IN_WARMUP, rpcWarmupStatus); + } + string strReply; // singleton request |