LedgerMaster keeps cached snapshot of the current ledger.

This commit is contained in:
JoelKatz
2013-05-16 00:58:20 -07:00
parent 379875ae47
commit 6556719547
2 changed files with 12 additions and 0 deletions

View File

@@ -18,6 +18,14 @@ uint32 LedgerMaster::getCurrentLedgerIndex()
return mCurrentLedger->getLedgerSeq();
}
Ledger::ref LedgerMaster::getCurrentSnapshot()
{
if (!mCurrentSnapshot || (mCurrentSnapshot->getHash() != mCurrentLedger->getHash()))
mCurrentSnapshot = boost::make_shared<Ledger>(boost::ref(*mCurrentLedger), false);
assert(mCurrentSnapshot->isImmutable());
return mCurrentSnapshot;
}
void LedgerMaster::addHeldTransaction(Transaction::ref transaction)
{ // returns true if transaction was added
boost::recursive_mutex::scoped_lock ml(mLock);

View File

@@ -26,6 +26,7 @@ protected:
TransactionEngine mEngine;
Ledger::pointer mCurrentLedger; // The ledger we are currently processiong
Ledger::pointer mCurrentSnapshot; // Snapshot of the current ledger
Ledger::pointer mFinalizedLedger; // The ledger that most recently closed
Ledger::pointer mValidLedger; // The highest-sequence ledger we have fully accepted
Ledger::pointer mPubLedger; // The last ledger we have published
@@ -74,6 +75,9 @@ public:
// The current ledger is the ledger we believe new transactions should go in
Ledger::ref getCurrentLedger() { return mCurrentLedger; }
// An immutable snapshot of the current ledger
Ledger::ref getCurrentSnapshot();
// The finalized ledger is the last closed/accepted ledger
Ledger::ref getClosedLedger() { return mFinalizedLedger; }