|
40 | 40 | import java.io.IOException;
|
41 | 41 | import java.net.InetAddress;
|
42 | 42 | import java.net.InetSocketAddress;
|
| 43 | +import java.util.ArrayList; |
43 | 44 | import java.util.Arrays;
|
44 | 45 | import java.util.Collections;
|
45 | 46 | import java.util.EnumSet;
|
@@ -877,6 +878,81 @@ public void testGetNodePredicatesCombination() {
|
877 | 878 | }
|
878 | 879 | }
|
879 | 880 |
|
| 881 | + public void testReconnectWhenSeedsNodesAreUpdated() throws Exception { |
| 882 | + List<DiscoveryNode> knownNodes = new CopyOnWriteArrayList<>(); |
| 883 | + try (MockTransportService cluster_node_0 = startTransport("cluster_node_0", knownNodes, Version.CURRENT); |
| 884 | + MockTransportService cluster_node_1 = startTransport("cluster_node_1", knownNodes, Version.CURRENT)) { |
| 885 | + |
| 886 | + final DiscoveryNode node0 = cluster_node_0.getLocalDiscoNode(); |
| 887 | + final DiscoveryNode node1 = cluster_node_1.getLocalDiscoNode(); |
| 888 | + knownNodes.add(node0); |
| 889 | + knownNodes.add(node1); |
| 890 | + Collections.shuffle(knownNodes, random()); |
| 891 | + |
| 892 | + try (MockTransportService transportService = |
| 893 | + MockTransportService.createNewService(Settings.EMPTY, Version.CURRENT, threadPool, null)) { |
| 894 | + transportService.start(); |
| 895 | + transportService.acceptIncomingRequests(); |
| 896 | + |
| 897 | + final Settings.Builder builder = Settings.builder(); |
| 898 | + builder.putList("cluster.remote.cluster_test.seeds", Collections.singletonList(node0.getAddress().toString())); |
| 899 | + try (RemoteClusterService service = new RemoteClusterService(builder.build(), transportService)) { |
| 900 | + assertFalse(service.isCrossClusterSearchEnabled()); |
| 901 | + service.initializeRemoteClusters(); |
| 902 | + assertTrue(service.isCrossClusterSearchEnabled()); |
| 903 | + |
| 904 | + final RemoteClusterConnection firstRemoteClusterConnection = service.getRemoteClusterConnection("cluster_test"); |
| 905 | + assertTrue(firstRemoteClusterConnection.isNodeConnected(node0)); |
| 906 | + assertTrue(firstRemoteClusterConnection.isNodeConnected(node1)); |
| 907 | + assertEquals(2, firstRemoteClusterConnection.getNumNodesConnected()); |
| 908 | + assertFalse(firstRemoteClusterConnection.isClosed()); |
| 909 | + |
| 910 | + final CountDownLatch firstLatch = new CountDownLatch(1); |
| 911 | + service.updateRemoteCluster( |
| 912 | + "cluster_test", |
| 913 | + Collections.singletonList(node0.getAddress().toString()), null, |
| 914 | + genericProfile("cluster_test"), connectionListener(firstLatch)); |
| 915 | + firstLatch.await(); |
| 916 | + |
| 917 | + assertTrue(service.isCrossClusterSearchEnabled()); |
| 918 | + assertTrue(firstRemoteClusterConnection.isNodeConnected(node0)); |
| 919 | + assertTrue(firstRemoteClusterConnection.isNodeConnected(node1)); |
| 920 | + assertEquals(2, firstRemoteClusterConnection.getNumNodesConnected()); |
| 921 | + assertFalse(firstRemoteClusterConnection.isClosed()); |
| 922 | + assertSame(firstRemoteClusterConnection, service.getRemoteClusterConnection("cluster_test")); |
| 923 | + |
| 924 | + final List<String> newSeeds = new ArrayList<>(); |
| 925 | + newSeeds.add(node1.getAddress().toString()); |
| 926 | + if (randomBoolean()) { |
| 927 | + newSeeds.add(node0.getAddress().toString()); |
| 928 | + Collections.shuffle(newSeeds, random()); |
| 929 | + } |
| 930 | + |
| 931 | + final CountDownLatch secondLatch = new CountDownLatch(1); |
| 932 | + service.updateRemoteCluster( |
| 933 | + "cluster_test", |
| 934 | + newSeeds, null, |
| 935 | + genericProfile("cluster_test"), connectionListener(secondLatch)); |
| 936 | + secondLatch.await(); |
| 937 | + |
| 938 | + assertTrue(service.isCrossClusterSearchEnabled()); |
| 939 | + assertBusy(() -> { |
| 940 | + assertFalse(firstRemoteClusterConnection.isNodeConnected(node0)); |
| 941 | + assertFalse(firstRemoteClusterConnection.isNodeConnected(node1)); |
| 942 | + assertEquals(0, firstRemoteClusterConnection.getNumNodesConnected()); |
| 943 | + assertTrue(firstRemoteClusterConnection.isClosed()); |
| 944 | + }); |
| 945 | + |
| 946 | + final RemoteClusterConnection secondRemoteClusterConnection = service.getRemoteClusterConnection("cluster_test"); |
| 947 | + assertTrue(secondRemoteClusterConnection.isNodeConnected(node0)); |
| 948 | + assertTrue(secondRemoteClusterConnection.isNodeConnected(node1)); |
| 949 | + assertEquals(2, secondRemoteClusterConnection.getNumNodesConnected()); |
| 950 | + assertFalse(secondRemoteClusterConnection.isClosed()); |
| 951 | + } |
| 952 | + } |
| 953 | + } |
| 954 | + } |
| 955 | + |
880 | 956 | public void testRemoteClusterWithProxy() throws Exception {
|
881 | 957 | List<DiscoveryNode> knownNodes = new CopyOnWriteArrayList<>();
|
882 | 958 | try (MockTransportService cluster_1_node0 = startTransport("cluster_1_node0", knownNodes, Version.CURRENT);
|
|
0 commit comments