Update to support accepting ledgers acquired during the history fill.

This commit is contained in:
JoelKatz
2012-10-24 07:26:05 -07:00
parent 5684a8e233
commit 0ac4185ff9
7 changed files with 24 additions and 9 deletions

View File

@@ -337,7 +337,7 @@ uint256 Ledger::getHash()
return mHash;
}
void Ledger::saveAcceptedLedger()
void Ledger::saveAcceptedLedger(bool fromConsensus)
{ // can be called in a different thread
static boost::format ledgerExists("SELECT LedgerSeq FROM Ledgers where LedgerSeq = %d;");
static boost::format deleteLedger("DELETE FROM Ledgers WHERE LedgerSeq = %d;");
@@ -428,6 +428,9 @@ void Ledger::saveAcceptedLedger()
mAccountHash.GetHex() % mTransHash.GetHex()));
}
if (!fromConsensus)
return;
theApp->getOPs().pubLedger(shared_from_this());
if(theConfig.FULL_HISTORY)

View File

@@ -157,7 +157,7 @@ public:
SLE::pointer getAccountRoot(const NewcoinAddress& naAccountID);
// database functions
void saveAcceptedLedger();
void saveAcceptedLedger(bool fromConsensus);
static Ledger::pointer loadByIndex(uint32 ledgerIndex);
static Ledger::pointer loadByHash(const uint256& ledgerHash);

View File

@@ -91,7 +91,7 @@ void PeerSet::TimerEntry(boost::weak_ptr<PeerSet> wptr, const boost::system::err
}
LedgerAcquire::LedgerAcquire(const uint256& hash) : PeerSet(hash, LEDGER_ACQUIRE_TIMEOUT),
mHaveBase(false), mHaveState(false), mHaveTransactions(false), mAborted(false), mSignaled(false)
mHaveBase(false), mHaveState(false), mHaveTransactions(false), mAborted(false), mSignaled(false), mAccept(false)
{
#ifdef LA_DEBUG
cLog(lsTRACE) << "Acquiring ledger " << mHash;
@@ -169,7 +169,11 @@ void LedgerAcquire::done()
mLock.unlock();
if (mLedger)
{
if (mAccept)
mLedger->setAccepted();
theApp->getMasterLedger().storeLedger(mLedger);
}
for (unsigned int i = 0; i < triggers.size(); ++i)
triggers[i](shared_from_this());
@@ -619,6 +623,7 @@ void LedgerAcquireSet::updateCurrentLedger(Ledger::pointer currentLedger)
{ // the next ledger we need is missing or missing nodes
LedgerAcquire::pointer nextAcquire =
theApp->getMasterLedgerAcquire().findCreate(currentLedger->getParentHash());
nextAcquire->setAccept();
if (mCurrentLedger)
nextAcquire->takePeerSetFrom(*mCurrentLedger);
mCurrentLedger = nextAcquire;
@@ -639,7 +644,11 @@ void LedgerAcquireSet::onComplete(boost::weak_ptr<LedgerAcquireSet> set, LedgerA
return;
if (acquired->isComplete())
lSet->updateCurrentLedger(acquired->getLedger());
{
Ledger::pointer ledger = acquired->getLedger();
ledger->setAccepted();
lSet->updateCurrentLedger(ledger);
}
else
{
cLog(lsWARNING) << "Bailing on LedgerAcquireSet due to failure to acquire a ledger";

View File

@@ -68,7 +68,7 @@ public:
protected:
Ledger::pointer mLedger;
bool mHaveBase, mHaveState, mHaveTransactions, mAborted, mSignaled;
bool mHaveBase, mHaveState, mHaveTransactions, mAborted, mSignaled, mAccept;
std::vector< boost::function<void (LedgerAcquire::pointer)> > mOnComplete;
@@ -88,6 +88,7 @@ public:
bool isTransComplete() const { return mHaveTransactions; }
Ledger::pointer getLedger() { return mLedger; }
void abort() { mAborted = true; }
void setAccept() { mAccept = true; }
void addOnComplete(boost::function<void (LedgerAcquire::pointer)>);

View File

@@ -26,7 +26,7 @@ void LedgerHistory::addLedger(Ledger::pointer ledger)
mLedgersByHash.canonicalize(ledger->getHash(), ledger, true);
}
void LedgerHistory::addAcceptedLedger(Ledger::pointer ledger)
void LedgerHistory::addAcceptedLedger(Ledger::pointer ledger, bool fromConsensus)
{
assert(ledger && ledger->isAccepted());
uint256 h(ledger->getHash());
@@ -37,7 +37,7 @@ void LedgerHistory::addAcceptedLedger(Ledger::pointer ledger)
assert(ledger->isImmutable());
mLedgersByIndex.insert(std::make_pair(ledger->getLedgerSeq(), ledger));
boost::thread thread(boost::bind(&Ledger::saveAcceptedLedger, ledger));
boost::thread thread(boost::bind(&Ledger::saveAcceptedLedger, ledger, fromConsensus));
thread.detach();
}

View File

@@ -13,7 +13,7 @@ public:
LedgerHistory();
void addLedger(Ledger::pointer ledger);
void addAcceptedLedger(Ledger::pointer ledger);
void addAcceptedLedger(Ledger::pointer ledger, bool fromConsensus);
Ledger::pointer getLedgerBySeq(uint32 index);
Ledger::pointer getLedgerByHash(const uint256& hash);

View File

@@ -45,7 +45,7 @@ void LedgerMaster::pushLedger(Ledger::ref newLCL, Ledger::ref newOL)
{
assert(newLCL->isClosed());
assert(newLCL->isImmutable());
mLedgerHistory.addAcceptedLedger(newLCL);
mLedgerHistory.addAcceptedLedger(newLCL, false);
if (mLastFullLedger && (newLCL->getParentHash() == mLastFullLedger->getHash()))
mLastFullLedger = newLCL;
Log(lsINFO) << "StashAccepted: " << newLCL->getHash();
@@ -72,6 +72,8 @@ void LedgerMaster::switchLedgers(Ledger::ref lastClosed, Ledger::ref current)
void LedgerMaster::storeLedger(Ledger::ref ledger)
{
mLedgerHistory.addLedger(ledger);
if (ledger->isAccepted())
mLedgerHistory.addAcceptedLedger(ledger, false);
}