From e5af7072bcf101fc2f5be416a3257d8553d01454 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Thu, 30 Aug 2012 10:04:58 -0700 Subject: [PATCH] Propogate a view change during consensus to the NetworkOPs code. --- src/LedgerConsensus.cpp | 2 ++ src/LedgerTiming.cpp | 2 +- src/NetworkOPs.cpp | 6 ++++++ src/NetworkOPs.h | 1 + 4 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/LedgerConsensus.cpp b/src/LedgerConsensus.cpp index 77a4ac1ac8..ea9f81e99a 100644 --- a/src/LedgerConsensus.cpp +++ b/src/LedgerConsensus.cpp @@ -251,6 +251,8 @@ void LedgerConsensus::checkLCL() if (netLgr != mPrevLedgerHash) { // LCL change Log(lsWARNING) << "View of consensus changed during consensus (" << netLgrCount << ")"; + if (mHaveCorrectLCL) + theApp->getOPs().consensusViewChange(); handleLCL(netLgr); } } diff --git a/src/LedgerTiming.cpp b/src/LedgerTiming.cpp index f10acbaadd..229fa71faa 100644 --- a/src/LedgerTiming.cpp +++ b/src/LedgerTiming.cpp @@ -40,7 +40,7 @@ int ContinuousLedgerTiming::shouldClose( } if (previousMSeconds > (1000 * (LEDGER_IDLE_INTERVAL + 2))) // the last ledger was very slow to close { - Log(lsTRACE) << "slow to close"; + Log(lsTRACE) << "slow to close (p=" << previousmSeconds) << ")"; if (previousMSeconds < 2000) return previousMSeconds; return previousMSeconds - 1000; diff --git a/src/NetworkOPs.cpp b/src/NetworkOPs.cpp index 58bd6290c1..2d210b78db 100644 --- a/src/NetworkOPs.cpp +++ b/src/NetworkOPs.cpp @@ -695,6 +695,12 @@ void NetworkOPs::endConsensus(bool correctLCL) mConsensus = boost::shared_ptr(); } +void NetworkOPs::consensusViewChange() +{ + if ((mMode == omFULL) || (mMode == omTRACKING)) + setMode(omCONNECTED); +} + void NetworkOPs::setMode(OperatingMode om) { if (mMode == om) return; diff --git a/src/NetworkOPs.h b/src/NetworkOPs.h index e0a73052f4..9c16caac19 100644 --- a/src/NetworkOPs.h +++ b/src/NetworkOPs.h @@ -177,6 +177,7 @@ public: void setStandAlone() { setMode(omFULL); } void setStateTimer(); void newLCL(int proposers, int convergeTime, const uint256& ledgerHash); + void consensusViewChange(); int getPreviousProposers() { return mLastCloseProposers; } int getPreviousConvergeTime() { return mLastCloseConvergeTime; } uint32 getLastCloseTime() { return mLastCloseTime; }