diff --git a/src/LedgerAcquire.cpp b/src/LedgerAcquire.cpp index 1c7af9208e..ca26c885cd 100644 --- a/src/LedgerAcquire.cpp +++ b/src/LedgerAcquire.cpp @@ -145,7 +145,32 @@ void LedgerAcquire::onTimer() done(); } else + { + if (!getPeerCount()) + addPeers(); trigger(Peer::pointer(), true); + } +} + +void LedgerAcquire::addPeers() +{ + std::vector peerList = theApp->getConnectionPool().getPeerVector(); + + bool found = false; + BOOST_FOREACH(Peer::ref peer, peerList) + { + if (peer->hasLedger(getHash())) + { + found = true; + peerHas(peer); + } + } + + if (!found) + { + BOOST_FOREACH(Peer::ref peer, peerList) + peerHas(peer); + } } boost::weak_ptr LedgerAcquire::pmDowncast() @@ -213,7 +238,6 @@ void LedgerAcquire::trigger(Peer::ref peer, bool timer) ripple::TMGetLedger tmGL; tmGL.set_ledgerhash(mHash.begin(), mHash.size()); tmGL.set_itype(ripple::liBASE); - *(tmGL.add_nodeids()) = SHAMapNode().getRawString(); cLog(lsTRACE) << "Sending base request to " << (peer ? "selected peer" : "all peers"); sendRequest(tmGL, peer); } @@ -340,7 +364,8 @@ void PeerSet::sendRequest(const ripple::TMGetLedger& tmGL) { // FIXME: Track last peer sent to and time sent Peer::pointer peer = it->lock(); - if (peer) peer->sendPacket(packet); + if (peer) + peer->sendPacket(packet); return; } } @@ -500,6 +525,7 @@ LedgerAcquire::pointer LedgerAcquireMaster::findCreate(const uint256& hash) return ptr; ptr = boost::make_shared(hash); assert(mLedgers[hash] == ptr); + ptr->addPeers(); ptr->resetTimer(); // Cannot call in constructor return ptr; } diff --git a/src/LedgerAcquire.h b/src/LedgerAcquire.h index cdf9cda56c..6044d10475 100644 --- a/src/LedgerAcquire.h +++ b/src/LedgerAcquire.h @@ -99,6 +99,7 @@ public: bool takeAsRootNode(const std::vector& data); void trigger(Peer::ref, bool timer); bool tryLocal(); + void addPeers(); }; class LedgerAcquireMaster diff --git a/src/LedgerConsensus.cpp b/src/LedgerConsensus.cpp index e0917da0ed..beeaaa400b 100644 --- a/src/LedgerConsensus.cpp +++ b/src/LedgerConsensus.cpp @@ -339,24 +339,6 @@ void LedgerConsensus::handleLCL(const uint256& lclHash) cLog(lsWARNING) << "Need consensus ledger " << mPrevLedgerHash; mAcquiringLedger = theApp->getMasterLedgerAcquire().findCreate(mPrevLedgerHash); - std::vector peerList = theApp->getConnectionPool().getPeerVector(); - - bool found = false; - BOOST_FOREACH(Peer::ref peer, peerList) - { - if (peer->hasLedger(mPrevLedgerHash)) - { - found = true; - mAcquiringLedger->peerHas(peer); - } - } - - if (!found) - { - BOOST_FOREACH(Peer::ref peer, peerList) - mAcquiringLedger->peerHas(peer); - } - mHaveCorrectLCL = false; return; }