Optimize the startup code so we don't have long periods of slowness on startup.

This commit is contained in:
JoelKatz
2013-01-10 08:41:32 -08:00
parent d17a08c357
commit e2bac0e7cd
3 changed files with 64 additions and 9 deletions

View File

@@ -134,19 +134,25 @@ bool LedgerMaster::haveLedgerRange(uint32 from, uint32 to)
void LedgerMaster::asyncAccept(Ledger::pointer ledger)
{
do
uint32 seq = ledger->getLedgerSeq();
uint256 prevHash = ledger->getParentHash();
while (seq > 0)
{
{
boost::recursive_mutex::scoped_lock ml(mLock);
mCompleteLedgers.setValue(ledger->getLedgerSeq());
if ((ledger->getLedgerSeq() == 0) || mCompleteLedgers.hasValue(ledger->getLedgerSeq() - 1))
mCompleteLedgers.setValue(seq);
--seq;
if (mCompleteLedgers.hasValue(seq))
break;
}
Ledger::pointer prevLedger = mLedgerHistory.getLedgerBySeq(ledger->getLedgerSeq() - 1); // FIXME
if (!prevLedger || (prevLedger->getHash() != ledger->getParentHash()))
uint256 tHash, pHash;
if (!Ledger::getHashesByIndex(seq, tHash, pHash) || (tHash != prevHash))
break;
ledger = prevLedger;
} while(1);
prevHash = pHash;
}
resumeAcquiring();
}
@@ -156,7 +162,7 @@ bool LedgerMaster::acquireMissingLedger(const uint256& ledgerHash, uint32 ledger
return true;
Ledger::pointer ledger = mLedgerHistory.getLedgerBySeq(ledgerSeq);
if (ledger && (ledger->getHash() == ledgerHash))
if (Ledger::getHashByIndex(ledgerSeq) == ledgerHash)
{
cLog(lsDEBUG) << "Ledger hash found in database";
mTooFast = true;