From 6fe567e3f3000945ad98d2fdfc2db7e49a9876df Mon Sep 17 00:00:00 2001 From: Karl Nilsson Date: Wed, 3 May 2023 14:16:06 +0100 Subject: [PATCH] Add small backoff when doing replica port scans. This helps reducing the number of `no_available_ports_in_range` errors encountered when starting lots of replicas at once. E.g. after a RabbitMQ nodes start. Also adding configuration for reuseaddr and listen socket options. --- src/osiris_replica.erl | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/osiris_replica.erl b/src/osiris_replica.erl index ea0677a..42d0e95 100644 --- a/src/osiris_replica.erl +++ b/src/osiris_replica.erl @@ -303,6 +303,7 @@ open_listener(Transport, {Min, Max} = Range, Attempts) -> {ok, LSock} -> {Port, LSock}; {error, eaddrinuse} -> + timer:sleep(Attempts), open_listener(Transport, Range, Attempts + 1); E -> throw({stop, E}) @@ -723,8 +724,12 @@ listener_opts() -> RcvBuf = application:get_env(osiris, replica_recbuf, ?DEF_REC_BUF), Buffer = application:get_env(osiris, replica_buffer, RcvBuf * 2), KeepAlive = application:get_env(osiris, replica_keepalive, false), + ReuseAddr = application:get_env(osiris, replica_reuseaddr, true), + Linger = application:get_env(osiris, replica_linger, true), + LingerTimeout = application:get_env(osiris, replica_linger_timeout, 0), [binary, - {reuseaddr, true}, + {reuseaddr, ReuseAddr}, + {linger, {Linger, LingerTimeout}}, {backlog, 0}, {packet, raw}, {active, false},