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 uint64 totCoins, uint64 timeStamp, uint32 ledgerSeq); // used for database ledgers
Ledger(const std::vector<unsigned char>& rawLedger); Ledger(const std::vector<unsigned char>& rawLedger);
Ledger(const std::string& 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 updateHash();
void setClosed() { mClosed = true; } void setClosed() { mClosed = true; }
void setAccepted() { mAccepted = true; } void setAccepted() { mAccepted = true; }
void setImmutable() { mImmutable = true; }
bool isClosed() { return mClosed; } bool isClosed() { return mClosed; }
bool isAccepted() { return mAccepted; } bool isAccepted() { return mAccepted; }
@@ -118,6 +120,7 @@ public:
// low level functions // low level functions
SHAMap::pointer peekTransactionMap() { return mTransactionMap; } SHAMap::pointer peekTransactionMap() { return mTransactionMap; }
SHAMap::pointer peekAccountStateMap() { return mAccountStateMap; } SHAMap::pointer peekAccountStateMap() { return mAccountStateMap; }
Ledger::pointer snapShot(bool isMutable);
// ledger sync functions // ledger sync functions
void setAcquiring(void); void setAcquiring(void);
@@ -129,8 +132,6 @@ public:
bool hasTransaction(const uint256& TransID) const; bool hasTransaction(const uint256& TransID) const;
Transaction::pointer getTransaction(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 // high-level functions
AccountState::pointer getAccountState(const NewcoinAddress& acctID); AccountState::pointer getAccountState(const NewcoinAddress& acctID);
LedgerStateParms writeBack(LedgerStateParms parms, SLE::pointer); 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(newLCL->isClosed() && newLCL->isAccepted());
assert(!newOL->isClosed() && !newOL->isAccepted()); assert(!newOL->isClosed() && !newOL->isAccepted());
Log(lsINFO) << "PushAccept: " << newLCL->getHash().GetHex();
ScopedLock sl(mLock); ScopedLock sl(mLock);
if (mFinalizedLedger && mFinalizedLedger->isAccepted()) if (mFinalizedLedger && mFinalizedLedger->isAccepted())
@@ -63,24 +62,22 @@ void LedgerMaster::switchLedgers(Ledger::pointer lastClosed, Ledger::pointer cur
mEngine.setLedger(mCurrentLedger); 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() void LedgerMaster::beginWobble()
{ {
boost::recursive_mutex::scoped_lock sl(mLock); boost::recursive_mutex::scoped_lock sl(mLock);
assert(!mWobbleLedger); assert(!mWobbleLedger);
mWobbleLedger = mCurrentLedger; mWobbleLedger = boost::make_shared<Ledger>(boost::ref(*mCurrentLedger), true);
mCurrentLedger = boost::make_shared<Ledger>(mCurrentLedger); mEngine.setDefaultLedger(mCurrentLedger);
mEngine.setLedger(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() Ledger::pointer LedgerMaster::endWobble()
@@ -89,6 +86,7 @@ Ledger::pointer LedgerMaster::endWobble()
assert(mWobbleLedger && mCurrentLedger); assert(mWobbleLedger && mCurrentLedger);
Ledger::pointer ret = mWobbleLedger; Ledger::pointer ret = mWobbleLedger;
mWobbleLedger = Ledger::pointer(); mWobbleLedger = Ledger::pointer();
mEngine.setAlternateLedger(Ledger::pointer());
return ret; return ret;
} }