|
@@ -20,6 +20,9 @@
|
|
|
package org.elasticsearch.cluster;
|
|
|
|
|
|
import org.apache.lucene.search.join.ScoreMode;
|
|
|
+import org.elasticsearch.action.admin.cluster.configuration.AddVotingConfigExclusionsAction;
|
|
|
+import org.elasticsearch.action.admin.cluster.configuration.AddVotingConfigExclusionsRequest;
|
|
|
+import org.elasticsearch.cluster.coordination.ClusterBootstrapService;
|
|
|
import org.elasticsearch.common.settings.Settings;
|
|
|
import org.elasticsearch.common.xcontent.XContentType;
|
|
|
import org.elasticsearch.discovery.MasterNotDiscoveredException;
|
|
@@ -28,10 +31,12 @@ import org.elasticsearch.node.Node;
|
|
|
import org.elasticsearch.test.ESIntegTestCase;
|
|
|
import org.elasticsearch.test.ESIntegTestCase.ClusterScope;
|
|
|
import org.elasticsearch.test.ESIntegTestCase.Scope;
|
|
|
-import org.elasticsearch.test.discovery.TestZenDiscovery;
|
|
|
import org.elasticsearch.test.junit.annotations.TestLogging;
|
|
|
|
|
|
import java.io.IOException;
|
|
|
+import java.util.Collections;
|
|
|
+import java.util.List;
|
|
|
+import java.util.concurrent.ExecutionException;
|
|
|
|
|
|
import static org.elasticsearch.discovery.zen.ElectMasterService.DISCOVERY_ZEN_MINIMUM_MASTER_NODES_SETTING;
|
|
|
import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertAcked;
|
|
@@ -45,10 +50,22 @@ public class SpecificMasterNodesIT extends ESIntegTestCase {
|
|
|
@Override
|
|
|
protected Settings nodeSettings(int nodeOrdinal) {
|
|
|
return Settings.builder().put(super.nodeSettings(nodeOrdinal))
|
|
|
- .put(TestZenDiscovery.USE_ZEN2.getKey(), false) // does unsafe things
|
|
|
.put(DISCOVERY_ZEN_MINIMUM_MASTER_NODES_SETTING.getKey(), 1).build();
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ protected List<Settings> addExtraClusterBootstrapSettings(List<Settings> allNodesSettings) {
|
|
|
+ // if it's the first master in the cluster bootstrap the cluster with this node name
|
|
|
+ Settings settings = allNodesSettings.get(0);
|
|
|
+ if (internalCluster().numMasterNodes() == 0 && settings.getAsBoolean(Node.NODE_MASTER_SETTING.getKey(), false)) {
|
|
|
+ return Collections.singletonList(Settings.builder()
|
|
|
+ .put(settings)
|
|
|
+ .put(ClusterBootstrapService.INITIAL_MASTER_NODES_SETTING.getKey(), settings.get(Node.NODE_NAME_SETTING.getKey()))
|
|
|
+ .build());
|
|
|
+ }
|
|
|
+ return allNodesSettings;
|
|
|
+ }
|
|
|
+
|
|
|
public void testSimpleOnlyMasterNodeElection() throws IOException {
|
|
|
logger.info("--> start data node / non master node");
|
|
|
internalCluster().startNode(Settings.builder().put(Node.NODE_DATA_SETTING.getKey(), true)
|
|
@@ -89,7 +106,7 @@ public class SpecificMasterNodesIT extends ESIntegTestCase {
|
|
|
.execute().actionGet().getState().nodes().getMasterNode().getName(), equalTo(nextMasterEligibleNodeName));
|
|
|
}
|
|
|
|
|
|
- public void testElectOnlyBetweenMasterNodes() throws IOException {
|
|
|
+ public void testElectOnlyBetweenMasterNodes() throws IOException, ExecutionException, InterruptedException {
|
|
|
logger.info("--> start data node / non master node");
|
|
|
internalCluster().startNode(Settings.builder().put(Node.NODE_DATA_SETTING.getKey(), true)
|
|
|
.put(Node.NODE_MASTER_SETTING.getKey(), false).put("discovery.initial_state_timeout", "1s"));
|
|
@@ -119,6 +136,8 @@ public class SpecificMasterNodesIT extends ESIntegTestCase {
|
|
|
.execute().actionGet().getState().nodes().getMasterNode().getName(), equalTo(masterNodeName));
|
|
|
|
|
|
logger.info("--> closing master node (1)");
|
|
|
+ client().execute(AddVotingConfigExclusionsAction.INSTANCE,
|
|
|
+ new AddVotingConfigExclusionsRequest(new String[]{masterNodeName})).get();
|
|
|
internalCluster().stopCurrentMasterNode();
|
|
|
assertThat(internalCluster().nonMasterClient().admin().cluster().prepareState()
|
|
|
.execute().actionGet().getState().nodes().getMasterNode().getName(), equalTo(nextMasterEligableNodeName));
|
|
@@ -126,7 +145,7 @@ public class SpecificMasterNodesIT extends ESIntegTestCase {
|
|
|
.execute().actionGet().getState().nodes().getMasterNode().getName(), equalTo(nextMasterEligableNodeName));
|
|
|
}
|
|
|
|
|
|
- public void testAliasFilterValidation() throws Exception {
|
|
|
+ public void testAliasFilterValidation() {
|
|
|
logger.info("--> start master node / non data");
|
|
|
internalCluster().startNode(Settings.builder()
|
|
|
.put(Node.NODE_DATA_SETTING.getKey(), false).put(Node.NODE_MASTER_SETTING.getKey(), true));
|