From d9c0f52846331217823c82b04cc7931308c0d96b Mon Sep 17 00:00:00 2001 From: orignal Date: Fri, 5 Jun 2015 22:09:16 -0400 Subject: [PATCH] don't pick node for 5 minutes if declined --- Profiling.cpp | 12 +++++++++--- Profiling.h | 2 +- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/Profiling.cpp b/Profiling.cpp index c5587f9a..43dad505 100644 --- a/Profiling.cpp +++ b/Profiling.cpp @@ -11,6 +11,7 @@ namespace data { RouterProfile::RouterProfile (const IdentHash& identHash): m_IdentHash (identHash), m_LastUpdateTime (boost::posix_time::second_clock::local_time()), + m_LastDeclinedTime (boost::posix_time::min_date_time), m_NumTunnelsAgreed (0), m_NumTunnelsDeclined (0), m_NumTunnelsNonReplied (0), m_NumTimesTaken (0), m_NumTimesRejected (0) { @@ -137,11 +138,14 @@ namespace data void RouterProfile::TunnelBuildResponse (uint8_t ret) { + UpdateTime (); if (ret > 0) + { + m_LastDeclinedTime = m_LastUpdateTime; m_NumTunnelsDeclined++; + } else m_NumTunnelsAgreed++; - UpdateTime (); } void RouterProfile::TunnelNonReplied () @@ -163,7 +167,8 @@ namespace data bool RouterProfile::IsBad () { - auto elapsedTime = (GetTime () - m_LastUpdateTime).total_seconds (); + auto t = GetTime (); + auto elapsedTime = (t - m_LastUpdateTime).total_seconds (); if (elapsedTime > 1800) { m_NumTunnelsNonReplied = 0; // drop non-replied after 30 minutes of inactivity @@ -173,7 +178,8 @@ namespace data m_NumTunnelsDeclined = 0; } } - auto isBad = IsAlwaysDeclining () || IsLowPartcipationRate () || IsLowReplyRate (); + auto isBad = IsAlwaysDeclining () || IsLowPartcipationRate () || IsLowReplyRate () || + ((t - m_LastDeclinedTime).total_seconds () < 300); // declined in last 5 minutes if (isBad) m_NumTimesRejected++; else m_NumTimesTaken++; return isBad; } diff --git a/Profiling.h b/Profiling.h index 0690d6cb..09dc35c4 100644 --- a/Profiling.h +++ b/Profiling.h @@ -51,7 +51,7 @@ namespace data private: IdentHash m_IdentHash; - boost::posix_time::ptime m_LastUpdateTime; + boost::posix_time::ptime m_LastUpdateTime, m_LastDeclinedTime; // participation uint32_t m_NumTunnelsAgreed; uint32_t m_NumTunnelsDeclined;