Trigger the history acquire code under the correct conditions.

Advance the "last full ledger" tracking correctly.
This commit is contained in:
JoelKatz
2012-10-24 11:17:00 -07:00
parent f6386ab2b5
commit 853136b2a5
5 changed files with 37 additions and 12 deletions

View File

@@ -434,9 +434,7 @@ void Ledger::saveAcceptedLedger(bool fromConsensus)
theApp->getOPs().pubLedger(shared_from_this());
if(theConfig.FULL_HISTORY)
{
// WRITEME: check for seamless ledger history
}
theApp->getMasterLedger().checkLedgerGap(shared_from_this());
}

View File

@@ -647,6 +647,7 @@ void LedgerAcquireSet::onComplete(boost::weak_ptr<LedgerAcquireSet> set, LedgerA
{
Ledger::pointer ledger = acquired->getLedger();
ledger->setAccepted();
theApp->getMasterLedger().checkLedgerGap(ledger);
lSet->updateCurrentLedger(ledger);
}
else

View File

@@ -137,8 +137,8 @@ public:
void dropLedger(const uint256& ledgerHash);
bool gotLedgerData(ripple::TMLedgerData& packet, Peer::ref);
void killSet(const LedgerAcquireSet&)
{ mAcquireSet = LedgerAcquireSet::pointer(); }
bool hasSet() { return !!mAcquireSet; }
void killSet(const LedgerAcquireSet&) { mAcquireSet = LedgerAcquireSet::pointer(); }
void makeSet(Ledger::ref target, Ledger::ref current)
{ mAcquireSet = boost::make_shared<LedgerAcquireSet>(boost::ref(target), boost::ref(current)); }
};

View File

@@ -23,7 +23,7 @@ void LedgerMaster::pushLedger(Ledger::ref newLedger)
// Caller should already have properly assembled this ledger into "ready-to-close" form --
// all candidate transactions must already be applied
Log(lsINFO) << "PushLedger: " << newLedger->getHash();
ScopedLock sl(mLock);
boost::recursive_mutex::scoped_lock ml(mLock);
if (!!mFinalizedLedger)
{
mFinalizedLedger->setClosed();
@@ -51,8 +51,8 @@ void LedgerMaster::pushLedger(Ledger::ref newLCL, Ledger::ref newOL)
Log(lsINFO) << "StashAccepted: " << newLCL->getHash();
}
boost::recursive_mutex::scoped_lock ml(mLock);
mFinalizedLedger = newLCL;
ScopedLock sl(mLock);
mCurrentLedger = newOL;
mEngine.setLedger(newOL);
}
@@ -60,11 +60,15 @@ void LedgerMaster::pushLedger(Ledger::ref newLCL, Ledger::ref newOL)
void LedgerMaster::switchLedgers(Ledger::ref lastClosed, Ledger::ref current)
{
assert(lastClosed && current);
mFinalizedLedger = lastClosed;
mFinalizedLedger->setClosed();
mFinalizedLedger->setAccepted();
mCurrentLedger = current;
{
boost::recursive_mutex::scoped_lock ml(mLock);
mFinalizedLedger = lastClosed;
mFinalizedLedger->setClosed();
mFinalizedLedger->setAccepted();
mCurrentLedger = current;
}
assert(!mCurrentLedger->isClosed());
mEngine.setLedger(mCurrentLedger);
}
@@ -77,7 +81,6 @@ void LedgerMaster::storeLedger(Ledger::ref ledger)
}
Ledger::pointer LedgerMaster::closeLedger()
{
boost::recursive_mutex::scoped_lock sl(mLock);
@@ -94,5 +97,25 @@ TER LedgerMaster::doTransaction(const SerializedTransaction& txn, TransactionEng
return result;
}
void LedgerMaster::checkLedgerGap(Ledger::ref ledger)
{
boost::recursive_mutex::scoped_lock sl(mLock);
if (ledger->getParentHash() == mLastFullLedger->getHash())
{
mLastFullLedger = ledger;
return;
}
if (theApp->getMasterLedgerAcquire().hasSet())
return;
if (ledger->getLedgerSeq() < mLastFullLedger->getLedgerSeq())
return;
// we have a gap or discontinuity
theApp->getMasterLedgerAcquire().makeSet(mLastFullLedger, ledger);
}
// vim:ts=4

View File

@@ -52,9 +52,12 @@ public:
void setLastFullLedger(Ledger::ref ledger)
{
boost::recursive_mutex::scoped_lock ml(mLock);
mLastFullLedger = ledger;
}
void checkLedgerGap(Ledger::ref ledger);
void switchLedgers(Ledger::ref lastClosed, Ledger::ref newCurrent);
Ledger::pointer closeLedger();