Make close time consensus detection use montonic close time rules

This commit is contained in:
JoelKatz
2015-11-03 13:55:54 -08:00
parent 3d5ff2b4cd
commit 3d2aae9ea5

View File

@@ -1551,8 +1551,10 @@ void LedgerConsensusImp::updateOurPositions ()
else
{
// proposal is still fresh
++closeTimes[roundCloseTime (
it->second->getCloseTime (), mCloseResolution)];
++closeTimes[std::max (
roundCloseTime (it->second->getCloseTime (),
mCloseResolution),
mPreviousLedger->info().closeTime + 1)];
++it;
}
}
@@ -1604,16 +1606,20 @@ void LedgerConsensusImp::updateOurPositions ()
{
// no other times
mHaveCloseTimeConsensus = true;
closeTime = roundCloseTime (
mOurPosition->getCloseTime (), mCloseResolution);
closeTime = std::max(
roundCloseTime (mOurPosition->getCloseTime (),
mCloseResolution),
mPreviousLedger->info().closeTime + 1);
}
else
{
int participants = mPeerPositions.size ();
if (mProposing)
{
++closeTimes[roundCloseTime (
mOurPosition->getCloseTime (), mCloseResolution)];
++closeTimes[std::max (
roundCloseTime (mOurPosition->getCloseTime (),
mCloseResolution),
mPreviousLedger->info().closeTime + 1)];
++participants;
}
@@ -1663,8 +1669,7 @@ void LedgerConsensusImp::updateOurPositions ()
}
if (!changes &&
((closeTime != roundCloseTime (
mOurPosition->getCloseTime (), mCloseResolution))
((closeTime != mOurPosition->getCloseTime ())
|| mOurPosition->isStale (ourCutoff)))
{
// close time changed or our position is stale