From c74a1b89e3ce69c2c94a9accdf9347d04e1edc6d Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Wed, 9 Jan 2013 03:08:00 -0800 Subject: [PATCH] By careful how many GetObjectByHash requests we send. --- src/cpp/ripple/LedgerAcquire.cpp | 21 +++++++++++++++------ src/cpp/ripple/LedgerAcquire.h | 2 +- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/src/cpp/ripple/LedgerAcquire.cpp b/src/cpp/ripple/LedgerAcquire.cpp index 462ab33ba..01cf1bfba 100644 --- a/src/cpp/ripple/LedgerAcquire.cpp +++ b/src/cpp/ripple/LedgerAcquire.cpp @@ -74,8 +74,8 @@ void PeerSet::TimerEntry(boost::weak_ptr wptr, const boost::system::err ptr->invokeOnTimer(); } -LedgerAcquire::LedgerAcquire(const uint256& hash) : PeerSet(hash, LEDGER_ACQUIRE_TIMEOUT), - mHaveBase(false), mHaveState(false), mHaveTransactions(false), mAborted(false), mSignaled(false), mAccept(false) +LedgerAcquire::LedgerAcquire(const uint256& hash) : PeerSet(hash, LEDGER_ACQUIRE_TIMEOUT), mHaveBase(false), + mHaveState(false), mHaveTransactions(false), mAborted(false), mSignaled(false), mAccept(false), mByHash(true) { #ifdef LA_DEBUG cLog(lsTRACE) << "Acquiring ledger " << mHash; @@ -138,6 +138,8 @@ void LedgerAcquire::onTimer(bool progress) else trigger(Peer::pointer()); } + else + mByHash = true; } void LedgerAcquire::addPeers() @@ -234,7 +236,7 @@ void LedgerAcquire::trigger(Peer::ref peer) { tmGL.set_querytype(ripple::qtINDIRECT); - if (!isProgress()) + if (!isProgress() && mByHash) { std::vector need = getNeededHashes(); if (!need.empty()) @@ -260,9 +262,6 @@ void LedgerAcquire::trigger(Peer::ref peer) } } PackedMessage::pointer packet = boost::make_shared(tmBH, ripple::mtGET_OBJECTS); - if (peer) - peer->sendPacket(packet); - else { boost::recursive_mutex::scoped_lock sl(mLock); for (boost::unordered_map::iterator it = mPeers.begin(), end = mPeers.end(); @@ -270,10 +269,20 @@ void LedgerAcquire::trigger(Peer::ref peer) { Peer::pointer iPeer = theApp->getConnectionPool().getPeerById(it->first); if (iPeer) + { + mByHash = false; iPeer->sendPacket(packet); + } } } } + else + { + cLog(lsINFO) << "getNeededHashes says acquire is complete"; + mHaveBase = true; + mHaveTransactions = true; + mHaveState = true; + } } } diff --git a/src/cpp/ripple/LedgerAcquire.h b/src/cpp/ripple/LedgerAcquire.h index 2ef1384d7..b5c338612 100644 --- a/src/cpp/ripple/LedgerAcquire.h +++ b/src/cpp/ripple/LedgerAcquire.h @@ -78,7 +78,7 @@ public: protected: Ledger::pointer mLedger; - bool mHaveBase, mHaveState, mHaveTransactions, mAborted, mSignaled, mAccept; + bool mHaveBase, mHaveState, mHaveTransactions, mAborted, mSignaled, mAccept, mByHash; std::vector< boost::function > mOnComplete;