From c785bb3673a169c13585c180ba27f4d9a88c591b Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Thu, 25 Apr 2013 13:28:55 -0700 Subject: [PATCH 1/2] More fetch fixes. --- src/cpp/ripple/LedgerAcquire.cpp | 2 +- src/cpp/ripple/LedgerMaster.cpp | 5 +++-- src/cpp/ripple/SHAMap.cpp | 2 ++ src/cpp/ripple/SHAMapSync.cpp | 4 ++-- 4 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/cpp/ripple/LedgerAcquire.cpp b/src/cpp/ripple/LedgerAcquire.cpp index bd8a4d7647..a27573a300 100644 --- a/src/cpp/ripple/LedgerAcquire.cpp +++ b/src/cpp/ripple/LedgerAcquire.cpp @@ -109,7 +109,7 @@ LedgerAcquire::LedgerAcquire(const uint256& hash, uint32 seq) : PeerSet(hash, LE void LedgerAcquire::checkLocal() { boost::recursive_mutex::scoped_lock sl(mLock); - if (mComplete) + if (isDone()) return; if (tryLocal()) diff --git a/src/cpp/ripple/LedgerMaster.cpp b/src/cpp/ripple/LedgerMaster.cpp index c8f5472ac5..6d2cd820f1 100644 --- a/src/cpp/ripple/LedgerMaster.cpp +++ b/src/cpp/ripple/LedgerMaster.cpp @@ -265,7 +265,7 @@ bool LedgerMaster::acquireMissingLedger(Ledger::ref origLedger, const uint256& l { typedef std::pair u_pair; std::vector vec = origLedger->getLedgerHashes(); - BOOST_FOREACH(const u_pair& it, vec) + BOOST_REVERSE_FOREACH(const u_pair& it, vec) { if ((fetchCount < fetchMax) && (it.first < ledgerSeq) && !mCompleteLedgers.hasValue(it.first) && !theApp->getMasterLedgerAcquire().find(it.second)) @@ -277,7 +277,8 @@ bool LedgerMaster::acquireMissingLedger(Ledger::ref origLedger, const uint256& l setFullLedger(acq->getLedger()); mLedgerHistory.addAcceptedLedger(acq->getLedger(), false); } - else ++fetchCount; + else + ++fetchCount; } } } diff --git a/src/cpp/ripple/SHAMap.cpp b/src/cpp/ripple/SHAMap.cpp index 2dd8a9f850..2eb19e1a7e 100644 --- a/src/cpp/ripple/SHAMap.cpp +++ b/src/cpp/ripple/SHAMap.cpp @@ -733,6 +733,8 @@ SHAMapTreeNode::pointer SHAMap::fetchNodeExternal(const SHAMapNode& id, const ui void SHAMap::fetchRoot(const uint256& hash, SHAMapSyncFilter* filter) { + if (hash == root->getNodeHash()) + return; if (sLog(lsTRACE)) { if (mType == smtTRANSACTION) diff --git a/src/cpp/ripple/SHAMapSync.cpp b/src/cpp/ripple/SHAMapSync.cpp index 8fa26b7ec7..feb655f27c 100644 --- a/src/cpp/ripple/SHAMapSync.cpp +++ b/src/cpp/ripple/SHAMapSync.cpp @@ -136,13 +136,13 @@ std::vector SHAMap::getNeededHashes(int max, SHAMapSyncFilter* filter) if (!node->isEmptyBranch(branch)) { const uint256& childHash = node->getChildHash(branch); - SHAMapNode childID = node->getChildNodeID(branch); if (!fullBelowCache.isPresent(childHash)) { + SHAMapNode childID = node->getChildNodeID(branch); SHAMapTreeNode* d = NULL; try { - d = getNodePointer(node->getChildNodeID(branch), childHash); + d = getNodePointer(childID, childHash); assert(d); } catch (SHAMapMissingNode&) From 380ab0d3fde45b00f0bb67a7e40ba833ae85803e Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Thu, 25 Apr 2013 13:49:41 -0700 Subject: [PATCH 2/2] Fix two small bugs. --- src/cpp/ripple/LedgerAcquire.cpp | 6 ++++-- src/cpp/ripple/NetworkOPs.cpp | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/cpp/ripple/LedgerAcquire.cpp b/src/cpp/ripple/LedgerAcquire.cpp index a27573a300..d4ca0027a0 100644 --- a/src/cpp/ripple/LedgerAcquire.cpp +++ b/src/cpp/ripple/LedgerAcquire.cpp @@ -456,7 +456,8 @@ void LedgerAcquire::trigger(Peer::ref peer) std::vector nodeHashes; nodeIDs.reserve(256); nodeHashes.reserve(256); - mLedger->peekTransactionMap()->getMissingNodes(nodeIDs, nodeHashes, 256, NULL); + TransactionStateSF filter(mSeq); + mLedger->peekTransactionMap()->getMissingNodes(nodeIDs, nodeHashes, 256, &filter); if (nodeIDs.empty()) { if (!mLedger->peekTransactionMap()->isValid()) @@ -503,7 +504,8 @@ void LedgerAcquire::trigger(Peer::ref peer) std::vector nodeHashes; nodeIDs.reserve(256); nodeHashes.reserve(256); - mLedger->peekAccountStateMap()->getMissingNodes(nodeIDs, nodeHashes, 256, NULL); + TransactionStateSF filter(mSeq); + mLedger->peekAccountStateMap()->getMissingNodes(nodeIDs, nodeHashes, 256, &filter); if (nodeIDs.empty()) { if (!mLedger->peekAccountStateMap()->isValid()) diff --git a/src/cpp/ripple/NetworkOPs.cpp b/src/cpp/ripple/NetworkOPs.cpp index 4a2fea52e5..4d660cdc48 100644 --- a/src/cpp/ripple/NetworkOPs.cpp +++ b/src/cpp/ripple/NetworkOPs.cpp @@ -2094,7 +2094,7 @@ bool NetworkOPs::getFetchPack(const uint256& hash, std::vector& d bool NetworkOPs::shouldFetchPack() { uint32 now = getNetworkTimeNC(); - if (mLastFetchPack == now) + if ((mLastFetchPack == now) || ((mLastFetchPack + 1) == now)) return false; mFetchPack.sweep(); if (mFetchPack.getCacheSize() > 384)