From eb3bf3b8cd71cd5a6d0215b963ea95d46f4bf7f7 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Thu, 15 Aug 2013 21:30:17 -0700 Subject: [PATCH] Make sure we keep publishing ledgers while filling a gap from the database. --- modules/ripple_app/ledger/LedgerMaster.cpp | 12 ++++++++++-- modules/ripple_app/ledger/LedgerMaster.h | 2 ++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/modules/ripple_app/ledger/LedgerMaster.cpp b/modules/ripple_app/ledger/LedgerMaster.cpp index f470c91dc4..d43b2fd47b 100644 --- a/modules/ripple_app/ledger/LedgerMaster.cpp +++ b/modules/ripple_app/ledger/LedgerMaster.cpp @@ -359,6 +359,8 @@ void LedgerMaster::tryFill (Ledger::pointer ledger) { boost::recursive_mutex::scoped_lock ml (mLock); mCompleteLedgers.setRange (minHas, maxHas); + mFillInProgress = false; + tryAdvance(); } } @@ -569,7 +571,7 @@ void LedgerMaster::advanceThread() std::list pubLedgers = findNewLedgersToPublish (sl); if (pubLedgers.empty()) { - if (!getConfig().RUN_STANDALONE && !getApp().getFeeTrack().isLoadedLocal() && + if (!mFillInProgress && !getConfig().RUN_STANDALONE && !getApp().getFeeTrack().isLoadedLocal() && (getApp().getJobQueue().getJobCount(jtPUBOLDLEDGER) < 10) && (mValidLedger->getLedgerSeq() == mPubLedger->getLedgerSeq())) { // We are in sync, so can acquire @@ -610,7 +612,13 @@ void LedgerMaster::advanceThread() assert(ledger->getLedgerSeq() == missing); WriteLog (lsTRACE, LedgerMaster) << "tryAdvance acquired " << ledger->getLedgerSeq(); setFullLedger(ledger, false, false); - tryFill(ledger); + if (Ledger::getHashByIndex(ledger->getLedgerSeq() - 1) == ledger->getParentHash()) + { // Previous ledger is in DB + sl.lock(); + mFillInProgress = true; + getApp().getJobQueue().addJob(jtADVANCE, "tryFill", BIND_TYPE (&LedgerMaster::tryFill, this, ledger)); + sl.unlock(); + } progress = true; } else diff --git a/modules/ripple_app/ledger/LedgerMaster.h b/modules/ripple_app/ledger/LedgerMaster.h index dd9cadb014..481e92d2ea 100644 --- a/modules/ripple_app/ledger/LedgerMaster.h +++ b/modules/ripple_app/ledger/LedgerMaster.h @@ -25,6 +25,7 @@ public: , mMinValidations (0) , mLastValidateSeq (0) , mAdvanceThread (false) + , mFillInProgress (false) , mPathFindThread (false) , mPathFindNewLedger (false) , mPathFindNewRequest (false) @@ -219,6 +220,7 @@ private: std::list mPubLedgers; // List of ledgers to publish bool mAdvanceThread; // Publish thread is running + bool mFillInProgress; bool mPathFindThread; // Pathfind thread is running bool mPathFindNewLedger;