mirror of
https://github.com/XRPLF/rippled.git
synced 2025-11-27 22:45:52 +00:00
Simplify the ledger acquire logic. This fixes a few bugs related to it including
the issue if you remove the ledger DB.
This commit is contained in:
@@ -516,10 +516,7 @@ void Ledger::saveAcceptedLedger(Job&, bool fromConsensus)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!fromConsensus)
|
if (!fromConsensus)
|
||||||
{
|
|
||||||
dropCache();
|
dropCache();
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (theApp->getJobQueue().getJobCount(jtPUBOLDLEDGER) == 0)
|
if (theApp->getJobQueue().getJobCount(jtPUBOLDLEDGER) == 0)
|
||||||
theApp->getLedgerMaster().resumeAcquiring();
|
theApp->getLedgerMaster().resumeAcquiring();
|
||||||
|
|||||||
@@ -46,6 +46,7 @@ void LedgerMaster::pushLedger(Ledger::pointer newLCL, Ledger::pointer newOL, boo
|
|||||||
assert(newLCL->isClosed() && newLCL->isAccepted());
|
assert(newLCL->isClosed() && newLCL->isAccepted());
|
||||||
assert(!newOL->isClosed() && !newOL->isAccepted());
|
assert(!newOL->isClosed() && !newOL->isAccepted());
|
||||||
|
|
||||||
|
boost::recursive_mutex::scoped_lock ml(mLock);
|
||||||
if (newLCL->isAccepted())
|
if (newLCL->isAccepted())
|
||||||
{
|
{
|
||||||
assert(newLCL->isClosed());
|
assert(newLCL->isClosed());
|
||||||
@@ -191,14 +192,10 @@ void LedgerMaster::asyncAccept(Ledger::pointer ledger)
|
|||||||
|
|
||||||
bool LedgerMaster::acquireMissingLedger(Ledger::ref origLedger, const uint256& ledgerHash, uint32 ledgerSeq)
|
bool LedgerMaster::acquireMissingLedger(Ledger::ref origLedger, const uint256& ledgerHash, uint32 ledgerSeq)
|
||||||
{ // return: false = already gave up recently
|
{ // return: false = already gave up recently
|
||||||
if (mTooFast)
|
|
||||||
return true;
|
|
||||||
|
|
||||||
Ledger::pointer ledger = mLedgerHistory.getLedgerBySeq(ledgerSeq);
|
Ledger::pointer ledger = mLedgerHistory.getLedgerBySeq(ledgerSeq);
|
||||||
if (ledger && (Ledger::getHashByIndex(ledgerSeq) == ledgerHash))
|
if (ledger && (Ledger::getHashByIndex(ledgerSeq) == ledgerHash))
|
||||||
{
|
{
|
||||||
cLog(lsTRACE) << "Ledger hash found in database";
|
cLog(lsTRACE) << "Ledger hash found in database";
|
||||||
mTooFast = true;
|
|
||||||
theApp->getJobQueue().addJob(jtPUBOLDLEDGER, "LedgerMaster::asyncAccept",
|
theApp->getJobQueue().addJob(jtPUBOLDLEDGER, "LedgerMaster::asyncAccept",
|
||||||
boost::bind(&LedgerMaster::asyncAccept, this, ledger));
|
boost::bind(&LedgerMaster::asyncAccept, this, ledger));
|
||||||
return true;
|
return true;
|
||||||
@@ -293,9 +290,6 @@ bool LedgerMaster::shouldAcquire(uint32 currentLedger, uint32 ledgerHistory, uin
|
|||||||
void LedgerMaster::resumeAcquiring()
|
void LedgerMaster::resumeAcquiring()
|
||||||
{
|
{
|
||||||
boost::recursive_mutex::scoped_lock ml(mLock);
|
boost::recursive_mutex::scoped_lock ml(mLock);
|
||||||
if (!mTooFast)
|
|
||||||
return;
|
|
||||||
mTooFast = false;
|
|
||||||
|
|
||||||
if (mMissingLedger && mMissingLedger->isDone())
|
if (mMissingLedger && mMissingLedger->isDone())
|
||||||
mMissingLedger.reset();
|
mMissingLedger.reset();
|
||||||
@@ -396,7 +390,6 @@ void LedgerMaster::setFullLedger(Ledger::pointer ledger)
|
|||||||
|
|
||||||
if (theApp->getJobQueue().getJobCount(jtPUBOLDLEDGER) > 2)
|
if (theApp->getJobQueue().getJobCount(jtPUBOLDLEDGER) > 2)
|
||||||
{
|
{
|
||||||
mTooFast = true;
|
|
||||||
cLog(lsDEBUG) << "Too many pending ledger saves";
|
cLog(lsDEBUG) << "Too many pending ledger saves";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -556,7 +549,6 @@ void LedgerMaster::tryPublish()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mTooFast = false;
|
|
||||||
if (!mPubLedgers.empty() && !mPubThread)
|
if (!mPubLedgers.empty() && !mPubThread)
|
||||||
{
|
{
|
||||||
theApp->getOPs().clearNeedNetworkLedger();
|
theApp->getOPs().clearNeedNetworkLedger();
|
||||||
|
|||||||
@@ -37,7 +37,6 @@ protected:
|
|||||||
RangeSet mCompleteLedgers;
|
RangeSet mCompleteLedgers;
|
||||||
LedgerAcquire::pointer mMissingLedger;
|
LedgerAcquire::pointer mMissingLedger;
|
||||||
uint32 mMissingSeq;
|
uint32 mMissingSeq;
|
||||||
bool mTooFast; // We are acquiring faster than we're writing
|
|
||||||
|
|
||||||
int mMinValidations; // The minimum validations to publish a ledger
|
int mMinValidations; // The minimum validations to publish a ledger
|
||||||
uint256 mLastValidateHash;
|
uint256 mLastValidateHash;
|
||||||
@@ -58,7 +57,7 @@ protected:
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
LedgerMaster() : mHeldTransactions(uint256()), mMissingSeq(0), mTooFast(false),
|
LedgerMaster() : mHeldTransactions(uint256()), mMissingSeq(0),
|
||||||
mMinValidations(0), mLastValidateSeq(0), mPubThread(false)
|
mMinValidations(0), mLastValidateSeq(0), mPubThread(false)
|
||||||
{ ; }
|
{ ; }
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user