Begin replacing old logic with new.

This commit is contained in:
JoelKatz
2013-08-08 14:21:03 -07:00
parent d469e4fc6e
commit 93b8e561ae
11 changed files with 62 additions and 77 deletions

View File

@@ -1302,7 +1302,7 @@ void LedgerConsensus::accept (SHAMap::ref set, LoadEvent::pointer)
WriteLog (lsDEBUG, LedgerConsensus) << "Applying transactions from current open ledger"; WriteLog (lsDEBUG, LedgerConsensus) << "Applying transactions from current open ledger";
applyTransactions (getApp().getLedgerMaster ().getCurrentLedger ()->peekTransactionMap (), newOL, newLCL, applyTransactions (getApp().getLedgerMaster ().getCurrentLedger ()->peekTransactionMap (), newOL, newLCL,
failedTransactions, true); failedTransactions, true);
getApp().getLedgerMaster ().pushLedger (newLCL, newOL, !mConsensusFail); getApp().getLedgerMaster ().pushLedger (newLCL, newOL);
mNewLedgerHash = newLCL->getHash (); mNewLedgerHash = newLCL->getHash ();
mState = lcsACCEPTED; mState = lcsACCEPTED;
sl.unlock (); sl.unlock ();

View File

@@ -504,9 +504,9 @@ uint256 Ledger::getHash ()
return mHash; return mHash;
} }
void Ledger::saveAcceptedLedger (Job&, bool fromConsensus) void Ledger::saveValidatedLedger (bool current)
{ {
WriteLog (lsTRACE, Ledger) << "saveAcceptedLedger " << (fromConsensus ? "fromConsensus " : "fromAcquire ") << getLedgerSeq (); WriteLog (lsTRACE, Ledger) << "saveValidatedLedger " << (current ? "" : "fromAcquire ") << getLedgerSeq ();
static boost::format deleteLedger ("DELETE FROM Ledgers WHERE LedgerSeq = %u;"); static boost::format deleteLedger ("DELETE FROM Ledgers WHERE LedgerSeq = %u;");
static boost::format deleteTrans1 ("DELETE FROM Transactions WHERE LedgerSeq = %u;"); static boost::format deleteTrans1 ("DELETE FROM Transactions WHERE LedgerSeq = %u;");
static boost::format deleteTrans2 ("DELETE FROM AccountTransactions WHERE LedgerSeq = %u;"); static boost::format deleteTrans2 ("DELETE FROM AccountTransactions WHERE LedgerSeq = %u;");
@@ -527,7 +527,7 @@ void Ledger::saveAcceptedLedger (Job&, bool fromConsensus)
if (getAccountHash () != mAccountStateMap->getHash ()) if (getAccountHash () != mAccountStateMap->getHash ())
{ {
WriteLog (lsFATAL, Ledger) << "sAL: " << getAccountHash () << " != " << mAccountStateMap->getHash (); WriteLog (lsFATAL, Ledger) << "sAL: " << getAccountHash () << " != " << mAccountStateMap->getHash ();
WriteLog (lsFATAL, Ledger) << "saveAcceptedLedger: seq=" << mLedgerSeq << ", fromcons=" << fromConsensus; WriteLog (lsFATAL, Ledger) << "saveAcceptedLedger: seq=" << mLedgerSeq << ", current=" << current;
assert (false); assert (false);
} }
@@ -612,9 +612,6 @@ void Ledger::saveAcceptedLedger (Job&, bool fromConsensus)
mCloseResolution % mCloseFlags % mAccountHash.GetHex () % mTransHash.GetHex ())); mCloseResolution % mCloseFlags % mAccountHash.GetHex () % mTransHash.GetHex ()));
} }
if (!fromConsensus && (getConfig ().NODE_SIZE < 2)) // tiny or small
dropCache ();
{ // Clients can now trust the database for information about this ledger sequence { // Clients can now trust the database for information about this ledger sequence
boost::mutex::scoped_lock sl (sPendingSaveLock); boost::mutex::scoped_lock sl (sPendingSaveLock);
sPendingSaves.erase(getLedgerSeq()); sPendingSaves.erase(getLedgerSeq());
@@ -1817,24 +1814,32 @@ uint32 Ledger::roundCloseTime (uint32 closeTime, uint32 closeResolution)
return closeTime - (closeTime % closeResolution); return closeTime - (closeTime % closeResolution);
} }
void Ledger::pendSave (bool fromConsensus) bool Ledger::pendSaveValidated (bool isSynchronous, bool isCurrent)
{ {
if (!fromConsensus && !getApp().getHashRouter ().setFlag (getHash (), SF_SAVED)) if (!getApp().getHashRouter ().setFlag (getHash (), SF_SAVED))
return; return false;
assert (isImmutable ()); assert (isImmutable ());
{ {
boost::mutex::scoped_lock sl (sPendingSaveLock); boost::mutex::scoped_lock sl (sPendingSaveLock);
if (!sPendingSaves.insert(getLedgerSeq()).second) if (!sPendingSaves.insert(getLedgerSeq()).second)
return; return false;
} }
getApp().getJobQueue ().addJob ( if (isSynchronous)
fromConsensus ? jtPUBLEDGER : jtPUBOLDLEDGER, {
fromConsensus ? "Ledger::pendSave" : "Ledger::pendOldSave", saveValidatedLedger(isCurrent);
BIND_TYPE (&Ledger::saveAcceptedLedger, shared_from_this (), P_1, fromConsensus)); }
else
{
getApp().getJobQueue ().addJob (
isCurrent ? jtPUBLEDGER : jtPUBOLDLEDGER,
isCurrent ? "Ledger::pendSave" : "Ledger::pendOldSave",
BIND_TYPE (&Ledger::saveValidatedLedgerAsync, shared_from_this (), P_1, isCurrent));
}
return true;
} }
std::set<uint32> Ledger::getPendingSaves() std::set<uint32> Ledger::getPendingSaves()

View File

@@ -236,7 +236,7 @@ public:
static uint256 getHashByIndex (uint32 index); static uint256 getHashByIndex (uint32 index);
static bool getHashesByIndex (uint32 index, uint256 & ledgerHash, uint256 & parentHash); static bool getHashesByIndex (uint32 index, uint256 & ledgerHash, uint256 & parentHash);
static std::map< uint32, std::pair<uint256, uint256> > getHashesByIndex (uint32 minSeq, uint32 maxSeq); static std::map< uint32, std::pair<uint256, uint256> > getHashesByIndex (uint32 minSeq, uint32 maxSeq);
void pendSave (bool fromConsensus); bool pendSaveValidated (bool isSynchronous, bool isCurrent);
// next/prev function // next/prev function
SLE::pointer getSLE (uint256 const & uHash); // SLE is mutable SLE::pointer getSLE (uint256 const & uHash); // SLE is mutable
@@ -435,7 +435,11 @@ protected:
// returned SLE is immutable // returned SLE is immutable
SLE::pointer getASNodeI (uint256 const & nodeID, LedgerEntryType let); SLE::pointer getASNodeI (uint256 const & nodeID, LedgerEntryType let);
void saveAcceptedLedger (Job&, bool fromConsensus); void saveValidatedLedgerAsync(Job&, bool current)
{
saveValidatedLedger(current);
}
void saveValidatedLedger (bool current);
void updateFees (); void updateFees ();

View File

@@ -93,21 +93,18 @@ void LedgerMaster::pushLedger (Ledger::pointer newLedger)
boost::recursive_mutex::scoped_lock ml (mLock); boost::recursive_mutex::scoped_lock ml (mLock);
if (!mPubLedger) if (mClosedLedger)
mPubLedger = newLedger;
if (!!mFinalizedLedger)
{ {
mFinalizedLedger->setClosed (); mClosedLedger->setClosed ();
WriteLog (lsTRACE, LedgerMaster) << "Finalizes: " << mFinalizedLedger->getHash (); WriteLog (lsTRACE, LedgerMaster) << "Finalizes: " << mClosedLedger->getHash ();
} }
mFinalizedLedger = mCurrentLedger; mClosedLedger = mCurrentLedger;
mCurrentLedger = newLedger; mCurrentLedger = newLedger;
mEngine.setLedger (newLedger); mEngine.setLedger (newLedger);
} }
void LedgerMaster::pushLedger (Ledger::pointer newLCL, Ledger::pointer newOL, bool fromConsensus) void LedgerMaster::pushLedger (Ledger::pointer newLCL, Ledger::pointer newOL)
{ {
assert (newLCL->isClosed () && newLCL->isAccepted ()); assert (newLCL->isClosed () && newLCL->isAccepted ());
assert (!newOL->isClosed () && !newOL->isAccepted ()); assert (!newOL->isClosed () && !newOL->isAccepted ());
@@ -118,13 +115,13 @@ void LedgerMaster::pushLedger (Ledger::pointer newLCL, Ledger::pointer newOL, bo
{ {
assert (newLCL->isClosed ()); assert (newLCL->isClosed ());
assert (newLCL->isImmutable ()); assert (newLCL->isImmutable ());
mLedgerHistory.addAcceptedLedger (newLCL, fromConsensus); mLedgerHistory.addAcceptedLedger (newLCL);
WriteLog (lsINFO, LedgerMaster) << "StashAccepted: " << newLCL->getHash (); WriteLog (lsINFO, LedgerMaster) << "StashAccepted: " << newLCL->getHash ();
} }
{ {
boost::recursive_mutex::scoped_lock ml (mLock); boost::recursive_mutex::scoped_lock ml (mLock);
mFinalizedLedger = newLCL; mClosedLedger = newLCL;
mCurrentLedger = newOL; mCurrentLedger = newOL;
mEngine.setLedger (newOL); mEngine.setLedger (newOL);
} }
@@ -138,9 +135,9 @@ void LedgerMaster::switchLedgers (Ledger::pointer lastClosed, Ledger::pointer cu
{ {
boost::recursive_mutex::scoped_lock ml (mLock); boost::recursive_mutex::scoped_lock ml (mLock);
mFinalizedLedger = lastClosed; mClosedLedger = lastClosed;
mFinalizedLedger->setClosed (); mClosedLedger->setClosed ();
mFinalizedLedger->setAccepted (); mClosedLedger->setAccepted ();
mCurrentLedger = current; mCurrentLedger = current;
assert (!mCurrentLedger->isClosed ()); assert (!mCurrentLedger->isClosed ());
@@ -154,7 +151,7 @@ void LedgerMaster::storeLedger (Ledger::pointer ledger)
mLedgerHistory.addLedger (ledger); mLedgerHistory.addLedger (ledger);
if (ledger->isAccepted ()) if (ledger->isAccepted ())
mLedgerHistory.addAcceptedLedger (ledger, false); mLedgerHistory.addAcceptedLedger (ledger);
} }
void LedgerMaster::forceValid (Ledger::pointer ledger) void LedgerMaster::forceValid (Ledger::pointer ledger)
@@ -344,8 +341,9 @@ void LedgerMaster::asyncAccept (Ledger::pointer ledger)
resumeAcquiring (); resumeAcquiring ();
} }
bool LedgerMaster::acquireMissingLedger (Ledger::ref origLedger, uint256 const& ledgerHash, uint32 ledgerSeq) void LedgerMaster::acquireMissingLedger (Ledger::ref origLedger, uint256 const& ledgerHash, uint32 ledgerSeq)
{ {
#if 0
// return: false = already gave up recently // return: false = already gave up recently
Ledger::pointer ledger = mLedgerHistory.getLedgerBySeq (ledgerSeq); Ledger::pointer ledger = mLedgerHistory.getLedgerBySeq (ledgerSeq);
@@ -383,12 +381,6 @@ bool LedgerMaster::acquireMissingLedger (Ledger::ref origLedger, uint256 const&
mMissingSeq = ledgerSeq; mMissingSeq = ledgerSeq;
if (mMissingLedger->setAccept ())
{
if (!mMissingLedger->addOnComplete (BIND_TYPE (&LedgerMaster::missingAcquireComplete, this, P_1)))
getApp().getIOService ().post (BIND_TYPE (&LedgerMaster::missingAcquireComplete, this, mMissingLedger));
}
int fetchMax = getConfig ().getSize (siLedgerFetch); int fetchMax = getConfig ().getSize (siLedgerFetch);
int timeoutCount; int timeoutCount;
int fetchCount = getApp().getInboundLedgers ().getFetchCount (timeoutCount); int fetchCount = getApp().getInboundLedgers ().getFetchCount (timeoutCount);
@@ -462,10 +454,13 @@ bool LedgerMaster::acquireMissingLedger (Ledger::ref origLedger, uint256 const&
} }
return true; return true;
#endif
} }
void LedgerMaster::missingAcquireComplete (InboundLedger::pointer acq) void LedgerMaster::missingAcquireComplete (InboundLedger::pointer acq)
{ {
#if 0
boost::recursive_mutex::scoped_lock ml (mLock); boost::recursive_mutex::scoped_lock ml (mLock);
if (acq->isFailed () && (mMissingSeq != 0)) if (acq->isFailed () && (mMissingSeq != 0))
@@ -482,6 +477,7 @@ void LedgerMaster::missingAcquireComplete (InboundLedger::pointer acq)
setFullLedger (acq->getLedger ()); setFullLedger (acq->getLedger ());
mLedgerHistory.addAcceptedLedger (acq->getLedger (), false); mLedgerHistory.addAcceptedLedger (acq->getLedger (), false);
} }
#endif
} }
bool LedgerMaster::shouldAcquire (uint32 currentLedger, uint32 ledgerHistory, uint32 candidateLedger) bool LedgerMaster::shouldAcquire (uint32 currentLedger, uint32 ledgerHistory, uint32 candidateLedger)
@@ -518,7 +514,7 @@ void LedgerMaster::resumeAcquiring ()
return; return;
} }
uint32 prevMissing = mCompleteLedgers.prevMissing (mFinalizedLedger->getLedgerSeq ()); uint32 prevMissing = mCompleteLedgers.prevMissing (mClosedLedger->getLedgerSeq ());
if (prevMissing == RangeSet::absent) if (prevMissing == RangeSet::absent)
{ {
@@ -573,7 +569,7 @@ void LedgerMaster::fixMismatch (Ledger::ref ledger)
CondLog (invalidate != 0, lsWARNING, LedgerMaster) << "All " << invalidate << " prior ledgers invalidated"; CondLog (invalidate != 0, lsWARNING, LedgerMaster) << "All " << invalidate << " prior ledgers invalidated";
} }
void LedgerMaster::setFullLedger (Ledger::pointer ledger) void LedgerMaster::setFullLedger (Ledger::pointer ledger, bool isSynchronous, bool isCurrent)
{ {
// A new ledger has been accepted as part of the trusted chain // A new ledger has been accepted as part of the trusted chain
WriteLog (lsDEBUG, LedgerMaster) << "Ledger " << ledger->getLedgerSeq () << " accepted :" << ledger->getHash (); WriteLog (lsDEBUG, LedgerMaster) << "Ledger " << ledger->getLedgerSeq () << " accepted :" << ledger->getHash ();
@@ -587,7 +583,7 @@ void LedgerMaster::setFullLedger (Ledger::pointer ledger)
mCompleteLedgers.setValue (ledger->getLedgerSeq ()); mCompleteLedgers.setValue (ledger->getLedgerSeq ());
if (Ledger::getHashByIndex (ledger->getLedgerSeq ()) != ledger->getHash ()) if (Ledger::getHashByIndex (ledger->getLedgerSeq ()) != ledger->getHash ())
ledger->pendSave (false); ledger->pendSaveValidated (isSynchronous, isCurrent);
if ((ledger->getLedgerSeq () != 0) && mCompleteLedgers.hasValue (ledger->getLedgerSeq () - 1)) if ((ledger->getLedgerSeq () != 0) && mCompleteLedgers.hasValue (ledger->getLedgerSeq () - 1))
{ {
@@ -780,7 +776,7 @@ void LedgerMaster::tryPublish ()
if (!acq->isDone ()) if (!acq->isDone ())
{ {
acq->setAccept (); nothing ();
} }
else if (acq->isComplete () && !acq->isFailed ()) else if (acq->isComplete () && !acq->isFailed ())
{ {
@@ -791,7 +787,7 @@ void LedgerMaster::tryPublish ()
WriteLog (lsWARNING, LedgerMaster) << "Failed to acquire a published ledger"; WriteLog (lsWARNING, LedgerMaster) << "Failed to acquire a published ledger";
getApp().getInboundLedgers().dropLedger(hash); getApp().getInboundLedgers().dropLedger(hash);
acq = getApp().getInboundLedgers().findCreate(hash, seq); acq = getApp().getInboundLedgers().findCreate(hash, seq);
acq->setAccept(); nothing ();
if (acq->isDone()) if (acq->isDone())
ledger = acq->getLedger(); ledger = acq->getLedger();
} }
@@ -885,7 +881,7 @@ void LedgerMaster::pubThread ()
BOOST_FOREACH (Ledger::ref l, ledgers) BOOST_FOREACH (Ledger::ref l, ledgers)
{ {
WriteLog (lsDEBUG, LedgerMaster) << "Publishing ledger " << l->getLedgerSeq (); WriteLog (lsDEBUG, LedgerMaster) << "Publishing ledger " << l->getLedgerSeq ();
setFullLedger (l); // OPTIMIZEME: This is actually more work than we need to do setFullLedger (l, true, true);
getApp().getOPs ().pubLedger (l); getApp().getOPs ().pubLedger (l);
published = true; published = true;
} }

View File

@@ -55,7 +55,7 @@ public:
// The finalized ledger is the last closed/accepted ledger // The finalized ledger is the last closed/accepted ledger
Ledger::ref getClosedLedger () Ledger::ref getClosedLedger ()
{ {
return mFinalizedLedger; return mClosedLedger;
} }
// The validated ledger is the last fully validated ledger // The validated ledger is the last fully validated ledger
@@ -86,11 +86,11 @@ public:
} }
void pushLedger (Ledger::pointer newLedger); void pushLedger (Ledger::pointer newLedger);
void pushLedger (Ledger::pointer newLCL, Ledger::pointer newOL, bool fromConsensus); void pushLedger (Ledger::pointer newLCL, Ledger::pointer newOL);
void storeLedger (Ledger::pointer); void storeLedger (Ledger::pointer);
void forceValid (Ledger::pointer); void forceValid (Ledger::pointer);
void setFullLedger (Ledger::pointer ledger); void setFullLedger (Ledger::pointer ledger, bool isSynchronous, bool isCurrent);
void switchLedgers (Ledger::pointer lastClosed, Ledger::pointer newCurrent); void switchLedgers (Ledger::pointer lastClosed, Ledger::pointer newCurrent);
@@ -117,8 +117,8 @@ public:
if (mCurrentLedger && (mCurrentLedger->getLedgerSeq () == index)) if (mCurrentLedger && (mCurrentLedger->getLedgerSeq () == index))
return mCurrentLedger; return mCurrentLedger;
if (mFinalizedLedger && (mFinalizedLedger->getLedgerSeq () == index)) if (mClosedLedger && (mClosedLedger->getLedgerSeq () == index))
return mFinalizedLedger; return mClosedLedger;
Ledger::pointer ret = mLedgerHistory.getLedgerBySeq (index); Ledger::pointer ret = mLedgerHistory.getLedgerBySeq (index);
@@ -138,8 +138,8 @@ public:
if (mCurrentLedger && (mCurrentLedger->getHash () == hash)) if (mCurrentLedger && (mCurrentLedger->getHash () == hash))
return boost::make_shared<Ledger> (boost::ref (*mCurrentLedger), false); return boost::make_shared<Ledger> (boost::ref (*mCurrentLedger), false);
if (mFinalizedLedger && (mFinalizedLedger->getHash () == hash)) if (mClosedLedger && (mClosedLedger->getHash () == hash))
return mFinalizedLedger; return mClosedLedger;
return mLedgerHistory.getLedgerByHash (hash); return mLedgerHistory.getLedgerByHash (hash);
} }
@@ -191,7 +191,7 @@ private:
bool isValidTransaction (Transaction::ref trans); bool isValidTransaction (Transaction::ref trans);
bool isTransactionOnFutureList (Transaction::ref trans); bool isTransactionOnFutureList (Transaction::ref trans);
bool acquireMissingLedger (Ledger::ref from, uint256 const& ledgerHash, uint32 ledgerSeq); void acquireMissingLedger (Ledger::ref from, uint256 const& ledgerHash, uint32 ledgerSeq);
void asyncAccept (Ledger::pointer); void asyncAccept (Ledger::pointer);
void missingAcquireComplete (InboundLedger::pointer); void missingAcquireComplete (InboundLedger::pointer);
void pubThread (); void pubThread ();
@@ -204,7 +204,7 @@ private:
Ledger::pointer mCurrentLedger; // The ledger we are currently processiong Ledger::pointer mCurrentLedger; // The ledger we are currently processiong
Ledger::pointer mCurrentSnapshot; // Snapshot of the current ledger Ledger::pointer mCurrentSnapshot; // Snapshot of the current ledger
Ledger::pointer mFinalizedLedger; // The ledger that most recently closed Ledger::pointer mClosedLedger; // The ledger that most recently closed
Ledger::pointer mValidLedger; // The highest-sequence ledger we have fully accepted Ledger::pointer mValidLedger; // The highest-sequence ledger we have fully accepted
Ledger::pointer mPubLedger; // The last ledger we have published Ledger::pointer mPubLedger; // The last ledger we have published

View File

@@ -19,7 +19,6 @@ InboundLedger::InboundLedger (uint256 const& hash, uint32 seq)
, mHaveTransactions (false) , mHaveTransactions (false)
, mAborted (false) , mAborted (false)
, mSignaled (false) , mSignaled (false)
, mAccept (false)
, mByHash (true) , mByHash (true)
, mWaitCount (0) , mWaitCount (0)
, mSeq (seq) , mSeq (seq)
@@ -267,10 +266,6 @@ void InboundLedger::done ()
{ {
mLedger->setClosed (); mLedger->setClosed ();
mLedger->setImmutable (); mLedger->setImmutable ();
if (mAccept)
mLedger->setAccepted ();
getApp().getLedgerMaster ().storeLedger (mLedger); getApp().getLedgerMaster ().storeLedger (mLedger);
} }
else else

View File

@@ -56,17 +56,6 @@ public:
return mSeq; return mSeq;
} }
// VFALCO NOTE what is the meaning of the return value?
bool setAccept ()
{
if (mAccept)
return false;
mAccept = true;
return true;
}
// VFALCO TODO Make thise the Listener / Observer pattern // VFALCO TODO Make thise the Listener / Observer pattern
bool addOnComplete (FUNCTION_TYPE<void (InboundLedger::pointer)>); bool addOnComplete (FUNCTION_TYPE<void (InboundLedger::pointer)>);
@@ -112,7 +101,6 @@ private:
bool mHaveTransactions; bool mHaveTransactions;
bool mAborted; bool mAborted;
bool mSignaled; bool mSignaled;
bool mAccept;
bool mByHash; bool mByHash;
beast::Atomic<int> mWaitCount; beast::Atomic<int> mWaitCount;
uint32 mSeq; uint32 mSeq;

View File

@@ -27,7 +27,7 @@ void LedgerHistory::addLedger (Ledger::pointer ledger)
mLedgersByHash.canonicalize (ledger->getHash (), ledger, true); mLedgersByHash.canonicalize (ledger->getHash (), ledger, true);
} }
void LedgerHistory::addAcceptedLedger (Ledger::pointer ledger, bool fromConsensus) void LedgerHistory::addAcceptedLedger (Ledger::pointer ledger)
{ {
assert (ledger && ledger->isAccepted () && ledger->isImmutable ()); assert (ledger && ledger->isAccepted () && ledger->isImmutable ());
assert (ledger->peekAccountStateMap ()->getHash ().isNonZero ()); assert (ledger->peekAccountStateMap ()->getHash ().isNonZero ());
@@ -37,9 +37,6 @@ void LedgerHistory::addAcceptedLedger (Ledger::pointer ledger, bool fromConsensu
assert (ledger); assert (ledger);
assert (ledger->isAccepted ()); assert (ledger->isAccepted ());
assert (ledger->isImmutable ()); assert (ledger->isImmutable ());
mLedgersByIndex[ledger->getLedgerSeq ()] = ledger->getHash ();
ledger->pendSave (fromConsensus);
} }
uint256 LedgerHistory::getLedgerHash (uint32 index) uint256 LedgerHistory::getLedgerHash (uint32 index)

View File

@@ -15,7 +15,7 @@ public:
void addLedger (Ledger::pointer ledger); void addLedger (Ledger::pointer ledger);
void addAcceptedLedger (Ledger::pointer ledger, bool fromConsensus); void addAcceptedLedger (Ledger::pointer ledger);
float getCacheHitRate () float getCacheHitRate ()
{ {

View File

@@ -815,7 +815,7 @@ void ApplicationImp::startNewLedger ()
Ledger::pointer secondLedger = boost::make_shared<Ledger> (true, boost::ref (*firstLedger)); Ledger::pointer secondLedger = boost::make_shared<Ledger> (true, boost::ref (*firstLedger));
secondLedger->setClosed (); secondLedger->setClosed ();
secondLedger->setAccepted (); secondLedger->setAccepted ();
mLedgerMaster.pushLedger (secondLedger, boost::make_shared<Ledger> (true, boost::ref (*secondLedger)), false); mLedgerMaster.pushLedger (secondLedger, boost::make_shared<Ledger> (true, boost::ref (*secondLedger)));
assert (!!secondLedger->getAccountState (rootAddress)); assert (!!secondLedger->getAccountState (rootAddress));
mNetOps->setLastCloseTime (secondLedger->getCloseTimeNC ()); mNetOps->setLastCloseTime (secondLedger->getCloseTimeNC ());
} }

View File

@@ -1272,7 +1272,7 @@ NetworkOPs::getAccountTxs (const RippleAddress& account, int32 minLedger, int32
WriteLog(lsWARNING, NetworkOPs) << "Recovering ledger " << seq << ", txn " << txn->getID(); WriteLog(lsWARNING, NetworkOPs) << "Recovering ledger " << seq << ", txn " << txn->getID();
Ledger::pointer ledger = getLedgerBySeq(seq); Ledger::pointer ledger = getLedgerBySeq(seq);
if (ledger) if (ledger)
ledger->pendSave(false); ledger->pendSaveValidated(false, false);
} }
TransactionMetaSet::pointer meta = boost::make_shared<TransactionMetaSet> (txn->getID (), txn->getLedger (), rawMeta.getData ()); TransactionMetaSet::pointer meta = boost::make_shared<TransactionMetaSet> (txn->getID (), txn->getLedger (), rawMeta.getData ());