diff --git a/core/src/main/java/org/elasticsearch/action/support/TransportActions.java b/core/src/main/java/org/elasticsearch/action/support/TransportActions.java index 1de3ef1aea8..c05486d146a 100644 --- a/core/src/main/java/org/elasticsearch/action/support/TransportActions.java +++ b/core/src/main/java/org/elasticsearch/action/support/TransportActions.java @@ -21,6 +21,7 @@ package org.elasticsearch.action.support; import org.elasticsearch.ExceptionsHelper; import org.elasticsearch.action.NoShardAvailableActionException; +import org.elasticsearch.action.UnavailableShardsException; import org.elasticsearch.index.IndexNotFoundException; import org.elasticsearch.index.shard.IllegalIndexShardStateException; import org.elasticsearch.index.shard.ShardNotFoundException; @@ -34,7 +35,8 @@ public class TransportActions { if (actual instanceof ShardNotFoundException || actual instanceof IndexNotFoundException || actual instanceof IllegalIndexShardStateException || - actual instanceof NoShardAvailableActionException) { + actual instanceof NoShardAvailableActionException || + actual instanceof UnavailableShardsException) { return true; } return false; diff --git a/core/src/main/java/org/elasticsearch/action/support/replication/TransportBroadcastReplicationAction.java b/core/src/main/java/org/elasticsearch/action/support/replication/TransportBroadcastReplicationAction.java index 42a83630a53..7f0d1b3bc69 100644 --- a/core/src/main/java/org/elasticsearch/action/support/replication/TransportBroadcastReplicationAction.java +++ b/core/src/main/java/org/elasticsearch/action/support/replication/TransportBroadcastReplicationAction.java @@ -28,6 +28,7 @@ import org.elasticsearch.action.UnavailableShardsException; import org.elasticsearch.action.support.ActionFilters; import org.elasticsearch.action.support.DefaultShardOperationFailedException; import org.elasticsearch.action.support.HandledTransportAction; +import org.elasticsearch.action.support.TransportActions; import org.elasticsearch.action.support.broadcast.BroadcastRequest; import org.elasticsearch.action.support.broadcast.BroadcastResponse; import org.elasticsearch.action.support.broadcast.BroadcastShardOperationFailedException; @@ -90,7 +91,7 @@ public abstract class TransportBroadcastReplicationAction using initial state:\n{}", clusterService.state().prettyPrint()); Future response = (broadcastReplicationAction.execute(new BroadcastRequest().indices(index))); for (Tuple> shardRequests : broadcastReplicationAction.capturedShardRequests) { - shardRequests.v2().onFailure(new UnavailableShardsException(shardId, "test exception expected")); + 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());