New wobble handling.

This commit is contained in:
JoelKatz
2012-06-03 19:43:28 -07:00
parent 49235f96d8
commit 3826094819
2 changed files with 17 additions and 18 deletions

View File

@@ -85,11 +85,13 @@ public:
uint64 totCoins, uint64 timeStamp, uint32 ledgerSeq); // used for database ledgers
Ledger(const std::vector<unsigned char>& rawLedger);
Ledger(const std::string& rawLedger);
Ledger(Ledger::pointer previous); // ledger after this one
Ledger(bool fromAccepted, Ledger& previous); // ledger after this one
Ledger(Ledger& target, bool isMutable); // snapshot
void updateHash();
void setClosed() { mClosed = true; }
void setAccepted() { mAccepted = true; }
void setImmutable() { mImmutable = true; }
bool isClosed() { return mClosed; }
bool isAccepted() { return mAccepted; }
@@ -118,6 +120,7 @@ public:
// low level functions
SHAMap::pointer peekTransactionMap() { return mTransactionMap; }
SHAMap::pointer peekAccountStateMap() { return mAccountStateMap; }
Ledger::pointer snapShot(bool isMutable);
// ledger sync functions
void setAcquiring(void);
@@ -129,8 +132,6 @@ public:
bool hasTransaction(const uint256& TransID) const;
Transaction::pointer getTransaction(const uint256& transID) const;
Ledger::pointer switchPreviousLedger(Ledger::pointer oldPrevious, Ledger::pointer newPrevious, int limit);
// high-level functions
AccountState::pointer getAccountState(const NewcoinAddress& acctID);
LedgerStateParms writeBack(LedgerStateParms parms, SLE::pointer);

View File

@@ -39,7 +39,6 @@ void LedgerMaster::pushLedger(Ledger::pointer newLCL, Ledger::pointer newOL)
{
assert(newLCL->isClosed() && newLCL->isAccepted());
assert(!newOL->isClosed() && !newOL->isAccepted());
Log(lsINFO) << "PushAccept: " << newLCL->getHash().GetHex();
ScopedLock sl(mLock);
if (mFinalizedLedger && mFinalizedLedger->isAccepted())
@@ -63,24 +62,22 @@ void LedgerMaster::switchLedgers(Ledger::pointer lastClosed, Ledger::pointer cur
mEngine.setLedger(mCurrentLedger);
}
Ledger::pointer LedgerMaster::closeTime()
{
boost::recursive_mutex::scoped_lock sl(mLock);
assert(mCurrentLedger && mWobbleLedger);
Ledger::pointer ret = mCurrentLedger;
mCurrentLedger = mWobbleLedger;
mEngine.setLedger(mCurrentLedger);
mWobbleLedger = ret;
return ret;
}
void LedgerMaster::beginWobble()
{
boost::recursive_mutex::scoped_lock sl(mLock);
assert(!mWobbleLedger);
mWobbleLedger = mCurrentLedger;
mCurrentLedger = boost::make_shared<Ledger>(mCurrentLedger);
mEngine.setLedger(mCurrentLedger);
mWobbleLedger = boost::make_shared<Ledger>(boost::ref(*mCurrentLedger), true);
mEngine.setDefaultLedger(mCurrentLedger);
mEngine.setAlternateLedger(mWobbleLedger);
}
void LedgerMaster::closeTime()
{ // swap current and wobble ledgers
boost::recursive_mutex::scoped_lock sl(mLock);
assert(mCurrentLedger && mWobbleLedger);
std::swap(mCurrentLedger, mWobbleLedger);
mEngine.setDefaultLedger(mCurrentLedger);
mEngine.setAlternateLedger(mWobbleLedger);
}
Ledger::pointer LedgerMaster::endWobble()
@@ -89,6 +86,7 @@ Ledger::pointer LedgerMaster::endWobble()
assert(mWobbleLedger && mCurrentLedger);
Ledger::pointer ret = mWobbleLedger;
mWobbleLedger = Ledger::pointer();
mEngine.setAlternateLedger(Ledger::pointer());
return ret;
}