Class TransportReplicationAction<Request extends ReplicationRequest<Request>,ReplicaRequest extends ReplicationRequest<ReplicaRequest>,Response extends ReplicationResponse>
java.lang.Object
org.elasticsearch.action.support.TransportAction<Request,Response>
org.elasticsearch.action.support.replication.TransportReplicationAction<Request,ReplicaRequest,Response>
- Direct Known Subclasses:
GlobalCheckpointSyncAction
,RetentionLeaseBackgroundSyncAction
,TransportShardFlushAction
,TransportShardRefreshAction
,TransportVerifyShardBeforeCloseAction
,TransportWriteAction
public abstract class TransportReplicationAction<Request extends ReplicationRequest<Request>,ReplicaRequest extends ReplicationRequest<ReplicaRequest>,Response extends ReplicationResponse> extends TransportAction<Request,Response>
Base class for requests that should be executed on a primary copy followed by replica copies.
Subclasses can resolve the target shard and provide implementation for primary and replica operations.
The action samples cluster state on the receiving node to reroute to node with primary copy and on the
primary node to validate request before primary operation followed by sampling state again for resolving
nodes with replica copies to perform replication.
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected static class
TransportReplicationAction.ConcreteReplicaRequest<R extends TransportRequest>
static class
TransportReplicationAction.ConcreteShardRequest<R extends TransportRequest>
a wrapper class to encapsulate a request when being sent to a specific allocation idstatic class
TransportReplicationAction.PrimaryResult<ReplicaRequest extends ReplicationRequest<ReplicaRequest>,Response extends ReplicationResponse>
static class
TransportReplicationAction.ReplicaResponse
static class
TransportReplicationAction.ReplicaResult
protected class
TransportReplicationAction.ReplicasProxy
TheReplicasProxy
is an implementation of theReplicas
interface that performs the actualReplicaRequest
on the replica shards.static class
TransportReplicationAction.RetryOnReplicaException
-
Field Summary
Fields Modifier and Type Field Description protected ClusterService
clusterService
protected java.lang.String
executor
protected IndicesService
indicesService
protected ShardStateAction
shardStateAction
protected ThreadPool
threadPool
protected TransportRequestOptions
transportOptions
protected java.lang.String
transportPrimaryAction
protected java.lang.String
transportReplicaAction
protected TransportService
transportService
Fields inherited from class org.elasticsearch.action.support.TransportAction
actionName, logger, taskManager
-
Constructor Summary
Constructors Modifier Constructor Description protected
TransportReplicationAction(Settings settings, java.lang.String actionName, TransportService transportService, ClusterService clusterService, IndicesService indicesService, ThreadPool threadPool, ShardStateAction shardStateAction, ActionFilters actionFilters, Writeable.Reader<Request> requestReader, Writeable.Reader<ReplicaRequest> replicaRequestReader, java.lang.String executor)
protected
TransportReplicationAction(Settings settings, java.lang.String actionName, TransportService transportService, ClusterService clusterService, IndicesService indicesService, ThreadPool threadPool, ShardStateAction shardStateAction, ActionFilters actionFilters, Writeable.Reader<Request> requestReader, Writeable.Reader<ReplicaRequest> replicaRequestReader, java.lang.String executor, boolean syncGlobalCheckpointAfterOperation, boolean forceExecutionOnPrimary)
-
Method Summary
Modifier and Type Method Description protected void
acquirePrimaryOperationPermit(IndexShard primary, Request request, ActionListener<Releasable> onAcquired)
Executes the logic for acquiring one or more operation permit on a primary shard.protected void
acquireReplicaOperationPermit(IndexShard replica, ReplicaRequest request, ActionListener<Releasable> onAcquired, long primaryTerm, long globalCheckpoint, long maxSeqNoOfUpdatesOrDeletes)
Executes the logic for acquiring one or more operation permit on a replica shard.protected void
adaptResponse(Response response, IndexShard indexShard)
protected void
doExecute(Task task, Request request, ActionListener<Response> listener)
protected ClusterBlockLevel
globalBlockLevel()
Cluster level block to check before request execution.protected void
handleOperationRequest(Request request, TransportChannel channel, Task task)
protected void
handlePrimaryRequest(TransportReplicationAction.ConcreteShardRequest<Request> request, TransportChannel channel, Task task)
protected void
handleReplicaRequest(TransportReplicationAction.ConcreteReplicaRequest<ReplicaRequest> replicaRequest, TransportChannel channel, Task task)
ClusterBlockLevel
indexBlockLevel()
Index level block to check before request execution.protected ReplicationOperation.Replicas<ReplicaRequest>
newReplicasProxy()
protected abstract Response
newResponseInstance(StreamInput in)
protected void
resolveRequest(IndexMetaData indexMetaData, Request request)
Resolves derived values in the request.protected boolean
retryPrimaryException(java.lang.Throwable e)
protected abstract void
shardOperationOnPrimary(Request shardRequest, IndexShard primary, ActionListener<TransportReplicationAction.PrimaryResult<ReplicaRequest,Response>> listener)
Primary operation on node with primary copy.protected abstract TransportReplicationAction.ReplicaResult
shardOperationOnReplica(ReplicaRequest shardRequest, IndexShard replica)
Synchronously execute the specified replica operation.protected TransportRequestOptions
transportOptions(Settings settings)
protected ActionListener<Response>
wrapResponseActionListener(ActionListener<Response> listener, IndexShard shard)
Methods inherited from class org.elasticsearch.action.support.TransportAction
execute, execute, execute
-
Field Details
-
threadPool
-
transportService
-
clusterService
-
shardStateAction
-
indicesService
-
transportOptions
-
executor
protected final java.lang.String executor -
transportReplicaAction
protected final java.lang.String transportReplicaAction -
transportPrimaryAction
protected final java.lang.String transportPrimaryAction
-
-
Constructor Details
-
TransportReplicationAction
protected TransportReplicationAction(Settings settings, java.lang.String actionName, TransportService transportService, ClusterService clusterService, IndicesService indicesService, ThreadPool threadPool, ShardStateAction shardStateAction, ActionFilters actionFilters, Writeable.Reader<Request> requestReader, Writeable.Reader<ReplicaRequest> replicaRequestReader, java.lang.String executor) -
TransportReplicationAction
protected TransportReplicationAction(Settings settings, java.lang.String actionName, TransportService transportService, ClusterService clusterService, IndicesService indicesService, ThreadPool threadPool, ShardStateAction shardStateAction, ActionFilters actionFilters, Writeable.Reader<Request> requestReader, Writeable.Reader<ReplicaRequest> replicaRequestReader, java.lang.String executor, boolean syncGlobalCheckpointAfterOperation, boolean forceExecutionOnPrimary)
-
-
Method Details
-
doExecute
- Specified by:
doExecute
in classTransportAction<Request extends ReplicationRequest<Request>,Response extends ReplicationResponse>
-
newReplicasProxy
-
newResponseInstance
- Throws:
java.io.IOException
-
resolveRequest
Resolves derived values in the request. For example, the target shard id of the incoming request, if not set at request construction. Additional processing or validation of the request should be done here.- Parameters:
indexMetaData
- index metadata of the concrete index this request is going to operate onrequest
- the request to resolve
-
shardOperationOnPrimary
protected abstract void shardOperationOnPrimary(Request shardRequest, IndexShard primary, ActionListener<TransportReplicationAction.PrimaryResult<ReplicaRequest,Response>> listener)Primary operation on node with primary copy.- Parameters:
shardRequest
- the request to the primary shardprimary
- the primary shard to perform the operation on
-
shardOperationOnReplica
protected abstract TransportReplicationAction.ReplicaResult shardOperationOnReplica(ReplicaRequest shardRequest, IndexShard replica) throws java.lang.ExceptionSynchronously execute the specified replica operation. This is done under a permit fromIndexShard.acquireReplicaOperationPermit(long, long, long, ActionListener, String, Object)
.- Parameters:
shardRequest
- the request to the replica shardreplica
- the replica shard to perform the operation on- Throws:
java.lang.Exception
-
globalBlockLevel
Cluster level block to check before request execution. Returning null means that no blocks need to be checked. -
indexBlockLevel
Index level block to check before request execution. Returning null means that no blocks need to be checked. -
transportOptions
-
retryPrimaryException
protected boolean retryPrimaryException(java.lang.Throwable e) -
handleOperationRequest
-
handlePrimaryRequest
protected void handlePrimaryRequest(TransportReplicationAction.ConcreteShardRequest<Request> request, TransportChannel channel, Task task) -
adaptResponse
-
wrapResponseActionListener
protected ActionListener<Response> wrapResponseActionListener(ActionListener<Response> listener, IndexShard shard) -
handleReplicaRequest
protected void handleReplicaRequest(TransportReplicationAction.ConcreteReplicaRequest<ReplicaRequest> replicaRequest, TransportChannel channel, Task task) -
acquirePrimaryOperationPermit
protected void acquirePrimaryOperationPermit(IndexShard primary, Request request, ActionListener<Releasable> onAcquired)Executes the logic for acquiring one or more operation permit on a primary shard. The default is to acquire a single permit but this method can be overridden to acquire more. -
acquireReplicaOperationPermit
protected void acquireReplicaOperationPermit(IndexShard replica, ReplicaRequest request, ActionListener<Releasable> onAcquired, long primaryTerm, long globalCheckpoint, long maxSeqNoOfUpdatesOrDeletes)Executes the logic for acquiring one or more operation permit on a replica shard. The default is to acquire a single permit but this method can be overridden to acquire more.
-