mirror of
https://github.com/Xahau/xahaud.git
synced 2025-12-06 17:27:52 +00:00
Track consensus versus validated ledgers and log discrepancies.
This commit is contained in:
@@ -133,7 +133,10 @@ void LedgerMaster::pushLedger (Ledger::pointer newLCL, Ledger::pointer newOL)
|
||||
tryAdvance();
|
||||
}
|
||||
else
|
||||
{
|
||||
mLedgerHistory.builtLedger (newLCL);
|
||||
checkAccept (newLCL);
|
||||
}
|
||||
}
|
||||
|
||||
void LedgerMaster::switchLedgers (Ledger::pointer lastClosed, Ledger::pointer current)
|
||||
@@ -449,6 +452,7 @@ void LedgerMaster::setFullLedger (Ledger::pointer ledger, bool isSynchronous, bo
|
||||
ledger->setValidated();
|
||||
mLedgerHistory.addLedger(ledger);
|
||||
|
||||
|
||||
ScopedLockType ml (mLock, __FILE__, __LINE__);
|
||||
|
||||
mCompleteLedgers.setValue (ledger->getLedgerSeq ());
|
||||
|
||||
@@ -16,7 +16,9 @@
|
||||
|
||||
// FIXME: Need to clean up ledgers by index at some point
|
||||
|
||||
LedgerHistory::LedgerHistory () : mLedgersByHash ("LedgerCache", CACHED_LEDGER_NUM, CACHED_LEDGER_AGE)
|
||||
LedgerHistory::LedgerHistory ()
|
||||
: mLedgersByHash ("LedgerCache", CACHED_LEDGER_NUM, CACHED_LEDGER_AGE)
|
||||
, mConsensusValidated ("ConsensusValidated", 64, 300)
|
||||
{
|
||||
;
|
||||
}
|
||||
@@ -123,6 +125,54 @@ Ledger::pointer LedgerHistory::canonicalizeLedger (Ledger::pointer ledger, bool
|
||||
return ledger;
|
||||
}
|
||||
|
||||
void LedgerHistory::builtLedger (Ledger::ref ledger)
|
||||
{
|
||||
LedgerIndex index = ledger->getLedgerSeq();
|
||||
LedgerHash hash = ledger->getHash();
|
||||
assert (!hash.isZero());
|
||||
TaggedCache::ScopedLockType sl(mConsensusValidated.peekMutex(), __FILE__, __LINE__);
|
||||
|
||||
boost::shared_ptr< std::pair< LedgerHash, LedgerHash > > entry = boost::make_shared<std::pair< LedgerHash, LedgerHash >>();
|
||||
mConsensusValidated.canonicalize(index, entry, false);
|
||||
|
||||
if (entry->first != hash)
|
||||
{
|
||||
if (entry->first.isNonZero() && (entry->first != hash))
|
||||
{
|
||||
WriteLog (lsERROR, LedgerMaster) << "MISMATCH: seq=" << index << " built:" << entry->first << " then:" << hash;
|
||||
}
|
||||
if (entry->second.isNonZero() && (entry->second != hash))
|
||||
{
|
||||
WriteLog (lsERROR, LedgerMaster) << "MISMATCH: seq=" << index << " validated:" << entry->second << " accepted:" << hash;
|
||||
}
|
||||
entry->first = hash;
|
||||
}
|
||||
}
|
||||
|
||||
void LedgerHistory::validatedLedger (Ledger::ref ledger)
|
||||
{
|
||||
LedgerIndex index = ledger->getLedgerSeq();
|
||||
LedgerHash hash = ledger->getHash();
|
||||
assert (!hash.isZero());
|
||||
TaggedCache::ScopedLockType sl(mConsensusValidated.peekMutex(), __FILE__, __LINE__);
|
||||
|
||||
boost::shared_ptr< std::pair< LedgerHash, LedgerHash > > entry = boost::make_shared<std::pair< LedgerHash, LedgerHash >>();
|
||||
mConsensusValidated.canonicalize(index, entry, false);
|
||||
|
||||
if (entry->second != hash)
|
||||
{
|
||||
if (entry->second.isNonZero() && (entry->second != hash))
|
||||
{
|
||||
WriteLog (lsERROR, LedgerMaster) << "MISMATCH: seq=" << index << " validated:" << entry->second << " then:" << hash;
|
||||
}
|
||||
if (entry->first.isNonZero() && (entry->first != hash))
|
||||
{
|
||||
WriteLog (lsERROR, LedgerMaster) << "MISMATCH: seq=" << index << " built:" << entry->first << " validated:" << hash;
|
||||
}
|
||||
entry->second = hash;
|
||||
}
|
||||
}
|
||||
|
||||
void LedgerHistory::tune (int size, int age)
|
||||
{
|
||||
mLedgersByHash.setTargetSize (size);
|
||||
|
||||
@@ -34,10 +34,16 @@ public:
|
||||
void sweep ()
|
||||
{
|
||||
mLedgersByHash.sweep ();
|
||||
mConsensusValidated.sweep ();
|
||||
}
|
||||
|
||||
void builtLedger (Ledger::ref);
|
||||
void validatedLedger (Ledger::ref);
|
||||
|
||||
private:
|
||||
TaggedCacheType <LedgerHash, Ledger, UptimeTimerAdapter> mLedgersByHash;
|
||||
TaggedCacheType <LedgerIndex, std::pair< LedgerHash, LedgerHash >, UptimeTimerAdapter> mConsensusValidated;
|
||||
|
||||
|
||||
// Maps ledger indexes to the corresponding hash.
|
||||
std::map <LedgerIndex, LedgerHash> mLedgersByIndex; // validated ledgers
|
||||
|
||||
Reference in New Issue
Block a user