From d398c5bb02ac82332e846b3abb6c6d54826fa93c Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Tue, 15 Jan 2013 17:03:00 -0800 Subject: [PATCH 01/10] Don't show our validation key in non-admin server_info. --- src/cpp/ripple/NetworkOPs.cpp | 11 ++++++++--- src/cpp/ripple/NetworkOPs.h | 2 +- src/cpp/ripple/RPCHandler.cpp | 2 +- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/cpp/ripple/NetworkOPs.cpp b/src/cpp/ripple/NetworkOPs.cpp index 3fdebeb7e..f0020b0b6 100644 --- a/src/cpp/ripple/NetworkOPs.cpp +++ b/src/cpp/ripple/NetworkOPs.cpp @@ -1093,7 +1093,7 @@ bool NetworkOPs::recvValidation(const SerializedValidation::pointer& val) return theApp->getValidations().addValidation(val); } -Json::Value NetworkOPs::getServerInfo() +Json::Value NetworkOPs::getServerInfo(bool admin) { Json::Value info = Json::objectValue; @@ -1111,8 +1111,13 @@ Json::Value NetworkOPs::getServerInfo() if (mNeedNetworkLedger) info["network_ledger"] = "waiting"; - if (theConfig.VALIDATION_PUB.isValid()) - info["pubkey_validator"] = theConfig.VALIDATION_PUB.humanNodePublic(); + if (admin) + { + if (theConfig.VALIDATION_PUB.isValid()) + info["pubkey_validator"] = theConfig.VALIDATION_PUB.humanNodePublic(); + else + info["pubkey_validator"] = "none"; + } info["pubkey_node"] = theApp->getWallet().getNodePublic().humanNodePublic(); diff --git a/src/cpp/ripple/NetworkOPs.h b/src/cpp/ripple/NetworkOPs.h index 3101880dd..ffaeb3873 100644 --- a/src/cpp/ripple/NetworkOPs.h +++ b/src/cpp/ripple/NetworkOPs.h @@ -243,7 +243,7 @@ public: int getPreviousConvergeTime() { return mLastCloseConvergeTime; } uint32 getLastCloseTime() { return mLastCloseTime; } void setLastCloseTime(uint32 t) { mLastCloseTime = t; } - Json::Value getServerInfo(); + Json::Value getServerInfo(bool admin); uint32 acceptLedger(); boost::unordered_map >& peekStoredProposals() { return mStoredProposals; } diff --git a/src/cpp/ripple/RPCHandler.cpp b/src/cpp/ripple/RPCHandler.cpp index 85a50fb00..5a41eb5f8 100644 --- a/src/cpp/ripple/RPCHandler.cpp +++ b/src/cpp/ripple/RPCHandler.cpp @@ -1305,7 +1305,7 @@ Json::Value RPCHandler::doServerInfo(Json::Value) { Json::Value ret(Json::objectValue); - ret["info"] = theApp->getOPs().getServerInfo(); + ret["info"] = theApp->getOPs().getServerInfo(mRole == ADMIN); return ret; } From fb3e2e8af4e5925d3df0e26154e919cae67ba791 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Tue, 15 Jan 2013 17:09:57 -0800 Subject: [PATCH 02/10] Fix a crash bug Arthur reported. --- src/cpp/ripple/LedgerMaster.cpp | 1 + src/cpp/ripple/LedgerMaster.h | 12 ++++++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/cpp/ripple/LedgerMaster.cpp b/src/cpp/ripple/LedgerMaster.cpp index 86e690b2e..60b5b464c 100644 --- a/src/cpp/ripple/LedgerMaster.cpp +++ b/src/cpp/ripple/LedgerMaster.cpp @@ -128,6 +128,7 @@ TER LedgerMaster::doTransaction(const SerializedTransaction& txn, TransactionEng bool LedgerMaster::haveLedgerRange(uint32 from, uint32 to) { + boost::recursive_mutex::scoped_lock sl(mLock); uint32 prevMissing = mCompleteLedgers.prevMissing(to + 1); return (prevMissing == RangeSet::RangeSetAbsent) || (prevMissing < from); } diff --git a/src/cpp/ripple/LedgerMaster.h b/src/cpp/ripple/LedgerMaster.h index ebb10d227..35b1d0acd 100644 --- a/src/cpp/ripple/LedgerMaster.h +++ b/src/cpp/ripple/LedgerMaster.h @@ -82,7 +82,11 @@ public: void switchLedgers(Ledger::ref lastClosed, Ledger::ref newCurrent); - std::string getCompleteLedgers() { return mCompleteLedgers.toString(); } + std::string getCompleteLedgers() + { + boost::recursive_mutex::scoped_lock sl(mLock); + return mCompleteLedgers.toString(); + } Ledger::pointer closeLedger(bool recoverHeldTransactions); @@ -108,7 +112,11 @@ public: return mLedgerHistory.getLedgerByHash(hash); } - void setLedgerRangePresent(uint32 minV, uint32 maxV) { mCompleteLedgers.setRange(minV, maxV); } + void setLedgerRangePresent(uint32 minV, uint32 maxV) + { + boost::recursive_mutex::scoped_lock sl(mLock); + mCompleteLedgers.setRange(minV, maxV); + } void addHeldTransaction(const Transaction::pointer& trans); void fixMismatch(Ledger::ref ledger); From 01b3e9e0ae44f3c57f4a3153df26ed9a2c7bf77e Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Tue, 15 Jan 2013 19:05:30 -0800 Subject: [PATCH 03/10] Add 'getValidatedLedger' to get the last fully-validated ledger. We should probably audit calls to 'getClosedLedger' to see if they should use this instead. --- src/cpp/ripple/LedgerMaster.h | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/cpp/ripple/LedgerMaster.h b/src/cpp/ripple/LedgerMaster.h index 35b1d0acd..514b05551 100644 --- a/src/cpp/ripple/LedgerMaster.h +++ b/src/cpp/ripple/LedgerMaster.h @@ -67,10 +67,13 @@ public: ScopedLock getLock() { return ScopedLock(mLock); } // The current ledger is the ledger we believe new transactions should go in - Ledger::ref getCurrentLedger() { return mCurrentLedger; } + Ledger::ref getCurrentLedger() { return mCurrentLedger; } // The finalized ledger is the last closed/accepted ledger - Ledger::ref getClosedLedger() { return mFinalizedLedger; } + Ledger::ref getClosedLedger() { return mFinalizedLedger; } + + // The published ledger is the last fully validated ledger + Ledger::ref getValidatedLedger() { return mPubLedger; } TER doTransaction(const SerializedTransaction& txn, TransactionEngineParams params); From 8191153dce70361684fb65b25c0f4d5521600da4 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Tue, 15 Jan 2013 19:16:20 -0800 Subject: [PATCH 04/10] Split into server_info (for humans) and server_state (for machines). Allow either without admin privileges, filter information out from non-admins. Cleanup and improve data in all cases. --- src/cpp/ripple/CallRPC.cpp | 1 + src/cpp/ripple/NetworkOPs.cpp | 55 ++++++++++++++++++++++++++--------- src/cpp/ripple/NetworkOPs.h | 3 +- src/cpp/ripple/RPCHandler.cpp | 14 +++++++-- src/cpp/ripple/RPCHandler.h | 3 +- 5 files changed, 59 insertions(+), 17 deletions(-) diff --git a/src/cpp/ripple/CallRPC.cpp b/src/cpp/ripple/CallRPC.cpp index b64f94ab6..424f64a73 100644 --- a/src/cpp/ripple/CallRPC.cpp +++ b/src/cpp/ripple/CallRPC.cpp @@ -492,6 +492,7 @@ Json::Value RPCParser::parseCommand(std::string strMethod, Json::Value jvParams) { "sign", &RPCParser::parseSignSubmit, 2, 2 }, { "submit", &RPCParser::parseSignSubmit, 1, 2 }, { "server_info", &RPCParser::parseAsIs, 0, 0 }, + { "server_state", &RPCParser::parseAsIs, 0, 0 }, { "stop", &RPCParser::parseAsIs, 0, 0 }, // { "transaction_entry", &RPCParser::parseTransactionEntry, -1, -1 }, { "tx", &RPCParser::parseTx, 1, 1 }, diff --git a/src/cpp/ripple/NetworkOPs.cpp b/src/cpp/ripple/NetworkOPs.cpp index f0020b0b6..e74374df9 100644 --- a/src/cpp/ripple/NetworkOPs.cpp +++ b/src/cpp/ripple/NetworkOPs.cpp @@ -1093,7 +1093,7 @@ bool NetworkOPs::recvValidation(const SerializedValidation::pointer& val) return theApp->getValidations().addValidation(val); } -Json::Value NetworkOPs::getServerInfo(bool admin) +Json::Value NetworkOPs::getServerInfo(bool human, bool admin) { Json::Value info = Json::objectValue; @@ -1126,29 +1126,58 @@ Json::Value NetworkOPs::getServerInfo(bool admin) Json::Value lastClose = Json::objectValue; lastClose["proposers"] = theApp->getOPs().getPreviousProposers(); - lastClose["converge_time"] = static_cast(theApp->getOPs().getPreviousConvergeTime()) / 1000.0; + if (human) + lastClose["converge_time_s"] = static_cast(theApp->getOPs().getPreviousConvergeTime()) / 1000.0; + else + lastClose["converge_time"] = Json::Int(theApp->getOPs().getPreviousConvergeTime()); info["last_close"] = lastClose; // if (mConsensus) // info["consensus"] = mConsensus->getJson(); - info["load"] = theApp->getJobQueue().getJson(); - info["load_factor"] = - static_cast(theApp->getFeeTrack().getLoadBase()) / theApp->getFeeTrack().getLoadFactor(); + if (admin) + info["load"] = theApp->getJobQueue().getJson(); + + if (!human) + { + info["load_base"] = theApp->getFeeTrack().getLoadBase(); + info["load_factor"] = theApp->getFeeTrack().getLoadFactor(); + } + else + info["load_factor"] = + static_cast(theApp->getFeeTrack().getLoadBase()) / theApp->getFeeTrack().getLoadFactor(); + + bool valid = false; + Ledger::pointer lpClosed = getValidatedLedger(); + if (lpClosed) + valid = true; + else + lpClosed = getClosedLedger(); - Ledger::pointer lpClosed = getClosedLedger(); if (lpClosed) { uint64 baseFee = lpClosed->getBaseFee(); uint64 baseRef = lpClosed->getReferenceFeeUnits(); Json::Value l(Json::objectValue); - l["seq"] = Json::UInt(lpClosed->getLedgerSeq()); - l["hash"] = lpClosed->getHash().GetHex(); - l["base_fee"] = static_cast(Json::UInt(baseFee)) / SYSTEM_CURRENCY_PARTS; - l["reserve_base"] = - static_cast(Json::UInt(lpClosed->getReserve(0) * baseFee / baseRef)) / SYSTEM_CURRENCY_PARTS; - l["reserve_inc"] = - static_cast(Json::UInt(lpClosed->getReserveInc() * baseFee / baseRef)) / SYSTEM_CURRENCY_PARTS; + l["seq"] = Json::UInt(lpClosed->getLedgerSeq()); + l["hash"] = lpClosed->getHash().GetHex(); + l["validated"] = valid; + if (!human) + { + l["base_fee"] = Json::Value::UInt(baseFee); + l["reserve_base"] = Json::Value::UInt(lpClosed->getReserve(0)); + l["reserve_inc"] = Json::Value::UInt(lpClosed->getReserveInc()); + l["close_time"] = Json::Value::UInt(lpClosed->getCloseTimeNC()); + } + else + { + l["base_fee_xrp"] = static_cast(Json::UInt(baseFee)) / SYSTEM_CURRENCY_PARTS; + l["reserve_base_xrp"] = + static_cast(Json::UInt(lpClosed->getReserve(0) * baseFee / baseRef)) / SYSTEM_CURRENCY_PARTS; + l["reserve_inc_xrp"] = + static_cast(Json::UInt(lpClosed->getReserveInc() * baseFee / baseRef)) / SYSTEM_CURRENCY_PARTS; + l["age"] = static_cast(lpClosed->getCloseTimeNC()) - getCloseTimeNC(); + } info["closed_ledger"] = l; } diff --git a/src/cpp/ripple/NetworkOPs.h b/src/cpp/ripple/NetworkOPs.h index ffaeb3873..764dec483 100644 --- a/src/cpp/ripple/NetworkOPs.h +++ b/src/cpp/ripple/NetworkOPs.h @@ -141,6 +141,7 @@ public: std::string strOperatingMode(); Ledger::ref getClosedLedger() { return mLedgerMaster->getClosedLedger(); } + Ledger::ref getValidatedLedger() { return mLedgerMaster->getValidatedLedger(); } Ledger::ref getCurrentLedger() { return mLedgerMaster->getCurrentLedger(); } Ledger::pointer getLedgerByHash(const uint256& hash) { return mLedgerMaster->getLedgerByHash(hash); } Ledger::pointer getLedgerBySeq(const uint32 seq) { return mLedgerMaster->getLedgerBySeq(seq); } @@ -243,7 +244,7 @@ public: int getPreviousConvergeTime() { return mLastCloseConvergeTime; } uint32 getLastCloseTime() { return mLastCloseTime; } void setLastCloseTime(uint32 t) { mLastCloseTime = t; } - Json::Value getServerInfo(bool admin); + Json::Value getServerInfo(bool human, bool admin); uint32 acceptLedger(); boost::unordered_map >& peekStoredProposals() { return mStoredProposals; } diff --git a/src/cpp/ripple/RPCHandler.cpp b/src/cpp/ripple/RPCHandler.cpp index 5a41eb5f8..13138a338 100644 --- a/src/cpp/ripple/RPCHandler.cpp +++ b/src/cpp/ripple/RPCHandler.cpp @@ -1305,7 +1305,16 @@ Json::Value RPCHandler::doServerInfo(Json::Value) { Json::Value ret(Json::objectValue); - ret["info"] = theApp->getOPs().getServerInfo(mRole == ADMIN); + ret["info"] = theApp->getOPs().getServerInfo(true, mRole == ADMIN); + + return ret; +} + +Json::Value RPCHandler::doServerState(Json::Value) +{ + Json::Value ret(Json::objectValue); + + ret["info"] = theApp->getOPs().getServerInfo(false, mRole == ADMIN); return ret; } @@ -2589,7 +2598,8 @@ Json::Value RPCHandler::doCommand(Json::Value& jvRequest, int iRole) { "ripple_path_find", &RPCHandler::doRipplePathFind, false, optCurrent }, { "sign", &RPCHandler::doSign, false, optCurrent }, { "submit", &RPCHandler::doSubmit, false, optCurrent }, - { "server_info", &RPCHandler::doServerInfo, true, optNone }, + { "server_info", &RPCHandler::doServerInfo, false, optNone }, + { "server_state", &RPCHandler::doServerState, false, optNone }, { "stop", &RPCHandler::doStop, true, optNone }, { "transaction_entry", &RPCHandler::doTransactionEntry, false, optCurrent }, { "tx", &RPCHandler::doTx, false, optNetwork }, diff --git a/src/cpp/ripple/RPCHandler.h b/src/cpp/ripple/RPCHandler.h index a1d891700..5c3365e01 100644 --- a/src/cpp/ripple/RPCHandler.h +++ b/src/cpp/ripple/RPCHandler.h @@ -66,7 +66,8 @@ class RPCHandler Json::Value doProfile(Json::Value params); Json::Value doRandom(Json::Value jvRequest); Json::Value doRipplePathFind(Json::Value jvRequest); - Json::Value doServerInfo(Json::Value params); + Json::Value doServerInfo(Json::Value params); // for humans + Json::Value doServerState(Json::Value params); // for machines Json::Value doSessionClose(Json::Value params); Json::Value doSessionOpen(Json::Value params); Json::Value doStop(Json::Value params); From 1af14e07c7c838324a5501276abf17d84ac3a272 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Tue, 15 Jan 2013 19:19:33 -0800 Subject: [PATCH 05/10] Tiny cosmetic tweak. --- src/cpp/ripple/RPCHandler.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cpp/ripple/RPCHandler.cpp b/src/cpp/ripple/RPCHandler.cpp index 13138a338..2948b52e2 100644 --- a/src/cpp/ripple/RPCHandler.cpp +++ b/src/cpp/ripple/RPCHandler.cpp @@ -1314,7 +1314,7 @@ Json::Value RPCHandler::doServerState(Json::Value) { Json::Value ret(Json::objectValue); - ret["info"] = theApp->getOPs().getServerInfo(false, mRole == ADMIN); + ret["state"] = theApp->getOPs().getServerInfo(false, mRole == ADMIN); return ret; } From 1c48f6948d66d921d1daa9e7a60b0fb1bbe8fe57 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Tue, 15 Jan 2013 19:21:24 -0800 Subject: [PATCH 06/10] Fix "age". --- src/cpp/ripple/NetworkOPs.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cpp/ripple/NetworkOPs.cpp b/src/cpp/ripple/NetworkOPs.cpp index e74374df9..89c0d0240 100644 --- a/src/cpp/ripple/NetworkOPs.cpp +++ b/src/cpp/ripple/NetworkOPs.cpp @@ -1176,7 +1176,7 @@ Json::Value NetworkOPs::getServerInfo(bool human, bool admin) static_cast(Json::UInt(lpClosed->getReserve(0) * baseFee / baseRef)) / SYSTEM_CURRENCY_PARTS; l["reserve_inc_xrp"] = static_cast(Json::UInt(lpClosed->getReserveInc() * baseFee / baseRef)) / SYSTEM_CURRENCY_PARTS; - l["age"] = static_cast(lpClosed->getCloseTimeNC()) - getCloseTimeNC(); + l["age"] = Json::UInt(getCloseTimeNC() - lpClosed->getCloseTimeNC()); } info["closed_ledger"] = l; } From 40e508540fecd654fa5ef427d56417bd361be58b Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Tue, 15 Jan 2013 19:26:52 -0800 Subject: [PATCH 07/10] load_fee -> load_factor --- src/cpp/ripple/NetworkOPs.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cpp/ripple/NetworkOPs.cpp b/src/cpp/ripple/NetworkOPs.cpp index 89c0d0240..d907ad963 100644 --- a/src/cpp/ripple/NetworkOPs.cpp +++ b/src/cpp/ripple/NetworkOPs.cpp @@ -1008,7 +1008,7 @@ void NetworkOPs::pubServer() jvObj["type"] = "serverStatus"; jvObj["server_status"] = strOperatingMode(); jvObj["load_base"] = theApp->getFeeTrack().getLoadBase(); - jvObj["load_fee"] = theApp->getFeeTrack().getLoadFactor(); + jvObj["load_factor"] = theApp->getFeeTrack().getLoadFactor(); BOOST_FOREACH(InfoSub* ispListener, mSubServer) { @@ -1555,7 +1555,7 @@ bool NetworkOPs::subServer(InfoSub* ispListener, Json::Value& jvResult) jvResult["random"] = uRandom.ToString(); jvResult["server_status"] = strOperatingMode(); jvResult["load_base"] = theApp->getFeeTrack().getLoadBase(); - jvResult["load_fee"] = theApp->getFeeTrack().getLoadFactor(); + jvResult["load_factor"] = theApp->getFeeTrack().getLoadFactor(); return mSubServer.insert(ispListener).second; } From 5846951d22d61ef157605ec89c25b3a1ddd337c5 Mon Sep 17 00:00:00 2001 From: jed Date: Tue, 15 Jan 2013 19:32:18 -0800 Subject: [PATCH 08/10] windows --- ripple2010.vcxproj | 15 +++++++++------ ripple2010.vcxproj.filters | 21 ++++++++++++--------- 2 files changed, 21 insertions(+), 15 deletions(-) diff --git a/ripple2010.vcxproj b/ripple2010.vcxproj index c09787f99..a7f8d1599 100644 --- a/ripple2010.vcxproj +++ b/ripple2010.vcxproj @@ -57,6 +57,7 @@ true ..\OpenSSL\lib\VC;..\boost_1_52_0\stage\lib;..\protobuf\vsprojects\Debug ssleay32MDd.lib;libeay32MTd.lib;libprotobuf.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + $(OutDir)rippled.exe @@ -81,18 +82,19 @@ true true true - ..\OpenSSL\lib\VC;..\boost_1_47_0\stage\lib;..\protobuf-2.4.1\vsprojects\Release + ..\OpenSSL\lib\VC;..\boost_1_52_0\stage\lib;..\protobuf\vsprojects\Release libprotobuf.lib;ssleay32MD.lib;libeay32MD.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + $(OutDir)rippled.exe - + @@ -122,11 +124,13 @@ + + @@ -147,13 +151,13 @@ - + @@ -181,7 +185,6 @@ - @@ -298,8 +301,8 @@ Document - /code/protobuf/protoc -I=..\newcoin --cpp_out=\code\newcoin\ ..\newcoin/src/cpp/ripple/ripple.proto - \code\newcoin\src\ripple.pb.h + "../protobuf/protoc" -I=..\newcoin --cpp_out=..\newcoin\ ..\newcoin/src/cpp/ripple/ripple.proto + ..\newcoin\src\ripple.pb.h diff --git a/ripple2010.vcxproj.filters b/ripple2010.vcxproj.filters index 2c8ed95fc..2ac1549e3 100644 --- a/ripple2010.vcxproj.filters +++ b/ripple2010.vcxproj.filters @@ -39,9 +39,6 @@ Source Files\database - - Source Files\database - Source Files\json @@ -189,9 +186,6 @@ Source Files - - Source Files - Source Files @@ -279,9 +273,6 @@ Source Files - - Source Files - Source Files @@ -354,6 +345,18 @@ Source Files + + Source Files + + + Source Files + + + Source Files + + + Source Files + From 56571602b0956e5b2267d4a81ae71943f21e1d46 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Tue, 15 Jan 2013 19:46:58 -0800 Subject: [PATCH 09/10] Reduce a debug message to debug level. --- src/cpp/ripple/LedgerAcquire.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cpp/ripple/LedgerAcquire.cpp b/src/cpp/ripple/LedgerAcquire.cpp index 27470c888..d97a60f9d 100644 --- a/src/cpp/ripple/LedgerAcquire.cpp +++ b/src/cpp/ripple/LedgerAcquire.cpp @@ -718,7 +718,7 @@ LedgerAcquire::pointer LedgerAcquireMaster::findCreate(const uint256& hash) ptr->setTimer(); // Cannot call in constructor } else - cLog(lsINFO) << "LedgerAcquireMaster acquiring ledger we already have"; + cLog(lsDEBUG) << "LedgerAcquireMaster acquiring ledger we already have"; return ptr; } From 7f18a8ffc3907c45ea8c9767e6d19d94bf667727 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Tue, 15 Jan 2013 19:47:20 -0800 Subject: [PATCH 10/10] Reduce debug levels. --- src/cpp/ripple/Peer.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cpp/ripple/Peer.cpp b/src/cpp/ripple/Peer.cpp index c41125210..7c0590dbf 100644 --- a/src/cpp/ripple/Peer.cpp +++ b/src/cpp/ripple/Peer.cpp @@ -1392,7 +1392,7 @@ void Peer::recvGetLedger(ripple::TMGetLedger& packet) logMe += "LedgerHash:"; logMe += ledgerhash.GetHex(); ledger = theApp->getLedgerMaster().getLedgerByHash(ledgerhash); - tLog(!ledger, lsINFO) << "Don't have ledger " << ledgerhash; + tLog(!ledger, lsDEBUG) << "Don't have ledger " << ledgerhash; if (!ledger && (packet.has_querytype() && !packet.has_requestcookie())) { std::vector peerList = theApp->getConnectionPool().getPeerVector(); @@ -1417,7 +1417,7 @@ void Peer::recvGetLedger(ripple::TMGetLedger& packet) else if (packet.has_ledgerseq()) { ledger = theApp->getLedgerMaster().getLedgerBySeq(packet.ledgerseq()); - tLog(!ledger, lsINFO) << "Don't have ledger " << packet.ledgerseq(); + tLog(!ledger, lsDEBUG) << "Don't have ledger " << packet.ledgerseq(); } else if (packet.has_ltype() && (packet.ltype() == ripple::ltCURRENT)) ledger = theApp->getLedgerMaster().getCurrentLedger();