Class TransportReplicationAction<Request extends ReplicationRequest<Request>,ReplicaRequest extends ReplicationRequest<ReplicaRequest>,Response extends ReplicationResponse>
- java.lang.Object
-
- org.elasticsearch.common.component.AbstractComponent
-
- org.elasticsearch.action.support.TransportAction<Request,Response>
-
- org.elasticsearch.action.support.replication.TransportReplicationAction<Request,ReplicaRequest,Response>
-
- Direct Known Subclasses:
GlobalCheckpointSyncAction
,TransportShardFlushAction
,TransportShardRefreshAction
,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
-
Field Summary
Fields Modifier and Type Field Description protected ClusterService
clusterService
protected java.lang.String
executor
protected IndicesService
indicesService
protected ShardStateAction
shardStateAction
protected TransportRequestOptions
transportOptions
protected java.lang.String
transportPrimaryAction
protected java.lang.String
transportReplicaAction
protected TransportService
transportService
-
Fields inherited from class org.elasticsearch.common.component.AbstractComponent
deprecationLogger, logger, settings
-
Fields inherited from class org.elasticsearch.action.support.TransportAction
actionName, indexNameExpressionResolver, taskManager, threadPool
-
-
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, IndexNameExpressionResolver indexNameExpressionResolver, java.util.function.Supplier<Request> request, java.util.function.Supplier<ReplicaRequest> replicaRequest, java.lang.String executor)
protected
TransportReplicationAction(Settings settings, java.lang.String actionName, TransportService transportService, ClusterService clusterService, IndicesService indicesService, ThreadPool threadPool, ShardStateAction shardStateAction, ActionFilters actionFilters, IndexNameExpressionResolver indexNameExpressionResolver, java.util.function.Supplier<Request> request, java.util.function.Supplier<ReplicaRequest> replicaRequest, java.lang.String executor, boolean syncGlobalCheckpointAfterOperation)
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description protected void
doExecute(Task task, Request request, ActionListener<Response> listener)
protected void
doExecute(Request request, ActionListener<Response> listener)
protected IndexShard
getIndexShard(ShardId shardId)
protected ClusterBlockLevel
globalBlockLevel()
Cluster level block to check before request execution.protected ClusterBlockLevel
indexBlockLevel()
Index level block to check before request execution.protected ReplicationOperation.Replicas<ReplicaRequest>
newReplicasProxy(long primaryTerm)
protected abstract Response
newResponseInstance()
protected void
registerRequestHandlers(java.lang.String actionName, TransportService transportService, java.util.function.Supplier<Request> request, java.util.function.Supplier<ReplicaRequest> replicaRequest, java.lang.String executor)
protected boolean
resolveIndex()
True if provided index should be resolved when resolving requestprotected void
resolveRequest(IndexMetaData indexMetaData, Request request)
Resolves derived values in the request.protected boolean
retryPrimaryException(java.lang.Throwable e)
protected void
sendReplicaRequest(TransportReplicationAction.ConcreteReplicaRequest<ReplicaRequest> replicaRequest, DiscoveryNode node, ActionListener<ReplicationOperation.ReplicaResponse> listener)
Sends the specified replica request to the specified node.protected abstract TransportReplicationAction.PrimaryResult<ReplicaRequest,Response>
shardOperationOnPrimary(Request shardRequest, IndexShard primary)
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()
-
Methods inherited from class org.elasticsearch.common.component.AbstractComponent
logDeprecatedSetting, logRemovedSetting, nodeName
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from class org.elasticsearch.action.support.TransportAction
execute, execute, execute, execute
-
-
-
-
Field Detail
-
transportService
protected final TransportService transportService
-
clusterService
protected final ClusterService clusterService
-
shardStateAction
protected final ShardStateAction shardStateAction
-
indicesService
protected final IndicesService indicesService
-
transportOptions
protected final TransportRequestOptions transportOptions
-
executor
protected final java.lang.String executor
-
transportReplicaAction
protected final java.lang.String transportReplicaAction
-
transportPrimaryAction
protected final java.lang.String transportPrimaryAction
-
-
Constructor Detail
-
TransportReplicationAction
protected TransportReplicationAction(Settings settings, java.lang.String actionName, TransportService transportService, ClusterService clusterService, IndicesService indicesService, ThreadPool threadPool, ShardStateAction shardStateAction, ActionFilters actionFilters, IndexNameExpressionResolver indexNameExpressionResolver, java.util.function.Supplier<Request> request, java.util.function.Supplier<ReplicaRequest> replicaRequest, 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, IndexNameExpressionResolver indexNameExpressionResolver, java.util.function.Supplier<Request> request, java.util.function.Supplier<ReplicaRequest> replicaRequest, java.lang.String executor, boolean syncGlobalCheckpointAfterOperation)
-
-
Method Detail
-
registerRequestHandlers
protected void registerRequestHandlers(java.lang.String actionName, TransportService transportService, java.util.function.Supplier<Request> request, java.util.function.Supplier<ReplicaRequest> replicaRequest, java.lang.String executor)
-
doExecute
protected final void doExecute(Request request, ActionListener<Response> listener)
- Specified by:
doExecute
in classTransportAction<Request extends ReplicationRequest<Request>,Response extends ReplicationResponse>
-
doExecute
protected void doExecute(Task task, Request request, ActionListener<Response> listener)
- Overrides:
doExecute
in classTransportAction<Request extends ReplicationRequest<Request>,Response extends ReplicationResponse>
-
newReplicasProxy
protected ReplicationOperation.Replicas<ReplicaRequest> newReplicasProxy(long primaryTerm)
-
newResponseInstance
protected abstract Response newResponseInstance()
-
resolveRequest
protected void resolveRequest(IndexMetaData indexMetaData, Request request)
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 TransportReplicationAction.PrimaryResult<ReplicaRequest,Response> shardOperationOnPrimary(Request shardRequest, IndexShard primary) throws java.lang.Exception
Primary operation on node with primary copy.- Parameters:
shardRequest
- the request to the primary shardprimary
- the primary shard to perform the operation on- Throws:
java.lang.Exception
-
shardOperationOnReplica
protected abstract TransportReplicationAction.ReplicaResult shardOperationOnReplica(ReplicaRequest shardRequest, IndexShard replica) throws java.lang.Exception
Synchronously execute the specified replica operation. This is done under a permit fromIndexShard.acquireReplicaOperationPermit(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
@Nullable protected ClusterBlockLevel globalBlockLevel()
Cluster level block to check before request execution. Returning null means that no blocks need to be checked.
-
indexBlockLevel
@Nullable protected ClusterBlockLevel indexBlockLevel()
Index level block to check before request execution. Returning null means that no blocks need to be checked.
-
resolveIndex
protected boolean resolveIndex()
True if provided index should be resolved when resolving request
-
transportOptions
protected TransportRequestOptions transportOptions()
-
retryPrimaryException
protected boolean retryPrimaryException(java.lang.Throwable e)
-
getIndexShard
protected IndexShard getIndexShard(ShardId shardId)
-
sendReplicaRequest
protected void sendReplicaRequest(TransportReplicationAction.ConcreteReplicaRequest<ReplicaRequest> replicaRequest, DiscoveryNode node, ActionListener<ReplicationOperation.ReplicaResponse> listener)
Sends the specified replica request to the specified node.- Parameters:
replicaRequest
- the replica requestnode
- the node to send the request tolistener
- callback for handling the response or failure
-
-