From 3a1fb14bbc47fdb8d5a8c38206d8a747c68b112f Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Sun, 4 Nov 2012 14:40:05 -0800 Subject: [PATCH] Don't clear mPeerData on LCL view change. Correctly add peers to tx set fetches. --- src/LedgerConsensus.cpp | 25 ++++++++++++++++++++++++- src/LedgerConsensus.h | 2 +- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/src/LedgerConsensus.cpp b/src/LedgerConsensus.cpp index 876a14cc6..ce36f0688 100644 --- a/src/LedgerConsensus.cpp +++ b/src/LedgerConsensus.cpp @@ -45,6 +45,29 @@ void TransactionAcquire::done() } } +void TransactionAcquire::onTimer() +{ + if (!getPeerCount()) + { // out of peers + bool found = false; + std::vector peerList = theApp->getConnectionPool().getPeerVector(); + BOOST_FOREACH(Peer::ref peer, peerList) + { + if (peer->hasTxSet(getHash())) + { + found = true; + peerHas(peer); + } + } + if (!found) + { + BOOST_FOREACH(Peer::ref peer, peerList) + peerHas(peer); + } + } + trigger(Peer::pointer(), true); +} + boost::weak_ptr TransactionAcquire::pmDowncast() { return boost::shared_polymorphic_downcast(shared_from_this()); @@ -59,6 +82,7 @@ void TransactionAcquire::trigger(Peer::ref peer, bool timer) } if (!mHaveRoot) { + cLog(lsTRACE) << "TransactionAcquire::trigger " << (peer ? "havePeer" : "noPeer") << " no root"; ripple::TMGetLedger tmGL; tmGL.set_ledgerhash(mHash.begin(), mHash.size()); tmGL.set_itype(ripple::liTS_CANDIDATE); @@ -323,7 +347,6 @@ void LedgerConsensus::handleLCL(const uint256& lclHash) mProposing = false; mValidating = false; mPeerPositions.clear(); - mPeerData.clear(); mDisputes.clear(); mCloseTimes.clear(); mDeadNodes.clear(); diff --git a/src/LedgerConsensus.h b/src/LedgerConsensus.h index 6eae25750..8ac72634a 100644 --- a/src/LedgerConsensus.h +++ b/src/LedgerConsensus.h @@ -30,7 +30,7 @@ protected: SHAMap::pointer mMap; bool mHaveRoot; - void onTimer() { trigger(Peer::pointer(), true); } + void onTimer(); void newPeer(Peer::ref peer) { trigger(peer, false); } void done();