mirror of
https://github.com/XRPLF/rippled.git
synced 2025-12-06 17:27:55 +00:00
New wobble handling.
This commit is contained in:
@@ -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);
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user