mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-04-29 14:59:39 -04:00
Merge bitcoin/bitcoin#31979: torcontrol: Limit reconnect timeout to max seconds and log delay in whole seconds
f708498293
torcontrol: Limit reconnect timeout to max seconds and log delay in whole seconds (Eval EXEC) Pull request description: I'm reviewing the Tor controller's reconnect-related code and noticed that the reconnect timeout had no limit. This could lead to excessively long delays. This PR introduces a maximum reconnect timeout of 600 seconds (10 minutes) to prevent excessive delays in reconnection attempts. It also updates the log message to display the retry delay in whole seconds for better readability. ACKs for top commit: mabu44: ACKf708498293
laanwj: Code review ACKf708498293
luke-jr: utACKf708498293
Tree-SHA512: 8f18c6c84da6b4e7328638fd74539fbd3dd44f46c5107638de56b72fc079487690861199ceba1197ca34421dcedf79a1ca6bacf2a918a683e71bce9ff710b5d4
This commit is contained in:
commit
c9a61509ba
1 changed files with 8 additions and 3 deletions
|
@ -26,6 +26,7 @@
|
|||
|
||||
#include <algorithm>
|
||||
#include <cassert>
|
||||
#include <cstdint>
|
||||
#include <cstdlib>
|
||||
#include <deque>
|
||||
#include <functional>
|
||||
|
@ -60,6 +61,8 @@ static const std::string TOR_SAFE_CLIENTKEY = "Tor safe cookie authentication co
|
|||
static const float RECONNECT_TIMEOUT_START = 1.0;
|
||||
/** Exponential backoff configuration - growth factor */
|
||||
static const float RECONNECT_TIMEOUT_EXP = 1.5;
|
||||
/** Maximum reconnect timeout in seconds to prevent excessive delays */
|
||||
static const float RECONNECT_TIMEOUT_MAX = 600.0;
|
||||
/** Maximum length for lines received on TorControlConnection.
|
||||
* tor-control-spec.txt mentions that there is explicitly no limit defined to line length,
|
||||
* this is belt-and-suspenders sanity limit to prevent memory exhaustion.
|
||||
|
@ -631,13 +634,15 @@ void TorController::disconnected_cb(TorControlConnection& _conn)
|
|||
if (!reconnect)
|
||||
return;
|
||||
|
||||
LogDebug(BCLog::TOR, "Not connected to Tor control port %s, trying to reconnect\n", m_tor_control_center);
|
||||
LogDebug(BCLog::TOR, "Not connected to Tor control port %s, retrying in %.2f s\n",
|
||||
m_tor_control_center, reconnect_timeout);
|
||||
|
||||
// Single-shot timer for reconnect. Use exponential backoff.
|
||||
// Single-shot timer for reconnect. Use exponential backoff with a maximum.
|
||||
struct timeval time = MillisToTimeval(int64_t(reconnect_timeout * 1000.0));
|
||||
if (reconnect_ev)
|
||||
event_add(reconnect_ev, &time);
|
||||
reconnect_timeout *= RECONNECT_TIMEOUT_EXP;
|
||||
|
||||
reconnect_timeout = std::min(reconnect_timeout * RECONNECT_TIMEOUT_EXP, RECONNECT_TIMEOUT_MAX);
|
||||
}
|
||||
|
||||
void TorController::Reconnect()
|
||||
|
|
Loading…
Add table
Reference in a new issue