Commit 6e987428 authored by Martin Sustrik's avatar Martin Sustrik

Precise reconnect interval randomised

Till now the random fraction of the reconnect interval was
computed based on process ID. This patch uses pseudo-random
generated (seeded by exact time of when the process was
started) to compute the interval.
Signed-off-by: 's avatarMartin Sustrik <sustrik@250bpm.com>
parent ce7a9a58
...@@ -25,6 +25,7 @@ ...@@ -25,6 +25,7 @@
#include "tcp_engine.hpp" #include "tcp_engine.hpp"
#include "io_thread.hpp" #include "io_thread.hpp"
#include "platform.hpp" #include "platform.hpp"
#include "random.hpp"
#include "ip.hpp" #include "ip.hpp"
#include "err.hpp" #include "err.hpp"
...@@ -154,15 +155,9 @@ void zmq::tcp_connecter_t::add_reconnect_timer() ...@@ -154,15 +155,9 @@ void zmq::tcp_connecter_t::add_reconnect_timer()
int zmq::tcp_connecter_t::get_new_reconnect_ivl () int zmq::tcp_connecter_t::get_new_reconnect_ivl ()
{ {
#if defined ZMQ_HAVE_WINDOWS
int pid = (int) GetCurrentProcessId ();
#else
int pid = (int) getpid ();
#endif
// The new interval is the current interval + random value. // The new interval is the current interval + random value.
int this_interval = current_reconnect_ivl + int this_interval = current_reconnect_ivl +
((pid * 13) % options.reconnect_ivl); (generate_random () % options.reconnect_ivl);
// Only change the current reconnect interval if the maximum reconnect // Only change the current reconnect interval if the maximum reconnect
// interval was set and if it's larger than the reconnect interval. // interval was set and if it's larger than the reconnect interval.
......
...@@ -28,6 +28,7 @@ ...@@ -28,6 +28,7 @@
#include "tcp_engine.hpp" #include "tcp_engine.hpp"
#include "io_thread.hpp" #include "io_thread.hpp"
#include "platform.hpp" #include "platform.hpp"
#include "random.hpp"
#include "likely.hpp" #include "likely.hpp"
#include "ip.hpp" #include "ip.hpp"
#include "err.hpp" #include "err.hpp"
...@@ -169,15 +170,9 @@ void zmq::vtcp_connecter_t::add_reconnect_timer() ...@@ -169,15 +170,9 @@ void zmq::vtcp_connecter_t::add_reconnect_timer()
int zmq::vtcp_connecter_t::get_new_reconnect_ivl () int zmq::vtcp_connecter_t::get_new_reconnect_ivl ()
{ {
#if defined ZMQ_HAVE_WINDOWS
int pid = (int) GetCurrentProcessId ();
#else
int pid = (int) getpid ();
#endif
// The new interval is the current interval + random value. // The new interval is the current interval + random value.
int this_interval = current_reconnect_ivl + int this_interval = current_reconnect_ivl +
((pid * 13) % options.reconnect_ivl); (generate_random () % options.reconnect_ivl);
// Only change the current reconnect interval if the maximum reconnect // Only change the current reconnect interval if the maximum reconnect
// interval was set and if it's larger than the reconnect interval. // interval was set and if it's larger than the reconnect interval.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment