From 6556719547a1f66523bb7a5547a45623079429b0 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Thu, 16 May 2013 00:58:20 -0700 Subject: [PATCH] LedgerMaster keeps cached snapshot of the current ledger. --- src/cpp/ripple/LedgerMaster.cpp | 8 ++++++++ src/cpp/ripple/LedgerMaster.h | 4 ++++ 2 files changed, 12 insertions(+) diff --git a/src/cpp/ripple/LedgerMaster.cpp b/src/cpp/ripple/LedgerMaster.cpp index dd93c393ee..56a28a8027 100644 --- a/src/cpp/ripple/LedgerMaster.cpp +++ b/src/cpp/ripple/LedgerMaster.cpp @@ -18,6 +18,14 @@ uint32 LedgerMaster::getCurrentLedgerIndex() return mCurrentLedger->getLedgerSeq(); } +Ledger::ref LedgerMaster::getCurrentSnapshot() +{ + if (!mCurrentSnapshot || (mCurrentSnapshot->getHash() != mCurrentLedger->getHash())) + mCurrentSnapshot = boost::make_shared(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); diff --git a/src/cpp/ripple/LedgerMaster.h b/src/cpp/ripple/LedgerMaster.h index 2d872bbdca..dddffaa42e 100644 --- a/src/cpp/ripple/LedgerMaster.h +++ b/src/cpp/ripple/LedgerMaster.h @@ -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; }