mirror of
https://github.com/XRPLF/rippled.git
synced 2025-11-26 22:15:52 +00:00
Fix network state reporting in server and client.
This commit is contained in:
@@ -33,6 +33,18 @@ NetworkOPs::NetworkOPs(boost::asio::io_service& io_service, LedgerMaster* pLedge
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string NetworkOPs::strOperatingMode()
|
||||||
|
{
|
||||||
|
static const char* paStatusToken[] = {
|
||||||
|
"disconnected",
|
||||||
|
"connected",
|
||||||
|
"tracking",
|
||||||
|
"full"
|
||||||
|
};
|
||||||
|
|
||||||
|
return paStatusToken[mMode];
|
||||||
|
}
|
||||||
|
|
||||||
boost::posix_time::ptime NetworkOPs::getNetworkTimePT()
|
boost::posix_time::ptime NetworkOPs::getNetworkTimePT()
|
||||||
{
|
{
|
||||||
int offset = 0;
|
int offset = 0;
|
||||||
@@ -871,17 +883,12 @@ void NetworkOPs::setMode(OperatingMode om)
|
|||||||
if ((om >= omCONNECTED) && (mMode == omDISCONNECTED))
|
if ((om >= omCONNECTED) && (mMode == omDISCONNECTED))
|
||||||
mConnectTime = boost::posix_time::second_clock::universal_time();
|
mConnectTime = boost::posix_time::second_clock::universal_time();
|
||||||
|
|
||||||
Log lg((om < mMode) ? lsWARNING : lsINFO);
|
mMode = om;
|
||||||
if (om == omDISCONNECTED)
|
|
||||||
lg << "STATE->Disconnected";
|
Log lg((om < mMode) ? lsWARNING : lsINFO);
|
||||||
else if (om == omCONNECTED)
|
|
||||||
lg << "STATE->Connected";
|
lg << "STATE->" << strOperatingMode();
|
||||||
else if (om == omTRACKING)
|
|
||||||
lg << "STATE->Tracking";
|
|
||||||
else
|
|
||||||
lg << "STATE->Full";
|
|
||||||
|
|
||||||
if ((om == omDISCONNECTED) || (mMode == omDISCONNECTED))
|
|
||||||
{
|
{
|
||||||
boost::recursive_mutex::scoped_lock sl(mMonitorLock);
|
boost::recursive_mutex::scoped_lock sl(mMonitorLock);
|
||||||
|
|
||||||
@@ -889,8 +896,8 @@ void NetworkOPs::setMode(OperatingMode om)
|
|||||||
{
|
{
|
||||||
Json::Value jvObj(Json::objectValue);
|
Json::Value jvObj(Json::objectValue);
|
||||||
|
|
||||||
jvObj["type"] = "serverStatus";
|
jvObj["type"] = "serverStatus";
|
||||||
jvObj["server_status"] = om >= omCONNECTED ? "ok" : "noNetwork";
|
jvObj["server_status"] = strOperatingMode();
|
||||||
|
|
||||||
BOOST_FOREACH(InfoSub* ispListener, mSubServer)
|
BOOST_FOREACH(InfoSub* ispListener, mSubServer)
|
||||||
{
|
{
|
||||||
@@ -898,8 +905,6 @@ void NetworkOPs::setMode(OperatingMode om)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mMode = om;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -124,10 +124,7 @@ public:
|
|||||||
uint32 getLedgerID(const uint256& hash);
|
uint32 getLedgerID(const uint256& hash);
|
||||||
uint32 getCurrentLedgerID();
|
uint32 getCurrentLedgerID();
|
||||||
OperatingMode getOperatingMode() { return mMode; }
|
OperatingMode getOperatingMode() { return mMode; }
|
||||||
inline bool available() {
|
std::string strOperatingMode();
|
||||||
// XXX Later this can be relaxed to omCONNECTED
|
|
||||||
return mMode >= omTRACKING;
|
|
||||||
}
|
|
||||||
|
|
||||||
Ledger::pointer getClosedLedger() { return mLedgerMaster->getClosedLedger(); }
|
Ledger::pointer getClosedLedger() { return mLedgerMaster->getClosedLedger(); }
|
||||||
Ledger::pointer getCurrentLedger() { return mLedgerMaster->getCurrentLedger(); }
|
Ledger::pointer getCurrentLedger() { return mLedgerMaster->getCurrentLedger(); }
|
||||||
|
|||||||
@@ -2101,21 +2101,24 @@ Json::Value RPCHandler::doSubscribe(Json::Value jvRequest)
|
|||||||
if(streamName=="server")
|
if(streamName=="server")
|
||||||
{
|
{
|
||||||
mNetOps->subServer(mInfoSub, jvResult);
|
mNetOps->subServer(mInfoSub, jvResult);
|
||||||
jvResult["server_status"] = mNetOps->available() ? "ok" : "noNetwork";
|
jvResult["server_status"] = mNetOps->strOperatingMode();
|
||||||
}else if(streamName=="ledger")
|
|
||||||
|
} else if(streamName=="ledger")
|
||||||
{
|
{
|
||||||
mNetOps->subLedger(mInfoSub, jvResult);
|
mNetOps->subLedger(mInfoSub, jvResult);
|
||||||
}else if(streamName=="transactions")
|
|
||||||
|
} else if(streamName=="transactions")
|
||||||
{
|
{
|
||||||
mNetOps->subTransactions(mInfoSub);
|
mNetOps->subTransactions(mInfoSub);
|
||||||
}else if(streamName=="rt_transactions")
|
|
||||||
|
} else if(streamName=="rt_transactions")
|
||||||
{
|
{
|
||||||
mNetOps->subRTTransactions(mInfoSub);
|
mNetOps->subRTTransactions(mInfoSub);
|
||||||
}else
|
}
|
||||||
{
|
else {
|
||||||
jvResult["error"] = str(boost::format("Unknown stream: %s") % streamName);
|
jvResult["error"] = str(boost::format("Unknown stream: %s") % streamName);
|
||||||
}
|
}
|
||||||
}else
|
} else
|
||||||
{
|
{
|
||||||
jvResult["error"] = "malformedSteam";
|
jvResult["error"] = "malformedSteam";
|
||||||
}
|
}
|
||||||
@@ -2362,7 +2365,9 @@ Json::Value RPCHandler::doCommand(Json::Value& jvRequest, int iRole)
|
|||||||
{
|
{
|
||||||
return rpcError(rpcNO_EVENTS);
|
return rpcError(rpcNO_EVENTS);
|
||||||
}
|
}
|
||||||
else if ((commandsA[i].iOptions & optNetwork) && !mNetOps->available())
|
else if (commandsA[i].iOptions & optNetwork
|
||||||
|
&& mNetOps->getOperatingMode() != NetworkOPs::omTRACKING
|
||||||
|
&& mNetOps->getOperatingMode() != NetworkOPs::omFULL)
|
||||||
{
|
{
|
||||||
return rpcError(rpcNO_NETWORK);
|
return rpcError(rpcNO_NETWORK);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -289,6 +289,7 @@ Remote.prototype._set_state = function (state) {
|
|||||||
this.state = state;
|
this.state = state;
|
||||||
|
|
||||||
this.emit('state', state);
|
this.emit('state', state);
|
||||||
|
|
||||||
switch (state) {
|
switch (state) {
|
||||||
case 'online':
|
case 'online':
|
||||||
this.online_state = 'open';
|
this.online_state = 'open';
|
||||||
@@ -499,7 +500,11 @@ Remote.prototype._connect_message = function (ws, json) {
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case 'serverStatus':
|
case 'serverStatus':
|
||||||
this._set_state(message.server_status === 'ok' ? 'online' : 'offline');
|
// This message is only received when online. As we are connected, it is the definative final state.
|
||||||
|
this._set_state(
|
||||||
|
message.server_status === 'tracking' || message.server_status === 'full'
|
||||||
|
? 'online'
|
||||||
|
: 'offline');
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// All other messages
|
// All other messages
|
||||||
@@ -861,7 +866,7 @@ Remote.prototype._server_subscribe = function () {
|
|||||||
self.emit('ledger_closed', message);
|
self.emit('ledger_closed', message);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (message.server_status === "ok") {
|
if (message.server_status === 'tracking' || message.server_status === 'full') {
|
||||||
self._set_state('online');
|
self._set_state('online');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user