Search in sources :

Example 6 with ShardsIterator

use of org.elasticsearch.cluster.routing.ShardsIterator in project elasticsearch by elastic.

the class TransportBroadcastByNodeActionTests method testResultAggregation.

public void testResultAggregation() throws ExecutionException, InterruptedException {
    Request request = new Request(new String[] { TEST_INDEX });
    PlainActionFuture<Response> listener = new PlainActionFuture<>();
    // simulate removing the master
    final boolean simulateFailedMasterNode = rarely();
    DiscoveryNode failedMasterNode = null;
    if (simulateFailedMasterNode) {
        failedMasterNode = clusterService.state().nodes().getMasterNode();
        DiscoveryNodes.Builder builder = DiscoveryNodes.builder(clusterService.state().getNodes());
        builder.remove(failedMasterNode.getId());
        builder.masterNodeId(null);
        setState(clusterService, ClusterState.builder(clusterService.state()).nodes(builder));
    }
    action.new AsyncAction(null, request, listener).start();
    Map<String, List<CapturingTransport.CapturedRequest>> capturedRequests = transport.getCapturedRequestsByTargetNodeAndClear();
    ShardsIterator shardIt = clusterService.state().getRoutingTable().allShards(new String[] { TEST_INDEX });
    Map<String, List<ShardRouting>> map = new HashMap<>();
    for (ShardRouting shard : shardIt.asUnordered()) {
        if (!map.containsKey(shard.currentNodeId())) {
            map.put(shard.currentNodeId(), new ArrayList<>());
        }
        map.get(shard.currentNodeId()).add(shard);
    }
    int totalShards = 0;
    int totalSuccessfulShards = 0;
    int totalFailedShards = 0;
    for (Map.Entry<String, List<CapturingTransport.CapturedRequest>> entry : capturedRequests.entrySet()) {
        List<BroadcastShardOperationFailedException> exceptions = new ArrayList<>();
        long requestId = entry.getValue().get(0).requestId;
        if (rarely()) {
            // simulate node failure
            totalShards += map.get(entry.getKey()).size();
            totalFailedShards += map.get(entry.getKey()).size();
            transport.handleRemoteError(requestId, new Exception());
        } else {
            List<ShardRouting> shards = map.get(entry.getKey());
            List<TransportBroadcastByNodeAction.EmptyResult> shardResults = new ArrayList<>();
            for (ShardRouting shard : shards) {
                totalShards++;
                if (rarely()) {
                    // simulate operation failure
                    totalFailedShards++;
                    exceptions.add(new BroadcastShardOperationFailedException(shard.shardId(), "operation indices:admin/test failed"));
                } else {
                    shardResults.add(TransportBroadcastByNodeAction.EmptyResult.INSTANCE);
                }
            }
            totalSuccessfulShards += shardResults.size();
            TransportBroadcastByNodeAction.NodeResponse nodeResponse = action.new NodeResponse(entry.getKey(), shards.size(), shardResults, exceptions);
            transport.handleResponse(requestId, nodeResponse);
        }
    }
    if (simulateFailedMasterNode) {
        totalShards += map.get(failedMasterNode.getId()).size();
    }
    Response response = listener.get();
    assertEquals("total shards", totalShards, response.getTotalShards());
    assertEquals("successful shards", totalSuccessfulShards, response.getSuccessfulShards());
    assertEquals("failed shards", totalFailedShards, response.getFailedShards());
    assertEquals("accumulated exceptions", totalFailedShards, response.getShardFailures().length);
}
Also used : DiscoveryNode(org.elasticsearch.cluster.node.DiscoveryNode) HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) CoreMatchers.containsString(org.hamcrest.CoreMatchers.containsString) HasToString.hasToString(org.hamcrest.object.HasToString.hasToString) ShardsIterator(org.elasticsearch.cluster.routing.ShardsIterator) List(java.util.List) ArrayList(java.util.ArrayList) BroadcastShardOperationFailedException(org.elasticsearch.action.support.broadcast.BroadcastShardOperationFailedException) DiscoveryNodes(org.elasticsearch.cluster.node.DiscoveryNodes) CapturingTransport(org.elasticsearch.test.transport.CapturingTransport) IndicesRequest(org.elasticsearch.action.IndicesRequest) BroadcastRequest(org.elasticsearch.action.support.broadcast.BroadcastRequest) ElasticsearchException(org.elasticsearch.ElasticsearchException) BroadcastShardOperationFailedException(org.elasticsearch.action.support.broadcast.BroadcastShardOperationFailedException) ClusterBlockException(org.elasticsearch.cluster.block.ClusterBlockException) IOException(java.io.IOException) ShardOperationFailedException(org.elasticsearch.action.ShardOperationFailedException) ExecutionException(java.util.concurrent.ExecutionException) BroadcastResponse(org.elasticsearch.action.support.broadcast.BroadcastResponse) TransportResponse(org.elasticsearch.transport.TransportResponse) PlainActionFuture(org.elasticsearch.action.support.PlainActionFuture) TestShardRouting(org.elasticsearch.cluster.routing.TestShardRouting) ShardRouting(org.elasticsearch.cluster.routing.ShardRouting) Map(java.util.Map) HashMap(java.util.HashMap) Collections.emptyMap(java.util.Collections.emptyMap)

Example 7 with ShardsIterator

use of org.elasticsearch.cluster.routing.ShardsIterator in project elasticsearch by elastic.

the class ShardStateActionTests method getRandomShardRouting.

private ShardRouting getRandomShardRouting(String index) {
    IndexRoutingTable indexRoutingTable = clusterService.state().routingTable().index(index);
    ShardsIterator shardsIterator = indexRoutingTable.randomAllActiveShardsIt();
    ShardRouting shardRouting = shardsIterator.nextOrNull();
    assert shardRouting != null;
    return shardRouting;
}
Also used : IndexRoutingTable(org.elasticsearch.cluster.routing.IndexRoutingTable) ShardRouting(org.elasticsearch.cluster.routing.ShardRouting) ShardsIterator(org.elasticsearch.cluster.routing.ShardsIterator)

Aggregations

ShardsIterator (org.elasticsearch.cluster.routing.ShardsIterator)7 ShardRouting (org.elasticsearch.cluster.routing.ShardRouting)5 ArrayList (java.util.ArrayList)4 IndicesRequest (org.elasticsearch.action.IndicesRequest)4 BroadcastRequest (org.elasticsearch.action.support.broadcast.BroadcastRequest)4 TestShardRouting (org.elasticsearch.cluster.routing.TestShardRouting)4 TransportResponse (org.elasticsearch.transport.TransportResponse)4 CoreMatchers.containsString (org.hamcrest.CoreMatchers.containsString)4 HasToString.hasToString (org.hamcrest.object.HasToString.hasToString)4 Collections.emptyMap (java.util.Collections.emptyMap)3 HashMap (java.util.HashMap)3 HashSet (java.util.HashSet)3 List (java.util.List)3 Map (java.util.Map)3 PlainActionFuture (org.elasticsearch.action.support.PlainActionFuture)3 BroadcastResponse (org.elasticsearch.action.support.broadcast.BroadcastResponse)3 CapturingTransport (org.elasticsearch.test.transport.CapturingTransport)3 ElasticsearchException (org.elasticsearch.ElasticsearchException)2 BroadcastShardOperationFailedException (org.elasticsearch.action.support.broadcast.BroadcastShardOperationFailedException)2 DiscoveryNode (org.elasticsearch.cluster.node.DiscoveryNode)2