Search in sources :

Example 1 with BroadcastResponse

use of org.elasticsearch.action.support.broadcast.BroadcastResponse in project elasticsearch by elastic.

the class BroadcastReplicationTests method testResultCombine.

public void testResultCombine() throws InterruptedException, ExecutionException, IOException {
    final String index = "test";
    int numShards = 1 + randomInt(3);
    setState(clusterService, stateWithAssignedPrimariesAndOneReplica(index, numShards));
    logger.debug("--> using initial state:\n{}", clusterService.state());
    Future<BroadcastResponse> response = (broadcastReplicationAction.execute(new DummyBroadcastRequest().indices(index)));
    int succeeded = 0;
    int failed = 0;
    for (Tuple<ShardId, ActionListener<ReplicationResponse>> shardRequests : broadcastReplicationAction.capturedShardRequests) {
        if (randomBoolean()) {
            ReplicationResponse.ShardInfo.Failure[] failures = new ReplicationResponse.ShardInfo.Failure[0];
            int shardsSucceeded = randomInt(1) + 1;
            succeeded += shardsSucceeded;
            ReplicationResponse replicationResponse = new ReplicationResponse();
            if (shardsSucceeded == 1 && randomBoolean()) {
                //sometimes add failure (no failure means shard unavailable)
                failures = new ReplicationResponse.ShardInfo.Failure[1];
                failures[0] = new ReplicationResponse.ShardInfo.Failure(shardRequests.v1(), null, new Exception("pretend shard failed"), RestStatus.GATEWAY_TIMEOUT, false);
                failed++;
            }
            replicationResponse.setShardInfo(new ReplicationResponse.ShardInfo(2, shardsSucceeded, failures));
            shardRequests.v2().onResponse(replicationResponse);
        } else {
            // sometimes fail
            failed += 2;
            // just add a general exception and see if failed shards will be incremented by 2
            shardRequests.v2().onFailure(new Exception("pretend shard failed"));
        }
    }
    assertBroadcastResponse(2 * numShards, succeeded, failed, response.get(), Exception.class);
}
Also used : BroadcastResponse(org.elasticsearch.action.support.broadcast.BroadcastResponse) NoShardAvailableActionException(org.elasticsearch.action.NoShardAvailableActionException) IOException(java.io.IOException) ShardOperationFailedException(org.elasticsearch.action.ShardOperationFailedException) UnavailableShardsException(org.elasticsearch.action.UnavailableShardsException) ExecutionException(java.util.concurrent.ExecutionException) ShardId(org.elasticsearch.index.shard.ShardId) ActionListener(org.elasticsearch.action.ActionListener)

Example 2 with BroadcastResponse

use of org.elasticsearch.action.support.broadcast.BroadcastResponse in project elasticsearch by elastic.

the class BroadcastReplicationTests method testNotStartedPrimary.

public void testNotStartedPrimary() throws InterruptedException, ExecutionException, IOException {
    final String index = "test";
    setState(clusterService, state(index, randomBoolean(), randomBoolean() ? ShardRoutingState.INITIALIZING : ShardRoutingState.UNASSIGNED, ShardRoutingState.UNASSIGNED));
    logger.debug("--> using initial state:\n{}", clusterService.state());
    Future<BroadcastResponse> response = (broadcastReplicationAction.execute(new DummyBroadcastRequest().indices(index)));
    for (Tuple<ShardId, ActionListener<ReplicationResponse>> shardRequests : broadcastReplicationAction.capturedShardRequests) {
        if (randomBoolean()) {
            shardRequests.v2().onFailure(new NoShardAvailableActionException(shardRequests.v1()));
        } else {
            shardRequests.v2().onFailure(new UnavailableShardsException(shardRequests.v1(), "test exception"));
        }
    }
    response.get();
    logger.info("total shards: {}, ", response.get().getTotalShards());
    // we expect no failures here because UnavailableShardsException does not count as failed
    assertBroadcastResponse(2, 0, 0, response.get(), null);
}
Also used : ShardId(org.elasticsearch.index.shard.ShardId) ActionListener(org.elasticsearch.action.ActionListener) NoShardAvailableActionException(org.elasticsearch.action.NoShardAvailableActionException) UnavailableShardsException(org.elasticsearch.action.UnavailableShardsException) BroadcastResponse(org.elasticsearch.action.support.broadcast.BroadcastResponse)

Example 3 with BroadcastResponse

use of org.elasticsearch.action.support.broadcast.BroadcastResponse in project elasticsearch by elastic.

the class BroadcastReplicationTests method testNoShards.

public void testNoShards() throws InterruptedException, ExecutionException, IOException {
    setState(clusterService, stateWithNoShard());
    logger.debug("--> using initial state:\n{}", clusterService.state());
    BroadcastResponse response = executeAndAssertImmediateResponse(broadcastReplicationAction, new DummyBroadcastRequest());
    assertBroadcastResponse(0, 0, 0, response, null);
}
Also used : BroadcastResponse(org.elasticsearch.action.support.broadcast.BroadcastResponse)

Aggregations

BroadcastResponse (org.elasticsearch.action.support.broadcast.BroadcastResponse)3 ActionListener (org.elasticsearch.action.ActionListener)2 NoShardAvailableActionException (org.elasticsearch.action.NoShardAvailableActionException)2 UnavailableShardsException (org.elasticsearch.action.UnavailableShardsException)2 ShardId (org.elasticsearch.index.shard.ShardId)2 IOException (java.io.IOException)1 ExecutionException (java.util.concurrent.ExecutionException)1 ShardOperationFailedException (org.elasticsearch.action.ShardOperationFailedException)1