Search in sources :

Example 1 with AddVotingConfigExclusionsRequest

use of org.opensearch.action.admin.cluster.configuration.AddVotingConfigExclusionsRequest in project OpenSearch by opensearch-project.

the class MinimumMasterNodesIT method testTwoNodesNoMasterBlock.

public void testTwoNodesNoMasterBlock() throws Exception {
    internalCluster().setBootstrapMasterNodeIndex(1);
    Settings settings = Settings.builder().put("discovery.initial_state_timeout", "500ms").build();
    logger.info("--> start first node");
    String node1Name = internalCluster().startNode(settings);
    logger.info("--> should be blocked, no master...");
    ClusterState state = client().admin().cluster().prepareState().setLocal(true).execute().actionGet().getState();
    assertThat(state.blocks().hasGlobalBlockWithId(NoMasterBlockService.NO_MASTER_BLOCK_ID), equalTo(true));
    // verify that we still see the local node in the cluster state
    assertThat(state.nodes().getSize(), equalTo(1));
    logger.info("--> start second node, cluster should be formed");
    String node2Name = internalCluster().startNode(settings);
    ClusterHealthResponse clusterHealthResponse = client().admin().cluster().prepareHealth().setWaitForEvents(Priority.LANGUID).setWaitForNodes("2").execute().actionGet();
    assertThat(clusterHealthResponse.isTimedOut(), equalTo(false));
    state = client().admin().cluster().prepareState().setLocal(true).execute().actionGet().getState();
    assertThat(state.blocks().hasGlobalBlockWithId(NoMasterBlockService.NO_MASTER_BLOCK_ID), equalTo(false));
    state = client().admin().cluster().prepareState().setLocal(true).execute().actionGet().getState();
    assertThat(state.blocks().hasGlobalBlockWithId(NoMasterBlockService.NO_MASTER_BLOCK_ID), equalTo(false));
    state = client().admin().cluster().prepareState().execute().actionGet().getState();
    assertThat(state.nodes().getSize(), equalTo(2));
    assertThat(state.metadata().indices().containsKey("test"), equalTo(false));
    createIndex("test");
    NumShards numShards = getNumShards("test");
    logger.info("--> indexing some data");
    for (int i = 0; i < 100; i++) {
        client().prepareIndex("test").setId(Integer.toString(i)).setSource("field", "value").execute().actionGet();
    }
    // make sure that all shards recovered before trying to flush
    assertThat(client().admin().cluster().prepareHealth("test").setWaitForActiveShards(numShards.totalNumShards).execute().actionGet().getActiveShards(), equalTo(numShards.totalNumShards));
    // flush for simpler debugging
    flushAndRefresh();
    logger.info("--> verify we get the data back");
    for (int i = 0; i < 10; i++) {
        assertThat(client().prepareSearch().setSize(0).setQuery(QueryBuilders.matchAllQuery()).execute().actionGet().getHits().getTotalHits().value, equalTo(100L));
    }
    String masterNode = internalCluster().getMasterName();
    String otherNode = node1Name.equals(masterNode) ? node2Name : node1Name;
    logger.info("--> add voting config exclusion for non-master node, to be sure it's not elected");
    client().execute(AddVotingConfigExclusionsAction.INSTANCE, new AddVotingConfigExclusionsRequest(otherNode)).get();
    logger.info("--> stop master node, no master block should appear");
    Settings masterDataPathSettings = internalCluster().dataPathSettings(masterNode);
    internalCluster().stopRandomNode(InternalTestCluster.nameFilter(masterNode));
    assertBusy(() -> {
        ClusterState clusterState = client().admin().cluster().prepareState().setLocal(true).execute().actionGet().getState();
        assertTrue(clusterState.blocks().hasGlobalBlockWithId(NoMasterBlockService.NO_MASTER_BLOCK_ID));
    });
    state = client().admin().cluster().prepareState().setLocal(true).execute().actionGet().getState();
    assertThat(state.blocks().hasGlobalBlockWithId(NoMasterBlockService.NO_MASTER_BLOCK_ID), equalTo(true));
    // verify that both nodes are still in the cluster state but there is no master
    assertThat(state.nodes().getSize(), equalTo(2));
    assertThat(state.nodes().getMasterNode(), equalTo(null));
    logger.info("--> starting the previous master node again...");
    node2Name = internalCluster().startNode(Settings.builder().put(settings).put(masterDataPathSettings).build());
    clusterHealthResponse = client().admin().cluster().prepareHealth().setWaitForEvents(Priority.LANGUID).setWaitForYellowStatus().setWaitForNodes("2").execute().actionGet();
    assertThat(clusterHealthResponse.isTimedOut(), equalTo(false));
    state = client().admin().cluster().prepareState().setLocal(true).execute().actionGet().getState();
    assertThat(state.blocks().hasGlobalBlockWithId(NoMasterBlockService.NO_MASTER_BLOCK_ID), equalTo(false));
    state = client().admin().cluster().prepareState().setLocal(true).execute().actionGet().getState();
    assertThat(state.blocks().hasGlobalBlockWithId(NoMasterBlockService.NO_MASTER_BLOCK_ID), equalTo(false));
    state = client().admin().cluster().prepareState().execute().actionGet().getState();
    assertThat(state.nodes().getSize(), equalTo(2));
    assertThat(state.metadata().indices().containsKey("test"), equalTo(true));
    ensureGreen();
    logger.info("--> verify we get the data back after cluster reform");
    for (int i = 0; i < 10; i++) {
        assertHitCount(client().prepareSearch().setSize(0).setQuery(QueryBuilders.matchAllQuery()).execute().actionGet(), 100);
    }
    logger.info("--> clearing voting config exclusions");
    ClearVotingConfigExclusionsRequest clearRequest = new ClearVotingConfigExclusionsRequest();
    clearRequest.setWaitForRemoval(false);
    client().execute(ClearVotingConfigExclusionsAction.INSTANCE, clearRequest).get();
    masterNode = internalCluster().getMasterName();
    otherNode = node1Name.equals(masterNode) ? node2Name : node1Name;
    logger.info("--> add voting config exclusion for master node, to be sure it's not elected");
    client().execute(AddVotingConfigExclusionsAction.INSTANCE, new AddVotingConfigExclusionsRequest(masterNode)).get();
    logger.info("--> stop non-master node, no master block should appear");
    Settings otherNodeDataPathSettings = internalCluster().dataPathSettings(otherNode);
    internalCluster().stopRandomNode(InternalTestCluster.nameFilter(otherNode));
    assertBusy(() -> {
        ClusterState state1 = client().admin().cluster().prepareState().setLocal(true).execute().actionGet().getState();
        assertThat(state1.blocks().hasGlobalBlockWithId(NoMasterBlockService.NO_MASTER_BLOCK_ID), equalTo(true));
    });
    logger.info("--> starting the previous master node again...");
    internalCluster().startNode(Settings.builder().put(settings).put(otherNodeDataPathSettings).build());
    ensureGreen();
    clusterHealthResponse = client().admin().cluster().prepareHealth().setWaitForEvents(Priority.LANGUID).setWaitForNodes("2").setWaitForGreenStatus().execute().actionGet();
    assertThat(clusterHealthResponse.isTimedOut(), equalTo(false));
    state = client().admin().cluster().prepareState().setLocal(true).execute().actionGet().getState();
    assertThat(state.blocks().hasGlobalBlockWithId(NoMasterBlockService.NO_MASTER_BLOCK_ID), equalTo(false));
    state = client().admin().cluster().prepareState().setLocal(true).execute().actionGet().getState();
    assertThat(state.blocks().hasGlobalBlockWithId(NoMasterBlockService.NO_MASTER_BLOCK_ID), equalTo(false));
    state = client().admin().cluster().prepareState().execute().actionGet().getState();
    assertThat(state.nodes().getSize(), equalTo(2));
    assertThat(state.metadata().indices().containsKey("test"), equalTo(true));
    logger.info("Running Cluster Health");
    ensureGreen();
    logger.info("--> verify we the data back");
    for (int i = 0; i < 10; i++) {
        assertHitCount(client().prepareSearch().setSize(0).setQuery(QueryBuilders.matchAllQuery()).execute().actionGet(), 100);
    }
}
Also used : ClusterHealthResponse(org.opensearch.action.admin.cluster.health.ClusterHealthResponse) AddVotingConfigExclusionsRequest(org.opensearch.action.admin.cluster.configuration.AddVotingConfigExclusionsRequest) ClearVotingConfigExclusionsRequest(org.opensearch.action.admin.cluster.configuration.ClearVotingConfigExclusionsRequest) Settings(org.opensearch.common.settings.Settings)

Example 2 with AddVotingConfigExclusionsRequest

use of org.opensearch.action.admin.cluster.configuration.AddVotingConfigExclusionsRequest in project OpenSearch by opensearch-project.

the class MinimumClusterManagerNodesIT method testTwoNodesNoClusterManagerBlock.

public void testTwoNodesNoClusterManagerBlock() throws Exception {
    internalCluster().setBootstrapClusterManagerNodeIndex(1);
    Settings settings = Settings.builder().put("discovery.initial_state_timeout", "500ms").build();
    logger.info("--> start first node");
    String node1Name = internalCluster().startNode(settings);
    logger.info("--> should be blocked, no cluster-manager...");
    ClusterState state = client().admin().cluster().prepareState().setLocal(true).execute().actionGet().getState();
    assertThat(state.blocks().hasGlobalBlockWithId(NoMasterBlockService.NO_MASTER_BLOCK_ID), equalTo(true));
    // verify that we still see the local node in the cluster state
    assertThat(state.nodes().getSize(), equalTo(1));
    logger.info("--> start second node, cluster should be formed");
    String node2Name = internalCluster().startNode(settings);
    ClusterHealthResponse clusterHealthResponse = client().admin().cluster().prepareHealth().setWaitForEvents(Priority.LANGUID).setWaitForNodes("2").execute().actionGet();
    assertThat(clusterHealthResponse.isTimedOut(), equalTo(false));
    state = client().admin().cluster().prepareState().setLocal(true).execute().actionGet().getState();
    assertThat(state.blocks().hasGlobalBlockWithId(NoMasterBlockService.NO_MASTER_BLOCK_ID), equalTo(false));
    state = client().admin().cluster().prepareState().setLocal(true).execute().actionGet().getState();
    assertThat(state.blocks().hasGlobalBlockWithId(NoMasterBlockService.NO_MASTER_BLOCK_ID), equalTo(false));
    state = client().admin().cluster().prepareState().execute().actionGet().getState();
    assertThat(state.nodes().getSize(), equalTo(2));
    assertThat(state.metadata().indices().containsKey("test"), equalTo(false));
    createIndex("test");
    NumShards numShards = getNumShards("test");
    logger.info("--> indexing some data");
    for (int i = 0; i < 100; i++) {
        client().prepareIndex("test").setId(Integer.toString(i)).setSource("field", "value").execute().actionGet();
    }
    // make sure that all shards recovered before trying to flush
    assertThat(client().admin().cluster().prepareHealth("test").setWaitForActiveShards(numShards.totalNumShards).execute().actionGet().getActiveShards(), equalTo(numShards.totalNumShards));
    // flush for simpler debugging
    flushAndRefresh();
    logger.info("--> verify we get the data back");
    for (int i = 0; i < 10; i++) {
        assertThat(client().prepareSearch().setSize(0).setQuery(QueryBuilders.matchAllQuery()).execute().actionGet().getHits().getTotalHits().value, equalTo(100L));
    }
    String clusterManagerNode = internalCluster().getMasterName();
    String otherNode = node1Name.equals(clusterManagerNode) ? node2Name : node1Name;
    logger.info("--> add voting config exclusion for non-cluster-manager node, to be sure it's not elected");
    client().execute(AddVotingConfigExclusionsAction.INSTANCE, new AddVotingConfigExclusionsRequest(otherNode)).get();
    logger.info("--> stop cluster-manager node, no cluster-manager block should appear");
    Settings clusterManagerDataPathSettings = internalCluster().dataPathSettings(clusterManagerNode);
    internalCluster().stopRandomNode(InternalTestCluster.nameFilter(clusterManagerNode));
    assertBusy(() -> {
        ClusterState clusterState = client().admin().cluster().prepareState().setLocal(true).execute().actionGet().getState();
        assertTrue(clusterState.blocks().hasGlobalBlockWithId(NoMasterBlockService.NO_MASTER_BLOCK_ID));
    });
    state = client().admin().cluster().prepareState().setLocal(true).execute().actionGet().getState();
    assertThat(state.blocks().hasGlobalBlockWithId(NoMasterBlockService.NO_MASTER_BLOCK_ID), equalTo(true));
    // verify that both nodes are still in the cluster state but there is no cluster-manager
    assertThat(state.nodes().getSize(), equalTo(2));
    assertThat(state.nodes().getMasterNode(), equalTo(null));
    logger.info("--> starting the previous cluster-manager node again...");
    node2Name = internalCluster().startNode(Settings.builder().put(settings).put(clusterManagerDataPathSettings).build());
    clusterHealthResponse = client().admin().cluster().prepareHealth().setWaitForEvents(Priority.LANGUID).setWaitForYellowStatus().setWaitForNodes("2").execute().actionGet();
    assertThat(clusterHealthResponse.isTimedOut(), equalTo(false));
    state = client().admin().cluster().prepareState().setLocal(true).execute().actionGet().getState();
    assertThat(state.blocks().hasGlobalBlockWithId(NoMasterBlockService.NO_MASTER_BLOCK_ID), equalTo(false));
    state = client().admin().cluster().prepareState().setLocal(true).execute().actionGet().getState();
    assertThat(state.blocks().hasGlobalBlockWithId(NoMasterBlockService.NO_MASTER_BLOCK_ID), equalTo(false));
    state = client().admin().cluster().prepareState().execute().actionGet().getState();
    assertThat(state.nodes().getSize(), equalTo(2));
    assertThat(state.metadata().indices().containsKey("test"), equalTo(true));
    ensureGreen();
    logger.info("--> verify we get the data back after cluster reform");
    for (int i = 0; i < 10; i++) {
        assertHitCount(client().prepareSearch().setSize(0).setQuery(QueryBuilders.matchAllQuery()).execute().actionGet(), 100);
    }
    logger.info("--> clearing voting config exclusions");
    ClearVotingConfigExclusionsRequest clearRequest = new ClearVotingConfigExclusionsRequest();
    clearRequest.setWaitForRemoval(false);
    client().execute(ClearVotingConfigExclusionsAction.INSTANCE, clearRequest).get();
    clusterManagerNode = internalCluster().getMasterName();
    otherNode = node1Name.equals(clusterManagerNode) ? node2Name : node1Name;
    logger.info("--> add voting config exclusion for cluster-manager node, to be sure it's not elected");
    client().execute(AddVotingConfigExclusionsAction.INSTANCE, new AddVotingConfigExclusionsRequest(clusterManagerNode)).get();
    logger.info("--> stop non-cluster-manager node, no cluster-manager block should appear");
    Settings otherNodeDataPathSettings = internalCluster().dataPathSettings(otherNode);
    internalCluster().stopRandomNode(InternalTestCluster.nameFilter(otherNode));
    assertBusy(() -> {
        ClusterState state1 = client().admin().cluster().prepareState().setLocal(true).execute().actionGet().getState();
        assertThat(state1.blocks().hasGlobalBlockWithId(NoMasterBlockService.NO_MASTER_BLOCK_ID), equalTo(true));
    });
    logger.info("--> starting the previous cluster-manager node again...");
    internalCluster().startNode(Settings.builder().put(settings).put(otherNodeDataPathSettings).build());
    ensureGreen();
    clusterHealthResponse = client().admin().cluster().prepareHealth().setWaitForEvents(Priority.LANGUID).setWaitForNodes("2").setWaitForGreenStatus().execute().actionGet();
    assertThat(clusterHealthResponse.isTimedOut(), equalTo(false));
    state = client().admin().cluster().prepareState().setLocal(true).execute().actionGet().getState();
    assertThat(state.blocks().hasGlobalBlockWithId(NoMasterBlockService.NO_MASTER_BLOCK_ID), equalTo(false));
    state = client().admin().cluster().prepareState().setLocal(true).execute().actionGet().getState();
    assertThat(state.blocks().hasGlobalBlockWithId(NoMasterBlockService.NO_MASTER_BLOCK_ID), equalTo(false));
    state = client().admin().cluster().prepareState().execute().actionGet().getState();
    assertThat(state.nodes().getSize(), equalTo(2));
    assertThat(state.metadata().indices().containsKey("test"), equalTo(true));
    logger.info("Running Cluster Health");
    ensureGreen();
    logger.info("--> verify we the data back");
    for (int i = 0; i < 10; i++) {
        assertHitCount(client().prepareSearch().setSize(0).setQuery(QueryBuilders.matchAllQuery()).execute().actionGet(), 100);
    }
}
Also used : ClusterHealthResponse(org.opensearch.action.admin.cluster.health.ClusterHealthResponse) AddVotingConfigExclusionsRequest(org.opensearch.action.admin.cluster.configuration.AddVotingConfigExclusionsRequest) ClearVotingConfigExclusionsRequest(org.opensearch.action.admin.cluster.configuration.ClearVotingConfigExclusionsRequest) Settings(org.opensearch.common.settings.Settings)

Example 3 with AddVotingConfigExclusionsRequest

use of org.opensearch.action.admin.cluster.configuration.AddVotingConfigExclusionsRequest in project OpenSearch by opensearch-project.

the class RestAddVotingConfigExclusionActionTests method testResolveVotingConfigExclusionsRequestNodeNames.

public void testResolveVotingConfigExclusionsRequestNodeNames() {
    Map<String, String> params = new HashMap<>();
    params.put("node_names", "node-1,node-2,node-3");
    RestRequest request = new FakeRestRequest.Builder(xContentRegistry()).withMethod(RestRequest.Method.PUT).withPath("/_cluster/voting_config_exclusions").withParams(params).build();
    AddVotingConfigExclusionsRequest addVotingConfigExclusionsRequest = action.resolveVotingConfigExclusionsRequest(request);
    String[] expected = { "node-1", "node-2", "node-3" };
    assertArrayEquals(Strings.EMPTY_ARRAY, addVotingConfigExclusionsRequest.getNodeDescriptions());
    assertArrayEquals(Strings.EMPTY_ARRAY, addVotingConfigExclusionsRequest.getNodeIds());
    assertArrayEquals(expected, addVotingConfigExclusionsRequest.getNodeNames());
}
Also used : FakeRestRequest(org.opensearch.test.rest.FakeRestRequest) RestRequest(org.opensearch.rest.RestRequest) HashMap(java.util.HashMap) AddVotingConfigExclusionsRequest(org.opensearch.action.admin.cluster.configuration.AddVotingConfigExclusionsRequest)

Example 4 with AddVotingConfigExclusionsRequest

use of org.opensearch.action.admin.cluster.configuration.AddVotingConfigExclusionsRequest in project OpenSearch by opensearch-project.

the class RestAddVotingConfigExclusionActionTests method testResolveVotingConfigExclusionsRequest.

public void testResolveVotingConfigExclusionsRequest() {
    Map<String, String> params = new HashMap<>();
    params.put("node_name", "node-1,node-2,node-3");
    RestRequest deprecatedRequest = new FakeRestRequest.Builder(xContentRegistry()).withMethod(RestRequest.Method.PUT).withPath("/_cluster/voting_config_exclusions").withParams(params).build();
    AddVotingConfigExclusionsRequest addVotingConfigExclusionsRequest = action.resolveVotingConfigExclusionsRequest(deprecatedRequest);
    String[] expected = { "node-1", "node-2", "node-3" };
    assertArrayEquals(expected, addVotingConfigExclusionsRequest.getNodeDescriptions());
    assertArrayEquals(Strings.EMPTY_ARRAY, addVotingConfigExclusionsRequest.getNodeIds());
    assertArrayEquals(Strings.EMPTY_ARRAY, addVotingConfigExclusionsRequest.getNodeNames());
    assertWarnings("nodeDescription is deprecated and will be removed, use nodeIds or nodeNames instead");
}
Also used : FakeRestRequest(org.opensearch.test.rest.FakeRestRequest) RestRequest(org.opensearch.rest.RestRequest) HashMap(java.util.HashMap) AddVotingConfigExclusionsRequest(org.opensearch.action.admin.cluster.configuration.AddVotingConfigExclusionsRequest)

Example 5 with AddVotingConfigExclusionsRequest

use of org.opensearch.action.admin.cluster.configuration.AddVotingConfigExclusionsRequest in project OpenSearch by opensearch-project.

the class RestAddVotingConfigExclusionActionTests method testResolveVotingConfigExclusionsRequestNodeIds.

public void testResolveVotingConfigExclusionsRequestNodeIds() {
    Map<String, String> params = new HashMap<>();
    params.put("node_ids", "node-1,node-2,node-3");
    RestRequest request = new FakeRestRequest.Builder(xContentRegistry()).withMethod(RestRequest.Method.PUT).withPath("/_cluster/voting_config_exclusions").withParams(params).build();
    AddVotingConfigExclusionsRequest addVotingConfigExclusionsRequest = action.resolveVotingConfigExclusionsRequest(request);
    String[] expected = { "node-1", "node-2", "node-3" };
    assertArrayEquals(Strings.EMPTY_ARRAY, addVotingConfigExclusionsRequest.getNodeDescriptions());
    assertArrayEquals(expected, addVotingConfigExclusionsRequest.getNodeIds());
    assertArrayEquals(Strings.EMPTY_ARRAY, addVotingConfigExclusionsRequest.getNodeNames());
}
Also used : FakeRestRequest(org.opensearch.test.rest.FakeRestRequest) RestRequest(org.opensearch.rest.RestRequest) HashMap(java.util.HashMap) AddVotingConfigExclusionsRequest(org.opensearch.action.admin.cluster.configuration.AddVotingConfigExclusionsRequest)

Aggregations

AddVotingConfigExclusionsRequest (org.opensearch.action.admin.cluster.configuration.AddVotingConfigExclusionsRequest)8 Settings (org.opensearch.common.settings.Settings)5 HashMap (java.util.HashMap)3 RestRequest (org.opensearch.rest.RestRequest)3 Collection (java.util.Collection)2 Collections (java.util.Collections)2 HashSet (java.util.HashSet)2 List (java.util.List)2 Collectors (java.util.stream.Collectors)2 Matchers.equalTo (org.hamcrest.Matchers.equalTo)2 Matchers.greaterThan (org.hamcrest.Matchers.greaterThan)2 ActionRequestBuilder (org.opensearch.action.ActionRequestBuilder)2 AddVotingConfigExclusionsAction (org.opensearch.action.admin.cluster.configuration.AddVotingConfigExclusionsAction)2 ClearVotingConfigExclusionsRequest (org.opensearch.action.admin.cluster.configuration.ClearVotingConfigExclusionsRequest)2 ClusterHealthResponse (org.opensearch.action.admin.cluster.health.ClusterHealthResponse)2 ClusterStateResponse (org.opensearch.action.admin.cluster.state.ClusterStateResponse)2 BulkRequestBuilder (org.opensearch.action.bulk.BulkRequestBuilder)2 GetResponse (org.opensearch.action.get.GetResponse)2 SearchResponse (org.opensearch.action.search.SearchResponse)2 AutoCreateIndex (org.opensearch.action.support.AutoCreateIndex)2