Class TransportBroadcastByNodeAction<Request extends BroadcastRequest<Request>,​Response extends BroadcastResponse,​ShardOperationResult extends Writeable>

java.lang.Object
org.elasticsearch.action.support.TransportAction<Request,​Response>
org.elasticsearch.action.support.HandledTransportAction<Request,​Response>
org.elasticsearch.action.support.broadcast.node.TransportBroadcastByNodeAction<Request,​Response,​ShardOperationResult>
Type Parameters:
Request - the underlying client request
Response - the response to the client request
ShardOperationResult - per-shard operation results
Direct Known Subclasses:
TransportClearIndicesCacheAction, TransportFieldUsageAction, TransportForceMergeAction, TransportIndicesSegmentsAction, TransportIndicesStatsAction, TransportRecoveryAction, TransportUpgradeAction, TransportUpgradeStatusAction

public abstract class TransportBroadcastByNodeAction<Request extends BroadcastRequest<Request>,​Response extends BroadcastResponse,​ShardOperationResult extends Writeable> extends HandledTransportAction<Request,​Response>
Abstraction for transporting aggregated shard-level operations in a single request (NodeRequest) per-node and executing the shard-level operations serially on the receiving node. Each shard-level operation can produce a result (ShardOperationResult), these per-node shard-level results are aggregated into a single result (BroadcastByNodeResponse) to the coordinating node. These per-node results are aggregated into a single result (Result) to the client.
  • Constructor Details

  • Method Details

    • readShardResult

      protected abstract ShardOperationResult readShardResult(StreamInput in) throws IOException
      Deserialize a shard-level result from an input stream
      Parameters:
      in - input stream
      Returns:
      a deserialized shard-level result
      Throws:
      IOException
    • newResponse

      protected abstract Response newResponse(Request request, int totalShards, int successfulShards, int failedShards, List<ShardOperationResult> results, List<DefaultShardOperationFailedException> shardFailures, ClusterState clusterState)
      Creates a new response to the underlying request.
      Parameters:
      request - the underlying request
      totalShards - the total number of shards considered for execution of the operation
      successfulShards - the total number of shards for which execution of the operation was successful
      failedShards - the total number of shards for which execution of the operation failed
      results - the per-node aggregated shard-level results
      shardFailures - the exceptions corresponding to shard operation failures
      clusterState - the cluster state
      Returns:
      the response
    • readRequestFrom

      protected abstract Request readRequestFrom(StreamInput in) throws IOException
      Deserialize a request from an input stream
      Parameters:
      in - input stream
      Returns:
      a de-serialized request
      Throws:
      IOException
    • shardOperation

      protected abstract void shardOperation(Request request, ShardRouting shardRouting, Task task, ActionListener<ShardOperationResult> listener)
      Executes the shard-level operation. This method is called once per shard serially on the receiving node. This method should not throw an exception, but pass the exception to the listener instead.
      Parameters:
      request - the node-level request
      shardRouting - the shard on which to execute the operation
      task - the task for this node-level request
      listener - the listener to notify with the result of the shard-level operation
    • shards

      protected abstract ShardsIterator shards(ClusterState clusterState, Request request, String[] concreteIndices)
      Determines the shards on which this operation will be executed on. The operation is executed once per shard.
      Parameters:
      clusterState - the cluster state
      request - the underlying request
      concreteIndices - the concrete indices on which to execute the operation
      Returns:
      the shards on which to execute the operation
    • checkGlobalBlock

      protected abstract ClusterBlockException checkGlobalBlock(ClusterState state, Request request)
      Executes a global block check before polling the cluster state.
      Parameters:
      state - the cluster state
      request - the underlying request
      Returns:
      a non-null exception if the operation is blocked
    • checkRequestBlock

      protected abstract ClusterBlockException checkRequestBlock(ClusterState state, Request request, String[] concreteIndices)
      Executes a global request-level check before polling the cluster state.
      Parameters:
      state - the cluster state
      request - the underlying request
      concreteIndices - the concrete indices on which to execute the operation
      Returns:
      a non-null exception if the operation if blocked
    • resolveConcreteIndexNames

      protected String[] resolveConcreteIndexNames(ClusterState clusterState, Request request)
      Resolves a list of concrete index names. Override this if index names should be resolved differently than normal.
      Parameters:
      clusterState - the cluster state
      request - the underlying request
      Returns:
      a list of concrete index names that this action should operate on
    • doExecute

      protected void doExecute(Task task, Request request, ActionListener<Response> listener)
      Specified by:
      doExecute in class TransportAction<Request extends BroadcastRequest<Request>,​Response extends BroadcastResponse>