Don't immediately retry a failed acquire.

This commit is contained in:
JoelKatz
2013-01-07 08:57:41 -08:00
parent 6624e31d5a
commit 2b479a66c1
2 changed files with 10 additions and 6 deletions

View File

@@ -150,17 +150,20 @@ void LedgerMaster::asyncAccept(Ledger::pointer ledger)
resumeAcquiring(); resumeAcquiring();
} }
void LedgerMaster::acquireMissingLedger(const uint256& ledgerHash, uint32 ledgerSeq) bool LedgerMaster::acquireMissingLedger(const uint256& ledgerHash, uint32 ledgerSeq)
{ { // return: false = already gave up recently
Ledger::pointer ledger = Ledger::loadByIndex(ledgerSeq); Ledger::pointer ledger = Ledger::loadByIndex(ledgerSeq);
if (ledger && (ledger->getHash() == ledgerHash)) if (ledger && (ledger->getHash() == ledgerHash))
{ {
cLog(lsDEBUG) << "Ledger found is database, doing async accept"; cLog(lsDEBUG) << "Ledger found is database, doing async accept";
mTooFast = true; mTooFast = true;
theApp->getJobQueue().addJob(jtPUBLEDGER, boost::bind(&LedgerMaster::asyncAccept, this, ledger)); theApp->getJobQueue().addJob(jtPUBLEDGER, boost::bind(&LedgerMaster::asyncAccept, this, ledger));
return; return true;
} }
if (theApp->getMasterLedgerAcquire().isFailure(ledgerHash))
return false;
mMissingLedger = theApp->getMasterLedgerAcquire().findCreate(ledgerHash); mMissingLedger = theApp->getMasterLedgerAcquire().findCreate(ledgerHash);
if (mMissingLedger->isComplete()) if (mMissingLedger->isComplete())
{ {
@@ -168,16 +171,17 @@ void LedgerMaster::acquireMissingLedger(const uint256& ledgerHash, uint32 ledger
if (lgr && (lgr->getLedgerSeq() == ledgerSeq)) if (lgr && (lgr->getLedgerSeq() == ledgerSeq))
missingAcquireComplete(mMissingLedger); missingAcquireComplete(mMissingLedger);
mMissingLedger.reset(); mMissingLedger.reset();
return; return true;
} }
else if (mMissingLedger->isDone()) else if (mMissingLedger->isDone())
{ {
mMissingLedger.reset(); mMissingLedger.reset();
return; return false;
} }
mMissingSeq = ledgerSeq; mMissingSeq = ledgerSeq;
if (mMissingLedger->setAccept()) if (mMissingLedger->setAccept())
mMissingLedger->addOnComplete(boost::bind(&LedgerMaster::missingAcquireComplete, this, _1)); mMissingLedger->addOnComplete(boost::bind(&LedgerMaster::missingAcquireComplete, this, _1));
return true;
} }
void LedgerMaster::missingAcquireComplete(LedgerAcquire::pointer acq) void LedgerMaster::missingAcquireComplete(LedgerAcquire::pointer acq)

View File

@@ -51,7 +51,7 @@ protected:
bool isValidTransaction(const Transaction::pointer& trans); bool isValidTransaction(const Transaction::pointer& trans);
bool isTransactionOnFutureList(const Transaction::pointer& trans); bool isTransactionOnFutureList(const Transaction::pointer& trans);
void acquireMissingLedger(const uint256& ledgerHash, uint32 ledgerSeq); bool acquireMissingLedger(const uint256& ledgerHash, uint32 ledgerSeq);
void asyncAccept(Ledger::pointer); void asyncAccept(Ledger::pointer);
void missingAcquireComplete(LedgerAcquire::pointer); void missingAcquireComplete(LedgerAcquire::pointer);
void pubThread(); void pubThread();