Module org.elasticsearch.server
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,TransportVerifyShardIndexBlockAction,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 ClassesModifier and TypeClassDescriptionprotected static final classstatic classa wrapper class to encapsulate a request when being sent to a specific allocation idprotected static enumExecution of the primary actionstatic classTransportReplicationAction.PrimaryResult<ReplicaRequest extends ReplicationRequest<ReplicaRequest>,Response extends ReplicationResponse> protected static enumExecution of the replica actionstatic classstatic classprotected classTheReplicasProxyis an implementation of theReplicasinterface that performs the actualReplicaRequeston the replica shards.static final classprotected static enumGlobal checkpoint behaviour -
Field Summary
FieldsModifier and TypeFieldDescriptionprotected final ClusterServiceprotected final Executorprotected final booleanprotected final IndicesServiceThe maximum bound for the first retry backoff for failed replication operations.The timeout for retrying replication requests.protected final ShardStateActionprotected final ThreadPoolprotected final TransportRequestOptionsprotected final Stringprotected final Stringprotected final TransportServiceFields inherited from class org.elasticsearch.action.support.TransportAction
actionName, logger, taskManager -
Constructor Summary
ConstructorsModifierConstructorDescriptionprotectedTransportReplicationAction(Settings settings, String actionName, TransportService transportService, ClusterService clusterService, IndicesService indicesService, ThreadPool threadPool, ShardStateAction shardStateAction, ActionFilters actionFilters, Writeable.Reader<Request> requestReader, Writeable.Reader<ReplicaRequest> replicaRequestReader, Executor executor, TransportReplicationAction.SyncGlobalCheckpointAfterOperation syncGlobalCheckpointAfterOperation, TransportReplicationAction.PrimaryActionExecution primaryActionExecution, TransportReplicationAction.ReplicaActionExecution replicaActionExecution) -
Method Summary
Modifier and TypeMethodDescriptionprotected voidacquirePrimaryOperationPermit(IndexShard primary, Request request, ActionListener<Releasable> onAcquired) Executes the logic for acquiring one or more operation permit on a primary shard.protected voidacquireReplicaOperationPermit(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 voidadaptResponse(Response response, IndexShard indexShard) protected ReleasablecheckOperationLimits(Request request) protected ReleasablecheckPrimaryLimits(Request request, boolean rerouteWasLocal, boolean localRerouteInitiatedByNodeClient) protected ReleasablecheckReplicaLimits(ReplicaRequest request) protected voiddoExecute(Task task, Request request, ActionListener<Response> listener) protected ClusterBlockLevelCluster level block to check before request execution.protected voidhandlePrimaryRequest(TransportReplicationAction.ConcreteShardRequest<Request> request, TransportChannel channel, Task task) protected voidhandleReplicaRequest(TransportReplicationAction.ConcreteReplicaRequest<ReplicaRequest> replicaRequest, TransportChannel channel, Task task) Index level block to check before request execution.protected ReplicationOperation.Replicas<ReplicaRequest> protected abstract Responseprotected voidresolveRequest(IndexMetadata indexMetadata, Request request) Resolves derived values in the request.protected static booleanprotected abstract voidshardOperationOnPrimary(Request shardRequest, IndexShard primary, ActionListener<TransportReplicationAction.PrimaryResult<ReplicaRequest, Response>> listener) Primary operation on node with primary copy.protected abstract voidshardOperationOnReplica(ReplicaRequest shardRequest, IndexShard replica, ActionListener<TransportReplicationAction.ReplicaResult> listener) Execute the specified replica operation.protected TransportRequestOptionsMethods inherited from class org.elasticsearch.action.support.TransportAction
execute, executeDirect, localOnly
-
Field Details
-
REPLICATION_RETRY_TIMEOUT
The timeout for retrying replication requests. -
REPLICATION_INITIAL_RETRY_BACKOFF_BOUND
The maximum bound for the first retry backoff for failed replication operations. The backoff bound will increase exponential if failures continue. -
threadPool
-
transportService
-
clusterService
-
shardStateAction
-
indicesService
-
transportOptions
-
executor
-
forceExecutionOnPrimary
protected final boolean forceExecutionOnPrimary -
transportReplicaAction
-
transportPrimaryAction
-
-
Constructor Details
-
TransportReplicationAction
protected TransportReplicationAction(Settings settings, String actionName, TransportService transportService, ClusterService clusterService, IndicesService indicesService, ThreadPool threadPool, ShardStateAction shardStateAction, ActionFilters actionFilters, Writeable.Reader<Request> requestReader, Writeable.Reader<ReplicaRequest> replicaRequestReader, Executor executor, TransportReplicationAction.SyncGlobalCheckpointAfterOperation syncGlobalCheckpointAfterOperation, TransportReplicationAction.PrimaryActionExecution primaryActionExecution, TransportReplicationAction.ReplicaActionExecution replicaActionExecution)
-
-
Method Details
-
doExecute
- Specified by:
doExecutein classTransportAction<Request extends ReplicationRequest<Request>,Response extends ReplicationResponse>
-
newReplicasProxy
-
newResponseInstance
- Throws:
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 void shardOperationOnReplica(ReplicaRequest shardRequest, IndexShard replica, ActionListener<TransportReplicationAction.ReplicaResult> listener) Execute the specified replica operation. This is done under a permit fromIndexShard.acquireReplicaOperationPermit(long, long, long, ActionListener, Executor).- Parameters:
shardRequest- the request to the replica shardreplica- the replica shard to perform the operation on
-
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
-
checkOperationLimits
-
handlePrimaryRequest
protected void handlePrimaryRequest(TransportReplicationAction.ConcreteShardRequest<Request> request, TransportChannel channel, Task task) -
checkPrimaryLimits
protected Releasable checkPrimaryLimits(Request request, boolean rerouteWasLocal, boolean localRerouteInitiatedByNodeClient) -
adaptResponse
-
handleReplicaRequest
protected void handleReplicaRequest(TransportReplicationAction.ConcreteReplicaRequest<ReplicaRequest> replicaRequest, TransportChannel channel, Task task) -
checkReplicaLimits
-
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.
-