|
55 | 55 | set_partition_handling_mode_globally/2,
|
56 | 56 | enable_dist_proxy_manager/1,
|
57 | 57 | enable_dist_proxy/1,
|
58 |
| - enable_dist_proxy_on_node/3, |
| 58 | + start_dist_proxy_on_node/2, |
| 59 | + disconnect_from_other_nodes/2, |
59 | 60 | block_traffic_between/2,
|
60 | 61 | allow_traffic_between/2,
|
61 | 62 |
|
@@ -615,20 +616,38 @@ enable_dist_proxy(Config) ->
|
615 | 616 | NodeConfigs = rabbit_ct_broker_helpers:get_node_configs(Config),
|
616 | 617 | Nodes = [?config(nodename, NodeConfig) || NodeConfig <- NodeConfigs],
|
617 | 618 | ManagerNode = node(),
|
| 619 | + %% We first start the proxy process on all nodes, then we close the |
| 620 | + %% existing connection. |
| 621 | + %% |
| 622 | + %% If we do that in a single loop, i.e. start the proxy on node 1 |
| 623 | + %% and disconnect it, then, start the proxy on node 2 and disconnect |
| 624 | + %% it, etc., there is a chance that the connection is reopened |
| 625 | + %% by a node where the proxy is still disabled. Therefore, that |
| 626 | + %% connection would bypass the proxy process even though we believe |
| 627 | + %% it to be enabled. |
618 | 628 | ok = lists:foreach(
|
619 | 629 | fun(NodeConfig) ->
|
620 | 630 | ok = rabbit_ct_broker_helpers:rpc(Config,
|
621 | 631 | ?config(nodename, NodeConfig),
|
622 |
| - ?MODULE, enable_dist_proxy_on_node, |
623 |
| - [NodeConfig, ManagerNode, Nodes]) |
| 632 | + ?MODULE, start_dist_proxy_on_node, |
| 633 | + [NodeConfig, ManagerNode]) |
| 634 | + end, NodeConfigs), |
| 635 | + ok = lists:foreach( |
| 636 | + fun(NodeConfig) -> |
| 637 | + ok = rabbit_ct_broker_helpers:rpc(Config, |
| 638 | + ?config(nodename, NodeConfig), |
| 639 | + ?MODULE, disconnect_from_other_nodes, |
| 640 | + [NodeConfig, Nodes]) |
624 | 641 | end, NodeConfigs),
|
625 | 642 | Config.
|
626 | 643 |
|
627 |
| -enable_dist_proxy_on_node(NodeConfig, ManagerNode, Nodes) -> |
628 |
| - Nodename = ?config(nodename, NodeConfig), |
| 644 | +start_dist_proxy_on_node(NodeConfig, ManagerNode) -> |
629 | 645 | DistPort = ?config(tcp_port_erlang_dist, NodeConfig),
|
630 | 646 | ProxyPort = ?config(tcp_port_erlang_dist_proxy, NodeConfig),
|
631 |
| - ok = inet_tcp_proxy:start(ManagerNode, DistPort, ProxyPort), |
| 647 | + ok = inet_tcp_proxy:start(ManagerNode, DistPort, ProxyPort). |
| 648 | + |
| 649 | +disconnect_from_other_nodes(NodeConfig, Nodes) -> |
| 650 | + Nodename = ?config(nodename, NodeConfig), |
632 | 651 | ok = inet_tcp_proxy:reconnect(Nodes -- [Nodename]).
|
633 | 652 |
|
634 | 653 | block_traffic_between(NodeA, NodeB) ->
|
|
0 commit comments