Skip to content

Commit df203f9

Browse files
Merge pull request #177 from rabbitmq/osiris-116
Make it possible to configure IP address family for Osiris replica listeners
2 parents db9edb4 + 23eba34 commit df203f9

File tree

4 files changed

+52
-2
lines changed

4 files changed

+52
-2
lines changed

src/osiris_replica.erl

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -746,7 +746,11 @@ listener_opts(tcp) ->
746746
ReuseAddr = application:get_env(osiris, replica_reuseaddr, true),
747747
Linger = application:get_env(osiris, replica_linger, true),
748748
LingerTimeout = application:get_env(osiris, replica_linger_timeout, 0),
749+
750+
IPAddrFamily = osiris_util:get_inet_address_family(),
751+
749752
[binary,
753+
IPAddrFamily,
750754
{reuseaddr, ReuseAddr},
751755
{linger, {Linger, LingerTimeout}},
752756
{backlog, 0},

src/osiris_replica_reader.erl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -371,7 +371,9 @@ close(ssl, Socket) ->
371371
connect_options() ->
372372
SndBuf = application:get_env(osiris, replica_sndbuf, ?DEF_SND_BUF),
373373
KeepAlive = application:get_env(osiris, replica_keepalive, false),
374+
IPAddrFamily = osiris_util:get_inet_address_family(),
374375
[binary,
376+
IPAddrFamily,
375377
{packet, 0},
376378
{nodelay, true},
377379
{sndbuf, SndBuf},

src/osiris_util.erl

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
get_replication_configuration_from_tls_dist/0,
1919
get_replication_configuration_from_tls_dist/1,
2020
get_replication_configuration_from_tls_dist/2,
21+
get_inet_address_family/0,
2122
partition_parallel/3,
2223
normalise_name/1,
2324
get_reader_context/1,
@@ -239,6 +240,14 @@ eval_term(V) ->
239240
{value, Term, _Bs} = erl_eval:exprs(AbsForm, erl_eval:new_bindings()),
240241
Term.
241242

243+
-spec get_inet_address_family() -> inet | inet6.
244+
get_inet_address_family() ->
245+
case application:get_env(osiris, replica_ip_address_family, inet) of
246+
inet -> inet;
247+
inet6 -> inet6;
248+
_ -> inet
249+
end.
250+
242251
inet_tls_enabled([]) ->
243252
false;
244253
inet_tls_enabled([{proto_dist, ["inet_tls"]} | _]) ->

test/osiris_SUITE.erl

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,10 @@
2727
%%%===================================================================
2828

2929
all() ->
30-
[{group, tests}].
30+
[
31+
{group, tests},
32+
{group, ipv6}
33+
].
3134

3235
all_tests() ->
3336
[single_node_write,
@@ -84,10 +87,20 @@ all_tests() ->
8487
combine_ips_hosts_test,
8588
empty_last_segment].
8689

90+
%% Isolated to avoid test interference
91+
ipv6_tests() ->
92+
[
93+
cluster_write_replication_plain_ipv6,
94+
cluster_write_replication_tls_ipv6
95+
].
96+
8797
-define(BIN_SIZE, 800).
8898

8999
groups() ->
90-
[{tests, [], all_tests()}].
100+
[
101+
{tests, [], all_tests()},
102+
{ipv6, [], ipv6_tests()}
103+
].
91104

92105
init_per_suite(Config) ->
93106
osiris:configure_logger(logger),
@@ -96,10 +109,18 @@ init_per_suite(Config) ->
96109
end_per_suite(_Config) ->
97110
ok.
98111

112+
init_per_group(ipv6, Config) ->
113+
application:set_env(kernel, prevent_overlapping_partitions, false),
114+
application:set_env(osiris, replica_ip_address_family, inet6),
115+
Config;
99116
init_per_group(_Group, Config) ->
100117
application:set_env(kernel, prevent_overlapping_partitions, false),
118+
application:set_env(osiris, replica_ip_address_family, inet),
101119
Config.
102120

121+
end_per_group(ipv6, _Config) ->
122+
application:set_env(osiris, replica_ip_address_family, inet),
123+
ok;
103124
end_per_group(_Group, _Config) ->
104125
ok.
105126

@@ -154,6 +175,14 @@ extra_init(cluster_write_replication_tls) ->
154175
{verify,verify_peer}
155176
]),
156177
ok;
178+
extra_init(cluster_write_replication_tls_ipv6) ->
179+
extra_init(cluster_write_replication_tls),
180+
application:set_env(osiris, replica_ip_address_family, inet6),
181+
ok;
182+
extra_init(cluster_write_replication_plain_ipv6) ->
183+
application:set_env(osiris, replication_transport, tcp),
184+
application:set_env(osiris, replica_ip_address_family, inet6),
185+
ok;
157186
extra_init(_) ->
158187
application:set_env(osiris, replication_transport, tcp),
159188
ok.
@@ -298,9 +327,15 @@ start_many_clusters(Config) ->
298327
cluster_write_replication_plain(Config) ->
299328
cluster_write(Config, undefined).
300329

330+
cluster_write_replication_plain_ipv6(Config) ->
331+
cluster_write(Config, undefined).
332+
301333
cluster_write_replication_tls(Config) ->
302334
cluster_write(Config, undefined).
303335

336+
cluster_write_replication_tls_ipv6(Config) ->
337+
cluster_write(Config, undefined).
338+
304339
cluster_write_replication_plain_with_filter(Config) ->
305340
cluster_write(Config, <<"banana">>).
306341

0 commit comments

Comments
 (0)